mshtml: Moved global_props from HTMLOuterWindow to HTMLInnerWindow.
This commit is contained in:
parent
c13bb135ca
commit
2698fe0b3f
|
@ -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,
|
||||||
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)
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
|
|
||||||
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
|
||||||
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_
|
||||||
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,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
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
|
||||||
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 {
|
||||||
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 {
|
||||||
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
|
||||||
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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue