Module: wine Branch: master Commit: 3d4dbd3c143fde871f5a433b24cd5c422f91ad61 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3d4dbd3c143fde871f5a433b24...
Author: Jacek Caban jacek@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@codeweavers.com Signed-off-by: Alexandre Julliard julliard@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);")