diff --git a/dlls/mshtml/htmldoc3.c b/dlls/mshtml/htmldoc3.c
index bc7450910b..9c12693125 100644
--- a/dlls/mshtml/htmldoc3.c
+++ b/dlls/mshtml/htmldoc3.c
@@ -112,11 +112,34 @@ static HRESULT WINAPI HTMLDocument3_createTextNode(IHTMLDocument3 *iface, BSTR t
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 HTMLDocument3Vtbl = {
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 fabe6bb5b8..7aa4acdb11 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,
@@ -392,6 +400,35 @@ interface nsIDOMHTMLElement : nsIDOMElement
nsresult SetClassName(const nsAString *aClassName);
}
+[
+ 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)