зеркало из https://github.com/mozilla/pjs.git
Bug 466826 - 'Running mochitest asserts: ###!!! ASSERTION: should be executing script: 'mContext->fp', file /mozilla/dom/src/base/nsJSEnvironment.cpp, line 3318'. r=bz, sr=mrbkap, a=blocking1.9+
This commit is contained in:
Родитель
ef0674e4a6
Коммит
16fda7b2a3
|
@ -1796,10 +1796,18 @@ nsGlobalWindow::SetNewDocument(nsIDocument* aDocument,
|
||||||
PRBool termFuncSet = PR_FALSE;
|
PRBool termFuncSet = PR_FALSE;
|
||||||
|
|
||||||
if (oldDoc == aDocument) {
|
if (oldDoc == aDocument) {
|
||||||
JSContext *cx = nsContentUtils::GetCurrentJSContext();
|
// Suspend the current context's request before Pop() resumes the old
|
||||||
|
// context's request.
|
||||||
|
JSAutoSuspendRequest asr(cx);
|
||||||
|
|
||||||
|
// Pop our context here so that we get the correct one for the
|
||||||
|
// termination function.
|
||||||
|
cxPusher.Pop();
|
||||||
|
|
||||||
|
JSContext *oldCx = nsContentUtils::GetCurrentJSContext();
|
||||||
|
|
||||||
nsIScriptContext *callerScx;
|
nsIScriptContext *callerScx;
|
||||||
if (cx && (callerScx = GetScriptContextFromJSContext(cx))) {
|
if (oldCx && (callerScx = GetScriptContextFromJSContext(oldCx))) {
|
||||||
// We're called from document.open() (and document.open() is
|
// We're called from document.open() (and document.open() is
|
||||||
// called from JS), clear the scope etc in a termination
|
// called from JS), clear the scope etc in a termination
|
||||||
// function on the calling context to prevent clearing the
|
// function on the calling context to prevent clearing the
|
||||||
|
@ -1807,7 +1815,7 @@ nsGlobalWindow::SetNewDocument(nsIDocument* aDocument,
|
||||||
NS_ASSERTION(!currentInner->IsFrozen(),
|
NS_ASSERTION(!currentInner->IsFrozen(),
|
||||||
"How does this opened window get into session history");
|
"How does this opened window get into session history");
|
||||||
|
|
||||||
JSAutoRequest ar(cx);
|
JSAutoRequest ar(oldCx);
|
||||||
|
|
||||||
callerScx->SetTerminationFunction(ClearWindowScope,
|
callerScx->SetTerminationFunction(ClearWindowScope,
|
||||||
static_cast<nsIDOMWindow *>
|
static_cast<nsIDOMWindow *>
|
||||||
|
@ -1815,6 +1823,9 @@ nsGlobalWindow::SetNewDocument(nsIDocument* aDocument,
|
||||||
|
|
||||||
termFuncSet = PR_TRUE;
|
termFuncSet = PR_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Re-push our context.
|
||||||
|
cxPusher.Push(cx);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't clear scope on our current inner window if it's going to be
|
// Don't clear scope on our current inner window if it's going to be
|
||||||
|
|
Загрузка…
Ссылка в новой задаче