Jacek Caban : mshtml: Added [Get|Set]ParentContentListener implementation.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Aug 16 10:17:58 CDT 2006


Module: wine
Branch: master
Commit: 90c5baf069a188b2a0e7ab9d7f84cd8a260671fb
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=90c5baf069a188b2a0e7ab9d7f84cd8a260671fb

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Aug 16 16:34:32 2006 +0200

mshtml: Added [Get|Set]ParentContentListener implementation.

---

 dlls/mshtml/mshtml_private.h |    2 +
 dlls/mshtml/nsembed.c        |   69 ++++++++++++++++++++++++++++++++++++------
 2 files changed, 61 insertions(+), 10 deletions(-)

diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index df1407b..8e956bc 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -124,6 +124,8 @@ struct NSContainer {
     NSContainer *parent;
     HTMLDocument *doc;
 
+    nsIURIContentListener *content_listener;
+
     HWND hwnd;
 
     BSCallback *bscallback; /* hack */
diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c
index 39f454d..4fabad7 100644
--- a/dlls/mshtml/nsembed.c
+++ b/dlls/mshtml/nsembed.c
@@ -800,7 +800,10 @@ static nsresult NSAPI nsURIContentListen
 
     nsIWineURI_Release(wine_uri);
 
-    return NS_ERROR_NOT_IMPLEMENTED;
+    *_retval = FALSE;
+    return This->content_listener
+        ? nsIURIContentListener_OnStartURIOpen(This->content_listener, aURI, _retval)
+        : NS_OK;
 }
 
 static nsresult NSAPI nsURIContentListener_DoContent(nsIURIContentListener *iface,
@@ -808,9 +811,14 @@ static nsresult NSAPI nsURIContentListen
         nsIStreamListener **aContentHandler, PRBool *_retval)
 {
     NSContainer *This = NSURICL_THIS(iface);
+
     TRACE("(%p)->(%s %x %p %p %p)\n", This, debugstr_a(aContentType), aIsContentPreferred,
             aRequest, aContentHandler, _retval);
-    return NS_ERROR_NOT_IMPLEMENTED;
+
+    return This->content_listener
+        ? nsIURIContentListener_DoContent(This->content_listener, aContentType,
+                  aIsContentPreferred, aRequest, aContentHandler, _retval)
+        : NS_ERROR_NOT_IMPLEMENTED;
 }
 
 static nsresult NSAPI nsURIContentListener_IsPreferred(nsIURIContentListener *iface,
@@ -822,7 +830,11 @@ static nsresult NSAPI nsURIContentListen
 
     /* FIXME: Should we do something here? */
     *_retval = TRUE; 
-    return NS_OK;
+
+    return This->content_listener
+        ? nsIURIContentListener_IsPreferred(This->content_listener, aContentType,
+                  aDesiredContentType, _retval)
+        : NS_OK;
 }
 
 static nsresult NSAPI nsURIContentListener_CanHandleContent(nsIURIContentListener *iface,
@@ -830,41 +842,72 @@ static nsresult NSAPI nsURIContentListen
         PRBool *_retval)
 {
     NSContainer *This = NSURICL_THIS(iface);
+
     TRACE("(%p)->(%s %x %p %p)\n", This, debugstr_a(aContentType), aIsContentPreferred,
             aDesiredContentType, _retval);
-    return NS_ERROR_NOT_IMPLEMENTED;
+
+    return This->content_listener
+        ? nsIURIContentListener_CanHandleContent(This->content_listener, aContentType,
+                aIsContentPreferred, aDesiredContentType, _retval)
+        : NS_ERROR_NOT_IMPLEMENTED;
 }
 
 static nsresult NSAPI nsURIContentListener_GetLoadCookie(nsIURIContentListener *iface,
         nsISupports **aLoadCookie)
 {
     NSContainer *This = NSURICL_THIS(iface);
+
     WARN("(%p)->(%p)\n", This, aLoadCookie);
-    return NS_ERROR_NOT_IMPLEMENTED;
+
+    return This->content_listener
+        ? nsIURIContentListener_GetLoadCookie(This->content_listener, aLoadCookie)
+        : NS_ERROR_NOT_IMPLEMENTED;
 }
 
 static nsresult NSAPI nsURIContentListener_SetLoadCookie(nsIURIContentListener *iface,
         nsISupports *aLoadCookie)
 {
     NSContainer *This = NSURICL_THIS(iface);
+
     WARN("(%p)->(%p)\n", This, aLoadCookie);
-    return NS_ERROR_NOT_IMPLEMENTED;
+
+    return This->content_listener
+        ? nsIURIContentListener_SetLoadCookie(This->content_listener, aLoadCookie)
+        : NS_ERROR_NOT_IMPLEMENTED;
 }
 
 static nsresult NSAPI nsURIContentListener_GetParentContentListener(nsIURIContentListener *iface,
         nsIURIContentListener **aParentContentListener)
 {
     NSContainer *This = NSURICL_THIS(iface);
-    WARN("(%p)->(%p)\n", This, aParentContentListener);
-    return NS_ERROR_NOT_IMPLEMENTED;
+
+    TRACE("(%p)->(%p)\n", This, aParentContentListener);
+
+    if(This->content_listener)
+        nsIURIContentListener_AddRef(This->content_listener);
+
+    *aParentContentListener = This->content_listener;
+    return NS_OK;
 }
 
 static nsresult NSAPI nsURIContentListener_SetParentContentListener(nsIURIContentListener *iface,
         nsIURIContentListener *aParentContentListener)
 {
     NSContainer *This = NSURICL_THIS(iface);
-    WARN("(%p)->(%p)\n", This, aParentContentListener);
-    return NS_ERROR_NOT_IMPLEMENTED;
+
+    TRACE("(%p)->(%p)\n", This, aParentContentListener);
+
+    if(aParentContentListener == NSURICL(This))
+        return NS_OK;
+
+    if(This->content_listener)
+        nsIURIContentListener_Release(This->content_listener);
+
+    This->content_listener = aParentContentListener;
+    if(This->content_listener)
+        nsIURIContentListener_AddRef(This->content_listener);
+
+    return NS_OK;
 }
 
 #undef NSURICL_THIS
@@ -1185,6 +1228,7 @@ NSContainer *NSContainer_Create(HTMLDocu
     ret->doc = doc;
     ret->ref = 1;
     ret->bscallback = NULL;
+    ret->content_listener = NULL;
 
     if(parent)
         nsIWebBrowserChrome_AddRef(NSWBCHROME(parent));
@@ -1275,6 +1319,11 @@ void NSContainer_Release(NSContainer *Th
     nsIWebBrowserFocus_Release(This->focus);
     This->focus = NULL;
 
+    if(This->content_listener) {
+        nsIURIContentListener_Release(This->content_listener);
+        This->content_listener = NULL;
+    }
+
     if(This->hwnd) {
         DestroyWindow(This->hwnd);
         This->hwnd = NULL;




More information about the wine-cvs mailing list