[PATCH] ieframe: WebBrowser shouldn't support COM aggregation

Damjan Jovanovic damjan.jov at gmail.com
Sun Dec 1 04:00:36 CST 2019


COM objects should either fully support aggregation or cleanly fail.
Our ieframe's WebBrowser completely ignores it. Fail with
CLASS_E_NOAGGREGATION like Windows does instead.

Signed-off-by: Damjan Jovanovic <damjan.jov at gmail.com>
---
 dlls/ieframe/tests/webbrowser.c | 3 +++
 dlls/ieframe/webbrowser.c       | 3 +++
 2 files changed, 6 insertions(+)
-------------- next part --------------
diff --git a/dlls/ieframe/tests/webbrowser.c b/dlls/ieframe/tests/webbrowser.c
index db47fdf616..5984ba3f89 100644
--- a/dlls/ieframe/tests/webbrowser.c
+++ b/dlls/ieframe/tests/webbrowser.c
@@ -251,6 +251,9 @@ static IWebBrowser2 *_create_webbrowser(unsigned line)
     hres = CoCreateInstance(&CLSID_WebBrowser, NULL, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
             &IID_IWebBrowser2, (void**)&ret);
     ok_(__FILE__,line)(hres == S_OK, "Creating WebBrowser object failed: %08x\n", hres);
+    hres = CoCreateInstance(&CLSID_WebBrowser, (IUnknown*)ret, CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER,
+            &IID_IWebBrowser2, (void**)&ret);
+    ok_(__FILE__,line)(hres == CLASS_E_NOAGGREGATION, "WebBrowser aggregation didn't fail as expected, %08x\n", hres);
     return ret;
 }
 
diff --git a/dlls/ieframe/webbrowser.c b/dlls/ieframe/webbrowser.c
index 03acf38869..e997a90022 100644
--- a/dlls/ieframe/webbrowser.c
+++ b/dlls/ieframe/webbrowser.c
@@ -1231,6 +1231,9 @@ static HRESULT create_webbrowser(int version, IUnknown *outer, REFIID riid, void
 
     TRACE("(%p %s %p) version=%d\n", outer, debugstr_guid(riid), ppv, version);
 
+    if (outer)
+        return CLASS_E_NOAGGREGATION;
+
     ret = heap_alloc_zero(sizeof(WebBrowser));
 
     ret->IWebBrowser2_iface.lpVtbl = &WebBrowser2Vtbl;


More information about the wine-devel mailing list