Jacek Caban : mshtml: Use get_elem_attr_value helper in npplugin.c.

Alexandre Julliard julliard at winehq.org
Wed Jun 11 13:36:22 CDT 2014


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue May 27 11:30:12 2014 +0200

mshtml: Use get_elem_attr_value helper in npplugin.c.

---

 dlls/mshtml/npplugin.c |   60 ++++++++++++++++++++++--------------------------
 1 file changed, 27 insertions(+), 33 deletions(-)

diff --git a/dlls/mshtml/npplugin.c b/dlls/mshtml/npplugin.c
index 0ce72ff..ca0d9fd 100644
--- a/dlls/mshtml/npplugin.c
+++ b/dlls/mshtml/npplugin.c
@@ -211,10 +211,11 @@ typedef struct _NPPluginFuncs {
     NPP_LostFocusPtr lostfocus;
 } NPPluginFuncs;
 
-static nsIDOMElement *get_dom_element(NPP instance)
+static nsIDOMHTMLElement *get_dom_element(NPP instance)
 {
     nsISupports *instance_unk = (nsISupports*)instance->ndata;
     nsIPluginInstance *plugin_instance;
+    nsIDOMHTMLElement *html_elem;
     nsIDOMElement *elem;
     nsresult nsres;
 
@@ -231,17 +232,24 @@ static nsIDOMElement *get_dom_element(NPP instance)
         return NULL;
     }
 
-    return elem;
+    nsres = nsIDOMElement_QueryInterface(elem, &IID_nsIDOMHTMLElement, (void**)&html_elem);
+    nsIDOMElement_Release(elem);
+    if(NS_FAILED(nsres)) {
+        ERR("Could not get nsIDOMHTMLElement iface: %08x\n", nsres);
+        return NULL;
+    }
+
+    return html_elem;
 }
 
-static HTMLInnerWindow *get_elem_window(nsIDOMElement *elem)
+static HTMLInnerWindow *get_elem_window(nsIDOMHTMLElement *elem)
 {
     nsIDOMWindow *nswindow;
     nsIDOMDocument *nsdoc;
     HTMLOuterWindow *window;
     nsresult nsres;
 
-    nsres = nsIDOMElement_GetOwnerDocument(elem, &nsdoc);
+    nsres = nsIDOMHTMLElement_GetOwnerDocument(elem, &nsdoc);
     if(NS_FAILED(nsres))
         return NULL;
 
@@ -287,29 +295,22 @@ static BOOL parse_classid(const PRUnichar *classid, CLSID *clsid)
     return SUCCEEDED(hres);
 }
 
-static BOOL get_elem_clsid(nsIDOMElement *elem, CLSID *clsid)
+static BOOL get_elem_clsid(nsIDOMHTMLElement *elem, CLSID *clsid)
 {
-    nsAString attr_str, val_str;
+    const PRUnichar *val;
+    nsAString val_str;
     nsresult nsres;
     BOOL ret = FALSE;
 
     static const PRUnichar classidW[] = {'c','l','a','s','s','i','d',0};
 
-    nsAString_InitDepend(&attr_str, classidW);
-    nsAString_Init(&val_str, NULL);
-    nsres = nsIDOMElement_GetAttribute(elem, &attr_str, &val_str);
-    nsAString_Finish(&attr_str);
+    nsres = get_elem_attr_value(elem, classidW, &val_str, &val);
     if(NS_SUCCEEDED(nsres)) {
-        const PRUnichar *val;
-
-        nsAString_GetData(&val_str, &val);
         if(*val)
             ret = parse_classid(val, clsid);
-    }else {
-        ERR("GetAttribute failed: %08x\n", nsres);
+        nsAString_Finish(&val_str);
     }
 
-    nsAString_Finish(&val_str);
     return ret;
 }
 
@@ -529,35 +530,28 @@ static void install_codebase(const WCHAR *url)
         WARN("FAILED: %08x\n", hres);
 }
 
-static void check_codebase(HTMLInnerWindow *window, nsIDOMElement *nselem)
+static void check_codebase(HTMLInnerWindow *window, nsIDOMHTMLElement *nselem)
 {
-    nsAString attr_str, val_str;
     BOOL is_on_list = FALSE;
     install_entry_t *iter;
+    const PRUnichar *val;
+    nsAString val_str;
     IUri *uri = NULL;
     nsresult nsres;
     HRESULT hres;
 
     static const PRUnichar codebaseW[] = {'c','o','d','e','b','a','s','e',0};
 
-    nsAString_InitDepend(&attr_str, codebaseW);
-    nsAString_Init(&val_str, NULL);
-    nsres = nsIDOMElement_GetAttribute(nselem, &attr_str, &val_str);
-    nsAString_Finish(&attr_str);
+    nsres = get_elem_attr_value(nselem, codebaseW, &val_str, &val);
     if(NS_SUCCEEDED(nsres)) {
-        const PRUnichar *val;
-
-        nsAString_GetData(&val_str, &val);
         if(*val) {
             hres = CoInternetCombineUrlEx(window->base.outer_window->uri, val, 0, &uri, 0);
             if(FAILED(hres))
                 uri = NULL;
         }
-    }else {
-        ERR("GetAttribute failed: %08x\n", nsres);
+        nsAString_Finish(&val_str);
     }
 
-    nsAString_Finish(&val_str);
     if(!uri)
         return;
 
@@ -599,7 +593,7 @@ static void check_codebase(HTMLInnerWindow *window, nsIDOMElement *nselem)
     IUri_Release(uri);
 }
 
-static IUnknown *create_activex_object(HTMLInnerWindow *window, nsIDOMElement *nselem, CLSID *clsid)
+static IUnknown *create_activex_object(HTMLInnerWindow *window, nsIDOMHTMLElement *nselem, CLSID *clsid)
 {
     IClassFactoryEx *cfex;
     IClassFactory *cf;
@@ -645,7 +639,7 @@ static IUnknown *create_activex_object(HTMLInnerWindow *window, nsIDOMElement *n
 static NPError CDECL NPP_New(NPMIMEType pluginType, NPP instance, UINT16 mode, INT16 argc, char **argn,
         char **argv, NPSavedData *saved)
 {
-    nsIDOMElement *nselem;
+    nsIDOMHTMLElement *nselem;
     HTMLInnerWindow *window;
     IUnknown *obj;
     CLSID clsid;
@@ -662,7 +656,7 @@ static NPError CDECL NPP_New(NPMIMEType pluginType, NPP instance, UINT16 mode, I
     window = get_elem_window(nselem);
     if(!window) {
         ERR("Could not get element's window object\n");
-        nsIDOMElement_Release(nselem);
+        nsIDOMHTMLElement_Release(nselem);
         return NPERR_GENERIC_ERROR;
     }
 
@@ -671,7 +665,7 @@ static NPError CDECL NPP_New(NPMIMEType pluginType, NPP instance, UINT16 mode, I
         PluginHost *host;
         HRESULT hres;
 
-        hres = create_plugin_host(window->doc, nselem, obj, &clsid, &host);
+        hres = create_plugin_host(window->doc, (nsIDOMElement*)nselem, obj, &clsid, &host);
         IUnknown_Release(obj);
         if(SUCCEEDED(hres))
             instance->pdata = host;
@@ -681,7 +675,7 @@ static NPError CDECL NPP_New(NPMIMEType pluginType, NPP instance, UINT16 mode, I
         err = NPERR_GENERIC_ERROR;
     }
 
-    nsIDOMElement_Release(nselem);
+    nsIDOMHTMLElement_Release(nselem);
     return err;
 }
 




More information about the wine-cvs mailing list