Commit 2698fe0b authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

mshtml: Moved global_props from HTMLOuterWindow to HTMLInnerWindow.

parent c13bb135
...@@ -231,7 +231,7 @@ static HRESULT HTMLFrameElement_get_dispid(HTMLDOMNode *iface, BSTR name, ...@@ -231,7 +231,7 @@ static HRESULT HTMLFrameElement_get_dispid(HTMLDOMNode *iface, BSTR name,
if(!This->framebase.content_window) if(!This->framebase.content_window)
return DISP_E_UNKNOWNNAME; return DISP_E_UNKNOWNNAME;
return search_window_props(This->framebase.content_window, name, grfdex, pid); return search_window_props(This->framebase.content_window->base.inner_window, name, grfdex, pid);
} }
static HRESULT HTMLFrameElement_invoke(HTMLDOMNode *iface, DISPID id, LCID lcid, static HRESULT HTMLFrameElement_invoke(HTMLDOMNode *iface, DISPID id, LCID lcid,
......
...@@ -202,7 +202,7 @@ static HRESULT HTMLIFrame_get_dispid(HTMLDOMNode *iface, BSTR name, ...@@ -202,7 +202,7 @@ static HRESULT HTMLIFrame_get_dispid(HTMLDOMNode *iface, BSTR name,
if(!This->framebase.content_window) if(!This->framebase.content_window)
return DISP_E_UNKNOWNNAME; return DISP_E_UNKNOWNNAME;
return search_window_props(This->framebase.content_window, name, grfdex, pid); return search_window_props(This->framebase.content_window->base.inner_window, name, grfdex, pid);
} }
static HRESULT HTMLIFrame_invoke(HTMLDOMNode *iface, DISPID id, LCID lcid, static HRESULT HTMLIFrame_invoke(HTMLDOMNode *iface, DISPID id, LCID lcid,
......
...@@ -180,8 +180,6 @@ static ULONG WINAPI HTMLWindow2_AddRef(IHTMLWindow2 *iface) ...@@ -180,8 +180,6 @@ static ULONG WINAPI HTMLWindow2_AddRef(IHTMLWindow2 *iface)
static void release_outer_window(HTMLOuterWindow *This) static void release_outer_window(HTMLOuterWindow *This)
{ {
unsigned i;
remove_target_tasks(This->task_magic); remove_target_tasks(This->task_magic);
set_window_bscallback(This, NULL); set_window_bscallback(This, NULL);
set_current_mon(This, NULL); set_current_mon(This, NULL);
...@@ -212,13 +210,9 @@ static void release_outer_window(HTMLOuterWindow *This) ...@@ -212,13 +210,9 @@ static void release_outer_window(HTMLOuterWindow *This)
if(This->screen) if(This->screen)
IHTMLScreen_Release(This->screen); IHTMLScreen_Release(This->screen);
for(i=0; i < This->global_prop_cnt; i++)
heap_free(This->global_props[i].name);
This->window_ref->window = NULL; This->window_ref->window = NULL;
windowref_release(This->window_ref); windowref_release(This->window_ref);
heap_free(This->global_props);
release_script_hosts(This); release_script_hosts(This);
if(This->nswindow) if(This->nswindow)
...@@ -230,8 +224,15 @@ static void release_outer_window(HTMLOuterWindow *This) ...@@ -230,8 +224,15 @@ static void release_outer_window(HTMLOuterWindow *This)
static void release_inner_window(HTMLInnerWindow *This) static void release_inner_window(HTMLInnerWindow *This)
{ {
unsigned i;
htmldoc_release(&This->doc->basedoc); htmldoc_release(&This->doc->basedoc);
release_dispex(&This->dispex); release_dispex(&This->dispex);
for(i=0; i < This->global_prop_cnt; i++)
heap_free(This->global_props[i].name);
heap_free(This->global_props);
heap_free(This); heap_free(This);
} }
...@@ -2186,7 +2187,7 @@ static HRESULT WINAPI WindowDispEx_Invoke(IDispatchEx *iface, DISPID dispIdMembe ...@@ -2186,7 +2187,7 @@ static HRESULT WINAPI WindowDispEx_Invoke(IDispatchEx *iface, DISPID dispIdMembe
pDispParams, pVarResult, pExcepInfo, puArgErr); pDispParams, pVarResult, pExcepInfo, puArgErr);
} }
static global_prop_t *alloc_global_prop(HTMLOuterWindow *This, global_prop_type_t type, BSTR name) static global_prop_t *alloc_global_prop(HTMLInnerWindow *This, global_prop_type_t type, BSTR name)
{ {
if(This->global_prop_cnt == This->global_prop_size) { if(This->global_prop_cnt == This->global_prop_size) {
global_prop_t *new_props; global_prop_t *new_props;
...@@ -2213,12 +2214,12 @@ static global_prop_t *alloc_global_prop(HTMLOuterWindow *This, global_prop_type_ ...@@ -2213,12 +2214,12 @@ static global_prop_t *alloc_global_prop(HTMLOuterWindow *This, global_prop_type_
return This->global_props + This->global_prop_cnt++; return This->global_props + This->global_prop_cnt++;
} }
static inline DWORD prop_to_dispid(HTMLOuterWindow *This, global_prop_t *prop) static inline DWORD prop_to_dispid(HTMLInnerWindow *This, global_prop_t *prop)
{ {
return MSHTML_DISPID_CUSTOM_MIN + (prop-This->global_props); return MSHTML_DISPID_CUSTOM_MIN + (prop-This->global_props);
} }
HRESULT search_window_props(HTMLOuterWindow *This, BSTR bstrName, DWORD grfdex, DISPID *pid) HRESULT search_window_props(HTMLInnerWindow *This, BSTR bstrName, DWORD grfdex, DISPID *pid)
{ {
DWORD i; DWORD i;
ScriptHost *script_host; ScriptHost *script_host;
...@@ -2232,7 +2233,7 @@ HRESULT search_window_props(HTMLOuterWindow *This, BSTR bstrName, DWORD grfdex, ...@@ -2232,7 +2233,7 @@ HRESULT search_window_props(HTMLOuterWindow *This, BSTR bstrName, DWORD grfdex,
} }
} }
if(find_global_prop(This, bstrName, grfdex, &script_host, &id)) { if(find_global_prop(This->base.outer_window, bstrName, grfdex, &script_host, &id)) {
global_prop_t *prop; global_prop_t *prop;
prop = alloc_global_prop(This, GLOBAL_SCRIPTVAR, bstrName); prop = alloc_global_prop(This, GLOBAL_SCRIPTVAR, bstrName);
...@@ -2252,7 +2253,7 @@ HRESULT search_window_props(HTMLOuterWindow *This, BSTR bstrName, DWORD grfdex, ...@@ -2252,7 +2253,7 @@ HRESULT search_window_props(HTMLOuterWindow *This, BSTR bstrName, DWORD grfdex,
static HRESULT WINAPI WindowDispEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid) static HRESULT WINAPI WindowDispEx_GetDispID(IDispatchEx *iface, BSTR bstrName, DWORD grfdex, DISPID *pid)
{ {
HTMLWindow *This = impl_from_IDispatchEx(iface); HTMLWindow *This = impl_from_IDispatchEx(iface);
HTMLOuterWindow *window = This->outer_window; HTMLInnerWindow *window = This->inner_window;
HRESULT hres; HRESULT hres;
TRACE("(%p)->(%s %x %p)\n", This, debugstr_w(bstrName), grfdex, pid); TRACE("(%p)->(%s %x %p)\n", This, debugstr_w(bstrName), grfdex, pid);
...@@ -2450,10 +2451,10 @@ static HRESULT HTMLWindow_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD ...@@ -2450,10 +2451,10 @@ static HRESULT HTMLWindow_invoke(DispatchEx *dispex, DISPID id, LCID lcid, WORD
HRESULT hres; HRESULT hres;
idx = id - MSHTML_DISPID_CUSTOM_MIN; idx = id - MSHTML_DISPID_CUSTOM_MIN;
if(idx >= This->base.outer_window->global_prop_cnt) if(idx >= This->global_prop_cnt)
return DISP_E_MEMBERNOTFOUND; return DISP_E_MEMBERNOTFOUND;
prop = This->base.outer_window->global_props+idx; prop = This->global_props+idx;
switch(prop->type) { switch(prop->type) {
case GLOBAL_SCRIPTVAR: { case GLOBAL_SCRIPTVAR: {
......
...@@ -344,10 +344,6 @@ struct HTMLOuterWindow { ...@@ -344,10 +344,6 @@ struct HTMLOuterWindow {
IHTMLScreen *screen; IHTMLScreen *screen;
IOmHistory *history; IOmHistory *history;
global_prop_t *global_props;
DWORD global_prop_cnt;
DWORD global_prop_size;
struct list children; struct list children;
struct list sibling_entry; struct list sibling_entry;
struct list entry; struct list entry;
...@@ -358,6 +354,10 @@ struct HTMLInnerWindow { ...@@ -358,6 +354,10 @@ struct HTMLInnerWindow {
DispatchEx dispex; DispatchEx dispex;
HTMLDocumentNode *doc; HTMLDocumentNode *doc;
global_prop_t *global_props;
DWORD global_prop_cnt;
DWORD global_prop_size;
}; };
typedef enum { typedef enum {
...@@ -850,7 +850,7 @@ HRESULT exec_script(HTMLOuterWindow*,const WCHAR*,const WCHAR*,VARIANT*) DECLSPE ...@@ -850,7 +850,7 @@ HRESULT exec_script(HTMLOuterWindow*,const WCHAR*,const WCHAR*,VARIANT*) DECLSPE
void set_script_mode(HTMLOuterWindow*,SCRIPTMODE) 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(HTMLOuterWindow*,BSTR,DWORD,ScriptHost**,DISPID*) DECLSPEC_HIDDEN;
IDispatch *get_script_disp(ScriptHost*) DECLSPEC_HIDDEN; IDispatch *get_script_disp(ScriptHost*) DECLSPEC_HIDDEN;
HRESULT search_window_props(HTMLOuterWindow*,BSTR,DWORD,DISPID*) DECLSPEC_HIDDEN; HRESULT search_window_props(HTMLInnerWindow*,BSTR,DWORD,DISPID*) DECLSPEC_HIDDEN;
HRESULT wrap_iface(IUnknown*,IUnknown*,IUnknown**) DECLSPEC_HIDDEN; HRESULT wrap_iface(IUnknown*,IUnknown*,IUnknown**) DECLSPEC_HIDDEN;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment