Jacek Caban : mshtml: Added get_documentElement implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Mon Mar 6 04:50:58 CST 2006


Module: wine
Branch: refs/heads/master
Commit: 6ef5f9556215ac4b3426028cc7156eaa133d20ef
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=6ef5f9556215ac4b3426028cc7156eaa133d20ef

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Sun Mar  5 20:41:18 2006 +0100

mshtml: Added get_documentElement implementation.

---

 dlls/mshtml/htmldoc3.c  |   31 +++++++++++++++++++++++++++----
 dlls/mshtml/nsiface.idl |   39 ++++++++++++++++++++++++++++++++++++++-
 2 files changed, 65 insertions(+), 5 deletions(-)

diff --git a/dlls/mshtml/htmldoc3.c b/dlls/mshtml/htmldoc3.c
index bc74509..9c12693 100644
--- a/dlls/mshtml/htmldoc3.c
+++ b/dlls/mshtml/htmldoc3.c
@@ -112,11 +112,34 @@ static HRESULT WINAPI HTMLDocument3_crea
     return E_NOTIMPL;
 }
 
-static HRESULT WINAPI HTMLDocument3_documentElement(IHTMLDocument3 *iface, IHTMLElement **p)
+static HRESULT WINAPI HTMLDocument3_get_documentElement(IHTMLDocument3 *iface, IHTMLElement **p)
 {
     HTMLDocument *This = HTMLDOC3_THIS(iface);
-    FIXME("(%p)->(%p)\n", This, p);
-    return E_NOTIMPL;
+    nsIDOMDocument *nsdoc;
+    HTMLDOMNode *node;
+    nsresult nsres;
+
+    TRACE("(%p)->(%p)\n", This, p);
+
+    if(!This->nscontainer) {
+        *p = NULL;
+        return S_OK;
+    }
+
+    nsres = nsIWebNavigation_GetDocument(This->nscontainer->navigation, &nsdoc);
+    if(NS_FAILED(nsres))
+        ERR("GetDocument failed: %08lx\n", nsres);
+
+    if(nsdoc) {
+        node = get_node(This, (nsIDOMNode*)nsdoc);
+        nsIDOMDocument_Release(nsdoc);
+
+        IHTMLDOMNode_QueryInterface(HTMLDOMNODE(node), &IID_IHTMLElement, (void**)p);
+    }else {
+        *p = NULL;
+    }
+
+    return S_OK;
 }
 
 static HRESULT WINAPI HTMLDocument3_uniqueID(IHTMLDocument3 *iface, BSTR *p)
@@ -402,7 +425,7 @@ static const IHTMLDocument3Vtbl HTMLDocu
     HTMLDocument3_releaseCapture,
     HTMLDocument3_recalc,
     HTMLDocument3_createTextNode,
-    HTMLDocument3_documentElement,
+    HTMLDocument3_get_documentElement,
     HTMLDocument3_uniqueID,
     HTMLDocument3_attachEvent,
     HTMLDocument3_detachEvent,
diff --git a/dlls/mshtml/nsiface.idl b/dlls/mshtml/nsiface.idl
index fabe6bb..7aa4acd 100644
--- a/dlls/mshtml/nsiface.idl
+++ b/dlls/mshtml/nsiface.idl
@@ -55,6 +55,7 @@ typedef nsStringContainer nsAString;
 interface nsIWebBrowserChrome;
 interface nsILoadGroup;
 interface nsIDOMNode;
+interface nsIDOMDocument;
 
 [
     object,
@@ -69,7 +70,6 @@ interface nsISupports
 
 /* Currently we don't need a full declaration of these interfaces */
 typedef nsISupports nsIWeakReference;
-typedef nsISupports nsIDOMDocument;
 typedef nsISupports nsISHistory;
 typedef nsISupports nsISimpleEnumerator;
 typedef nsISupports nsIWidget;
@@ -86,6 +86,14 @@ typedef nsISupports nsIPrompt;
 typedef nsISupports nsIAuthPrompt;
 typedef nsISupports nsIDOMNamedNodeMap;
 typedef nsISupports nsIDOMAttr;
+typedef nsISupports nsIDOMDocumentType;
+typedef nsISupports nsIDOMDOMImplementation;
+typedef nsISupports nsIDOMDocumentFragment;
+typedef nsISupports nsIDOMText;
+typedef nsISupports nsIDOMComment;
+typedef nsISupports nsIDOMCDATASection;
+typedef nsISupports nsIDOMProcessingInstruction;
+typedef nsISupports nsIDOMEntityReference;
 
 [
     object,
@@ -394,6 +402,35 @@ interface nsIDOMHTMLElement : nsIDOMElem
 
 [
     object,
+    uuid(a6cf9075-15b3-11d2-932e-00805f8add32)
+]
+interface nsIDOMDocument : nsIDOMNode
+{
+    nsresult GetDoctype(nsIDOMDocumentType **aDoctype);
+    nsresult GetImplementation(nsIDOMDOMImplementation **aImplementation);
+    nsresult GetDocumentElement(nsIDOMElement **aDocumentElement);
+    nsresult CreateElement(const nsAString *tagName, nsIDOMElement **_retval);
+    nsresult CreateDocumentFragment(nsIDOMDocumentFragment **_retval);
+    nsresult CreateTextNode(const nsAString *data, nsIDOMText **_retval);
+    nsresult CreateComment(const nsAString *data, nsIDOMComment **_retval);
+    nsresult CreateCDATASection(const nsAString *data, nsIDOMCDATASection **_retval);
+    nsresult CreateProcessingInstruction(const nsAString *target, const nsAString *data,
+                                         nsIDOMProcessingInstruction **_retval);
+    nsresult CreateAttribute(const nsAString *name, nsIDOMAttr **_retval);
+    nsresult CreateEntityReference(const nsAString *name, nsIDOMEntityReference **_retval);
+    nsresult GetElementsByTagName(const nsAString *tagname, nsIDOMNodeList **_retval);
+    nsresult ImportNode(nsIDOMNode *importedNode, PRBool deep, nsIDOMNode **_retval);
+    nsresult CreateElementNS(const nsAString *namespaceURI, const nsAString *qualifiedName,
+                             nsIDOMElement **_retval);
+    nsresult CreateAttributeNS(const nsAString *namespaceURI, const nsAString *qualifiedName,
+                               nsIDOMAttr **_retval);
+    nsresult GetElementsByTagNameNS(const nsAString *namespaceURI, const nsAString *localName,
+                                    nsIDOMNodeList **_retval);
+    nsresult GetElementById(const nsAString *elementId, nsIDOMElement **_retval);
+}
+
+[
+    object,
     uuid(a6cf906b-15b3-11d2-932e-00805f8add32)
 ]
 interface nsIDOMWindow : nsISupports




More information about the wine-cvs mailing list