diff --git a/patches/mshtml-Wine_Gecko_2.47/0001-mshtml-Wine-Gecko-2.47-beta1-release.patch b/patches/mshtml-Wine_Gecko_2.47/0001-mshtml-Wine-Gecko-2.47-beta1-release.patch
new file mode 100644
index 00000000..fb9c5b9c
--- /dev/null
+++ b/patches/mshtml-Wine_Gecko_2.47/0001-mshtml-Wine-Gecko-2.47-beta1-release.patch
@@ -0,0 +1,1560 @@
+From db4dd5eb76f809596d0e3e52c23de65fd823a708 Mon Sep 17 00:00:00 2001
+From: Jacek Caban
+Date: Thu, 5 May 2016 12:49:26 +0200
+Subject: mshtml: Wine Gecko 2.47-beta1 release.
+
+---
+ dlls/appwiz.cpl/addons.c | 6 +-
+ dlls/mshtml/editor.c | 24 ++---
+ dlls/mshtml/htmlcurstyle.c | 12 ++-
+ dlls/mshtml/htmldoc.c | 7 +-
+ dlls/mshtml/htmlframebase.c | 18 ++--
+ dlls/mshtml/htmlwindow.c | 43 +++++---
+ dlls/mshtml/mshtml_private.h | 2 +
+ dlls/mshtml/mutation.c | 19 ++--
+ dlls/mshtml/npplugin.c | 10 +-
+ dlls/mshtml/nsembed.c | 17 ++-
+ dlls/mshtml/nsiface.idl | 249 ++++++++++++++++++++++++-------------------
+ dlls/mshtml/nsio.c | 80 +++++++++++---
+ dlls/mshtml/nsservice.c | 22 ++--
+ dlls/mshtml/olecmd.c | 2 +-
+ 14 files changed, 320 insertions(+), 191 deletions(-)
+
+diff --git a/dlls/appwiz.cpl/addons.c b/dlls/appwiz.cpl/addons.c
+index 8cbc221..9126ca0 100644
+--- a/dlls/appwiz.cpl/addons.c
++++ b/dlls/appwiz.cpl/addons.c
+@@ -51,14 +51,14 @@
+
+ WINE_DEFAULT_DEBUG_CHANNEL(appwizcpl);
+
+-#define GECKO_VERSION "2.44"
++#define GECKO_VERSION "2.47-beta1"
+
+ #ifdef __i386__
+ #define ARCH_STRING "x86"
+-#define GECKO_SHA "7930300c531d975ad63ee20d5e9b3974e339e43e"
++#define GECKO_SHA "3c7826ee9d18e3354d84e5bcf2c8e573214e7781"
+ #elif defined(__x86_64__)
+ #define ARCH_STRING "x86_64"
+-#define GECKO_SHA "ed473f584938ebe8da1f6e660610e616104567b3"
++#define GECKO_SHA "90cd35e4fa1bfe99919884357fc9f664acb6b923"
+ #else
+ #define ARCH_STRING ""
+ #define GECKO_SHA "???"
+diff --git a/dlls/mshtml/editor.c b/dlls/mshtml/editor.c
+index 8166094..fb77ee1 100644
+--- a/dlls/mshtml/editor.c
++++ b/dlls/mshtml/editor.c
+@@ -136,7 +136,7 @@ static nsresult get_ns_command_state(NSContainer *This, const char *cmd, nsIComm
+ return nsres;
+ }
+
+- nsres = nsICommandManager_GetCommandState(cmdmgr, cmd, This->doc->basedoc.window->nswindow, nsparam);
++ nsres = nsICommandManager_GetCommandState(cmdmgr, cmd, This->doc->basedoc.window->window_proxy, nsparam);
+ if(NS_FAILED(nsres))
+ ERR("GetCommandState(%s) failed: %08x\n", debugstr_a(cmd), nsres);
+
+@@ -379,23 +379,23 @@ static void set_font_size(HTMLDocument *This, LPCWSTR size)
+ set_dirty(This, VARIANT_TRUE);
+ }
+
+-static void handle_arrow_key(HTMLDocument *This, nsIDOMKeyEvent *event, const char * const cmds[4])
++static void handle_arrow_key(HTMLDocument *This, nsIDOMEvent *event, nsIDOMKeyEvent *key_event, const char * const cmds[4])
+ {
+ int i=0;
+ cpp_bool b;
+
+- nsIDOMKeyEvent_GetCtrlKey(event, &b);
++ nsIDOMKeyEvent_GetCtrlKey(key_event, &b);
+ if(b)
+ i |= 1;
+
+- nsIDOMKeyEvent_GetShiftKey(event, &b);
++ nsIDOMKeyEvent_GetShiftKey(key_event, &b);
+ if(b)
+ i |= 2;
+
+ if(cmds[i])
+ do_ns_editor_command(This->doc_obj->nscontainer, cmds[i]);
+
+- nsIDOMKeyEvent_PreventDefault(event);
++ nsIDOMEvent_PreventDefault(event);
+ }
+
+ void handle_edit_event(HTMLDocument *This, nsIDOMEvent *event)
+@@ -417,7 +417,7 @@ void handle_edit_event(HTMLDocument *This, nsIDOMEvent *event)
+ };
+
+ TRACE("left\n");
+- handle_arrow_key(This, key_event, cmds);
++ handle_arrow_key(This, event, key_event, cmds);
+ break;
+ }
+ case DOM_VK_RIGHT: {
+@@ -429,7 +429,7 @@ void handle_edit_event(HTMLDocument *This, nsIDOMEvent *event)
+ };
+
+ TRACE("right\n");
+- handle_arrow_key(This, key_event, cmds);
++ handle_arrow_key(This, event, key_event, cmds);
+ break;
+ }
+ case DOM_VK_UP: {
+@@ -441,7 +441,7 @@ void handle_edit_event(HTMLDocument *This, nsIDOMEvent *event)
+ };
+
+ TRACE("up\n");
+- handle_arrow_key(This, key_event, cmds);
++ handle_arrow_key(This, event, key_event, cmds);
+ break;
+ }
+ case DOM_VK_DOWN: {
+@@ -453,7 +453,7 @@ void handle_edit_event(HTMLDocument *This, nsIDOMEvent *event)
+ };
+
+ TRACE("down\n");
+- handle_arrow_key(This, key_event, cmds);
++ handle_arrow_key(This, event, key_event, cmds);
+ break;
+ }
+ case DOM_VK_DELETE: {
+@@ -464,7 +464,7 @@ void handle_edit_event(HTMLDocument *This, nsIDOMEvent *event)
+ };
+
+ TRACE("delete\n");
+- handle_arrow_key(This, key_event, cmds);
++ handle_arrow_key(This, event, key_event, cmds);
+ break;
+ }
+ case DOM_VK_HOME: {
+@@ -476,7 +476,7 @@ void handle_edit_event(HTMLDocument *This, nsIDOMEvent *event)
+ };
+
+ TRACE("home\n");
+- handle_arrow_key(This, key_event, cmds);
++ handle_arrow_key(This, event, key_event, cmds);
+ break;
+ }
+ case DOM_VK_END: {
+@@ -488,7 +488,7 @@ void handle_edit_event(HTMLDocument *This, nsIDOMEvent *event)
+ };
+
+ TRACE("end\n");
+- handle_arrow_key(This, key_event, cmds);
++ handle_arrow_key(This, event, key_event, cmds);
+ break;
+ }
+ }
+diff --git a/dlls/mshtml/htmlcurstyle.c b/dlls/mshtml/htmlcurstyle.c
+index df3281d..be28e60 100644
+--- a/dlls/mshtml/htmlcurstyle.c
++++ b/dlls/mshtml/htmlcurstyle.c
+@@ -17,6 +17,7 @@
+ */
+
+ #include
++#include
+
+ #define COBJMACROS
+
+@@ -1323,7 +1324,8 @@ static dispex_static_data_t HTMLCurrentStyle_dispex = {
+ HRESULT HTMLCurrentStyle_Create(HTMLElement *elem, IHTMLCurrentStyle **p)
+ {
+ nsIDOMCSSStyleDeclaration *nsstyle;
+- nsIDOMWindow *nsview;
++ mozIDOMWindowProxy *nsview;
++ nsIDOMWindow *nswindow;
+ nsAString nsempty_str;
+ HTMLCurrentStyle *ret;
+ nsresult nsres;
+@@ -1339,10 +1341,14 @@ HRESULT HTMLCurrentStyle_Create(HTMLElement *elem, IHTMLCurrentStyle **p)
+ return E_FAIL;
+ }
+
++ nsres = mozIDOMWindowProxy_QueryInterface(nsview, &IID_nsIDOMWindow, (void**)&nswindow);
++ mozIDOMWindowProxy_Release(nsview);
++ assert(nsres == NS_OK);
++
+ nsAString_Init(&nsempty_str, NULL);
+- nsres = nsIDOMWindow_GetComputedStyle(nsview, (nsIDOMElement*)elem->nselem, &nsempty_str, &nsstyle);
++ nsres = nsIDOMWindow_GetComputedStyle(nswindow, (nsIDOMElement*)elem->nselem, &nsempty_str, &nsstyle);
+ nsAString_Finish(&nsempty_str);
+- nsIDOMWindow_Release(nsview);
++ nsIDOMWindow_Release(nswindow);
+ if(NS_FAILED(nsres)) {
+ ERR("GetComputedStyle failed: %08x\n", nsres);
+ return E_FAIL;
+diff --git a/dlls/mshtml/htmldoc.c b/dlls/mshtml/htmldoc.c
+index 784a578..04e5280 100644
+--- a/dlls/mshtml/htmldoc.c
++++ b/dlls/mshtml/htmldoc.c
+@@ -4884,6 +4884,7 @@ static dispex_static_data_t HTMLDocumentObj_dispex = {
+
+ HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject)
+ {
++ mozIDOMWindowProxy *mozwindow;
+ HTMLDocumentObj *doc;
+ nsIDOMWindow *nswindow = NULL;
+ nsresult nsres;
+@@ -4919,10 +4920,14 @@ HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject)
+ if(FAILED(hres))
+ return hres;
+
+- nsres = nsIWebBrowser_GetContentDOMWindow(doc->nscontainer->webbrowser, &nswindow);
++ nsres = nsIWebBrowser_GetContentDOMWindow(doc->nscontainer->webbrowser, &mozwindow);
+ if(NS_FAILED(nsres))
+ ERR("GetContentDOMWindow failed: %08x\n", nsres);
+
++ nsres = mozIDOMWindowProxy_QueryInterface(mozwindow, &IID_nsIDOMWindow, (void**)&nswindow);
++ mozIDOMWindowProxy_Release(mozwindow);
++ assert(nsres == NS_OK);
++
+ hres = HTMLOuterWindow_Create(doc, nswindow, NULL /* FIXME */, &doc->basedoc.window);
+ if(nswindow)
+ nsIDOMWindow_Release(nswindow);
+diff --git a/dlls/mshtml/htmlframebase.c b/dlls/mshtml/htmlframebase.c
+index bba9678..83cf9fc 100644
+--- a/dlls/mshtml/htmlframebase.c
++++ b/dlls/mshtml/htmlframebase.c
+@@ -41,7 +41,7 @@ static const WCHAR pxW[] = {'p','x',0};
+
+ HRESULT set_frame_doc(HTMLFrameBase *frame, nsIDOMDocument *nsdoc)
+ {
+- nsIDOMWindow *nswindow;
++ mozIDOMWindowProxy *mozwindow;
+ HTMLOuterWindow *window;
+ nsresult nsres;
+ HRESULT hres = S_OK;
+@@ -49,15 +49,21 @@ HRESULT set_frame_doc(HTMLFrameBase *frame, nsIDOMDocument *nsdoc)
+ if(frame->content_window)
+ return S_OK;
+
+- nsres = nsIDOMDocument_GetDefaultView(nsdoc, &nswindow);
+- if(NS_FAILED(nsres) || !nswindow)
++ nsres = nsIDOMDocument_GetDefaultView(nsdoc, &mozwindow);
++ if(NS_FAILED(nsres) || !mozwindow)
+ return E_FAIL;
+
+- window = nswindow_to_window(nswindow);
+- if(!window)
++ window = mozwindow_to_window(mozwindow);
++ if(!window) {
++ nsIDOMWindow *nswindow;
++ nsres = mozIDOMWindowProxy_QueryInterface(mozwindow, &IID_nsIDOMWindow, (void**)&nswindow);
++ assert(nsres == NS_OK);
++
+ hres = HTMLOuterWindow_Create(frame->element.node.doc->basedoc.doc_obj, nswindow,
+ frame->element.node.doc->basedoc.window, &window);
+- nsIDOMWindow_Release(nswindow);
++ nsIDOMWindow_Release(nswindow);
++ }
++ mozIDOMWindowProxy_Release(mozwindow);
+ if(FAILED(hres))
+ return hres;
+
+diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c
+index 5f46c2a..36043e4 100644
+--- a/dlls/mshtml/htmlwindow.c
++++ b/dlls/mshtml/htmlwindow.c
+@@ -217,6 +217,8 @@ static void release_outer_window(HTMLOuterWindow *This)
+
+ if(This->nswindow)
+ nsIDOMWindow_Release(This->nswindow);
++ if(This->window_proxy)
++ mozIDOMWindowProxy_Release(This->window_proxy);
+
+ list_remove(&This->entry);
+ heap_free(This);
+@@ -333,7 +335,7 @@ static HRESULT WINAPI HTMLWindow2_Invoke(IHTMLWindow2 *iface, DISPID dispIdMembe
+ static HRESULT get_frame_by_index(HTMLOuterWindow *This, UINT32 index, HTMLOuterWindow **ret)
+ {
+ nsIDOMWindowCollection *nsframes;
+- nsIDOMWindow *nswindow;
++ mozIDOMWindowProxy *mozwindow;
+ UINT32 length;
+ nsresult nsres;
+
+@@ -351,16 +353,16 @@ static HRESULT get_frame_by_index(HTMLOuterWindow *This, UINT32 index, HTMLOuter
+ return DISP_E_MEMBERNOTFOUND;
+ }
+
+- nsres = nsIDOMWindowCollection_Item(nsframes, index, &nswindow);
++ nsres = nsIDOMWindowCollection_Item(nsframes, index, &mozwindow);
+ nsIDOMWindowCollection_Release(nsframes);
+ if(NS_FAILED(nsres)) {
+ FIXME("nsIDOMWindowCollection_Item failed: 0x%08x\n", nsres);
+ return E_FAIL;
+ }
+
+- *ret = nswindow_to_window(nswindow);
++ *ret = mozwindow_to_window(mozwindow);
+
+- nsIDOMWindow_Release(nswindow);
++ mozIDOMWindowProxy_Release(mozwindow);
+ return S_OK;
+ }
+
+@@ -368,7 +370,7 @@ HRESULT get_frame_by_name(HTMLOuterWindow *This, const WCHAR *name, BOOL deep, H
+ {
+ nsIDOMWindowCollection *nsframes;
+ HTMLOuterWindow *window = NULL;
+- nsIDOMWindow *nswindow;
++ mozIDOMWindowProxy *mozwindow;
+ nsAString name_str;
+ UINT32 length, i;
+ nsresult nsres;
+@@ -386,15 +388,15 @@ HRESULT get_frame_by_name(HTMLOuterWindow *This, const WCHAR *name, BOOL deep, H
+ }
+
+ nsAString_InitDepend(&name_str, name);
+- nsres = nsIDOMWindowCollection_NamedItem(nsframes, &name_str, &nswindow);
++ nsres = nsIDOMWindowCollection_NamedItem(nsframes, &name_str, &mozwindow);
+ nsAString_Finish(&name_str);
+ if(NS_FAILED(nsres)) {
+ nsIDOMWindowCollection_Release(nsframes);
+ return E_FAIL;
+ }
+
+- if(nswindow) {
+- *ret = nswindow_to_window(nswindow);
++ if(mozwindow) {
++ *ret = mozwindow_to_window(mozwindow);
+ return S_OK;
+ }
+
+@@ -405,19 +407,19 @@ HRESULT get_frame_by_name(HTMLOuterWindow *This, const WCHAR *name, BOOL deep, H
+ HTMLOuterWindow *window_iter;
+ BSTR id;
+
+- nsres = nsIDOMWindowCollection_Item(nsframes, i, &nswindow);
++ nsres = nsIDOMWindowCollection_Item(nsframes, i, &mozwindow);
+ if(NS_FAILED(nsres)) {
+ FIXME("nsIDOMWindowCollection_Item failed: 0x%08x\n", nsres);
+ hres = E_FAIL;
+ break;
+ }
+
+- window_iter = nswindow_to_window(nswindow);
++ window_iter = mozwindow_to_window(mozwindow);
+
+- nsIDOMWindow_Release(nswindow);
++ mozIDOMWindowProxy_Release(mozwindow);
+
+ if(!window_iter) {
+- WARN("nsIDOMWindow without HTMLOuterWindow: %p\n", nswindow);
++ WARN("nsIDOMWindow without HTMLOuterWindow: %p\n", mozwindow);
+ continue;
+ }
+
+@@ -3031,8 +3033,13 @@ HRESULT HTMLOuterWindow_Create(HTMLDocumentObj *doc_obj, nsIDOMWindow *nswindow,
+ window->window_ref->ref = 1;
+
+ if(nswindow) {
++ nsresult nsres;
++
+ nsIDOMWindow_AddRef(nswindow);
+ window->nswindow = nswindow;
++
++ nsres = nsIDOMWindow_QueryInterface(nswindow, &IID_mozIDOMWindowProxy, (void**)&window->window_proxy);
++ assert(nsres == NS_OK);
+ }
+
+ window->scriptmode = parent ? parent->scriptmode : SCRIPTMODE_GECKO;
+@@ -3171,3 +3178,15 @@ HTMLOuterWindow *nswindow_to_window(const nsIDOMWindow *nswindow)
+
+ return NULL;
+ }
++
++HTMLOuterWindow *mozwindow_to_window(const mozIDOMWindowProxy *mozwindow)
++{
++ HTMLOuterWindow *iter;
++
++ LIST_FOR_EACH_ENTRY(iter, &window_list, HTMLOuterWindow, entry) {
++ if(iter->window_proxy == mozwindow)
++ return iter;
++ }
++
++ return NULL;
++}
+diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
+index 71cb06f..095b9dc 100644
+--- a/dlls/mshtml/mshtml_private.h
++++ b/dlls/mshtml/mshtml_private.h
+@@ -422,6 +422,7 @@ struct HTMLOuterWindow {
+
+ HTMLDocumentObj *doc_obj;
+ nsIDOMWindow *nswindow;
++ mozIDOMWindowProxy *window_proxy;
+ HTMLOuterWindow *parent;
+ HTMLFrameBase *frame_element;
+
+@@ -800,6 +801,7 @@ HRESULT create_doc_from_nsdoc(nsIDOMHTMLDocument*,HTMLDocumentObj*,HTMLInnerWind
+ HRESULT HTMLOuterWindow_Create(HTMLDocumentObj*,nsIDOMWindow*,HTMLOuterWindow*,HTMLOuterWindow**) DECLSPEC_HIDDEN;
+ HRESULT update_window_doc(HTMLInnerWindow*) DECLSPEC_HIDDEN;
+ HTMLOuterWindow *nswindow_to_window(const nsIDOMWindow*) DECLSPEC_HIDDEN;
++HTMLOuterWindow *mozwindow_to_window(const mozIDOMWindowProxy*) DECLSPEC_HIDDEN;
+ void get_top_window(HTMLOuterWindow*,HTMLOuterWindow**) DECLSPEC_HIDDEN;
+ HRESULT HTMLOptionElementFactory_Create(HTMLInnerWindow*,HTMLOptionElementFactory**) DECLSPEC_HIDDEN;
+ HRESULT HTMLImageElementFactory_Create(HTMLInnerWindow*,HTMLImageElementFactory**) DECLSPEC_HIDDEN;
+diff --git a/dlls/mshtml/mutation.c b/dlls/mshtml/mutation.c
+index 22a3e61..adde295 100644
+--- a/dlls/mshtml/mutation.c
++++ b/dlls/mshtml/mutation.c
+@@ -606,33 +606,30 @@ static void NSAPI nsDocumentObserver_DocumentStatesChanged(nsIDocumentObserver *
+ {
+ }
+
+-static void NSAPI nsDocumentObserver_StyleSheetAdded(nsIDocumentObserver *iface, nsIDocument *aDocument,
+- nsIStyleSheet *aStyleSheet, cpp_bool aDocumentSheet)
++static void NSAPI nsDocumentObserver_StyleSheetAdded(nsIDocumentObserver *iface, mozilla_StyleSheetHandle aStyleSheet,
++ cpp_bool aDocumentSheet)
+ {
+ }
+
+-static void NSAPI nsDocumentObserver_StyleSheetRemoved(nsIDocumentObserver *iface, nsIDocument *aDocument,
+- nsIStyleSheet *aStyleSheet, cpp_bool aDocumentSheet)
++static void NSAPI nsDocumentObserver_StyleSheetRemoved(nsIDocumentObserver *iface, mozilla_StyleSheetHandle aStyleSheet,
++ cpp_bool aDocumentSheet)
+ {
+ }
+
+ static void NSAPI nsDocumentObserver_StyleSheetApplicableStateChanged(nsIDocumentObserver *iface,
+- nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, cpp_bool aApplicable)
++ mozilla_StyleSheetHandle aStyleSheet)
+ {
+ }
+
+-static void NSAPI nsDocumentObserver_StyleRuleChanged(nsIDocumentObserver *iface, nsIDocument *aDocument,
+- nsIStyleSheet *aStyleSheet, nsIStyleRule *aOldStyleRule, nsIStyleSheet *aNewStyleRule)
++static void NSAPI nsDocumentObserver_StyleRuleChanged(nsIDocumentObserver *iface, mozilla_StyleSheetHandle aStyleSheet)
+ {
+ }
+
+-static void NSAPI nsDocumentObserver_StyleRuleAdded(nsIDocumentObserver *iface, nsIDocument *aDocument,
+- nsIStyleSheet *aStyleSheet, nsIStyleRule *aStyleRule)
++static void NSAPI nsDocumentObserver_StyleRuleAdded(nsIDocumentObserver *iface, mozilla_StyleSheetHandle aStyleSheet)
+ {
+ }
+
+-static void NSAPI nsDocumentObserver_StyleRuleRemoved(nsIDocumentObserver *iface, nsIDocument *aDocument,
+- nsIStyleSheet *aStyleSheet, nsIStyleRule *aStyleRule)
++static void NSAPI nsDocumentObserver_StyleRuleRemoved(nsIDocumentObserver *iface, mozilla_StyleSheetHandle aStyleSheet)
+ {
+ }
+
+diff --git a/dlls/mshtml/npplugin.c b/dlls/mshtml/npplugin.c
+index 6ae503f..302ff42 100644
+--- a/dlls/mshtml/npplugin.c
++++ b/dlls/mshtml/npplugin.c
+@@ -244,7 +244,7 @@ static nsIDOMHTMLElement *get_dom_element(NPP instance)
+
+ static HTMLInnerWindow *get_elem_window(nsIDOMHTMLElement *elem)
+ {
+- nsIDOMWindow *nswindow;
++ mozIDOMWindowProxy *mozwindow;
+ nsIDOMDocument *nsdoc;
+ HTMLOuterWindow *window;
+ nsresult nsres;
+@@ -253,13 +253,13 @@ static HTMLInnerWindow *get_elem_window(nsIDOMHTMLElement *elem)
+ if(NS_FAILED(nsres))
+ return NULL;
+
+- nsres = nsIDOMDocument_GetDefaultView(nsdoc, &nswindow);
++ nsres = nsIDOMDocument_GetDefaultView(nsdoc, &mozwindow);
+ nsIDOMDocument_Release(nsdoc);
+- if(NS_FAILED(nsres) || !nswindow)
++ if(NS_FAILED(nsres) || !mozwindow)
+ return NULL;
+
+- window = nswindow_to_window(nswindow);
+- nsIDOMWindow_Release(nswindow);
++ window = mozwindow_to_window(mozwindow);
++ mozIDOMWindowProxy_Release(mozwindow);
+
+ return window->base.inner_window;
+ }
+diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c
+index 17851ce..22f37af 100644
+--- a/dlls/mshtml/nsembed.c
++++ b/dlls/mshtml/nsembed.c
+@@ -1059,7 +1059,7 @@ void get_editor_controller(NSContainer *This)
+ }
+
+ nsres = nsIEditingSession_GetEditorForWindow(editing_session,
+- This->doc->basedoc.window->nswindow, &This->editor);
++ This->doc->basedoc.window->window_proxy, &This->editor);
+ nsIEditingSession_Release(editing_session);
+ if(NS_FAILED(nsres)) {
+ ERR("Could not get editor: %08x\n", nsres);
+@@ -1903,9 +1903,9 @@ static nsresult NSAPI nsInterfaceRequestor_GetInterface(nsIInterfaceRequestor *i
+ {
+ NSContainer *This = impl_from_nsIInterfaceRequestor(iface);
+
+- if(IsEqualGUID(&IID_nsIDOMWindow, riid)) {
++ if(IsEqualGUID(&IID_mozIDOMWindowProxy, riid)) {
+ TRACE("(%p)->(IID_nsIDOMWindow %p)\n", This, result);
+- return nsIWebBrowser_GetContentDOMWindow(This->webbrowser, (nsIDOMWindow**)result);
++ return nsIWebBrowser_GetContentDOMWindow(This->webbrowser, (mozIDOMWindowProxy**)result);
+ }
+
+ return nsIWebBrowserChrome_QueryInterface(&This->nsIWebBrowserChrome_iface, riid, result);
+@@ -2161,6 +2161,7 @@ void NSContainer_Release(NSContainer *This)
+
+ nsIXMLHttpRequest *create_nsxhr(nsIDOMWindow *nswindow)
+ {
++ mozIDOMWindow *inner_window;
+ nsIScriptSecurityManager *secman;
+ nsIPrincipal *nspri;
+ nsIGlobalObject *nsglo;
+@@ -2182,7 +2183,15 @@ nsIXMLHttpRequest *create_nsxhr(nsIDOMWindow *nswindow)
+ return NULL;
+ }
+
+- nsres = nsIDOMWindow_QueryInterface(nswindow, &IID_nsIGlobalObject, (void **)&nsglo);
++ nsres = nsIDOMWindow_GetInnerWindow(nswindow, &inner_window);
++ if(NS_FAILED(nsres)) {
++ ERR("Could not get inner window: %08x\n", nsres);
++ nsISupports_Release(nspri);
++ return NULL;
++ }
++
++ nsres = mozIDOMWindow_QueryInterface(inner_window, &IID_nsIGlobalObject, (void **)&nsglo);
++ mozIDOMWindow_Release(inner_window);
+ assert(nsres == NS_OK);
+
+ nsres = nsIComponentManager_CreateInstanceByContractID(pCompMgr,
+diff --git a/dlls/mshtml/nsiface.idl b/dlls/mshtml/nsiface.idl
+index 22a71f8..efe8015 100644
+--- a/dlls/mshtml/nsiface.idl
++++ b/dlls/mshtml/nsiface.idl
+@@ -25,7 +25,7 @@
+
+ #pragma makedep header
+
+-cpp_quote("#define GECKO_VERSION \"2.44\"")
++cpp_quote("#define GECKO_VERSION \"2.47-beta1\"")
+ cpp_quote("#define GECKO_VERSION_STRING \"Wine Gecko \" GECKO_VERSION")
+
+ import "wtypes.idl";
+@@ -113,6 +113,7 @@ interface nsISelection;
+ interface nsIDOMHTMLSelectElement;
+ interface nsIFile;
+ interface nsIDocShell;
++interface mozIDOMWindowProxy;
+
+ interface IMoniker;
+
+@@ -150,8 +151,6 @@ typedef nsISupports nsIDOMMediaList;
+ typedef nsISupports nsIDOMHTMLTableSectionElement;
+ typedef nsISupports nsIDOMClientRectList;
+ typedef nsISupports nsINode;
+-typedef nsISupports nsIStyleSheet;
+-typedef nsISupports nsIStyleRule;
+ typedef nsISupports nsIDOMUserDataHandler;
+ typedef nsISupports nsISHEntry;
+ typedef nsISupports nsIPresShell;
+@@ -490,6 +489,7 @@ interface nsIMutable : nsISupports
+ interface nsIStandardURL : nsIMutable
+ {
+ nsresult Init(uint32_t aUrlType, int32_t aDefaultPort, const nsACString *aSpec, const char *aOriginCharset, nsIURI *aBaseURI);
++ nsresult SetDefaultPort(int32_t aNewDefaultPort);
+ }
+
+ [
+@@ -553,6 +553,8 @@ interface nsILoadGroup : nsIRequest
+ nsresult GetSchedulingContextID(nsID *aSchedulingContextID);
+ nsresult GetDefaultLoadFlags(nsLoadFlags *aDefaultLoadFlags);
+ nsresult SetDefaultLoadFlags(nsLoadFlags aDefaultLoadFlags);
++ nsresult GetUserAgentOverrideCache(nsACString *aUserAgentOverrideCache);
++ nsresult SetUserAgentOverrideCache(const nsACString *aUserAgentOverrideCache);
+ }
+
+ [
+@@ -612,7 +614,7 @@ interface nsIHttpHeaderVisitor : nsISupports
+
+ [
+ object,
+- uuid(e90acf2d-eaf2-41d8-97b2-c8d99f6437a1),
++ uuid(b2596105-3d0d-4e6a-824f-0539713bb879),
+ local
+ ]
+ interface nsIHttpChannel : nsIChannel
+@@ -623,6 +625,10 @@ interface nsIHttpChannel : nsIChannel
+ nsresult SetReferrer(nsIURI *aReferrer);
+ nsresult GetReferrerPolicy(uint32_t *aReferrerPolicy);
+ nsresult SetReferrerWithPolicy(nsIURI *referrer, uint32_t referrerPolicy);
++ nsresult GetProtocolVersion(nsACString *aProtocolVersion);
++ nsresult GetTransferSize(uint64_t *aTransferSize);
++ nsresult GetDecodedBodySize(uint64_t *aDecodedBodySize);
++ nsresult GetEncodedBodySize(uint64_t *aEncodedBodySize);
+ nsresult GetRequestHeader(const nsACString *aHeader, nsACString *_retval);
+ nsresult SetRequestHeader(const nsACString *aHeader, const nsACString *aValue, bool aMerge);
+ nsresult SetEmptyRequestHeader(const nsACString *aHeader);
+@@ -645,14 +651,14 @@ interface nsIHttpChannel : nsIChannel
+ nsresult IsNoStoreResponse(bool *_retval);
+ nsresult IsNoCacheResponse(bool *_retval);
+ nsresult IsPrivateResponse(bool *_retval);
+- nsresult RedirectTo(nsIURI *aNewURI);
++ nsresult RedirectTo(nsIURI *aTargetURI);
+ nsresult GetSchedulingContextID(nsID *aSchedulingContextID);
+ nsresult SetSchedulingContextID(const nsID aSchedulingContextID);
+ }
+
+ [
+ object,
+- uuid(9eabaac6-cc7c-4ca1-9430-65f2daaa578f),
++ uuid(4e28263d-1e03-46f4-aa5c-9512f91957f9),
+ local
+ ]
+ interface nsIHttpChannelInternal : nsISupports
+@@ -699,8 +705,9 @@ interface nsIHttpChannelInternal : nsISupports
+ nsresult GetNetworkInterfaceId(nsACString *aNetworkInterfaceId);
+ nsresult SetNetworkInterfaceId(const nsACString *aNetworkInterfaceId);
+ nsresult GetProxyURI(nsIURI **aProxyURI);
+- nsresult SetCorsPreflightParameters(const void /*nsTArray*/ *unsafeHeaders,
+- bool withCredentials, nsIPrincipal *preflightPrincipal);
++ nsresult SetCorsPreflightParameters(const void /*nsTArray*/ *unsafeHeaders);
++ nsresult GetBlockAuthPrompt(bool *aBlockAuthPrompt) ;
++ nsresult SetBlockAuthPrompt(bool aBlockAuthPrompt);
+ }
+
+ [
+@@ -1188,7 +1195,7 @@ interface nsIDOMDocumentFragment : nsIDOMNode
+
+ [
+ object,
+- uuid(35dc5030-dc83-4291-88a2-0906c549788e),
++ uuid(b15fa0f4-97c1-4388-af62-2ceff7a89bdf),
+ local
+ ]
+ interface nsIDOMDocument : nsIDOMNode
+@@ -1220,7 +1227,7 @@ interface nsIDOMDocument : nsIDOMNode
+ nsIDOMTreeWalker **_retval);
+ cpp_quote("#undef CreateEvent")
+ nsresult CreateEvent(const nsAString *eventType, nsIDOMEvent **_retval);
+- nsresult GetDefaultView(nsIDOMWindow **aDefaultView);
++ nsresult GetDefaultView(mozIDOMWindowProxy **aDefaultView);
+ nsresult GetCharacterSet(nsAString *aCharacterSet);
+ nsresult GetDir(nsAString *aDir);
+ nsresult SetDir(const nsAString *aDir);
+@@ -1264,7 +1271,7 @@ interface nsIDOMDocument : nsIDOMNode
+
+ [
+ object,
+- uuid(bd2a0a46-17e4-46ea-9e5d-6a97cf5e3b28),
++ uuid(cd31e61f-cfc2-4b91-9385-17b6a2d0633d),
+ local
+ ]
+ interface nsIDOMHTMLDocument : nsIDOMDocument
+@@ -1394,14 +1401,32 @@ interface nsISelection : nsISupports
+
+ [
+ object,
+- uuid(a6cf906f-15b3-11d2-932e-00805f8add32),
++ uuid(8d64f457-fb8c-49ea-a359-cef30eed9774),
+ local
+ ]
+ interface nsIDOMWindowCollection : nsISupports
+ {
+ nsresult GetLength(uint32_t *aLength);
+- nsresult Item(uint32_t index, nsIDOMWindow **_retval);
+- nsresult NamedItem(const nsAString *name, nsIDOMWindow **_retval);
++ nsresult Item(uint32_t index, mozIDOMWindowProxy **_retval);
++ nsresult NamedItem(const nsAString *name, mozIDOMWindowProxy **_retval);
++}
++
++[
++ object,
++ uuid(75fbabd6-7a2e-4787-aa33-449a33512135),
++ local
++]
++interface mozIDOMWindow : nsISupports
++{
++}
++
++[
++ object,
++ uuid(53ca090c-e739-48b9-8911-208c72f9191e),
++ local
++]
++interface mozIDOMWindowProxy : nsISupports
++{
+ }
+
+ [
+@@ -1422,8 +1447,8 @@ interface nsIDOMWindow : nsISupports
+ nsresult GetLength(uint32_t *aLength);
+ nsresult GetRealTop(nsIDOMWindow **aTop);
+ nsresult GetRealParent(nsIDOMWindow **aParent);
+- nsresult GetOpener(nsIDOMWindow **aOpenerWindow);
+- nsresult SetOpener(nsIDOMWindow *aOpenerWindow);
++ nsresult GetOpener(mozIDOMWindowProxy **aOpenerWindow);
++ nsresult SetOpener(mozIDOMWindowProxy *aOpenerWindow);
+ nsresult GetRealFrameElement(nsIDOMElement **aFrameElement);
+ nsresult GetNavigator(nsIDOMNavigator **aNavigator);
+ nsresult Print();
+@@ -1471,6 +1496,8 @@ interface nsIDOMWindow : nsISupports
+ nsresult Open(const nsAString *url, const nsAString *name, const nsAString *options, nsIDOMWindow **_retval);
+ nsresult Find(const nsAString *str, bool caseSensitive, bool backwards, bool wrapAround, bool wholeWord,
+ bool searchInFrames, bool showDialog, bool *_retval);
++ nsresult GetInnerWindow(mozIDOMWindow **aInnerWindow);
++ nsresult GetOuterWindow(mozIDOMWindowProxy **aOuterWindow);
+ }
+
+ [
+@@ -2116,14 +2143,13 @@ interface nsIDOMHTMLIFrameElement : nsISupports
+ nsresult GetWidth(nsAString *aWidth);
+ nsresult SetWidth(const nsAString *aWidth);
+ nsresult GetContentDocument(nsIDOMDocument **aContentDocument);
+- nsresult GetContentWindow(nsIDOMWindow **aContentWindow);
+ nsresult GetAllowFullscreen(bool *aAllowFullscreen);
+ nsresult SetAllowFullscreen(bool aAllowFullscreen);
+ }
+
+ [
+ object,
+- uuid(60ab25b9-3246-4f50-b0d4-21e73ba88cd6),
++ uuid(012a8982-c9d3-4614-91e2-18ee51c97c06),
+ local
+ ]
+ interface nsIDOMHTMLFrameElement : nsISupports
+@@ -2145,7 +2171,6 @@ interface nsIDOMHTMLFrameElement : nsISupports
+ nsresult GetSrc(nsAString *aSrc);
+ nsresult SetSrc(const nsAString *aSrc);
+ nsresult GetContentDocument(nsIDOMDocument **aContentDocument);
+- nsresult GetContentWindow(nsIDOMWindow **aContentWindow);
+ }
+
+ [
+@@ -2246,7 +2271,7 @@ interface nsITooltipListener : nsISupports
+
+ [
+ object,
+- uuid(33e9d001-caab-4ba9-8961-54902f197202),
++ uuid(4052b6da-4faa-4646-b3a1-7e16a01c2dc2),
+ local
+ ]
+ interface nsIWebBrowser : nsISupports
+@@ -2257,7 +2282,7 @@ interface nsIWebBrowser : nsISupports
+ nsresult SetContainerWindow(nsIWebBrowserChrome *aContainerWindow);
+ nsresult GetParentURIContentListener(nsIURIContentListener **aParentURIContentListener);
+ nsresult SetParentURIContentListener(nsIURIContentListener *aParentURIContentListener);
+- nsresult GetContentDOMWindow(nsIDOMWindow **aContentDOMWindow);
++ nsresult GetContentDOMWindow(mozIDOMWindowProxy **aContentDOMWindow);
+ nsresult GetIsActive(bool *aIsActive);
+ nsresult SetIsActive(bool aIsActive);
+ }
+@@ -2280,7 +2305,7 @@ typedef void* nativeWindow;
+
+ [
+ object,
+- uuid(9da319f3-eee6-4504-81a5-6A19cf6215bf),
++ uuid(ca635529-a977-4552-9b8a-66187e54d882),
+ local
+ ]
+ interface nsIBaseWindow : nsISupports
+@@ -2290,6 +2315,7 @@ interface nsIBaseWindow : nsISupports
+ nsresult Create();
+ nsresult Destroy();
+ nsresult SetPosition(int32_t x, int32_t y);
++ nsresult SetPositionDesktopPix(int32_t x, int32_t y);
+ nsresult GetPosition(int32_t *x, int32_t *y);
+ nsresult SetSize(int32_t cx, int32_t cy, bool fRepaint);
+ nsresult GetSize(int32_t *cx, int32_t *cy);
+@@ -2307,6 +2333,7 @@ interface nsIBaseWindow : nsISupports
+ nsresult SetEnabled(bool aEnabled);
+ nsresult GetMainWidget(nsIWidget **aMainWidget);
+ nsresult GetUnscaledDevicePixelsPerCSSPixel(double *aUnscaledDevicePixelsPerCSSPixel);
++ nsresult GetDevicePixelsPerDesktopPixel(double *aDevicePixelsPerDesktopPixel);
+ nsresult SetFocus();
+ nsresult GetTitle(PRUnichar **aTitle);
+ nsresult SetTitle(const PRUnichar *aTitle);
+@@ -2358,14 +2385,14 @@ interface nsIWebNavigation : nsISupports
+
+ [
+ object,
+- uuid(bd0efb3b-1c81-4fb0-b16d-576a2be48a95),
++ uuid(c4d64640-b332-4db6-a2a5-e08566000dc9),
+ local
+ ]
+ interface nsIWebProgress : nsISupports
+ {
+ nsresult AddProgressListener(nsIWebProgressListener *aListener, uint32_t aNotifyMask);
+ nsresult RemoveProgressListener(nsIWebProgressListener *aListener);
+- nsresult GetDOMWindow(nsIDOMWindow **aDOMWindow);
++ nsresult GetDOMWindow(mozIDOMWindowProxy **aDOMWindow);
+ nsresult GetDOMWindowID(uint64_t *aDOMWindowID);
+ nsresult GetIsTopLevel(bool *aIsTopLevel);
+ nsresult GetIsLoadingDocument(bool *aIsLoadingDocument);
+@@ -2374,7 +2401,7 @@ interface nsIWebProgress : nsISupports
+
+ [
+ object,
+- uuid(04dd3a01-a74e-44aa-8d49-2c30478fd7b8),
++ uuid(ecc5cbad-57fc-4731-b0bd-09e865bd62ad),
+ local
+ ]
+ interface nsIPrintSettings : nsISupports
+@@ -2458,8 +2485,6 @@ interface nsIPrintSettings : nsISupports
+ nsresult SetShowPrintProgress(bool aShowPrintProgress);
+ nsresult GetPaperName(PRUnichar **aPaperName);
+ nsresult SetPaperName(const PRUnichar *aPaperName);
+- nsresult GetPaperSizeType(int16_t *aPaperSizeType);
+- nsresult SetPaperSizeType(int16_t aPaperSizeType);
+ nsresult GetPaperData(int16_t *aPaperData);
+ nsresult SetPaperData(int16_t aPaperData);
+ nsresult GetPaperWidth(double *aPaperWidth);
+@@ -2508,14 +2533,14 @@ interface nsIPrintSettings : nsISupports
+
+ [
+ object,
+- uuid(9a7ca4b0-fbba-11d4-a869-00105a183419),
++ uuid(c9a934ed-fff1-4971-bfba-6c25ad70e1e6),
+ local
+ ]
+ interface nsIWebBrowserPrint : nsISupports
+ {
+ nsresult GetGlobalPrintSettings(nsIPrintSettings **aGlobalPrintSettings);
+ nsresult GetCurrentPrintSettings(nsIPrintSettings **aCurrentPrintSettings);
+- nsresult GetCurrentChildDOMWindow(nsIDOMWindow **aCurrentChildDOMWindow);
++ nsresult GetCurrentChildDOMWindow(mozIDOMWindowProxy **aCurrentChildDOMWindow);
+ nsresult GetDoingPrint(bool *aDoingPrint);
+ nsresult GetDoingPrintPreview(bool *aDoingPrintPreview);
+ nsresult GetIsFramesetDocument(bool *aIsFramesetDocument);
+@@ -2524,7 +2549,7 @@ interface nsIWebBrowserPrint : nsISupports
+ nsresult GetIsRangeSelection(bool *aIsRangeSelection);
+ nsresult GetPrintPreviewNumPages(int32_t *aPrintPreviewNumPages);
+ nsresult Print(nsIPrintSettings *aThePrintSettings, nsIWebProgressListener *aWPListener);
+- nsresult PrintPreview(nsIPrintSettings *aThePrintSettings, nsIDOMWindow *aChildDOMWin,
++ nsresult PrintPreview(nsIPrintSettings *aThePrintSettings, mozIDOMWindowProxy *aChildDOMWin,
+ nsIWebProgressListener *aWPListener);
+ nsresult PrintPreviewNavigate(int16_t aNavType, int32_t aPageNum);
+ nsresult Cancel();
+@@ -2802,7 +2827,7 @@ interface nsIIOService : nsISupports
+
+ [
+ object,
+- uuid(9c5d3c58-1dd1-11b2-a1c9-f3699284657a),
++ uuid(7f8c754e-5b36-44be-bc96-191b49f08ea6),
+ local
+ ]
+ interface nsIWebBrowserFocus : nsISupports
+@@ -2811,8 +2836,8 @@ interface nsIWebBrowserFocus : nsISupports
+ nsresult Deactivate();
+ nsresult SetFocusAtFirstElement();
+ nsresult SetFocusAtLastElement();
+- nsresult GetFocusedWindow(nsIDOMWindow **aFocusedWindow);
+- nsresult SetFocusedWindow(nsIDOMWindow *aFocusedWindow);
++ nsresult GetFocusedWindow(mozIDOMWindowProxy **aFocusedWindow);
++ nsresult SetFocusedWindow(mozIDOMWindowProxy *aFocusedWindow);
+ nsresult GetFocusedElement(nsIDOMElement **aFocusedElement);
+ nsresult SetFocusedElement(nsIDOMElement *aFocusedElement);
+ }
+@@ -2864,7 +2889,7 @@ interface nsIDOMEventTarget : nsISupports
+
+ [
+ object,
+- uuid(63857daf-c084-4ea6-a8b9-6812e3176991),
++ uuid(f58daacf-4d1a-4002-8fd7-06b614dfbcf6),
+ local
+ ]
+ interface nsIDOMEvent : nsISupports
+@@ -2878,7 +2903,7 @@ interface nsIDOMEvent : nsISupports
+ nsresult GetTimeStamp(DOMTimeStamp *aTimeStamp);
+ nsresult StopPropagation();
+ nsresult PreventDefault();
+- nsresult InitEvent(const nsAString *eventTypeArg, bool canBubbleArg, bool cancelableArg);
++ void /* thiscall */ InitEvent(const nsAString *eventTypeArg, bool canBubbleArg, bool cancelableArg);
+ nsresult GetDefaultPrevented(bool *aDefaultPrevented);
+ nsresult StopImmediatePropagation();
+ nsresult GetOriginalTarget(nsIDOMEventTarget **aOriginalTarget);
+@@ -2888,7 +2913,7 @@ interface nsIDOMEvent : nsISupports
+ nsresult DuplicatePrivateData();
+ nsresult SetTarget(nsIDOMEventTarget *aTarget);
+ bool IsDispatchStopped();
+- /*nsEvent*/ void *GetInternalNSEvent();
++ /*WidgedEvent*/ void *WidgetEventPtr();
+ void SetTrusted(bool aTrusted);
+ void Serialize(/*IPC::Message*/ void *aMsg, bool aSerializeInterfaceType);
+ bool Deserialize(const /*IPC::Message*/ void *aMsg, void **aIter);
+@@ -2899,7 +2924,7 @@ interface nsIDOMEvent : nsISupports
+
+ [
+ object,
+- uuid(a30a95ac-3b95-4251-88dc-8efa89ba9f9c),
++ uuid(46b44e33-13c2-4eb3-bf80-76a4e0857ccc),
+ local
+ ]
+ interface nsIDOMWindowUtils : nsISupports
+@@ -2952,6 +2977,7 @@ interface nsIDOMWindowUtils : nsISupports
+ const nsAString *aCharacters, const nsAString *aUnmodifiedCharacters, nsIObserver *aObserver);
+ nsresult SendNativeMouseEvent(int32_t aScreenX, int32_t aScreenY, int32_t aNativeMessage, int32_t aModifierFlags,
+ nsIDOMElement *aElement, nsIObserver *aObserver);
++ nsresult SendNativeMouseMove(int32_t aScreenX, int32_t aScreenY, nsIDOMElement *aElement, nsIObserver *aObserver);
+ nsresult SendNativeMouseScrollEvent(int32_t aScreenX, int32_t aScreenY, uint32_t aNativeMessage, double aDeltaX,
+ double aDeltaY, double aDeltaZ, uint32_t aModifierFlags, uint32_t aAdditionalFlags, nsIDOMElement *aElement,
+ nsIObserver *aObserver);
+@@ -3010,7 +3036,7 @@ interface nsIDOMWindowUtils : nsISupports
+ nsresult ResumeTimeouts();
+ nsresult GetLayerManagerType(nsAString *aLayerManagerType);
+ nsresult GetLayerManagerRemote(bool *aLayerManagerRemote);
+- nsresult GetSupportsHardwareH264Decoding(nsAString *aSupportsHardwareH264Decoding);
++ nsresult GetSupportsHardwareH264Decoding(void /* JS::MutableHandleValue */ *aSupportsHardwareH264Decoding);
+ nsresult StartFrameTimeRecording(uint32_t *startIndex);
+ nsresult StopFrameTimeRecording(uint32_t startIndex, uint32_t *frameCount, float **frameIntervals);
+ nsresult BeginTabSwitch();
+@@ -3023,14 +3049,14 @@ interface nsIDOMWindowUtils : nsISupports
+ nsresult RestoreNormalRefresh();
+ nsresult GetIsTestControllingRefreshes(bool *aIsTestControllingRefreshes);
+ nsresult GetAsyncPanZoomEnabled(bool *aAsyncPanZoomEnabled);
+- nsresult SetAsyncScrollOffset(nsIDOMNode *aNode, int32_t aX, int32_t aY);
++ nsresult SetAsyncScrollOffset(nsIDOMNode *aNode, float aX, float aY);
+ nsresult SetAsyncZoom(nsIDOMNode *aRootElement, float aValue);
+ nsresult FlushApzRepaints(bool *_retval);
++ nsresult ZoomToFocusedInput();
+ nsresult ComputeAnimationDistance(nsIDOMElement *element, const nsAString *property, const nsAString *value1,
+ const nsAString *value2, double *_retval);
+ nsresult WrapDOMFile(nsIFile *aFile, nsISupports **_retval);
+ nsresult GetFocusedInputType(char **aFocusedInputType);
+- nsresult FindElementWithViewId(long /*nsViewID*/ aId, nsIDOMElement **_retval);
+ nsresult GetViewId(nsIDOMElement *aElement, long /*nsViewID*/ *_retval);
+ nsresult LeafLayersPartitionWindow(bool *_retval);
+ nsresult CheckAndClearPaintedState(nsIDOMElement *aElement, bool *_retval);
+@@ -3111,15 +3137,15 @@ interface nsIContextMenuListener : nsISupports
+
+ [
+ object,
+- uuid(d73852f8-7bd6-477d-8233-117dbf83860b),
++ uuid(85ae52eb-37fa-4fd9-a2e6-c7d0f2a521b3),
+ local
+ ]
+-interface nsIDOMUIEvent : nsIDOMEvent
++interface nsIDOMUIEvent : nsISupports
+ {
+- nsresult GetView(nsIDOMWindow **aView);
++ nsresult GetView(mozIDOMWindowProxy **aView);
+ nsresult GetDetail(int32_t *aDetail);
+ nsresult InitUIEvent(const nsAString *typeArg, bool canBubbleArg, bool cancelableArg,
+- nsIDOMWindow *viewArg, int32_t detailArg);
++ mozIDOMWindowProxy *viewArg, int32_t detailArg);
+ nsresult GetLayerX(int32_t *aLayerX);
+ nsresult GetLayerY(int32_t *aLayerY);
+ nsresult GetPageX(int32_t *aPageX);
+@@ -3130,11 +3156,12 @@ interface nsIDOMUIEvent : nsIDOMEvent
+ nsresult GetCancelBubble(bool *aCancelBubble);
+ nsresult SetCancelBubble(bool aCancelBubble);
+ nsresult GetIsChar(bool *aIsChar);
++ void* /* mozilla::dom::Event thiscall */ AsEvent();
+ }
+
+ [
+ object,
+- uuid(df068636-9a5b-11e3-b71f-2c27d728e7f9),
++ uuid(5bdab8d8-7933-4c5c-b6d1-ab34481237f7),
+ local
+ ]
+ interface nsIDOMMouseEvent : nsIDOMUIEvent
+@@ -3153,23 +3180,17 @@ interface nsIDOMMouseEvent : nsIDOMUIEvent
+ nsresult GetButtons(uint16_t *aButtons);
+ nsresult GetRelatedTarget(nsIDOMEventTarget **aRelatedTarget);
+ nsresult InitMouseEvent(const nsAString *typeArg, bool canBubbleArg, bool cancelableArg,
+- nsIDOMWindow *viewArg, int32_t detailArg, int32_t screenXArg, int32_t screenYArg,
+- int32_t clientXArg, int32_t clientYArg, bool ctrlKeyArg, bool altKeyArg,
+- bool shiftKeyArg, bool metaKeyArg, uint16_t buttonArg,
+- nsIDOMEventTarget *relatedTargetArg);
++ mozIDOMWindow *viewArg, int32_t detailArg, int32_t screenXArg, int32_t screenYArg,
++ int32_t clientXArg, int32_t clientYArg, bool ctrlKeyArg, bool altKeyArg, bool shiftKeyArg,
++ bool metaKeyArg, uint16_t buttonArg, nsIDOMEventTarget *relatedTargetArg);
+ nsresult GetMozPressure(float *aMozPressure);
+ nsresult GetMozInputSource(uint16_t *aMozInputSource);
+- nsresult InitNSMouseEvent(const nsAString *typeArg, bool canBubbleArg, bool cancelableArg,
+- nsIDOMWindow *viewArg, int32_t detailArg, int32_t screenXArg, int32_t screenYArg,
+- int32_t clientXArg, int32_t clientYArg, bool ctrlKeyArg, bool altKeyArg, bool shiftKeyArg,
+- bool metaKeyArg, uint16_t buttonArg, nsIDOMEventTarget *relatedTargetArg, float pressure,
+- uint16_t inputSourceArg);
+ nsresult GetModifierState(const nsAString *keyArg, bool *_retval);
+ }
+
+ [
+ object,
+- uuid(d2b3e35f-8627-4732-a92d-cda54c8f8054),
++ uuid(2e52eb99-670d-469a-b51f-8efee2dd091d),
+ local
+ ]
+ interface nsIDOMKeyEvent : nsIDOMUIEvent
+@@ -3181,7 +3202,7 @@ interface nsIDOMKeyEvent : nsIDOMUIEvent
+ nsresult GetShiftKey(bool *aShiftKey);
+ nsresult GetMetaKey(bool *aMetaKey);
+ nsresult InitKeyEvent(const nsAString *typeArg, bool canBubbleArg,
+- bool cancelableArg, nsIDOMWindow *viewArg, bool ctrlKeyArg,
++ bool cancelableArg, mozIDOMWindowProxy *viewArg, bool ctrlKeyArg,
+ bool altKeyArg, bool shiftKeyArg, bool metaKeyArg, uint32_t keyCodeArg,
+ uint32_t charCodeArg);
+ nsresult GetModifierState(const nsAString *keyArg, bool *_retval);
+@@ -3234,34 +3255,34 @@ interface nsIComponentRegistrar : nsISupports
+
+ [
+ object,
+- uuid(1630c61a-325e-49ca-8759-a31b16c47aa5),
++ uuid(404ebfa2-d8f4-4c94-8416-e65a55f9df5a),
+ local
+ ]
+ interface nsIPromptService : nsISupports
+ {
+- nsresult Alert(nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ nsresult Alert(mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText);
+- nsresult AlertCheck(nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ nsresult AlertCheck(mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText, const PRUnichar *aCheckMsg, bool *aCheckState);
+- nsresult Confirm(nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ nsresult Confirm(mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText, bool *_retval);
+- nsresult ConfirmCheck(nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ nsresult ConfirmCheck(mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText, const PRUnichar *aCheckMsg, bool *aCheckState,
+ bool *_retval);
+- nsresult ConfirmEx(nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ nsresult ConfirmEx(mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText, uint32_t aButtonFlags, const PRUnichar *aButton0Title,
+ const PRUnichar *aButton1Title, const PRUnichar *aButton2Title,
+ const PRUnichar *aCheckMsg, bool *aCheckState, int32_t *_retval);
+- nsresult Prompt(nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ nsresult Prompt(mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText, PRUnichar **aValue, const PRUnichar *aCheckMsg,
+ bool *aCheckState, bool *_retval);
+- nsresult PromptUsernameAndPassword(nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ nsresult PromptUsernameAndPassword(mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText, PRUnichar **aUsername, PRUnichar **aPassword,
+ const PRUnichar *aCheckMsg, bool *aCheckState, bool *_retval);
+- nsresult PromptPassword(nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ nsresult PromptPassword(mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText, PRUnichar **aPassword, const PRUnichar *aCheckMsg,
+ bool *aCheckState, bool *_retval);
+- nsresult Select(nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ nsresult Select(mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText, uint32_t aCount, const PRUnichar **aSelectList,
+ int32_t *aOutSelection, bool *_retval);
+ }
+@@ -3278,23 +3299,23 @@ interface nsITooltipTextProvider : nsISupports
+
+ [
+ object,
+- uuid(24f3f4da-18a4-448d-876d-7360fefac029),
++ uuid(24f963d1-e6fc-43ea-a206-99ac5fcc5265),
+ local
+ ]
+ interface nsIEditingSession : nsISupports
+ {
+ nsresult GetEditorStatus(uint32_t *aEditorStatus);
+- nsresult MakeWindowEditable(nsIDOMWindow *window, const char *aEditorType,
++ nsresult MakeWindowEditable(mozIDOMWindowProxy *window, const char *aEditorType,
+ bool doAfterUriLoad, bool aMakeWholeDocumentEditable, bool aInteractive);
+- nsresult WindowIsEditable(nsIDOMWindow *window, bool *_retval);
+- nsresult GetEditorForWindow(nsIDOMWindow *window, nsIEditor **_retval);
+- nsresult SetupEditorOnWindow(nsIDOMWindow *window);
+- nsresult TearDownEditorOnWindow(nsIDOMWindow *window);
+- nsresult SetEditorOnControllers(nsIDOMWindow *aWindow, nsIEditor *aEditor);
+- nsresult DisableJSAndPlugins(nsIDOMWindow *aWindow);
+- nsresult RestoreJSAndPlugins(nsIDOMWindow *aWindow);
+- nsresult DetachFromWindow(nsIDOMWindow *aWindow);
+- nsresult ReattachToWindow(nsIDOMWindow *aWindow);
++ nsresult WindowIsEditable(mozIDOMWindowProxy *window, bool *_retval);
++ nsresult GetEditorForWindow(mozIDOMWindowProxy *window, nsIEditor **_retval);
++ nsresult SetupEditorOnWindow(mozIDOMWindowProxy *window);
++ nsresult TearDownEditorOnWindow(mozIDOMWindowProxy *window);
++ nsresult SetEditorOnControllers(mozIDOMWindowProxy *aWindow, nsIEditor *aEditor);
++ nsresult DisableJSAndPlugins(mozIDOMWindowProxy *aWindow);
++ nsresult RestoreJSAndPlugins(mozIDOMWindowProxy *aWindow);
++ nsresult DetachFromWindow(mozIDOMWindowProxy *aWindow);
++ nsresult ReattachToWindow(mozIDOMWindowProxy *aWindow);
+ nsresult GetJsAndPluginsDisabled(bool *aJsAndPluginsDisabled);
+ }
+
+@@ -3323,19 +3344,19 @@ interface nsICommandParams : nsISupports
+
+ [
+ object,
+- uuid(080d2001-f91e-11d4-a73c-f9242928207c),
++ uuid(bb5a1730-d83b-4fa2-831b-35b9d5842e84),
+ local
+ ]
+ interface nsICommandManager : nsISupports
+ {
+ nsresult AddCommandObserver(nsIObserver *aCommandObserver, const char *aCommandToObserve);
+ nsresult RemoveCommandObserver(nsIObserver *aCommandObserver, const char *aCommandObserved);
+- nsresult IsCommandSupported(const char *aCommandName, nsIDOMWindow *aTargetWindow, bool *_retval);
+- nsresult IsCommandEnabled(const char *aCommandName, nsIDOMWindow *aTargetWindow, bool *_retval);
+- nsresult GetCommandState(const char *aCommandName, nsIDOMWindow *aTargetWindow,
++ nsresult IsCommandSupported(const char *aCommandName, mozIDOMWindowProxy *aTargetWindow, bool *_retval);
++ nsresult IsCommandEnabled(const char *aCommandName, mozIDOMWindowProxy *aTargetWindow, bool *_retval);
++ nsresult GetCommandState(const char *aCommandName, mozIDOMWindowProxy *aTargetWindow,
+ nsICommandParams *aCommandParams);
+ nsresult DoCommand(const char *aCommandName, nsICommandParams *aCommandParams,
+- nsIDOMWindow *aTargetWindow);
++ mozIDOMWindowProxy *aTargetWindow);
+ }
+
+ [
+@@ -3390,7 +3411,7 @@ interface nsIContent : nsISupports
+
+ [
+ object,
+- uuid(5f51e18c-9e0e-4dc0-9f08-7a326552ea11),
++ uuid(ce1f7627-7109-4977-ba77-490ffde07aaa),
+ local
+ ]
+ interface nsIDocument : nsISupports
+@@ -3602,7 +3623,7 @@ interface nsIClipboardCommands : nsISupports
+
+ [
+ object,
+- uuid(edb99640-8378-4106-8673-e701a086eb1c),
++ uuid(9b7c586f-9214-480c-a2c4-49b526fff1a6),
+ local
+ ]
+ interface nsIDocShellTreeItem : nsISupports
+@@ -3628,12 +3649,12 @@ interface nsIDocShellTreeItem : nsISupports
+ nsresult FindChildWithName(const PRUnichar *aName, bool aRecurse, bool aSameType, nsIDocShellTreeItem *aRequestor,
+ nsIDocShellTreeItem *aOriginalRequestor, nsIDocShellTreeItem **_retval);
+ nsIDocument /* thiscall */ *GetDocument();
+- void /* thiscall nsPIDOMWindow */ *GetWindow();
++ void /* thiscall nsPIDOMWindowOuter */ *GetWindow();
+ }
+
+ [
+ object,
+- uuid(702e0a92-7d63-490e-b5ee-d247e6bd4588),
++ uuid(2da17016-7851-4a45-a7a8-00b360e01595),
+ local
+ ]
+ interface nsIContentViewer : nsISupports
+@@ -3643,11 +3664,10 @@ interface nsIContentViewer : nsISupports
+ nsresult SetContainer(nsIDocShell *aContainer);
+ void /* thiscall */ LoadStart(nsIDocument *aDoc);
+ nsresult LoadComplete(nsresult aStatus);
+- nsresult PermitUnload(bool aCallerClosesWindow, bool *_retval);
++ nsresult PermitUnload(bool *_retval);
+ nsresult GetInPermitUnload(bool *aInPermitUnload);
+- nsresult /* thiscall */ PermitUnloadInternal(bool aCallerClosesWindow, bool *aShouldPrompt, bool *_retval);
++ nsresult /* thiscall */ PermitUnloadInternal(bool *aShouldPrompt, bool *_retval);
+ nsresult GetBeforeUnloadFiring(bool *aBeforeUnloadFiring);
+- nsresult ResetCloseWindow();
+ nsresult PageHide(bool isUnload);
+ nsresult Close(nsISHEntry *historyEntry);
+ nsresult Destroy();
+@@ -3694,7 +3714,6 @@ interface nsIContentViewer : nsISupports
+ nsresult GetMinFontSize(int32_t *aMinFontSize);
+ nsresult SetMinFontSize(int32_t aMinFontSize);
+ nsresult AppendSubtree(void /*nsTArray >*/ *array);
+- nsresult ChangeMaxLineBoxWidth(int32_t maxLineBoxWidth);
+ nsresult PausePainting();
+ nsresult ResumePainting();
+ nsresult EmulateMedium(const nsAString *aMediaType);
+@@ -3748,7 +3767,7 @@ interface nsIDocShellLoadInfo : nsISupports
+
+ [
+ object,
+- uuid(44aca825-0080-49f1-8407-df62183e5ec1),
++ uuid(049234fe-da10-478b-bc5d-bc6f9a1ba63d),
+ local
+ ]
+ interface nsIDocShell : nsIDocShellTreeItem
+@@ -3773,6 +3792,8 @@ interface nsIDocShell : nsIDocShellTreeItem
+ nsresult GetContentViewer(nsIContentViewer **aContentViewer);
+ nsresult GetChromeEventHandler(nsIDOMEventTarget **aChromeEventHandler);
+ nsresult SetChromeEventHandler(nsIDOMEventTarget *aChromeEventHandler);
++ nsresult GetCustomUserAgent(nsAString *aCustomUserAgent);
++ nsresult SetCustomUserAgent(const nsAString *aCustomUserAgent);
+ nsresult GetAllowPlugins(bool *aAllowPlugins);
+ nsresult SetAllowPlugins(bool aAllowPlugins);
+ nsresult GetAllowJavascript(bool *aAllowJavascript);
+@@ -3826,7 +3847,7 @@ interface nsIDocShell : nsIDocShellTreeItem
+ nsresult GetRestoringDocument(bool *aRestoringDocument);
+ nsresult GetUseErrorPages(bool *aUseErrorPages);
+ nsresult SetUseErrorPages(bool aUseErrorPages);
+- nsresult DisplayLoadError(nsresult aError, nsIURI *aURI, const PRUnichar *aURL, nsIChannel *aFailedChannel, bool *_retval);
++ nsresult DisplayLoadError(nsresult aError, nsIURI *aURI, const char16_t *aURL, nsIChannel *aFailedChannel, bool *_retval);
+ nsresult GetFailedChannel(nsIChannel **aFailedChannel);
+ nsresult GetPreviousTransIndex(int32_t *aPreviousTransIndex);
+ nsresult GetLoadedTransIndex(int32_t *aLoadedTransIndex);
+@@ -3851,6 +3872,7 @@ interface nsIDocShell : nsIDocShellTreeItem
+ nsresult GetCanExecuteScripts(bool *aCanExecuteScripts);
+ nsresult GetIsActive(bool *aIsActive);
+ nsresult SetIsActive(bool aIsActive);
++ nsresult SetIsActiveAndForeground(bool aIsActive);
+ nsresult SetIsPrerendered(bool prerendered);
+ nsresult GetIsPrerendered(bool *aIsPrerendered);
+ nsresult GetHistoryID(uint64_t *aHistoryID);
+@@ -3875,13 +3897,14 @@ interface nsIDocShell : nsIDocShellTreeItem
+ nsresult AddWeakScrollObserver(void /*nsIScrollObserver*/ *obs);
+ nsresult RemoveWeakScrollObserver(void /*nsIScrollObserver*/ *obs);
+ nsresult NotifyScrollObservers();
+- nsresult GetIsBrowserElement(bool *aIsBrowserElement);
+ nsresult GetIsApp(bool *aIsApp);
+- nsresult GetIsBrowserOrApp(bool *aIsBrowserOrApp);
+- nsresult GetIsInBrowserElement(bool *aIsInBrowserElement);
+- nsresult GetIsInBrowserOrApp(bool *aIsInBrowserOrApp);
+- nsresult SetIsApp(uint32_t ownAppId);
+- nsresult SetIsBrowserInsideApp(uint32_t containingAppId);
++ nsresult GetFrameType(uint32_t *aFrameType);
++ nsresult SetFrameType(uint32_t aFrameType);
++ nsresult GetIsMozBrowserOrApp(bool *aIsMozBrowserOrApp);
++ nsresult GetIsIsolatedMozBrowserElement(bool *aIsIsolatedMozBrowserElement);
++ nsresult GetIsInIsolatedMozBrowserElement(bool *aIsInIsolatedMozBrowserElement);
++ nsresult SetIsInIsolatedMozBrowserElement(bool aIsInIsolatedMozBrowserElement);
++ nsresult GetIsInMozBrowserOrApp(bool *aIsInMozBrowserOrApp);
+ nsresult GetAppId(uint32_t *aAppId);
+ nsresult GetAppManifestURL(nsAString *aAppManifestURL);
+ nsresult GetSameTypeParentIgnoreBrowserAndAppBoundaries(nsIDocShell **_retval);
+@@ -3920,7 +3943,7 @@ interface nsIDocShell : nsIDocShellTreeItem
+ nsresult DoCommand(const char *command);
+ bool IsInvisible();
+ void SetInvisible(bool aIsInvisibleDochsell);
+- void /*nsIScriptGlobalObject*/ *GetScriptGlobalObject();
++ void /* nsIScriptGlobalObject thiscall */ *GetScriptGlobalObject();
+ nsresult GetDeviceSizeIsPageSize(bool *aDeviceSizeIsPageSize);
+ nsresult SetDeviceSizeIsPageSize(bool aDeviceSizeIsPageSize);
+ void /* thiscall */ SetOpener(void /*nsITabParent*/ *aOpener);
+@@ -3933,6 +3956,10 @@ interface nsIDocShell : nsIDocShellTreeItem
+ nsresult SetPaymentRequestId(const nsAString *aPaymentRequestId);
+ nsresult GetWindowDraggingAllowed(bool *aWindowDraggingAllowed);
+ nsresult SetWindowDraggingAllowed(bool aWindowDraggingAllowed);
++ nsresult GetCurrentScrollRestorationIsManual(bool *aCurrentScrollRestorationIsManual);
++ nsresult SetCurrentScrollRestorationIsManual(bool aCurrentScrollRestorationIsManual);
++ nsresult GetOriginAttributes(JSContext* cx, void* /* JS::MutableHandleValue */ _retval);
++ nsresult SetOriginAttributes(int /* JS::HandleValue */ aAttrs, JSContext *cx);
+ }
+
+ [
+@@ -4010,7 +4037,7 @@ interface nsIParser : nsISupports
+
+ [
+ object,
+- uuid(900bc4bc-8b6c-4cba-82fa-568a80fffd3e),
++ uuid(71041fa3-6dd7-4cde-bb76-aecc69e17578),
+ local
+ ]
+ interface nsIDocumentObserver : nsIMutationObserver
+@@ -4018,6 +4045,10 @@ interface nsIDocumentObserver : nsIMutationObserver
+ typedef uint32_t nsUpdateType;
+
+ typedef struct {
++ void *dummy;
++ } mozilla_StyleSheetHandle;
++
++ typedef struct {
+ uint64_t mStates;
+ } EventStates;
+
+@@ -4027,14 +4058,12 @@ interface nsIDocumentObserver : nsIMutationObserver
+ void EndLoad(nsIDocument *aDocument);
+ void ContentStatesChanged(nsIDocument *aDocument, nsIContent *aContent, EventStates aStateMask);
+ void DocumentStatesChanged(nsIDocument *aDocument, EventStates aStateMask);
+- void StyleSheetAdded(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, bool aDocumentSheet);
+- void StyleSheetRemoved(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, bool aDocumentSheet);
+- void StyleSheetApplicableStateChanged(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet,
+- bool aApplicable);
+- void StyleRuleChanged(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, nsIStyleRule *aOldStyleRule,
+- nsIStyleRule *aNewStyleRule);
+- void StyleRuleAdded(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, nsIStyleRule *aStyleRule);
+- void StyleRuleRemoved(nsIDocument *aDocument, nsIStyleSheet *aStyleSheet, nsIStyleRule *aStyleRule);
++ void StyleSheetAdded(mozilla_StyleSheetHandle aStyleSheet, bool aDocumentSheet);
++ void StyleSheetRemoved(mozilla_StyleSheetHandle aStyleSheet, bool aDocumentSheet);
++ void StyleSheetApplicableStateChanged(mozilla_StyleSheetHandle aStyleSheet);
++ void StyleRuleChanged(mozilla_StyleSheetHandle aStyleSheet);
++ void StyleRuleAdded(mozilla_StyleSheetHandle aStyleSheet);
++ void StyleRuleRemoved(mozilla_StyleSheetHandle aStyleSheet);
+ void BindToDocument(nsIDocument *aDocument, nsIContent *aContent);
+ void AttemptToExecuteScript(nsIContent *aContent, nsIParser *aParser, bool *aBlock);
+ }
+@@ -4057,13 +4086,13 @@ interface nsIContentUtils : nsISupports
+
+ [
+ object,
+- uuid(5fe83b24-38b9-4901-a4a1-d1bd57d3fe18),
++ uuid(15c05894-408e-4798-b527-a8c32d9c5f8c),
+ local
+ ]
+ interface nsIAudioChannelAgentCallback : nsISupports
+ {
+ nsresult WindowVolumeChanged(float aVolume, bool aMuted);
+- nsresult WindowAudioCaptureChanged();
++ nsresult WindowAudioCaptureChanged(bool aCapture);
+ }
+
+ [
+diff --git a/dlls/mshtml/nsio.c b/dlls/mshtml/nsio.c
+index dac9798..711cca0 100644
+--- a/dlls/mshtml/nsio.c
++++ b/dlls/mshtml/nsio.c
+@@ -955,7 +955,7 @@ static HTMLOuterWindow *get_window_from_load_group(nsChannel *This)
+ static HTMLOuterWindow *get_channel_window(nsChannel *This)
+ {
+ nsIWebProgress *web_progress;
+- nsIDOMWindow *nswindow;
++ mozIDOMWindowProxy *mozwindow;
+ HTMLOuterWindow *window;
+ nsresult nsres;
+
+@@ -985,20 +985,20 @@ static HTMLOuterWindow *get_channel_window(nsChannel *This)
+ return NULL;
+ }
+
+- nsres = nsIWebProgress_GetDOMWindow(web_progress, &nswindow);
++ nsres = nsIWebProgress_GetDOMWindow(web_progress, &mozwindow);
+ nsIWebProgress_Release(web_progress);
+- if(NS_FAILED(nsres) || !nswindow) {
++ if(NS_FAILED(nsres) || !mozwindow) {
+ ERR("GetDOMWindow failed: %08x\n", nsres);
+ return NULL;
+ }
+
+- window = nswindow_to_window(nswindow);
+- nsIDOMWindow_Release(nswindow);
++ window = mozwindow_to_window(mozwindow);
++ mozIDOMWindowProxy_Release(mozwindow);
+
+ if(window)
+ IHTMLWindow2_AddRef(&window->base.IHTMLWindow2_iface);
+ else
+- FIXME("NULL window for %p\n", nswindow);
++ FIXME("NULL window for %p\n", mozwindow);
+ return window;
+ }
+
+@@ -1310,6 +1310,34 @@ static nsresult NSAPI nsChannel_SetReferrerWithPolicy(nsIHttpChannel *iface, nsI
+ return NS_ERROR_NOT_IMPLEMENTED;
+ }
+
++static nsresult NSAPI nsHttpChannel_GetProtocolVersion(nsIHttpChannel *iface, nsACString *aProtocolVersion)
++{
++ nsChannel *This = impl_from_nsIHttpChannel(iface);
++ FIXME("(%p)->(%p)\n", This, aProtocolVersion);
++ return NS_ERROR_NOT_IMPLEMENTED;
++}
++
++static nsresult NSAPI nsHttpChannel_GetTransferSize(nsIHttpChannel *iface, UINT64 *aTransferSize)
++{
++ nsChannel *This = impl_from_nsIHttpChannel(iface);
++ FIXME("(%p)->(%p)\n", This, aTransferSize);
++ return NS_ERROR_NOT_IMPLEMENTED;
++}
++
++static nsresult NSAPI nsHttpChannel_GetDecodedBodySize(nsIHttpChannel *iface, UINT64 *aDecodedBodySize)
++{
++ nsChannel *This = impl_from_nsIHttpChannel(iface);
++ FIXME("(%p)->(%p)\n", This, aDecodedBodySize);
++ return NS_ERROR_NOT_IMPLEMENTED;
++}
++
++static nsresult NSAPI nsHttpChannel_GetEncodedBodySize(nsIHttpChannel *iface, UINT64 *aEncodedBodySize)
++{
++ nsChannel *This = impl_from_nsIHttpChannel(iface);
++ FIXME("(%p)->(%p)\n", This, aEncodedBodySize);
++ return NS_ERROR_NOT_IMPLEMENTED;
++}
++
+ static nsresult NSAPI nsChannel_GetRequestHeader(nsIHttpChannel *iface,
+ const nsACString *aHeader, nsACString *_retval)
+ {
+@@ -1525,11 +1553,11 @@ static nsresult NSAPI nsChannel_IsPrivateResponse(nsIHttpChannel *iface, cpp_boo
+ return NS_ERROR_NOT_IMPLEMENTED;
+ }
+
+-static nsresult NSAPI nsChannel_RedirectTo(nsIHttpChannel *iface, nsIURI *aNewURI)
++static nsresult NSAPI nsChannel_RedirectTo(nsIHttpChannel *iface, nsIURI *aTargetURI)
+ {
+ nsChannel *This = impl_from_nsIHttpChannel(iface);
+
+- FIXME("(%p)->(%p)\n", This, aNewURI);
++ FIXME("(%p)->(%p)\n", This, aTargetURI);
+
+ return NS_ERROR_NOT_IMPLEMENTED;
+ }
+@@ -1597,6 +1625,10 @@ static const nsIHttpChannelVtbl nsChannelVtbl = {
+ nsChannel_SetReferrer,
+ nsChannel_GetReferrerPolicy,
+ nsChannel_SetReferrerWithPolicy,
++ nsHttpChannel_GetProtocolVersion,
++ nsHttpChannel_GetTransferSize,
++ nsHttpChannel_GetDecodedBodySize,
++ nsHttpChannel_GetEncodedBodySize,
+ nsChannel_GetRequestHeader,
+ nsChannel_SetRequestHeader,
+ nsChannel_SetEmptyRequestHeader,
+@@ -2074,10 +2106,24 @@ static nsresult NSAPI nsHttpChannelInternal_GetProxyURI(nsIHttpChannelInternal *
+ }
+
+ static nsresult NSAPI nsHttpChannelInternal_SetCorsPreflightParameters(nsIHttpChannelInternal *iface,
+- const void /*nsTArray*/ *unsafeHeaders, cpp_bool withCredentials, nsIPrincipal *preflightPrincipal)
++ const void /*nsTArray*/ *unsafeHeaders)
+ {
+ nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
+- FIXME("(%p %p %x %p)\n", This, unsafeHeaders, withCredentials, preflightPrincipal);
++ FIXME("(%p)->(%p)\n", This, unsafeHeaders);
++ return NS_ERROR_NOT_IMPLEMENTED;
++}
++
++static nsresult NSAPI nsHttpChannelInternal_GetBlockAuthPrompt(nsIHttpChannelInternal *iface, cpp_bool *aBlockAuthPrompt)
++{
++ nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
++ FIXME("(%p)->(%p)\n", This, aBlockAuthPrompt);
++ return NS_ERROR_NOT_IMPLEMENTED;
++}
++
++static nsresult NSAPI nsHttpChannelInternal_SetBlockAuthPrompt(nsIHttpChannelInternal *iface, cpp_bool aBlockAuthPrompt)
++{
++ nsChannel *This = impl_from_nsIHttpChannelInternal(iface);
++ FIXME("(%p)->(%x)\n", This, aBlockAuthPrompt);
+ return NS_ERROR_NOT_IMPLEMENTED;
+ }
+
+@@ -2127,7 +2173,9 @@ static const nsIHttpChannelInternalVtbl nsHttpChannelInternalVtbl = {
+ nsHttpChannelInternal_GetNetworkInterfaceId,
+ nsHttpChannelInternal_SetNetworkInterfaceId,
+ nsHttpChannelInternal_GetProxyURI,
+- nsHttpChannelInternal_SetCorsPreflightParameters
++ nsHttpChannelInternal_SetCorsPreflightParameters,
++ nsHttpChannelInternal_GetBlockAuthPrompt,
++ nsHttpChannelInternal_SetBlockAuthPrompt
+ };
+
+
+@@ -3315,13 +3363,21 @@ static nsresult NSAPI nsStandardURL_Init(nsIStandardURL *iface, UINT32 aUrlType,
+ return NS_ERROR_NOT_IMPLEMENTED;
+ }
+
++static nsresult NSAPI nsStandardURL_SetDefaultPort(nsIStandardURL *iface, LONG aNewDefaultPort)
++{
++ nsWineURI *This = impl_from_nsIStandardURL(iface);
++ FIXME("(%p)->(%d)\n", This, aNewDefaultPort);
++ return NS_ERROR_NOT_IMPLEMENTED;
++}
++
+ static const nsIStandardURLVtbl nsStandardURLVtbl = {
+ nsStandardURL_QueryInterface,
+ nsStandardURL_AddRef,
+ nsStandardURL_Release,
+ nsStandardURL_GetMutable,
+ nsStandardURL_SetMutable,
+- nsStandardURL_Init
++ nsStandardURL_Init,
++ nsStandardURL_SetDefaultPort
+ };
+
+ static nsresult create_nsuri(IUri *iuri, HTMLOuterWindow *window, NSContainer *container,
+diff --git a/dlls/mshtml/nsservice.c b/dlls/mshtml/nsservice.c
+index 6d34f3f..67aec2d 100644
+--- a/dlls/mshtml/nsservice.c
++++ b/dlls/mshtml/nsservice.c
+@@ -74,7 +74,7 @@ static nsrefcnt NSAPI nsPromptService_Release(nsIPromptService *iface)
+ return 1;
+ }
+
+-static nsresult NSAPI nsPromptService_Alert(nsIPromptService *iface, nsIDOMWindow *aParent,
++static nsresult NSAPI nsPromptService_Alert(nsIPromptService *iface, mozIDOMWindowProxy *aParent,
+ const PRUnichar *aDialogTitle, const PRUnichar *aText)
+ {
+ HTMLOuterWindow *window;
+@@ -82,9 +82,9 @@ static nsresult NSAPI nsPromptService_Alert(nsIPromptService *iface, nsIDOMWindo
+
+ TRACE("(%p %s %s)\n", aParent, debugstr_w(aDialogTitle), debugstr_w(aText));
+
+- window = nswindow_to_window(aParent);
++ window = mozwindow_to_window(aParent);
+ if(!window) {
+- WARN("Could not find HTMLWindow for nsIDOMWindow %p\n", aParent);
++ WARN("Could not find HTMLWindow for mozIDOMWindowProxy %p\n", aParent);
+ return NS_ERROR_UNEXPECTED;
+ }
+
+@@ -96,7 +96,7 @@ static nsresult NSAPI nsPromptService_Alert(nsIPromptService *iface, nsIDOMWindo
+ }
+
+ static nsresult NSAPI nsPromptService_AlertCheck(nsIPromptService *iface,
+- nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText, const PRUnichar *aCheckMsg, cpp_bool *aCheckState)
+ {
+ FIXME("(%p %s %s %s %p)\n", aParent, debugstr_w(aDialogTitle), debugstr_w(aText),
+@@ -105,7 +105,7 @@ static nsresult NSAPI nsPromptService_AlertCheck(nsIPromptService *iface,
+ }
+
+ static nsresult NSAPI nsPromptService_Confirm(nsIPromptService *iface,
+- nsIDOMWindow *aParent, const PRUnichar *aDialogTitle, const PRUnichar *aText,
++ mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle, const PRUnichar *aText,
+ cpp_bool *_retval)
+ {
+ FIXME("(%p %s %s %p)\n", aParent, debugstr_w(aDialogTitle), debugstr_w(aText), _retval);
+@@ -113,7 +113,7 @@ static nsresult NSAPI nsPromptService_Confirm(nsIPromptService *iface,
+ }
+
+ static nsresult NSAPI nsPromptService_ConfirmCheck(nsIPromptService *iface,
+- nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText, const PRUnichar *aCheckMsg, cpp_bool *aCheckState,
+ cpp_bool *_retval)
+ {
+@@ -123,7 +123,7 @@ static nsresult NSAPI nsPromptService_ConfirmCheck(nsIPromptService *iface,
+ }
+
+ static nsresult NSAPI nsPromptService_ConfirmEx(nsIPromptService *iface,
+- nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText, UINT32 aButtonFlags, const PRUnichar *aButton0Title,
+ const PRUnichar *aButton1Title, const PRUnichar *aButton2Title,
+ const PRUnichar *aCheckMsg, cpp_bool *aCheckState, LONG *_retval)
+@@ -153,7 +153,7 @@ static nsresult NSAPI nsPromptService_ConfirmEx(nsIPromptService *iface,
+ }
+
+ static nsresult NSAPI nsPromptService_Prompt(nsIPromptService *iface,
+- nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText, PRUnichar **aValue, const PRUnichar *aCheckMsg,
+ cpp_bool *aCheckState, cpp_bool *_retval)
+ {
+@@ -163,7 +163,7 @@ static nsresult NSAPI nsPromptService_Prompt(nsIPromptService *iface,
+ }
+
+ static nsresult NSAPI nsPromptService_PromptUsernameAndPassword(nsIPromptService *iface,
+- nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText, PRUnichar **aUsername, PRUnichar **aPassword,
+ const PRUnichar *aCheckMsg, cpp_bool *aCheckState, cpp_bool *_retval)
+ {
+@@ -174,7 +174,7 @@ static nsresult NSAPI nsPromptService_PromptUsernameAndPassword(nsIPromptService
+ }
+
+ static nsresult NSAPI nsPromptService_PromptPassword(nsIPromptService *iface,
+- nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText, PRUnichar **aPassword, const PRUnichar *aCheckMsg,
+ cpp_bool *aCheckState, cpp_bool *_retval)
+ {
+@@ -184,7 +184,7 @@ static nsresult NSAPI nsPromptService_PromptPassword(nsIPromptService *iface,
+ }
+
+ static nsresult NSAPI nsPromptService_Select(nsIPromptService *iface,
+- nsIDOMWindow *aParent, const PRUnichar *aDialogTitle,
++ mozIDOMWindowProxy *aParent, const PRUnichar *aDialogTitle,
+ const PRUnichar *aText, UINT32 aCount, const PRUnichar **aSelectList,
+ LONG *aOutSelection, cpp_bool *_retval)
+ {
+diff --git a/dlls/mshtml/olecmd.c b/dlls/mshtml/olecmd.c
+index fc2a6ac..93dab71 100644
+--- a/dlls/mshtml/olecmd.c
++++ b/dlls/mshtml/olecmd.c
+@@ -56,7 +56,7 @@ void do_ns_command(HTMLDocument *This, const char *cmd, nsICommandParams *nspara
+ return;
+ }
+
+- nsres = nsICommandManager_DoCommand(cmdmgr, cmd, nsparam, This->window->nswindow);
++ nsres = nsICommandManager_DoCommand(cmdmgr, cmd, nsparam, This->window->window_proxy);
+ if(NS_FAILED(nsres))
+ ERR("DoCommand(%s) failed: %08x\n", debugstr_a(cmd), nsres);
+
+--
+2.8.0
+
diff --git a/patches/mshtml-Wine_Gecko_2.47/definition b/patches/mshtml-Wine_Gecko_2.47/definition
new file mode 100644
index 00000000..bd6901db
--- /dev/null
+++ b/patches/mshtml-Wine_Gecko_2.47/definition
@@ -0,0 +1 @@
+Fixes: Update Wine Gecko to version 2.47-beta1
diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh
index df9ebe75..de730e56 100755
--- a/patches/patchinstall.sh
+++ b/patches/patchinstall.sh
@@ -187,6 +187,7 @@ patch_enable_all ()
enable_mpr_WNetGetUniversalNameW="$1"
enable_mscoree_CorValidateImage="$1"
enable_mshtml_HTMLLocation_put_hash="$1"
+ enable_mshtml_Wine_Gecko_2_47="$1"
enable_msidb_Implementation="$1"
enable_msvcr120__SetWinRTOutOfMemoryExceptionCallback="$1"
enable_msvcrt_Math_Precision="$1"
@@ -726,6 +727,9 @@ patch_enable ()
mshtml-HTMLLocation_put_hash)
enable_mshtml_HTMLLocation_put_hash="$2"
;;
+ mshtml-Wine_Gecko_2.47)
+ enable_mshtml_Wine_Gecko_2_47="$2"
+ ;;
msidb-Implementation)
enable_msidb_Implementation="$2"
;;
@@ -4337,6 +4341,21 @@ if test "$enable_mshtml_HTMLLocation_put_hash" -eq 1; then
) >> "$patchlist"
fi
+# Patchset mshtml-Wine_Gecko_2.47
+# |
+# | Modified files:
+# | * dlls/appwiz.cpl/addons.c, dlls/mshtml/editor.c, dlls/mshtml/htmlcurstyle.c, dlls/mshtml/htmldoc.c,
+# | dlls/mshtml/htmlframebase.c, dlls/mshtml/htmlwindow.c, dlls/mshtml/mshtml_private.h, dlls/mshtml/mutation.c,
+# | dlls/mshtml/npplugin.c, dlls/mshtml/nsembed.c, dlls/mshtml/nsiface.idl, dlls/mshtml/nsio.c, dlls/mshtml/nsservice.c,
+# | dlls/mshtml/olecmd.c
+# |
+if test "$enable_mshtml_Wine_Gecko_2_47" -eq 1; then
+ patch_apply mshtml-Wine_Gecko_2.47/0001-mshtml-Wine-Gecko-2.47-beta1-release.patch
+ (
+ echo '+ { "Jacek Caban", "mshtml: Wine Gecko 2.47-beta1 release.", 1 },';
+ ) >> "$patchlist"
+fi
+
# Patchset msidb-Implementation
# |
# | Modified files: