Bug 820170 - merge scope members on nsDocument. r=smaug

This commit is contained in:
Gabor Krizsanits 2013-04-04 11:24:40 +02:00
parent f3fbc8f1fa
commit 670b243606
3 changed files with 11 additions and 10 deletions

View File

@ -110,8 +110,8 @@ typedef CallbackObjectHolder<NodeFilter, nsIDOMNodeFilter> NodeFilterHolder;
} // namespace mozilla } // namespace mozilla
#define NS_IDOCUMENT_IID \ #define NS_IDOCUMENT_IID \
{ 0x699e0649, 0x55f2, 0x47f1, \ { 0x2adedf2, 0x8d85, 0x4a38, \
{ 0x93, 0x38, 0xcd, 0x67, 0xf3, 0x2b, 0x04, 0xe9 } } { 0xb6, 0x38, 0x91, 0xf4, 0xd2, 0xa4, 0x9b, 0x36 } }
// Flag for AddStyleSheet(). // Flag for AddStyleSheet().
#define NS_STYLESHEET_FROM_CATALOG (1 << 0) #define NS_STYLESHEET_FROM_CATALOG (1 << 0)
@ -2312,6 +2312,8 @@ protected:
// document was created entirely in memory // document was created entirely in memory
bool mHaveInputEncoding; bool mHaveInputEncoding;
bool mHasHadDefaultView;
// The document's script global object, the object from which the // The document's script global object, the object from which the
// document can get its script context and scope. This is the // document can get its script context and scope. This is the
// *inner* window object. // *inner* window object.

View File

@ -4089,8 +4089,8 @@ nsDocument::SetScriptGlobalObject(nsIScriptGlobalObject *aScriptGlobalObject)
mScriptGlobalObject = aScriptGlobalObject; mScriptGlobalObject = aScriptGlobalObject;
if (aScriptGlobalObject) { if (aScriptGlobalObject) {
mScriptObject = nullptr;
mHasHadScriptHandlingObject = true; mHasHadScriptHandlingObject = true;
mHasHadDefaultView = true;
// Go back to using the docshell for the layout history state // Go back to using the docshell for the layout history state
mLayoutHistoryState = nullptr; mLayoutHistoryState = nullptr;
mScopeObject = do_GetWeakReference(aScriptGlobalObject); mScopeObject = do_GetWeakReference(aScriptGlobalObject);
@ -4144,9 +4144,12 @@ nsDocument::GetScriptHandlingObjectInternal() const
{ {
NS_ASSERTION(!mScriptGlobalObject, NS_ASSERTION(!mScriptGlobalObject,
"Do not call this when mScriptGlobalObject is set!"); "Do not call this when mScriptGlobalObject is set!");
if (mHasHadDefaultView) {
return nullptr;
}
nsCOMPtr<nsIScriptGlobalObject> scriptHandlingObject = nsCOMPtr<nsIScriptGlobalObject> scriptHandlingObject =
do_QueryReferent(mScriptObject); do_QueryReferent(mScopeObject);
nsCOMPtr<nsPIDOMWindow> win = do_QueryInterface(scriptHandlingObject); nsCOMPtr<nsPIDOMWindow> win = do_QueryInterface(scriptHandlingObject);
if (win) { if (win) {
NS_ASSERTION(win->IsInnerWindow(), "Should have inner window here!"); NS_ASSERTION(win->IsInnerWindow(), "Should have inner window here!");
@ -4166,9 +4169,10 @@ nsDocument::SetScriptHandlingObject(nsIScriptGlobalObject* aScriptObject)
"Wrong script object!"); "Wrong script object!");
nsCOMPtr<nsPIDOMWindow> win = do_QueryInterface(aScriptObject); nsCOMPtr<nsPIDOMWindow> win = do_QueryInterface(aScriptObject);
NS_ASSERTION(!win || win->IsInnerWindow(), "Should have inner window here!"); NS_ASSERTION(!win || win->IsInnerWindow(), "Should have inner window here!");
mScopeObject = mScriptObject = do_GetWeakReference(aScriptObject); mScopeObject = do_GetWeakReference(aScriptObject);
if (aScriptObject) { if (aScriptObject) {
mHasHadScriptHandlingObject = true; mHasHadScriptHandlingObject = true;
mHasHadDefaultView = false;
} }
} }

View File

@ -1180,11 +1180,6 @@ protected:
// Array of observers // Array of observers
nsTObserverArray<nsIDocumentObserver*> mObservers; nsTObserverArray<nsIDocumentObserver*> mObservers;
// If document is created for example using
// document.implementation.createDocument(...), mScriptObject points to
// the script global object of the original document.
nsWeakPtr mScriptObject;
// Weak reference to the scope object (aka the script global object) // Weak reference to the scope object (aka the script global object)
// that, unlike mScriptGlobalObject, is never unset once set. This // that, unlike mScriptGlobalObject, is never unset once set. This
// is a weak reference to avoid leaks due to circular references. // is a weak reference to avoid leaks due to circular references.