Dmitry Timoshkov : ieframe: Implement IPersistStorage::GetClassID().

Alexandre Julliard julliard at winehq.org
Thu Jun 18 15:33:37 CDT 2020


Module: wine
Branch: master
Commit: 500a813579d1747d70e08f13de5b9644ec3ee839
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=500a813579d1747d70e08f13de5b9644ec3ee839

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Thu Jun 18 14:39:00 2020 +0800

ieframe: Implement IPersistStorage::GetClassID().

Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ieframe/persist.c          | 10 ++++++++--
 dlls/ieframe/tests/webbrowser.c | 21 +++++++++++++++++++++
 2 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/dlls/ieframe/persist.c b/dlls/ieframe/persist.c
index bef5ef7344..a0a7c94fbe 100644
--- a/dlls/ieframe/persist.c
+++ b/dlls/ieframe/persist.c
@@ -56,8 +56,14 @@ static ULONG WINAPI PersistStorage_Release(IPersistStorage *iface)
 static HRESULT WINAPI PersistStorage_GetClassID(IPersistStorage *iface, CLSID *pClassID)
 {
     WebBrowser *This = impl_from_IPersistStorage(iface);
-    FIXME("(%p)->(%p)\n", This, pClassID);
-    return E_NOTIMPL;
+
+    TRACE("(%p)->(%p)\n", This, pClassID);
+
+    if (!pClassID)
+        return E_INVALIDARG;
+
+    *pClassID = This->version == 1 ? CLSID_WebBrowser_V1: CLSID_WebBrowser;
+    return S_OK;
 }
 
 static HRESULT WINAPI PersistStorage_IsDirty(IPersistStorage *iface)
diff --git a/dlls/ieframe/tests/webbrowser.c b/dlls/ieframe/tests/webbrowser.c
index 898d0e6805..95d5fc4988 100644
--- a/dlls/ieframe/tests/webbrowser.c
+++ b/dlls/ieframe/tests/webbrowser.c
@@ -2220,6 +2220,25 @@ static void test_EnumVerbs(IWebBrowser2 *wb)
     IEnumOLEVERB_Release(enum_verbs);
 }
 
+static void test_Persist(IWebBrowser2 *wb, int version)
+{
+    IPersist *persist;
+    GUID guid;
+    HRESULT hr;
+
+    hr = IWebBrowser2_QueryInterface(wb, &IID_IPersist, (void **)&persist);
+    ok(hr == S_OK, "QueryInterface(IID_IPersist failed: %08x\n", hr);
+
+    hr = IPersist_GetClassID(persist, &guid);
+    ok(hr == S_OK, "GetClassID failed: %08x\n", hr);
+    if (version == 1)
+        ok(IsEqualGUID(&guid, &CLSID_WebBrowser_V1), "got wrong CLSID: %s\n", wine_dbgstr_guid(&guid));
+    else
+        ok(IsEqualGUID(&guid, &CLSID_WebBrowser), "got wrong CLSID: %s\n", wine_dbgstr_guid(&guid));
+
+    IPersist_Release(persist);
+}
+
 static void test_ie_funcs(IWebBrowser2 *wb)
 {
     IDispatch *disp;
@@ -3741,6 +3760,7 @@ static void test_WebBrowser(DWORD flags, BOOL do_close)
     test_olecmd(webbrowser, FALSE);
     test_Navigate2(webbrowser, L"about:blank");
     test_QueryStatusWB(webbrowser, TRUE);
+    test_Persist(webbrowser, 2);
 
     if(do_download) {
         IHTMLDocument2 *doc, *doc2;
@@ -3849,6 +3869,7 @@ static void test_WebBrowserV1(void)
     test_ready_state(READYSTATE_UNINITIALIZED, BUSY_FAIL);
     test_ClassInfo(wb);
     test_EnumVerbs(wb);
+    test_Persist(wb, 1);
 
     ref = IWebBrowser2_Release(wb);
     ok(ref == 0, "ref=%d, expected 0\n", ref);




More information about the wine-cvs mailing list