Jacek Caban : mshtml: Moved global_props from HTMLOuterWindow to HTMLInnerWindow.

Alexandre Julliard julliard at winehq.org
Mon Jun 25 13:24:13 CDT 2012


Module: wine
Branch: master
Commit: 2698fe0b3fce9dcc18455e753cb44d285bfb6cc9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=2698fe0b3fce9dcc18455e753cb44d285bfb6cc9

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Jun 25 14:05:48 2012 +0200

mshtml: Moved global_props from HTMLOuterWindow to HTMLInnerWindow.

---

 dlls/mshtml/htmlframe.c      |    2 +-
 dlls/mshtml/htmliframe.c     |    2 +-
 dlls/mshtml/htmlwindow.c     |   27 ++++++++++++++-------------
 dlls/mshtml/mshtml_private.h |   10 +++++-----
 4 files changed, 21 insertions(+), 20 deletions(-)

diff --git a/dlls/mshtml/htmlframe.c b/dlls/mshtml/htmlframe.c
index 13f6bd4..749df4b 100644
--- a/dlls/mshtml/htmlframe.c
+++ b/dlls/mshtml/htmlframe.c
@@ -231,7 +231,7 @@ static HRESULT HTMLFrameElement_get_dispid(HTMLDOMNode *iface, BSTR name,
     if(!This->framebase.content_window)
         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,
diff --git a/dlls/mshtml/htmliframe.c b/dlls/mshtml/htmliframe.c
index 03ebb47..3cae237 100644
--- a/dlls/mshtml/htmliframe.c
+++ b/dlls/mshtml/htmliframe.c
@@ -202,7 +202,7 @@ static HRESULT HTMLIFrame_get_dispid(HTMLDOMNode *iface, BSTR name,
     if(!This->framebase.content_window)
         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,
diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c
index 4a696b7..94731ec 100644
--- a/dlls/mshtml/htmlwindow.c
+++ b/dlls/mshtml/htmlwindow.c
@@ -180,8 +180,6 @@ static ULONG WINAPI HTMLWindow2_AddRef(IHTMLWindow2 *iface)
 
 static void release_outer_window(HTMLOuterWindow *This)
 {
-    unsigned i;
-
     remove_target_tasks(This->task_magic);
     set_window_bscallback(This, NULL);
     set_current_mon(This, NULL);
@@ -212,13 +210,9 @@ static void release_outer_window(HTMLOuterWindow *This)
     if(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;
     windowref_release(This->window_ref);
 
-    heap_free(This->global_props);
     release_script_hosts(This);
 
     if(This->nswindow)
@@ -230,8 +224,15 @@ static void release_outer_window(HTMLOuterWindow *This)
 
 static void release_inner_window(HTMLInnerWindow *This)
 {
+    unsigned i;
+
     htmldoc_release(&This->doc->basedoc);
     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);
 }
 
@@ -2186,7 +2187,7 @@ static HRESULT WINAPI WindowDispEx_Invoke(IDispatchEx *iface, DISPID dispIdMembe
             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) {
         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++;
 }
 
-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);
 }
 
-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;
     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;
 
         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)
 {
     HTMLWindow *This = impl_from_IDispatchEx(iface);
-    HTMLOuterWindow *window = This->outer_window;
+    HTMLInnerWindow *window = This->inner_window;
     HRESULT hres;
 
     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;
 
     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;
 
-    prop = This->base.outer_window->global_props+idx;
+    prop = This->global_props+idx;
 
     switch(prop->type) {
     case GLOBAL_SCRIPTVAR: {
diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h
index 010542e..004a4b4 100644
--- a/dlls/mshtml/mshtml_private.h
+++ b/dlls/mshtml/mshtml_private.h
@@ -344,10 +344,6 @@ struct HTMLOuterWindow {
     IHTMLScreen *screen;
     IOmHistory *history;
 
-    global_prop_t *global_props;
-    DWORD global_prop_cnt;
-    DWORD global_prop_size;
-
     struct list children;
     struct list sibling_entry;
     struct list entry;
@@ -358,6 +354,10 @@ struct HTMLInnerWindow {
     DispatchEx dispex;
 
     HTMLDocumentNode *doc;
+
+    global_prop_t *global_props;
+    DWORD global_prop_cnt;
+    DWORD global_prop_size;
 };
 
 typedef enum {
@@ -850,7 +850,7 @@ HRESULT exec_script(HTMLOuterWindow*,const WCHAR*,const WCHAR*,VARIANT*) DECLSPE
 void set_script_mode(HTMLOuterWindow*,SCRIPTMODE) DECLSPEC_HIDDEN;
 BOOL find_global_prop(HTMLOuterWindow*,BSTR,DWORD,ScriptHost**,DISPID*) 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;
 




More information about the wine-cvs mailing list