From: Gabriel Ivăncescu gabrielopcode@gmail.com
So it can async open with proper binding flags.
Signed-off-by: Gabriel Ivăncescu gabrielopcode@gmail.com ---
Needed to set the navigation type properly. --- dlls/mshtml/binding.h | 2 +- dlls/mshtml/mshtml_private.h | 2 +- dlls/mshtml/navigate.c | 8 +++++--- dlls/mshtml/nsio.c | 8 ++++++-- dlls/mshtml/persist.c | 2 +- 5 files changed, 14 insertions(+), 8 deletions(-)
diff --git a/dlls/mshtml/binding.h b/dlls/mshtml/binding.h index 948bfb1c02b..083f1ffa6fe 100644 --- a/dlls/mshtml/binding.h +++ b/dlls/mshtml/binding.h @@ -142,7 +142,7 @@ HRESULT create_redirect_nschannel(const WCHAR*,nsChannel*,nsChannel**) DECLSPEC_
HRESULT hlink_frame_navigate(HTMLDocumentObj*,LPCWSTR,nsChannel*,DWORD,BOOL*) DECLSPEC_HIDDEN; HRESULT create_doc_uri(IUri*,nsWineURI**) DECLSPEC_HIDDEN; -HRESULT load_nsuri(HTMLOuterWindow*,nsWineURI*,nsIInputStream*,nsChannelBSC*,DWORD) DECLSPEC_HIDDEN; +HRESULT load_nsuri(HTMLOuterWindow*,nsWineURI*,nsIInputStream*,nsChannelBSC*,DWORD,DWORD) DECLSPEC_HIDDEN; HRESULT set_moniker(HTMLOuterWindow*,IMoniker*,IUri*,IBindCtx*,nsChannelBSC*,BOOL) DECLSPEC_HIDDEN; void prepare_for_binding(HTMLDocumentObj*,IMoniker*,DWORD) DECLSPEC_HIDDEN; HRESULT super_navigate(HTMLOuterWindow*,IUri*,DWORD,const WCHAR*,BYTE*,DWORD) DECLSPEC_HIDDEN; diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 7c5e6ef038c..3a75fadebf1 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -1091,7 +1091,7 @@ char *get_nscategory_entry(const char*,const char*) DECLSPEC_HIDDEN;
HRESULT create_pending_window(HTMLOuterWindow*,nsChannelBSC*) DECLSPEC_HIDDEN; HRESULT start_binding(HTMLInnerWindow*,BSCallback*,IBindCtx*) DECLSPEC_HIDDEN; -HRESULT async_start_doc_binding(HTMLOuterWindow*,HTMLInnerWindow*) DECLSPEC_HIDDEN; +HRESULT async_start_doc_binding(HTMLOuterWindow*,HTMLInnerWindow*,DWORD) DECLSPEC_HIDDEN; void abort_window_bindings(HTMLInnerWindow*) DECLSPEC_HIDDEN; void set_download_state(HTMLDocumentObj*,int) DECLSPEC_HIDDEN; void call_docview_84(HTMLDocumentObj*) DECLSPEC_HIDDEN; diff --git a/dlls/mshtml/navigate.c b/dlls/mshtml/navigate.c index 469bd0d1e07..edefa76b2fd 100644 --- a/dlls/mshtml/navigate.c +++ b/dlls/mshtml/navigate.c @@ -1926,6 +1926,7 @@ HRESULT create_channelbsc(IMoniker *mon, const WCHAR *headers, BYTE *post_data,
typedef struct { task_t header; + DWORD flags; HTMLOuterWindow *window; HTMLInnerWindow *pending_window; } start_doc_binding_task_t; @@ -1934,7 +1935,7 @@ static void start_doc_binding_proc(task_t *_task) { start_doc_binding_task_t *task = (start_doc_binding_task_t*)_task;
- set_current_mon(task->window, task->pending_window->bscallback->bsc.mon, BINDING_NAVIGATED); + set_current_mon(task->window, task->pending_window->bscallback->bsc.mon, task->flags); start_binding(task->pending_window, &task->pending_window->bscallback->bsc, NULL); }
@@ -1946,7 +1947,7 @@ static void start_doc_binding_task_destr(task_t *_task) heap_free(task); }
-HRESULT async_start_doc_binding(HTMLOuterWindow *window, HTMLInnerWindow *pending_window) +HRESULT async_start_doc_binding(HTMLOuterWindow *window, HTMLInnerWindow *pending_window, DWORD flags) { start_doc_binding_task_t *task;
@@ -1956,6 +1957,7 @@ HRESULT async_start_doc_binding(HTMLOuterWindow *window, HTMLInnerWindow *pendin if(!task) return E_OUTOFMEMORY;
+ task->flags = flags; task->window = window; task->pending_window = pending_window; IHTMLWindow2_AddRef(&pending_window->base.IHTMLWindow2_iface); @@ -2531,7 +2533,7 @@ static HRESULT navigate_uri(HTMLOuterWindow *window, IUri *uri, const WCHAR *dis if(FAILED(hres)) return hres;
- hres = load_nsuri(window, nsuri, request_data ? request_data->post_stream : NULL, NULL, LOAD_FLAGS_NONE); + hres = load_nsuri(window, nsuri, request_data ? request_data->post_stream : NULL, NULL, LOAD_FLAGS_NONE, flags); nsISupports_Release((nsISupports*)nsuri); return hres; } diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c index 6654018f8e6..473afdaeb08 100644 --- a/dlls/mshtml/nsio.c +++ b/dlls/mshtml/nsio.c @@ -59,6 +59,7 @@ struct nsWineURI { IUri *uri; IUriBuilder *uri_builder; BOOL is_mutable; + DWORD binding_flags; DWORD scheme; };
@@ -281,7 +282,7 @@ static nsresult before_async_open(nsChannel *channel, GeckoBrowser *container, B }
HRESULT load_nsuri(HTMLOuterWindow *window, nsWineURI *uri, nsIInputStream *post_stream, - nsChannelBSC *channelbsc, DWORD flags) + nsChannelBSC *channelbsc, DWORD flags, DWORD binding_flags) { nsIWebNavigation *web_navigation; nsIDocShellLoadInfo *load_info; @@ -289,6 +290,8 @@ HRESULT load_nsuri(HTMLOuterWindow *window, nsWineURI *uri, nsIInputStream *post HTMLDocumentNode *doc; nsresult nsres;
+ uri->binding_flags = binding_flags; + nsres = get_nsinterface((nsISupports*)window->nswindow, &IID_nsIWebNavigation, (void**)&web_navigation); if(NS_FAILED(nsres)) { ERR("Could not get nsIWebNavigation interface: %08lx\n", nsres); @@ -1008,7 +1011,7 @@ static nsresult async_open(nsChannel *This, HTMLOuterWindow *window, BOOL is_doc if(is_doc_channel) { hres = create_pending_window(window, bscallback); if(SUCCEEDED(hres)) - async_start_doc_binding(window, window->pending_window); + async_start_doc_binding(window, window->pending_window, This->uri->binding_flags); IBindStatusCallback_Release(&bscallback->bsc.IBindStatusCallback_iface); if(FAILED(hres)) return NS_ERROR_UNEXPECTED; @@ -3468,6 +3471,7 @@ static nsresult create_nsuri(IUri *iuri, nsWineURI **_retval) ret->nsIStandardURL_iface.lpVtbl = &nsStandardURLVtbl; ret->ref = 1; ret->is_mutable = TRUE; + ret->binding_flags = BINDING_NAVIGATED;
IUri_AddRef(iuri); ret->uri = iuri; diff --git a/dlls/mshtml/persist.c b/dlls/mshtml/persist.c index 262633deb9f..6d120d4c515 100644 --- a/dlls/mshtml/persist.c +++ b/dlls/mshtml/persist.c @@ -383,7 +383,7 @@ HRESULT set_moniker(HTMLOuterWindow *window, IMoniker *mon, IUri *nav_uri, IBind remove_target_tasks(window->base.inner_window->task_magic); abort_window_bindings(window->base.inner_window);
- hres = load_nsuri(window, nsuri, NULL, bscallback, LOAD_FLAGS_BYPASS_CACHE); + hres = load_nsuri(window, nsuri, NULL, bscallback, LOAD_FLAGS_BYPASS_CACHE, BINDING_NAVIGATED); nsISupports_Release((nsISupports*)nsuri); /* FIXME */ if(SUCCEEDED(hres)) { hres = create_pending_window(window, bscallback);