Jacek Caban : mshtml: Moved EvaluateNewWindow call to navigate_new_window.

Alexandre Julliard julliard at winehq.org
Wed Jun 21 16:43:44 CDT 2017


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Jun 21 17:05:31 2017 +0200

mshtml: Moved EvaluateNewWindow call to navigate_new_window.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/mshtml/htmlwindow.c | 26 ++++----------------------
 dlls/mshtml/navigate.c   | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 36 insertions(+), 22 deletions(-)

diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c
index 2914073..5853220 100644
--- a/dlls/mshtml/htmlwindow.c
+++ b/dlls/mshtml/htmlwindow.c
@@ -971,8 +971,6 @@ static HRESULT WINAPI HTMLWindow2_open(IHTMLWindow2 *iface, BSTR url, BSTR name,
 {
     HTMLWindow *This = impl_from_IHTMLWindow2(iface);
     HTMLOuterWindow *window = This->outer_window;
-    INewWindowManager *new_window_mgr;
-    BSTR uri_str;
     IUri *uri;
     HRESULT hres;
 
@@ -980,6 +978,10 @@ static HRESULT WINAPI HTMLWindow2_open(IHTMLWindow2 *iface, BSTR url, BSTR name,
 
     TRACE("(%p)->(%s %s %s %x %p)\n", This, debugstr_w(url), debugstr_w(name),
           debugstr_w(features), replace, pomWindowResult);
+    if(features)
+        FIXME("unsupported features argument %s\n", debugstr_w(features));
+    if(replace)
+        FIXME("unsupported relace argument\n");
 
     if(!window->doc_obj || !window->uri_nofrag)
         return E_UNEXPECTED;
@@ -1006,26 +1008,6 @@ static HRESULT WINAPI HTMLWindow2_open(IHTMLWindow2 *iface, BSTR url, BSTR name,
         return E_NOTIMPL;
     }
 
-    hres = do_query_service((IUnknown*)window->doc_obj->client, &SID_SNewWindowManager, &IID_INewWindowManager,
-            (void**)&new_window_mgr);
-    if(FAILED(hres)) {
-        FIXME("No INewWindowManager\n");
-        return E_NOTIMPL;
-    }
-
-    hres = IUri_GetDisplayUri(window->uri_nofrag, &uri_str);
-    if(SUCCEEDED(hres)) {
-        hres = INewWindowManager_EvaluateNewWindow(new_window_mgr, url, name, uri_str,
-                features, !!replace, window->doc_obj->has_popup ? 0 : NWMF_FIRST, 0);
-        window->doc_obj->has_popup = TRUE;
-        SysFreeString(uri_str);
-    }
-    INewWindowManager_Release(new_window_mgr);
-    if(FAILED(hres)) {
-        *pomWindowResult = NULL;
-        return S_OK;
-    }
-
     hres = create_relative_uri(window, url, &uri);
     if(FAILED(hres))
         return hres;
diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c
index 9dec64d..423d650 100644
--- a/dlls/mshtml/navigate.c
+++ b/dlls/mshtml/navigate.c
@@ -2238,12 +2238,44 @@ HRESULT super_navigate(HTMLOuterWindow *window, IUri *uri, DWORD flags, const WC
 
 HRESULT navigate_new_window(HTMLOuterWindow *window, IUri *uri, const WCHAR *name, request_data_t *request_data, IHTMLWindow2 **ret)
 {
+    INewWindowManager *new_window_mgr;
+    BSTR display_uri, context_url;
     IWebBrowser2 *web_browser;
     IHTMLWindow2 *new_window;
     IBindCtx *bind_ctx;
     nsChannelBSC *bsc;
     HRESULT hres;
 
+    hres = do_query_service((IUnknown*)window->doc_obj->client, &SID_SNewWindowManager, &IID_INewWindowManager,
+            (void**)&new_window_mgr);
+    if(SUCCEEDED(hres)) {
+        hres = IUri_GetDisplayUri(window->uri_nofrag, &context_url);
+        if(FAILED(hres))
+            return hres;
+
+        hres = IUri_GetDisplayUri(uri, &display_uri);
+        if(FAILED(hres)) {
+            SysFreeString(context_url);
+            return hres;
+        }
+
+        hres = INewWindowManager_EvaluateNewWindow(new_window_mgr, display_uri, name, context_url,
+                NULL, FALSE, window->doc_obj->has_popup ? 0 : NWMF_FIRST, 0);
+        window->doc_obj->has_popup = TRUE;
+        SysFreeString(display_uri);
+        SysFreeString(context_url);
+        INewWindowManager_Release(new_window_mgr);
+        if(FAILED(hres)) {
+            if(ret)
+                *ret = NULL;
+            return S_OK;
+        }
+    }else {
+        FIXME("No INewWindowManager\n");
+        return E_NOTIMPL;
+    }
+
+
     if(request_data)
         hres = create_channelbsc(NULL, request_data->headers,
                 request_data->post_data, request_data->post_data_len, FALSE,




More information about the wine-cvs mailing list