mshtml: Moved script_hosts from HTMLOuterWindow to HTMLInnerWindow.
This commit is contained in:
parent
c77b8bfdd9
commit
bb02767f15
|
@ -1386,7 +1386,7 @@ void check_event_attr(HTMLDocumentNode *doc, nsIDOMElement *nselem)
|
|||
|
||||
TRACE("%p.%s = %s\n", nselem, debugstr_w(event_info[i].attr_name), debugstr_w(attr_value));
|
||||
|
||||
disp = script_parse_event(doc->basedoc.window, attr_value);
|
||||
disp = script_parse_event(doc->basedoc.window->base.inner_window, attr_value);
|
||||
if(disp) {
|
||||
hres = get_node(doc, (nsIDOMNode*)nselem, TRUE, &node);
|
||||
if(SUCCEEDED(hres)) {
|
||||
|
|
|
@ -208,8 +208,6 @@ static void release_outer_window(HTMLOuterWindow *This)
|
|||
This->window_ref->window = NULL;
|
||||
windowref_release(This->window_ref);
|
||||
|
||||
release_script_hosts(This);
|
||||
|
||||
if(This->nswindow)
|
||||
nsIDOMWindow_Release(This->nswindow);
|
||||
|
||||
|
@ -221,6 +219,8 @@ static void release_inner_window(HTMLInnerWindow *This)
|
|||
{
|
||||
unsigned i;
|
||||
|
||||
release_script_hosts(This);
|
||||
|
||||
htmldoc_release(&This->doc->basedoc);
|
||||
release_dispex(&This->dispex);
|
||||
|
||||
|
@ -1183,7 +1183,7 @@ static HRESULT WINAPI HTMLWindow2_execScript(IHTMLWindow2 *iface, BSTR scode, BS
|
|||
|
||||
TRACE("(%p)->(%s %s %p)\n", This, debugstr_w(scode), debugstr_w(language), pvarRet);
|
||||
|
||||
return exec_script(This->outer_window, scode, language, pvarRet);
|
||||
return exec_script(This->inner_window, scode, language, pvarRet);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI HTMLWindow2_toString(IHTMLWindow2 *iface, BSTR *String)
|
||||
|
@ -1468,7 +1468,7 @@ static HRESULT window_set_timer(HTMLInnerWindow *This, VARIANT *expr, LONG msec,
|
|||
break;
|
||||
|
||||
case VT_BSTR:
|
||||
disp = script_parse_event(This->base.outer_window, V_BSTR(expr));
|
||||
disp = script_parse_event(This->base.inner_window, V_BSTR(expr));
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -2238,7 +2238,7 @@ HRESULT search_window_props(HTMLInnerWindow *This, BSTR bstrName, DWORD grfdex,
|
|||
}
|
||||
}
|
||||
|
||||
if(find_global_prop(This->base.outer_window, bstrName, grfdex, &script_host, &id)) {
|
||||
if(find_global_prop(This->base.inner_window, bstrName, grfdex, &script_host, &id)) {
|
||||
global_prop_t *prop;
|
||||
|
||||
prop = alloc_global_prop(This, GLOBAL_SCRIPTVAR, bstrName);
|
||||
|
@ -2580,6 +2580,8 @@ static HRESULT create_inner_window(HTMLOuterWindow *outer_window, HTMLDocumentNo
|
|||
if(!window)
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
list_init(&window->script_hosts);
|
||||
|
||||
window->base.outer_window = outer_window;
|
||||
window->base.inner_window = window;
|
||||
|
||||
|
@ -2623,7 +2625,6 @@ HRESULT HTMLOuterWindow_Create(HTMLDocumentObj *doc_obj, nsIDOMWindow *nswindow,
|
|||
|
||||
window->scriptmode = parent ? parent->scriptmode : SCRIPTMODE_GECKO;
|
||||
window->readystate = READYSTATE_UNINITIALIZED;
|
||||
list_init(&window->script_hosts);
|
||||
|
||||
hres = update_window_doc(window);
|
||||
if(FAILED(hres)) {
|
||||
|
@ -2663,7 +2664,7 @@ static HRESULT window_set_docnode(HTMLOuterWindow *window, HTMLDocumentNode *doc
|
|||
window->base.inner_window->doc->basedoc.cp_container.forward_container = NULL;
|
||||
detach_events(window->base.inner_window->doc);
|
||||
abort_document_bindings(window->base.inner_window->doc);
|
||||
release_script_hosts(window);
|
||||
release_script_hosts(window->base.inner_window);
|
||||
}
|
||||
|
||||
if(doc_node) {
|
||||
|
|
|
@ -334,7 +334,6 @@ struct HTMLOuterWindow {
|
|||
IHTMLEventObj *event;
|
||||
|
||||
SCRIPTMODE scriptmode;
|
||||
struct list script_hosts;
|
||||
|
||||
IInternetSecurityManager *secmgr;
|
||||
|
||||
|
@ -354,6 +353,8 @@ struct HTMLInnerWindow {
|
|||
|
||||
HTMLDocumentNode *doc;
|
||||
|
||||
struct list script_hosts;
|
||||
|
||||
HTMLOptionElementFactory *option_factory;
|
||||
|
||||
global_prop_t *global_props;
|
||||
|
@ -843,13 +844,13 @@ void release_nodes(HTMLDocumentNode*) DECLSPEC_HIDDEN;
|
|||
|
||||
HTMLElement *unsafe_impl_from_IHTMLElement(IHTMLElement*) DECLSPEC_HIDDEN;
|
||||
|
||||
void release_script_hosts(HTMLOuterWindow*) DECLSPEC_HIDDEN;
|
||||
void connect_scripts(HTMLOuterWindow*) DECLSPEC_HIDDEN;
|
||||
void doc_insert_script(HTMLOuterWindow*,nsIDOMHTMLScriptElement*) DECLSPEC_HIDDEN;
|
||||
IDispatch *script_parse_event(HTMLOuterWindow*,LPCWSTR) DECLSPEC_HIDDEN;
|
||||
HRESULT exec_script(HTMLOuterWindow*,const WCHAR*,const WCHAR*,VARIANT*) DECLSPEC_HIDDEN;
|
||||
void release_script_hosts(HTMLInnerWindow*) DECLSPEC_HIDDEN;
|
||||
void connect_scripts(HTMLInnerWindow*) DECLSPEC_HIDDEN;
|
||||
void doc_insert_script(HTMLInnerWindow*,nsIDOMHTMLScriptElement*) DECLSPEC_HIDDEN;
|
||||
IDispatch *script_parse_event(HTMLInnerWindow*,LPCWSTR) DECLSPEC_HIDDEN;
|
||||
HRESULT exec_script(HTMLInnerWindow*,const WCHAR*,const WCHAR*,VARIANT*) DECLSPEC_HIDDEN;
|
||||
void set_script_mode(HTMLOuterWindow*,SCRIPTMODE) DECLSPEC_HIDDEN;
|
||||
BOOL find_global_prop(HTMLOuterWindow*,BSTR,DWORD,ScriptHost**,DISPID*) DECLSPEC_HIDDEN;
|
||||
BOOL find_global_prop(HTMLInnerWindow*,BSTR,DWORD,ScriptHost**,DISPID*) DECLSPEC_HIDDEN;
|
||||
IDispatch *get_script_disp(ScriptHost*) DECLSPEC_HIDDEN;
|
||||
HRESULT search_window_props(HTMLInnerWindow*,BSTR,DWORD,DISPID*) DECLSPEC_HIDDEN;
|
||||
|
||||
|
|
|
@ -316,7 +316,7 @@ static nsresult run_insert_script(HTMLDocumentNode *doc, nsISupports *script_ifa
|
|||
if(nsparser)
|
||||
nsIParser_BeginEvaluatingParserInsertedScript(nsparser);
|
||||
|
||||
doc_insert_script(doc->basedoc.window, nsscript);
|
||||
doc_insert_script(doc->basedoc.window->base.inner_window, nsscript);
|
||||
|
||||
if(nsparser) {
|
||||
nsIParser_EndEvaluatingParserInsertedScript(nsparser);
|
||||
|
|
|
@ -1807,7 +1807,7 @@ static void navigate_javascript_proc(task_t *_task)
|
|||
set_download_state(window->doc_obj, 1);
|
||||
|
||||
V_VT(&v) = VT_EMPTY;
|
||||
hres = exec_script(window, code, jscriptW, &v);
|
||||
hres = exec_script(window->base.inner_window, code, jscriptW, &v);
|
||||
SysFreeString(code);
|
||||
if(SUCCEEDED(hres) && V_VT(&v) != VT_EMPTY) {
|
||||
FIXME("javascirpt URL returned %s\n", debugstr_variant(&v));
|
||||
|
|
|
@ -241,7 +241,7 @@ static nsresult NSAPI handle_load(nsIDOMEventListener *iface, nsIDOMEvent *event
|
|||
if(doc->basedoc.doc_obj && doc->basedoc.doc_obj->basedoc.doc_node == doc)
|
||||
doc_obj = doc->basedoc.doc_obj;
|
||||
|
||||
connect_scripts(doc->basedoc.window);
|
||||
connect_scripts(doc->basedoc.window->base.inner_window);
|
||||
|
||||
if(doc_obj)
|
||||
handle_docobj_load(doc_obj);
|
||||
|
|
|
@ -66,7 +66,7 @@ struct ScriptHost {
|
|||
|
||||
SCRIPTSTATE script_state;
|
||||
|
||||
HTMLOuterWindow *window;
|
||||
HTMLInnerWindow *window;
|
||||
|
||||
GUID guid;
|
||||
struct list entry;
|
||||
|
@ -211,7 +211,7 @@ static void release_script_engine(ScriptHost *This)
|
|||
This->script_state = SCRIPTSTATE_UNINITIALIZED;
|
||||
}
|
||||
|
||||
void connect_scripts(HTMLOuterWindow *window)
|
||||
void connect_scripts(HTMLInnerWindow *window)
|
||||
{
|
||||
ScriptHost *iter;
|
||||
|
||||
|
@ -316,11 +316,11 @@ static HRESULT WINAPI ActiveScriptSite_GetItemInfo(IActiveScriptSite *iface, LPC
|
|||
if(strcmpW(pstrName, windowW))
|
||||
return DISP_E_MEMBERNOTFOUND;
|
||||
|
||||
if(!This->window)
|
||||
if(!This->window || !This->window->base.outer_window)
|
||||
return E_FAIL;
|
||||
|
||||
/* FIXME: Return proxy object */
|
||||
*ppiunkItem = (IUnknown*)&This->window->base.IHTMLWindow2_iface;
|
||||
*ppiunkItem = (IUnknown*)&This->window->base.outer_window->base.IHTMLWindow2_iface;
|
||||
IUnknown_AddRef(*ppiunkItem);
|
||||
|
||||
return S_OK;
|
||||
|
@ -591,7 +591,7 @@ static const IServiceProviderVtbl ASServiceProviderVtbl = {
|
|||
ASServiceProvider_QueryService
|
||||
};
|
||||
|
||||
static ScriptHost *create_script_host(HTMLOuterWindow *window, const GUID *guid)
|
||||
static ScriptHost *create_script_host(HTMLInnerWindow *window, const GUID *guid)
|
||||
{
|
||||
ScriptHost *ret;
|
||||
HRESULT hres;
|
||||
|
@ -796,7 +796,7 @@ static BOOL get_script_guid(nsIDOMHTMLScriptElement *nsscript, GUID *guid)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static ScriptHost *get_script_host(HTMLOuterWindow *window, const GUID *guid)
|
||||
static ScriptHost *get_script_host(HTMLInnerWindow *window, const GUID *guid)
|
||||
{
|
||||
ScriptHost *iter;
|
||||
|
||||
|
@ -808,7 +808,7 @@ static ScriptHost *get_script_host(HTMLOuterWindow *window, const GUID *guid)
|
|||
return create_script_host(window, guid);
|
||||
}
|
||||
|
||||
void doc_insert_script(HTMLOuterWindow *window, nsIDOMHTMLScriptElement *nsscript)
|
||||
void doc_insert_script(HTMLInnerWindow *window, nsIDOMHTMLScriptElement *nsscript)
|
||||
{
|
||||
ScriptHost *script_host;
|
||||
GUID guid;
|
||||
|
@ -818,7 +818,8 @@ void doc_insert_script(HTMLOuterWindow *window, nsIDOMHTMLScriptElement *nsscrip
|
|||
return;
|
||||
}
|
||||
|
||||
if(IsEqualGUID(&CLSID_JScript, &guid) && window->scriptmode != SCRIPTMODE_ACTIVESCRIPT) {
|
||||
if(IsEqualGUID(&CLSID_JScript, &guid)
|
||||
&& (!window->base.outer_window || window->base.outer_window->scriptmode != SCRIPTMODE_ACTIVESCRIPT)) {
|
||||
TRACE("Ignoring JScript\n");
|
||||
return;
|
||||
}
|
||||
|
@ -831,7 +832,7 @@ void doc_insert_script(HTMLOuterWindow *window, nsIDOMHTMLScriptElement *nsscrip
|
|||
parse_script_elem(script_host, nsscript);
|
||||
}
|
||||
|
||||
IDispatch *script_parse_event(HTMLOuterWindow *window, LPCWSTR text)
|
||||
IDispatch *script_parse_event(HTMLInnerWindow *window, LPCWSTR text)
|
||||
{
|
||||
ScriptHost *script_host;
|
||||
GUID guid = CLSID_JScript;
|
||||
|
@ -864,7 +865,8 @@ IDispatch *script_parse_event(HTMLOuterWindow *window, LPCWSTR text)
|
|||
ptr = text;
|
||||
}
|
||||
|
||||
if(IsEqualGUID(&CLSID_JScript, &guid) && window->scriptmode != SCRIPTMODE_ACTIVESCRIPT) {
|
||||
if(IsEqualGUID(&CLSID_JScript, &guid)
|
||||
&& (!window->base.outer_window || window->base.outer_window->scriptmode != SCRIPTMODE_ACTIVESCRIPT)) {
|
||||
TRACE("Ignoring JScript\n");
|
||||
return NULL;
|
||||
}
|
||||
|
@ -885,7 +887,7 @@ IDispatch *script_parse_event(HTMLOuterWindow *window, LPCWSTR text)
|
|||
return disp;
|
||||
}
|
||||
|
||||
HRESULT exec_script(HTMLOuterWindow *window, const WCHAR *code, const WCHAR *lang, VARIANT *ret)
|
||||
HRESULT exec_script(HTMLInnerWindow *window, const WCHAR *code, const WCHAR *lang, VARIANT *ret)
|
||||
{
|
||||
ScriptHost *script_host;
|
||||
EXCEPINFO ei;
|
||||
|
@ -936,7 +938,7 @@ IDispatch *get_script_disp(ScriptHost *script_host)
|
|||
return disp;
|
||||
}
|
||||
|
||||
BOOL find_global_prop(HTMLOuterWindow *window, BSTR name, DWORD flags, ScriptHost **ret_host, DISPID *ret_id)
|
||||
BOOL find_global_prop(HTMLInnerWindow *window, BSTR name, DWORD flags, ScriptHost **ret_host, DISPID *ret_id)
|
||||
{
|
||||
IDispatchEx *dispex;
|
||||
IDispatch *disp;
|
||||
|
@ -1015,7 +1017,7 @@ void set_script_mode(HTMLOuterWindow *window, SCRIPTMODE mode)
|
|||
ERR("JavaScript setup failed: %08x\n", nsres);
|
||||
}
|
||||
|
||||
void release_script_hosts(HTMLOuterWindow *window)
|
||||
void release_script_hosts(HTMLInnerWindow *window)
|
||||
{
|
||||
ScriptHost *iter;
|
||||
|
||||
|
|
Loading…
Reference in New Issue