зеркало из https://github.com/mozilla/gecko-dev.git
Bug 902718 - Stop using nsIScriptGlobalObjectOwner to grab the compilation global. r=bz
This commit is contained in:
Родитель
b3571597aa
Коммит
d3581b6746
|
@ -696,6 +696,21 @@ nsXBLDocumentInfo::FlushSkinStylesheets()
|
|||
mBindingTable->Enumerate(FlushScopedSkinSheets);
|
||||
}
|
||||
|
||||
JSObject*
|
||||
nsXBLDocumentInfo::GetCompilationGlobal()
|
||||
{
|
||||
EnsureGlobalObject();
|
||||
return mGlobalObject->GetGlobalJSObject();
|
||||
}
|
||||
|
||||
void
|
||||
nsXBLDocumentInfo::EnsureGlobalObject()
|
||||
{
|
||||
if (!mGlobalObject) {
|
||||
mGlobalObject = new nsXBLDocGlobalObject(this);
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
//
|
||||
// nsIScriptGlobalObjectOwner methods
|
||||
|
@ -704,14 +719,7 @@ nsXBLDocumentInfo::FlushSkinStylesheets()
|
|||
nsIScriptGlobalObject*
|
||||
nsXBLDocumentInfo::GetScriptGlobalObject()
|
||||
{
|
||||
if (!mGlobalObject) {
|
||||
nsXBLDocGlobalObject *global = new nsXBLDocGlobalObject(this);
|
||||
if (!global)
|
||||
return nullptr;
|
||||
|
||||
mGlobalObject = global;
|
||||
}
|
||||
|
||||
EnsureGlobalObject();
|
||||
return mGlobalObject;
|
||||
}
|
||||
|
||||
|
|
|
@ -48,6 +48,8 @@ public:
|
|||
|
||||
bool IsChrome() { return mIsChrome; }
|
||||
|
||||
JSObject* GetCompilationGlobal();
|
||||
|
||||
// nsIScriptGlobalObjectOwner methods
|
||||
virtual nsIScriptGlobalObject* GetScriptGlobalObject() MOZ_OVERRIDE;
|
||||
|
||||
|
@ -59,6 +61,7 @@ public:
|
|||
nsIScriptGlobalObjectOwner)
|
||||
|
||||
private:
|
||||
void EnsureGlobalObject();
|
||||
nsCOMPtr<nsIDocument> mDocument;
|
||||
bool mScriptAccess;
|
||||
bool mIsChrome;
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
#include "nsContentUtils.h"
|
||||
#include "nsCxPusher.h"
|
||||
#include "nsIScriptGlobalObject.h"
|
||||
#include "nsIScriptGlobalObjectOwner.h"
|
||||
#include "nsIScriptContext.h"
|
||||
#include "nsIXPConnect.h"
|
||||
#include "nsIServiceManager.h"
|
||||
|
@ -183,13 +182,8 @@ nsXBLProtoImpl::CompilePrototypeMembers(nsXBLPrototypeBinding* aBinding)
|
|||
// We want to pre-compile our implementation's members against a "prototype context". Then when we actually
|
||||
// bind the prototype to a real xbl instance, we'll clone the pre-compiled JS into the real instance's
|
||||
// context.
|
||||
nsCOMPtr<nsIScriptGlobalObjectOwner> globalOwner(
|
||||
do_QueryObject(aBinding->XBLDocumentInfo()));
|
||||
|
||||
AutoSafeJSContext cx;
|
||||
nsIScriptGlobalObject* globalObject = globalOwner->GetScriptGlobalObject();
|
||||
NS_ENSURE_TRUE(globalObject, NS_ERROR_UNEXPECTED);
|
||||
JS::Rooted<JSObject*> compilationGlobal(cx, globalObject->GetGlobalJSObject());
|
||||
JS::Rooted<JSObject*> compilationGlobal(cx, aBinding->XBLDocumentInfo()->GetCompilationGlobal());
|
||||
NS_ENSURE_TRUE(compilationGlobal, NS_ERROR_UNEXPECTED);
|
||||
JSAutoCompartment ac(cx, compilationGlobal);
|
||||
|
||||
|
@ -318,13 +312,12 @@ nsXBLProtoImpl::DestroyMembers()
|
|||
|
||||
nsresult
|
||||
nsXBLProtoImpl::Read(nsIObjectInputStream* aStream,
|
||||
nsXBLPrototypeBinding* aBinding,
|
||||
nsIScriptGlobalObject* aGlobal)
|
||||
nsXBLPrototypeBinding* aBinding)
|
||||
{
|
||||
AssertInCompilationScope();
|
||||
AutoJSContext cx;
|
||||
// Set up a class object first so that deserialization is possible
|
||||
JS::Rooted<JSObject*> global(cx, aGlobal->GetGlobalJSObject());
|
||||
JS::Rooted<JSObject*> global(cx, JS::CurrentGlobalOrNull(cx));
|
||||
|
||||
JS::Rooted<JSObject*> classObject(cx);
|
||||
bool classObjectIsNew = false;
|
||||
|
|
|
@ -78,8 +78,7 @@ public:
|
|||
}
|
||||
|
||||
nsresult Read(nsIObjectInputStream* aStream,
|
||||
nsXBLPrototypeBinding* aBinding,
|
||||
nsIScriptGlobalObject* aGlobal);
|
||||
nsXBLPrototypeBinding* aBinding);
|
||||
nsresult Write(nsIObjectOutputStream* aStream,
|
||||
nsXBLPrototypeBinding* aBinding);
|
||||
|
||||
|
|
|
@ -946,10 +946,7 @@ nsXBLPrototypeBinding::Read(nsIObjectInputStream* aStream,
|
|||
}
|
||||
|
||||
AutoSafeJSContext cx;
|
||||
nsCOMPtr<nsIScriptGlobalObjectOwner> globalOwner(do_QueryObject(aDocInfo));
|
||||
nsIScriptGlobalObject* globalObject = globalOwner->GetScriptGlobalObject();
|
||||
NS_ENSURE_TRUE(globalObject, NS_ERROR_UNEXPECTED);
|
||||
JS::Rooted<JSObject*> compilationGlobal(cx, globalObject->GetGlobalJSObject());
|
||||
JS::Rooted<JSObject*> compilationGlobal(cx, aDocInfo->GetCompilationGlobal());
|
||||
NS_ENSURE_TRUE(compilationGlobal, NS_ERROR_UNEXPECTED);
|
||||
JSAutoCompartment ac(cx, compilationGlobal);
|
||||
|
||||
|
@ -976,7 +973,7 @@ nsXBLPrototypeBinding::Read(nsIObjectInputStream* aStream,
|
|||
// retrieve the mapped bindings from within here. However, if an error
|
||||
// occurs, the mapping should be removed again so that we don't keep an
|
||||
// invalid binding around.
|
||||
rv = mImplementation->Read(aStream, this, globalObject);
|
||||
rv = mImplementation->Read(aStream, this);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
|
@ -1055,10 +1052,7 @@ nsXBLPrototypeBinding::Write(nsIObjectOutputStream* aStream)
|
|||
// computed on demand.
|
||||
|
||||
AutoSafeJSContext cx;
|
||||
nsCOMPtr<nsIScriptGlobalObjectOwner> globalOwner(do_QueryObject(mXBLDocInfoWeak));
|
||||
nsIScriptGlobalObject* globalObject = globalOwner->GetScriptGlobalObject();
|
||||
NS_ENSURE_TRUE(globalObject, NS_ERROR_UNEXPECTED);
|
||||
JS::Rooted<JSObject*> compilationGlobal(cx, globalObject->GetGlobalJSObject());
|
||||
JS::Rooted<JSObject*> compilationGlobal(cx, mXBLDocInfoWeak->GetCompilationGlobal());
|
||||
NS_ENSURE_TRUE(compilationGlobal, NS_ERROR_UNEXPECTED);
|
||||
JSAutoCompartment ac(cx, compilationGlobal);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче