Jacek Caban : mshtml: Use correct principal to create in create_nsxhr.
Alexandre Julliard
julliard at winehq.org
Wed Aug 3 18:09:17 CDT 2016
Module: wine
Branch: master
Commit: 3d4dbd3c143fde871f5a433b24cd5c422f91ad61
URL: http://source.winehq.org/git/wine.git/?a=commit;h=3d4dbd3c143fde871f5a433b24cd5c422f91ad61
Author: Jacek Caban <jacek at codeweavers.com>
Date: Wed Aug 3 15:53:28 2016 +0200
mshtml: Use correct principal to create in create_nsxhr.
Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/mshtml/nsembed.c | 62 ++++++++++++++++++++++++-------------------------
dlls/mshtml/nsiface.idl | 46 ++++++++----------------------------
2 files changed, 41 insertions(+), 67 deletions(-)
diff --git a/dlls/mshtml/nsembed.c b/dlls/mshtml/nsembed.c
index 22f37af..958b619 100644
--- a/dlls/mshtml/nsembed.c
+++ b/dlls/mshtml/nsembed.c
@@ -49,7 +49,6 @@ WINE_DECLARE_DEBUG_CHANNEL(gecko);
#define NS_VARIANT_CONTRACTID "@mozilla.org/variant;1"
#define NS_CATEGORYMANAGER_CONTRACTID "@mozilla.org/categorymanager;1"
#define NS_XMLHTTPREQUEST_CONTRACTID "@mozilla.org/xmlextras/xmlhttprequest;1"
-#define NS_SCRIPTSECURITYMANAGER_CONTRACTID "@mozilla.org/scriptsecuritymanager;1"
#define PR_UINT32_MAX 0xffffffff
@@ -2159,34 +2158,33 @@ void NSContainer_Release(NSContainer *This)
nsIWebBrowserChrome_Release(&This->nsIWebBrowserChrome_iface);
}
+/*
+ * FIXME: nsIScriptObjectPrincipal uses thiscall calling convention, so we need this hack on i386.
+ * This will be removed after the next Gecko update, that will change calling convention on Gecko side.
+ */
+#ifdef __i386__
+extern void *call_thiscall_func;
+__ASM_GLOBAL_FUNC(call_thiscall_func,
+ "popl %eax\n\t"
+ "popl %edx\n\t"
+ "popl %ecx\n\t"
+ "pushl %eax\n\t"
+ "jmp *%edx\n\t")
+#define nsIScriptObjectPrincipal_GetPrincipal(this) ((void* (WINAPI*)(void*,void*))&call_thiscall_func)((this)->lpVtbl->GetPrincipal,this)
+#endif
+
nsIXMLHttpRequest *create_nsxhr(nsIDOMWindow *nswindow)
{
+ nsIScriptObjectPrincipal *sop;
mozIDOMWindow *inner_window;
- nsIScriptSecurityManager *secman;
- nsIPrincipal *nspri;
- nsIGlobalObject *nsglo;
- nsIXMLHttpRequest *nsxhr;
- nsresult nsres;
-
- nsres = nsIServiceManager_GetServiceByContractID(pServMgr,
- NS_SCRIPTSECURITYMANAGER_CONTRACTID,
- &IID_nsIScriptSecurityManager, (void**)&secman);
- if(NS_FAILED(nsres)) {
- ERR("Could not get sec manager service: %08x\n", nsres);
- return NULL;
- }
-
- nsres = nsIScriptSecurityManager_GetSystemPrincipal(secman, &nspri);
- nsIScriptSecurityManager_Release(secman);
- if(NS_FAILED(nsres)) {
- ERR("GetSystemPrincipal failed: %08x\n", nsres);
- return NULL;
- }
+ nsIPrincipal *nspri;
+ nsIGlobalObject *nsglo;
+ nsIXMLHttpRequest *nsxhr;
+ nsresult nsres;
nsres = nsIDOMWindow_GetInnerWindow(nswindow, &inner_window);
if(NS_FAILED(nsres)) {
ERR("Could not get inner window: %08x\n", nsres);
- nsISupports_Release(nspri);
return NULL;
}
@@ -2194,24 +2192,26 @@ nsIXMLHttpRequest *create_nsxhr(nsIDOMWindow *nswindow)
mozIDOMWindow_Release(inner_window);
assert(nsres == NS_OK);
+ nsres = nsIGlobalObject_QueryInterface(nsglo, &IID_nsIScriptObjectPrincipal, (void**)&sop);
+ assert(nsres == NS_OK);
+
+ nspri = nsIScriptObjectPrincipal_GetPrincipal(sop);
+ nsIScriptObjectPrincipal_Release(sop);
+
nsres = nsIComponentManager_CreateInstanceByContractID(pCompMgr,
NS_XMLHTTPREQUEST_CONTRACTID, NULL, &IID_nsIXMLHttpRequest,
(void**)&nsxhr);
- if(NS_FAILED(nsres)) {
- ERR("Could not get nsIXMLHttpRequest: %08x\n", nsres);
- nsISupports_Release(nspri);
- nsIGlobalObject_Release(nsglo);
- return NULL;
+ if(NS_SUCCEEDED(nsres)) {
+ nsres = nsIXMLHttpRequest_Init(nsxhr, nspri, NULL, nsglo, NULL, NULL);
+ if(NS_FAILED(nsres))
+ nsIXMLHttpRequest_Release(nsxhr);
}
-
- nsres = nsIXMLHttpRequest_Init(nsxhr, nspri, NULL, nsglo, NULL, NULL);
-
nsISupports_Release(nspri);
nsIGlobalObject_Release(nsglo);
if(NS_FAILED(nsres)) {
ERR("nsIXMLHttpRequest_Init failed: %08x\n", nsres);
- nsIXMLHttpRequest_Release(nsxhr);
return NULL;
}
+
return nsxhr;
}
diff --git a/dlls/mshtml/nsiface.idl b/dlls/mshtml/nsiface.idl
index e9c717d..83b91a7 100644
--- a/dlls/mshtml/nsiface.idl
+++ b/dlls/mshtml/nsiface.idl
@@ -4146,6 +4146,16 @@ interface nsIGlobalObject : nsISupports
[
object,
+ uuid(3eedba38-8d22-41e1-817a-0e43e165b664),
+ local
+]
+interface nsIScriptObjectPrincipal : nsISupports
+{
+ nsIPrincipal* /* thiscall */ GetPrincipal();
+}
+
+[
+ object,
uuid(6f54214c-7175-498d-9d2d-0429e38c2869),
local
]
@@ -4181,40 +4191,4 @@ interface nsIXMLHttpRequest : nsISupports
nsresult GetMozSystem(bool *aMozSystem);
}
-[
- object,
- uuid(b7ae2310-576e-11e5-a837-0800200c9a66),
- local
-]
-interface nsIScriptSecurityManager : nsISupports {
- nsresult CanCreateWrapper(JSContext *aJSContext, const nsIID *aIID, nsISupports *aObj, nsIClassInfo *aClassInfo);
- nsresult CanCreateInstance(JSContext *aJSContext, const nsCID *aCID);
- nsresult CanGetService(JSContext *aJSContext, const nsCID *aCID);
- nsresult CheckLoadURIFromScript(JSContext *cx, nsIURI *uri);
- nsresult CheckLoadURIWithPrincipal(nsIPrincipal *aPrincipal, nsIURI *uri, uint32_t flags);
- nsresult CheckLoadURIStrWithPrincipal(nsIPrincipal *aPrincipal, const nsACString *uri, uint32_t flags);
- bool ScriptAllowed(JSObject *aGlobal);
- nsresult GetSystemPrincipal(nsIPrincipal **_retval);
- nsresult GetSimpleCodebasePrincipal(nsIURI *aURI, nsIPrincipal **_retval);
- nsresult GetAppCodebasePrincipal(nsIURI *uri, uint32_t appId, bool inMozBrowser, nsIPrincipal **_retval);
- nsresult GetLoadContextCodebasePrincipal(nsIURI *uri, nsILoadContext *loadContext, nsIPrincipal **_retval);
- nsresult GetDocShellCodebasePrincipal(nsIURI *uri, nsIDocShell *docShell, nsIPrincipal **_retval);
- nsresult GetNoAppCodebasePrincipal(nsIURI *uri, nsIPrincipal **_retval);
- nsresult GetCodebasePrincipal(nsIURI *uri, nsIPrincipal **_retval);
- nsresult CreateCodebasePrincipal(nsIURI *uri, int /*JS::HandleValue*/ originAttributes, JSContext* cx, nsIPrincipal **_retval);
- nsresult CreateCodebasePrincipalFromOrigin(const nsACString *origin, nsIPrincipal **_retval);
- nsresult CreateNullPrincipal(int /*JS::HandleValue*/ originAttributes, JSContext *cx, nsIPrincipal **_retval);
- nsresult CreateExpandedPrincipal(nsIPrincipal **aPrincipalArray, uint32_t aLength, nsIPrincipal **_retval);
- nsresult CheckSameOriginURI(nsIURI *aSourceURI, nsIURI *aTargetURI, bool reportError);
- nsresult GetChannelResultPrincipal(nsIChannel *aChannel, nsIPrincipal **_retval);
- nsresult GetChannelURIPrincipal(nsIChannel *aChannel, nsIPrincipal **_retval);
- nsresult IsSystemPrincipal(nsIPrincipal *aPrincipal, bool *_retval);
- nsresult GetJarPrefix(uint32_t appId, bool inMozBrowser, nsACString *_retval);
- nsresult ActivateDomainPolicy(nsIDomainPolicy **_retval);
- nsresult GetDomainPolicyActive(bool *aDomainPolicyActive);
- nsresult ActivateDomainPolicyInternal(nsIDomainPolicy **_retval);
- void CloneDomainPolicy(int /*mozilla::dom::DomainPolicyClone*/ *aClone);
- nsresult PolicyAllowsScript(nsIURI *aDomain, bool *_retval);
-}
-
cpp_quote("DEFINE_GUID(IID_nsCycleCollectionISupports, 0xc61eac14,0x5f7a,0x4481,0x96,0x5e,0x7e,0xaa,0x6e,0xff,0xa8,0x5f);")
More information about the wine-cvs
mailing list