Bug 902718 - Stop using nsIScriptGlobalObjectOwner to grab the compilation global. r=bz

This commit is contained in:
Bobby Holley 2013-08-09 09:25:14 -07:00
Родитель b3571597aa
Коммит d3581b6746
5 изменённых файлов: 26 добавлений и 29 удалений

Просмотреть файл

@ -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);