From 77df9aab063ce3f79bc3c2207097bfdc92608625 Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Sat, 23 Mar 2019 07:57:33 +0100 Subject: [PATCH 01/26] Remove leftover updater lines in about box Resolves #1020. --- application/palemoon/base/content/aboutDialog.xul | 3 --- 1 file changed, 3 deletions(-) diff --git a/application/palemoon/base/content/aboutDialog.xul b/application/palemoon/base/content/aboutDialog.xul index a34923a0a9..6edfc21555 100644 --- a/application/palemoon/base/content/aboutDialog.xul +++ b/application/palemoon/base/content/aboutDialog.xul @@ -24,9 +24,6 @@ id="PMaboutDialog" windowtype="Browser:About" onload="init(event);" -#ifdef MOZ_UPDATER - onunload="onUnload(event);" -#endif #ifdef XP_MACOSX inwindowmenu="false" #else From ca0637849641dc97c8c182c033b57400b7a959a5 Mon Sep 17 00:00:00 2001 From: JustOff Date: Thu, 21 Mar 2019 21:45:08 +0200 Subject: [PATCH 02/26] The result of adding any percentage factor to a size that is zero should also be zero --- layout/base/nsLayoutUtils.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/layout/base/nsLayoutUtils.h b/layout/base/nsLayoutUtils.h index 63253fd100..0a82dbf6a5 100644 --- a/layout/base/nsLayoutUtils.h +++ b/layout/base/nsLayoutUtils.h @@ -1439,13 +1439,14 @@ public: /** * This function increases an initial intrinsic size, 'aCurrent', according * to the given 'aPercent', such that the size-increase makes up exactly - * 'aPercent' percent of the returned value. If 'aPercent' is less than - * or equal to zero the original 'aCurrent' value is returned. If 'aPercent' - * is greater than or equal to 1.0 the value nscoord_MAX is returned. + * 'aPercent' percent of the returned value. If 'aPercent' or 'aCurrent' are + * less than or equal to zero the original 'aCurrent' value is returned. + * If 'aPercent' is greater than or equal to 1.0 the value nscoord_MAX is + * returned. */ static nscoord AddPercents(nscoord aCurrent, float aPercent) { - if (aPercent > 0.0f) { + if (aPercent > 0.0f && aCurrent > 0) { return MOZ_UNLIKELY(aPercent >= 1.0f) ? nscoord_MAX : NSToCoordRound(float(aCurrent) / (1.0f - aPercent)); } From e390f01ef5bd532728bee191502cb09e12bfd5f6 Mon Sep 17 00:00:00 2001 From: "Nicolas B. Pierron" Date: Sat, 23 Mar 2019 09:36:15 +0100 Subject: [PATCH 03/26] Restrict ExtractLinearSum to monotonous operation in infinite math space. Thanks to Bruno Keith & Niklas Baumstark from the phoenhex team for finding this issue and reporting it with a proper analysis. --- js/src/jit/IonAnalysis.cpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/js/src/jit/IonAnalysis.cpp b/js/src/jit/IonAnalysis.cpp index b163d5818b..d255c32a82 100644 --- a/js/src/jit/IonAnalysis.cpp +++ b/js/src/jit/IonAnalysis.cpp @@ -3127,6 +3127,15 @@ ExtractMathSpace(MDefinition* ins) MOZ_MAKE_COMPILER_ASSUME_IS_UNREACHABLE("Unknown TruncateKind"); } +static bool MonotoneAdd(int32_t lhs, int32_t rhs) { + return (lhs >= 0 && rhs >= 0) || (lhs <= 0 && rhs <= 0); +} + +static bool MonotoneSub(int32_t lhs, int32_t rhs) { + return (lhs >= 0 && rhs <= 0) || (lhs <= 0 && rhs >= 0); +} + + // Extract a linear sum from ins, if possible (otherwise giving the sum 'ins + 0'). SimpleLinearSum jit::ExtractLinearSum(MDefinition* ins, MathSpace space) @@ -3168,10 +3177,12 @@ jit::ExtractLinearSum(MDefinition* ins, MathSpace space) // Check if this is of the form + n or n + . if (ins->isAdd()) { int32_t constant; - if (space == MathSpace::Modulo) + if (space == MathSpace::Modulo) { constant = lsum.constant + rsum.constant; - else if (!SafeAdd(lsum.constant, rsum.constant, &constant)) + } else if (!SafeAdd(lsum.constant, rsum.constant, &constant) || + !MonotoneAdd(lsum.constant, rsum.constant)) { return SimpleLinearSum(ins, 0); + } return SimpleLinearSum(lsum.term ? lsum.term : rsum.term, constant); } @@ -3179,10 +3190,12 @@ jit::ExtractLinearSum(MDefinition* ins, MathSpace space) // Check if this is of the form - n. if (lsum.term) { int32_t constant; - if (space == MathSpace::Modulo) + if (space == MathSpace::Modulo) { constant = lsum.constant - rsum.constant; - else if (!SafeSub(lsum.constant, rsum.constant, &constant)) + } else if (!SafeSub(lsum.constant, rsum.constant, &constant) || + !MonotoneSub(lsum.constant, rsum.constant)) { return SimpleLinearSum(ins, 0); + } return SimpleLinearSum(lsum.term, constant); } From da2bb879f27ce02083a30e10c450eda1cc943898 Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Sat, 23 Mar 2019 10:20:01 +0100 Subject: [PATCH 04/26] Grab caching capturing content with local variable. --- layout/base/nsPresShell.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/layout/base/nsPresShell.cpp b/layout/base/nsPresShell.cpp index 969ebc9621..5dfbb8dba6 100644 --- a/layout/base/nsPresShell.cpp +++ b/layout/base/nsPresShell.cpp @@ -7296,11 +7296,11 @@ PresShell::HandleEvent(nsIFrame* aFrame, return NS_OK; } - nsIContent* capturingContent = ((aEvent->mClass == ePointerEventClass || - aEvent->mClass == eWheelEventClass || - aEvent->HasMouseEventMessage()) - ? GetCapturingContent() - : nullptr); + nsCOMPtr capturingContent = ((aEvent->mClass == ePointerEventClass || + aEvent->mClass == eWheelEventClass || + aEvent->HasMouseEventMessage()) + ? GetCapturingContent() + : nullptr); nsCOMPtr retargetEventDoc; if (!aDontRetargetEvents) { From b78446a163a03d6a4304b186830f8aef1df719fb Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Sat, 23 Mar 2019 10:27:16 +0100 Subject: [PATCH 05/26] Bump Goanna version for layout handling changes. --- config/milestone.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/milestone.txt b/config/milestone.txt index 219f855298..f525cbbb4f 100644 --- a/config/milestone.txt +++ b/config/milestone.txt @@ -10,4 +10,4 @@ # hardcoded milestones in the tree from these two files. #-------------------------------------------------------- -4.1.9 +4.1.10 From e9a87c9cb0e2f5c6f179fa389a70605a65657222 Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Sat, 23 Mar 2019 10:46:00 +0100 Subject: [PATCH 06/26] Convert UI-dictating FTP errors to console errors. --- netwerk/protocol/ftp/FTPChannelChild.cpp | 41 +--------- .../protocol/ftp/nsFtpConnectionThread.cpp | 81 +------------------ 2 files changed, 4 insertions(+), 118 deletions(-) diff --git a/netwerk/protocol/ftp/FTPChannelChild.cpp b/netwerk/protocol/ftp/FTPChannelChild.cpp index f8284aae3c..f52586744a 100644 --- a/netwerk/protocol/ftp/FTPChannelChild.cpp +++ b/netwerk/protocol/ftp/FTPChannelChild.cpp @@ -516,33 +516,6 @@ FTPChannelChild::RecvOnStopRequest(const nsresult& aChannelStatus, return true; } -class nsFtpChildAsyncAlert : public Runnable -{ -public: - nsFtpChildAsyncAlert(nsIPrompt *aPrompter, nsString aResponseMsg) - : mPrompter(aPrompter) - , mResponseMsg(aResponseMsg) - { - MOZ_COUNT_CTOR(nsFtpChildAsyncAlert); - } -protected: - virtual ~nsFtpChildAsyncAlert() - { - MOZ_COUNT_DTOR(nsFtpChildAsyncAlert); - } -public: - NS_IMETHOD Run() override - { - if (mPrompter) { - mPrompter->Alert(nullptr, mResponseMsg.get()); - } - return NS_OK; - } -private: - nsCOMPtr mPrompter; - nsString mResponseMsg; -}; - class MaybeDivertOnStopFTPEvent : public ChannelEvent { public: @@ -600,19 +573,7 @@ FTPChannelChild::DoOnStopRequest(const nsresult& aChannelStatus, (void)mListener->OnStopRequest(this, mListenerContext, aChannelStatus); if (NS_FAILED(aChannelStatus) && !aErrorMsg.IsEmpty()) { - nsCOMPtr prompter; - GetCallback(prompter); - if (prompter) { - nsCOMPtr alertEvent; - if (aUseUTF8) { - alertEvent = new nsFtpChildAsyncAlert(prompter, - NS_ConvertUTF8toUTF16(aErrorMsg)); - } else { - alertEvent = new nsFtpChildAsyncAlert(prompter, - NS_ConvertASCIItoUTF16(aErrorMsg)); - } - NS_DispatchToMainThread(alertEvent); - } + NS_ERROR("FTP error on stop request."); } mListener = nullptr; diff --git a/netwerk/protocol/ftp/nsFtpConnectionThread.cpp b/netwerk/protocol/ftp/nsFtpConnectionThread.cpp index 2ae12846a2..0dae7ca921 100644 --- a/netwerk/protocol/ftp/nsFtpConnectionThread.cpp +++ b/netwerk/protocol/ftp/nsFtpConnectionThread.cpp @@ -29,7 +29,6 @@ #include "nsIStreamListenerTee.h" #include "nsIPrefService.h" #include "nsIPrefBranch.h" -#include "nsIStringBundle.h" #include "nsAuthInformationHolder.h" #include "nsIProtocolProxyService.h" #include "nsICancelable.h" @@ -926,38 +925,7 @@ nsFtpState::R_syst() { mServerType = FTP_VMS_TYPE; } else { NS_ERROR("Server type list format unrecognized."); - // Guessing causes crashes. - // (Of course, the parsing code should be more robust...) - nsCOMPtr bundleService = - do_GetService(NS_STRINGBUNDLE_CONTRACTID); - if (!bundleService) - return FTP_ERROR; - - nsCOMPtr bundle; - nsresult rv = bundleService->CreateBundle(NECKO_MSGS_URL, - getter_AddRefs(bundle)); - if (NS_FAILED(rv)) - return FTP_ERROR; - - char16_t* ucs2Response = ToNewUnicode(mResponseMsg); - const char16_t *formatStrings[1] = { ucs2Response }; - NS_NAMED_LITERAL_STRING(name, "UnsupportedFTPServer"); - - nsXPIDLString formattedString; - rv = bundle->FormatStringFromName(name.get(), formatStrings, 1, - getter_Copies(formattedString)); - free(ucs2Response); - if (NS_FAILED(rv)) - return FTP_ERROR; - - // TODO(darin): this code should not be dictating UI like this! - nsCOMPtr prompter; - mChannel->GetCallback(prompter); - if (prompter) - prompter->Alert(nullptr, formattedString.get()); - - // since we just alerted the user, clear mResponseMsg, - // which is displayed to the user. + // clear mResponseMsg, which is displayed to the user. mResponseMsg = ""; return FTP_ERROR; } @@ -1779,34 +1747,6 @@ nsFtpState::KillControlConnection() mControlConnection = nullptr; } -class nsFtpAsyncAlert : public Runnable -{ -public: - nsFtpAsyncAlert(nsIPrompt *aPrompter, nsString aResponseMsg) - : mPrompter(aPrompter) - , mResponseMsg(aResponseMsg) - { - MOZ_COUNT_CTOR(nsFtpAsyncAlert); - } -protected: - virtual ~nsFtpAsyncAlert() - { - MOZ_COUNT_DTOR(nsFtpAsyncAlert); - } -public: - NS_IMETHOD Run() override - { - if (mPrompter) { - mPrompter->Alert(nullptr, mResponseMsg.get()); - } - return NS_OK; - } -private: - nsCOMPtr mPrompter; - nsString mResponseMsg; -}; - - nsresult nsFtpState::StopProcessing() { @@ -1818,23 +1758,8 @@ nsFtpState::StopProcessing() LOG_INFO(("FTP:(%x) nsFtpState stopping", this)); if (NS_FAILED(mInternalError) && !mResponseMsg.IsEmpty()) { - // check to see if the control status is bad. - // web shell wont throw an alert. we better: - - // XXX(darin): this code should not be dictating UI like this! - nsCOMPtr prompter; - mChannel->GetCallback(prompter); - if (prompter) { - nsCOMPtr alertEvent; - if (mUseUTF8) { - alertEvent = new nsFtpAsyncAlert(prompter, - NS_ConvertUTF8toUTF16(mResponseMsg)); - } else { - alertEvent = new nsFtpAsyncAlert(prompter, - NS_ConvertASCIItoUTF16(mResponseMsg)); - } - NS_DispatchToMainThread(alertEvent); - } + NS_ERROR("FTP: bad control status."); + // check to see if the control status is bad; forward the error message. nsCOMPtr ftpChanP; mChannel->GetCallback(ftpChanP); if (ftpChanP) { From d00f80f18f7b7590ab99f0b443b0be602ca97875 Mon Sep 17 00:00:00 2001 From: Brian Grinstead Date: Sat, 23 Mar 2019 10:56:30 +0100 Subject: [PATCH 07/26] Escape '!' to '\041' in posix strings ($'...') --- devtools/client/shared/curl.js | 1 + 1 file changed, 1 insertion(+) diff --git a/devtools/client/shared/curl.js b/devtools/client/shared/curl.js index 6d33ad9717..9670197466 100644 --- a/devtools/client/shared/curl.js +++ b/devtools/client/shared/curl.js @@ -375,6 +375,7 @@ const CurlUtils = { .replace(/\'/g, "\\\'") .replace(/\n/g, "\\n") .replace(/\r/g, "\\r") + .replace(/!/g, "\\041") .replace(/[^\x20-\x7E]/g, escapeCharacter) + "'"; } From b178af2ddb392c6b1c439a08627bb901656f0dac Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Sat, 23 Mar 2019 11:10:28 +0100 Subject: [PATCH 08/26] Check for osint argument when checking for greomni and appomni arguments. Specifying both is invalid and unsupported. --- toolkit/xre/nsAppRunner.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp index 766f911a30..e53d86517f 100644 --- a/toolkit/xre/nsAppRunner.cpp +++ b/toolkit/xre/nsAppRunner.cpp @@ -4134,9 +4134,12 @@ XRE_InitCommandLine(int aArgc, char* aArgv[]) #endif const char *path = nullptr; - ArgResult ar = CheckArg("greomni", false, &path); + ArgResult ar = CheckArg("greomni", true, &path); if (ar == ARG_BAD) { - PR_fprintf(PR_STDERR, "Error: argument --greomni requires a path argument\n"); + PR_fprintf(PR_STDERR, + "Error: argument --greomni requires a path argument or the " + "--osint argument was specified with the --greomni argument " + "which is invalid.\n"); return NS_ERROR_FAILURE; } @@ -4150,9 +4153,12 @@ XRE_InitCommandLine(int aArgc, char* aArgv[]) return rv; } - ar = CheckArg("appomni", false, &path); + ar = CheckArg("appomni", true, &path); if (ar == ARG_BAD) { - PR_fprintf(PR_STDERR, "Error: argument --appomni requires a path argument\n"); + PR_fprintf(PR_STDERR, + "Error: argument --appomni requires a path argument or the " + "--osint argument was specified with the --appomni argument " + "which is invalid.\n"); return NS_ERROR_FAILURE; } From db3e9bd7ba83e80a3fdc2543c9f597b05e04b179 Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Sat, 23 Mar 2019 12:52:39 +0100 Subject: [PATCH 09/26] Disallow getUserMedia on null principals. --- dom/media/MediaManager.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/dom/media/MediaManager.cpp b/dom/media/MediaManager.cpp index 52bac781a1..40d7325536 100644 --- a/dom/media/MediaManager.cpp +++ b/dom/media/MediaManager.cpp @@ -2051,6 +2051,16 @@ MediaManager::GetUserMedia(nsPIDOMWindowInner* aWindow, return rv; } + // Disallow access to null principal pages + nsCOMPtr principal = aWindow->GetExtantDoc()->NodePrincipal(); + if (principal->GetIsNullPrincipal()) { + RefPtr error = + new MediaStreamError(aWindow, + NS_LITERAL_STRING("NotAllowedError")); + onFailure->OnError(error); + return NS_OK; + } + if (!Preferences::GetBool("media.navigator.video.enabled", true)) { c.mVideo.SetAsBoolean() = false; } @@ -2198,7 +2208,6 @@ MediaManager::GetUserMedia(nsPIDOMWindowInner* aWindow, StreamListeners* listeners = AddWindowID(windowID); // Create a disabled listener to act as a placeholder - nsIPrincipal* principal = aWindow->GetExtantDoc()->NodePrincipal(); RefPtr listener = new GetUserMediaCallbackMediaStreamListener(mMediaThread, windowID, MakePrincipalHandle(principal)); From 55fed9329600ee1c1369f5cfa71307d86c195b9a Mon Sep 17 00:00:00 2001 From: Nika Layzell Date: Sat, 23 Mar 2019 12:56:19 +0100 Subject: [PATCH 10/26] Unregister ProcessHangMonitor as a hang annotator on shutdown. --- dom/ipc/ProcessHangMonitor.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/dom/ipc/ProcessHangMonitor.cpp b/dom/ipc/ProcessHangMonitor.cpp index d46a1f5d5e..406d0bf0aa 100644 --- a/dom/ipc/ProcessHangMonitor.cpp +++ b/dom/ipc/ProcessHangMonitor.cpp @@ -323,6 +323,8 @@ HangMonitorChild::Shutdown() { MOZ_RELEASE_ASSERT(NS_IsMainThread()); + BackgroundHangMonitor::UnregisterAnnotator(*this); + MonitorAutoLock lock(mMonitor); while (!mShutdownDone) { mMonitor.Wait(); From 9f852ea56ea35fac8a6db5cfa1818736f8a41bda Mon Sep 17 00:00:00 2001 From: sotaro Date: Sat, 23 Mar 2019 13:01:13 +0100 Subject: [PATCH 11/26] Check if CopyData succeeded. --- dom/media/VideoFrameContainer.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/dom/media/VideoFrameContainer.cpp b/dom/media/VideoFrameContainer.cpp index 2b1965766f..56aea9d274 100644 --- a/dom/media/VideoFrameContainer.cpp +++ b/dom/media/VideoFrameContainer.cpp @@ -61,7 +61,7 @@ void VideoFrameContainer::UpdatePrincipalHandleForFrameIDLocked(const PrincipalH mFrameIDForPendingPrincipalHandle = aFrameID; } -static void +static bool SetImageToBlackPixel(PlanarYCbCrImage* aImage) { uint8_t blackPixel[] = { 0x10, 0x80, 0x80 }; @@ -72,7 +72,7 @@ SetImageToBlackPixel(PlanarYCbCrImage* aImage) data.mCrChannel = blackPixel + 2; data.mYStride = data.mCbCrStride = 1; data.mPicSize = data.mYSize = data.mCbCrSize = gfx::IntSize(1, 1); - aImage->CopyData(data); + return aImage->CopyData(data); } class VideoFrameContainerInvalidateRunnable : public Runnable { @@ -122,11 +122,13 @@ void VideoFrameContainer::SetCurrentFrames(const VideoSegment& aSegment) if (frame->GetForceBlack()) { if (!mBlackImage) { - mBlackImage = GetImageContainer()->CreatePlanarYCbCrImage(); - if (mBlackImage) { + RefPtr blackImage = GetImageContainer()->CreatePlanarYCbCrImage(); + if (blackImage) { // Sets the image to a single black pixel, which will be scaled to // fill the rendered size. - SetImageToBlackPixel(mBlackImage->AsPlanarYCbCrImage()); + if (SetImageToBlackPixel(blackImage->AsPlanarYCbCrImage())) { + mBlackImage = blackImage; + } } } if (mBlackImage) { From 9ce73065bad8ec9c77c4f2bf8d66616700bc888d Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Sat, 23 Mar 2019 13:10:32 +0100 Subject: [PATCH 12/26] Revert "Unregister ProcessHangMonitor as a hang annotator on shutdown." This reverts commit 68acc67ddbbd1c7a9577498ad41d079e6b9e3eac. --- dom/ipc/ProcessHangMonitor.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/dom/ipc/ProcessHangMonitor.cpp b/dom/ipc/ProcessHangMonitor.cpp index 406d0bf0aa..d46a1f5d5e 100644 --- a/dom/ipc/ProcessHangMonitor.cpp +++ b/dom/ipc/ProcessHangMonitor.cpp @@ -323,8 +323,6 @@ HangMonitorChild::Shutdown() { MOZ_RELEASE_ASSERT(NS_IsMainThread()); - BackgroundHangMonitor::UnregisterAnnotator(*this); - MonitorAutoLock lock(mMonitor); while (!mShutdownDone) { mMonitor.Wait(); From f6f11db55089fdfede3b04c68439535e79492e6c Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Sat, 23 Mar 2019 13:26:20 +0100 Subject: [PATCH 13/26] WebRTC: Add explicit mutex on callback receiver for cases it's not already locked. --- netwerk/sctp/datachannel/DataChannel.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/netwerk/sctp/datachannel/DataChannel.cpp b/netwerk/sctp/datachannel/DataChannel.cpp index ebc430f8c8..19be43d1cd 100644 --- a/netwerk/sctp/datachannel/DataChannel.cpp +++ b/netwerk/sctp/datachannel/DataChannel.cpp @@ -1928,12 +1928,21 @@ DataChannelConnection::ReceiveCallback(struct socket* sock, void *data, size_t d if (!data) { usrsctp_close(sock); // SCTP has finished shutting down } else { - mLock.AssertCurrentThreadOwns(); + bool locked = false; + if (!IsSTSThread()) { + mLock.Lock(); + locked = true; + } else { + mLock.AssertCurrentThreadOwns(); + } if (flags & MSG_NOTIFICATION) { HandleNotification(static_cast(data), datalen); } else { HandleMessage(data, datalen, ntohl(rcv.rcv_ppid), rcv.rcv_sid); } + if (locked) { + mLock.Unlock(); + } } // sctp allocates 'data' with malloc(), and expects the receiver to free // it (presumably with free). From 2f3189f5a4ea25267819f1adb906c20c9f8cb3e5 Mon Sep 17 00:00:00 2001 From: wolfbeast Date: Mon, 25 Mar 2019 17:47:16 +0100 Subject: [PATCH 14/26] Only write the newtab URL if the machinery for it had previously been initialized. This prevents the URL being overwritten with e.g. about:logopage. --- application/palemoon/components/preferences/preferences.xul | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/application/palemoon/components/preferences/preferences.xul b/application/palemoon/components/preferences/preferences.xul index a1d9c8cf72..2b7fd9ded5 100644 --- a/application/palemoon/components/preferences/preferences.xul +++ b/application/palemoon/components/preferences/preferences.xul @@ -56,7 +56,7 @@ #endif #endif onunload="if (typeof gSecurityPane != 'undefined') gSecurityPane.syncAddonSecurityLevel();" - ondialogaccept="gNewtabUrl.writeNewtabUrl();"> + ondialogaccept="if (typeof gTabsPane != 'undefined') gNewtabUrl.writeNewtabUrl();">