diff --git a/mozilla/content/base/src/nsGkAtomList.h b/mozilla/content/base/src/nsGkAtomList.h index 64448155c52..c33cee2d64d 100755 --- a/mozilla/content/base/src/nsGkAtomList.h +++ b/mozilla/content/base/src/nsGkAtomList.h @@ -650,6 +650,7 @@ GK_ATOM(screen, "screen") GK_ATOM(screenX, "screenX") GK_ATOM(screenY, "screenY") GK_ATOM(script, "script") +GK_ATOM(scriptEnabledBeforePrintPreview, "scriptEnabledBeforePrintPreview") GK_ATOM(scrollbar, "scrollbar") GK_ATOM(scrollbarbutton, "scrollbarbutton") GK_ATOM(scrollbox, "scrollbox") diff --git a/mozilla/layout/base/nsPresShell.cpp b/mozilla/layout/base/nsPresShell.cpp index da29df65ae4..83884a825cf 100644 --- a/mozilla/layout/base/nsPresShell.cpp +++ b/mozilla/layout/base/nsPresShell.cpp @@ -2335,7 +2335,12 @@ PresShell::SetPrefNoScriptRule() { nsresult rv = NS_OK; - if (mDocument->IsScriptEnabled()) { + PRBool scriptEnabled = mDocument->IsScriptEnabled() || + (mPresContext->Type() == nsPresContext::eContext_PrintPreview && + NS_PTR_TO_INT32(mDocument->GetProperty( + nsLayoutAtoms::scriptEnabledBeforePrintPreview))); + + if (scriptEnabled) { if (!mPrefStyleSheet) { rv = CreatePreferenceStyleSheet(); NS_ENSURE_SUCCESS(rv, rv); diff --git a/mozilla/layout/printing/nsPrintEngine.cpp b/mozilla/layout/printing/nsPrintEngine.cpp index 71ca2d62554..f0ba2e7368d 100644 --- a/mozilla/layout/printing/nsPrintEngine.cpp +++ b/mozilla/layout/printing/nsPrintEngine.cpp @@ -3588,14 +3588,24 @@ nsPrintEngine::TurnScriptingOn(PRBool aDoTurnOn) for (PRInt32 i=0;imPrintDocList->Count();i++) { nsPrintObject* po = (nsPrintObject*)prt->mPrintDocList->ElementAt(i); NS_ASSERTION(po, "nsPrintObject can't be null!"); + + nsIDocument* doc = po->mDocument; // get the script global object - nsIScriptGlobalObject *scriptGlobalObj = - po->mDocument->GetScriptGlobalObject(); + nsIScriptGlobalObject *scriptGlobalObj = doc->GetScriptGlobalObject(); if (scriptGlobalObj) { nsIScriptContext *scx = scriptGlobalObj->GetContext(); NS_ASSERTION(scx, "Can't get nsIScriptContext"); + if (aDoTurnOn) { + doc->DeleteProperty(nsLayoutAtoms::scriptEnabledBeforePrintPreview); + } else { + // Stash the current value of IsScriptEnabled on the document, + // so that layout code running in print preview doesn't get + // confused. + doc->SetProperty(nsLayoutAtoms::scriptEnabledBeforePrintPreview, + NS_INT32_TO_PTR(doc->IsScriptEnabled())); + } scx->SetScriptsEnabled(aDoTurnOn, PR_TRUE); } }