author | Phil Ringnalda <philringnalda@gmail.com> |
Thu, 10 Sep 2015 15:22:15 -0700 | |
changeset 261862 | c0abc2a6e11f52761366e029eb1bae4c9864a8a3 |
parent 261861 | 7671701d15cadd2b343fc27685231e0689bb71df (current diff) |
parent 261605 | c75f9ca74a29c05a3457d33531548c63f9b6d784 (diff) |
child 261863 | 0a18e5db95a4505d26260e6690a3e6241f0e16de |
child 261978 | c4bf8c0c204434c0c83d10caf3e19eeab60a5fd4 |
child 261990 | 0426cdc486e797acec62d875cdb32bfa99c5817d |
push id | 64859 |
push user | philringnalda@gmail.com |
push date | Thu, 10 Sep 2015 22:30:45 +0000 |
treeherder | mozilla-inbound@0a18e5db95a4 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | merge |
milestone | 43.0a1 |
first release with | nightly linux32
c0abc2a6e11f
/
43.0a1
/
20150911030204
/
files
nightly linux64
c0abc2a6e11f
/
43.0a1
/
20150911030204
/
files
nightly mac
c0abc2a6e11f
/
43.0a1
/
20150911030204
/
files
nightly win32
c0abc2a6e11f
/
43.0a1
/
20150911030204
/
files
nightly win64
c0abc2a6e11f
/
43.0a1
/
20150911030204
/
files
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
releases | nightly linux32
43.0a1
/
20150911030204
/
pushlog to previous
nightly linux64
43.0a1
/
20150911030204
/
pushlog to previous
nightly mac
43.0a1
/
20150911030204
/
pushlog to previous
nightly win32
43.0a1
/
20150911030204
/
pushlog to previous
nightly win64
43.0a1
/
20150911030204
/
pushlog to previous
|
build/win32/vmwarerecordinghelper/moz.build | file | annotate | diff | comparison | revisions | |
build/win32/vmwarerecordinghelper/vmwarerecordinghelper.cpp | file | annotate | diff | comparison | revisions | |
build/win32/vmwarerecordinghelper/vmwarerecordinghelper.def | file | annotate | diff | comparison | revisions |
--- a/accessible/windows/msaa/Platform.cpp +++ b/accessible/windows/msaa/Platform.cpp @@ -71,13 +71,18 @@ a11y::ProxyCaretMoveEvent(ProxyAccessibl { } void a11y::ProxyTextChangeEvent(ProxyAccessible* aText, const nsString& aStr, int32_t aStart, uint32_t aLen, bool aInsert, bool) { AccessibleWrap* wrapper = WrapperFor(aText); + MOZ_ASSERT(wrapper); + if (!wrapper) { + return; + } + auto text = static_cast<HyperTextAccessibleWrap*>(wrapper->AsHyperText()); if (text) { ia2AccessibleText::UpdateTextChangeData(text, aInsert, aStr, aStart, aLen); } }
--- a/build/win32/moz.build +++ b/build/win32/moz.build @@ -1,17 +1,14 @@ # -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- # vim: set filetype=python: # This Source Code Form is subject to the terms of the Mozilla Public # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at http://mozilla.org/MPL/2.0/. -if CONFIG['_MSC_VER'] and CONFIG['OS_TEST'] != 'x86_64': - TEST_DIRS += ['vmwarerecordinghelper'] - TEST_DIRS += ['crashinjectdll'] if CONFIG['ENABLE_TESTS']: Program('crashinject') SOURCES += [ 'crashinject.cpp', ] USE_STATIC_LIBS = True
deleted file mode 100644 --- a/build/win32/vmwarerecordinghelper/moz.build +++ /dev/null @@ -1,15 +0,0 @@ -# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -SOURCES += [ - 'vmwarerecordinghelper.cpp', -] - -SharedLibrary('vmwarerecordinghelper') - -DEFFILE = '%s/%s.def' % (SRCDIR, LIBRARY_NAME) - -USE_STATIC_LIBS = True
deleted file mode 100644 --- a/build/win32/vmwarerecordinghelper/vmwarerecordinghelper.cpp +++ /dev/null @@ -1,34 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -/** - * The following code comes from "Starting and Stopping Recording of Virtual - * Machine Activity from Within the Guest": - * - * http://kb.vmware.com/selfservice/documentLink.do?externalID=1001401 - */ - -void __cdecl -StartRecording() -{ - __asm { - mov eax, 564d5868h - mov ebx, 1 - mov cx, 47 - mov dx, 5658h - in eax, dx - } -} - -void __cdecl -StopRecording() -{ - __asm { - mov eax, 564d5868h - mov ebx, 2 - mov cx, 47 - mov dx, 5658h - in eax, dx - } -}
deleted file mode 100644 --- a/build/win32/vmwarerecordinghelper/vmwarerecordinghelper.def +++ /dev/null @@ -1,8 +0,0 @@ -;+# This Source Code Form is subject to the terms of the Mozilla Public -;+# License, v. 2.0. If a copy of the MPL was not distributed with this -;+# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -LIBRARY vmwarerecordinghelper -EXPORTS - StartRecording - StopRecording
--- a/dom/html/HTMLInputElement.cpp +++ b/dom/html/HTMLInputElement.cpp @@ -4912,19 +4912,20 @@ HTMLInputElement::GetFilesAndDirectories #endif nsAutoString path; filesAndDirs[i]->GetMozFullPathInternal(path, aRv); if (aRv.Failed()) { return nullptr; } int32_t leafSeparatorIndex = path.RFind(FILE_PATH_SEPARATOR); nsDependentSubstring dirname = Substring(path, 0, leafSeparatorIndex); - nsDependentSubstring basename = Substring(path, leafSeparatorIndex); fs = MakeOrReuseFileSystem(dirname, fs, window); - filesAndDirsSeq[i].SetAsDirectory() = new Directory(fs, basename); + nsAutoString dompath(NS_LITERAL_STRING(FILESYSTEM_DOM_PATH_SEPARATOR)); + dompath.Append(Substring(path, leafSeparatorIndex + 1)); + filesAndDirsSeq[i].SetAsDirectory() = new Directory(fs, dompath); } else { filesAndDirsSeq[i].SetAsFile() = filesAndDirs[i]; } } p->MaybeResolve(filesAndDirsSeq); return p.forget();
--- a/dom/ipc/ContentParent.cpp +++ b/dom/ipc/ContentParent.cpp @@ -137,16 +137,17 @@ #include "nsISupportsPrimitives.h" #include "nsISystemMessagesInternal.h" #include "nsITimer.h" #include "nsIURIFixup.h" #include "nsIWindowWatcher.h" #include "nsIXULRuntime.h" #include "gfxDrawable.h" #include "ImageOps.h" +#include "mozilla/dom/nsMixedContentBlocker.h" #include "nsMemoryInfoDumper.h" #include "nsMemoryReporterManager.h" #include "nsServiceManagerUtils.h" #include "nsStyleSheetService.h" #include "nsThreadUtils.h" #include "nsToolkitCompsCID.h" #include "nsWidgetsCID.h" #include "PreallocatedProcessManager.h" @@ -4171,16 +4172,27 @@ ContentParent::RecvIsSecureURI(const uin if (!ourURI) { return false; } nsresult rv = sss->IsSecureURI(type, ourURI, flags, isSecureURI); return NS_SUCCEEDED(rv); } bool +ContentParent::RecvAccumulateMixedContentHSTS(const URIParams& aURI, const bool& aActive) +{ + nsCOMPtr<nsIURI> ourURI = DeserializeURI(aURI); + if (!ourURI) { + return false; + } + nsMixedContentBlocker::AccumulateMixedContentHSTS(ourURI, aActive); + return true; +} + +bool ContentParent::RecvLoadURIExternal(const URIParams& uri) { nsCOMPtr<nsIExternalProtocolService> extProtService(do_GetService(NS_EXTERNALPROTOCOLSERVICE_CONTRACTID)); if (!extProtService) { return true; } nsCOMPtr<nsIURI> ourURI = DeserializeURI(uri); if (!ourURI) {
--- a/dom/ipc/ContentParent.h +++ b/dom/ipc/ContentParent.h @@ -621,16 +621,18 @@ private: virtual bool DeallocPCrashReporterParent(PCrashReporterParent* crashreporter) override; virtual bool RecvGetRandomValues(const uint32_t& length, InfallibleTArray<uint8_t>* randomValues) override; virtual bool RecvIsSecureURI(const uint32_t& aType, const URIParams& aURI, const uint32_t& aFlags, bool* aIsSecureURI) override; + virtual bool RecvAccumulateMixedContentHSTS(const URIParams& aURI, const bool& aActive) override; + virtual bool DeallocPHalParent(PHalParent*) override; virtual PIccParent* AllocPIccParent(const uint32_t& aServiceId) override; virtual bool DeallocPIccParent(PIccParent* aActor) override; virtual PMemoryReportRequestParent* AllocPMemoryReportRequestParent(const uint32_t& aGeneration, const bool &aAnonymize,
--- a/dom/ipc/PContent.ipdl +++ b/dom/ipc/PContent.ipdl @@ -746,16 +746,18 @@ parent: prio(urgent) sync GetRandomValues(uint32_t length) returns (uint8_t[] randomValues); async GetSystemMemory(uint64_t getterId); sync IsSecureURI(uint32_t type, URIParams uri, uint32_t flags) returns (bool isSecureURI); + async AccumulateMixedContentHSTS(URIParams uri, bool active); + sync GetLookAndFeelCache() returns (LookAndFeelInt[] lookAndFeelIntCache); prio(urgent) async PHal(); PIcc(uint32_t serviceId); PMobileConnection(uint32_t clientId); @@ -783,17 +785,17 @@ parent: PMedia(); PBluetooth(); PFMRadio(); PWebrtcGlobal(); - + PPresentation(); // Services remoting async StartVisitedQuery(URIParams uri); async VisitURI(URIParams uri, OptionalURIParams referrer, uint32_t flags); async SetURITitle(URIParams uri, nsString title);
--- a/dom/ipc/moz.build +++ b/dom/ipc/moz.build @@ -129,16 +129,17 @@ LOCAL_INCLUDES += [ '/dom/bluetooth/common', '/dom/bluetooth/ipc', '/dom/devicestorage', '/dom/filesystem', '/dom/fmradio/ipc', '/dom/geolocation', '/dom/media/webspeech/synth/ipc', '/dom/mobilemessage/ipc', + '/dom/security', '/dom/storage', '/dom/workers', '/editor/libeditor', '/embedding/components/printingui/ipc', '/extensions/cookie', '/extensions/spellcheck/src', '/gfx/2d', '/hal/sandbox',
--- a/dom/plugins/ipc/PluginModuleParent.cpp +++ b/dom/plugins/ipc/PluginModuleParent.cpp @@ -79,17 +79,17 @@ using namespace mozilla::plugins::parent using namespace CrashReporter; #endif static const char kContentTimeoutPref[] = "dom.ipc.plugins.contentTimeoutSecs"; static const char kChildTimeoutPref[] = "dom.ipc.plugins.timeoutSecs"; static const char kParentTimeoutPref[] = "dom.ipc.plugins.parentTimeoutSecs"; static const char kLaunchTimeoutPref[] = "dom.ipc.plugins.processLaunchTimeoutSecs"; -static const char kAsyncInitPref[] = "dom.ipc.plugins.asyncInit"; +static const char kAsyncInitPref[] = "dom.ipc.plugins.asyncInit.enabled"; #ifdef XP_WIN static const char kHangUITimeoutPref[] = "dom.ipc.plugins.hangUITimeoutSecs"; static const char kHangUIMinDisplayPref[] = "dom.ipc.plugins.hangUIMinDisplaySecs"; #define CHILD_TIMEOUT_PREF kHangUITimeoutPref #else #define CHILD_TIMEOUT_PREF kChildTimeoutPref #endif
--- a/dom/security/moz.build +++ b/dom/security/moz.build @@ -28,17 +28,19 @@ UNIFIED_SOURCES += [ 'nsCSPParser.cpp', 'nsCSPService.cpp', 'nsCSPUtils.cpp', 'nsMixedContentBlocker.cpp', 'SRICheck.cpp', 'SRIMetadata.cpp', ] +include('/ipc/chromium/chromium-config.mozbuild') + FINAL_LIBRARY = 'xul' LOCAL_INCLUDES += [ '/caps', '/netwerk/base', ] if CONFIG['GNU_CC']: - CFLAGS += ['-Wshadow', '-Wformat-security'] - CXXFLAGS += ['-Wshadow', '-Wformat-security'] + CFLAGS += ['-Wformat-security'] + CXXFLAGS += ['-Wformat-security']
--- a/dom/security/nsMixedContentBlocker.cpp +++ b/dom/security/nsMixedContentBlocker.cpp @@ -27,18 +27,23 @@ #include "nsIDocumentLoader.h" #include "nsIWebNavigation.h" #include "nsLoadGroup.h" #include "nsIScriptError.h" #include "nsIURI.h" #include "nsIChannelEventSink.h" #include "nsAsyncRedirectVerifyHelper.h" #include "mozilla/LoadInfo.h" +#include "nsISiteSecurityService.h" #include "mozilla/Logging.h" +#include "mozilla/Telemetry.h" +#include "mozilla/dom/ContentChild.h" +#include "mozilla/ipc/URIUtils.h" + using namespace mozilla; enum nsMixedContentBlockerMessageType { eBlocked = 0x00, eUserOverride = 0x01 }; @@ -337,17 +342,17 @@ nsMixedContentBlocker::ShouldLoad(uint32 nsISupports* aExtra, nsIPrincipal* aRequestPrincipal, int16_t* aDecision) { // We pass in false as the first parameter to ShouldLoad(), because the // callers of this method don't know whether the load went through cached // image redirects. This is handled by direct callers of the static // ShouldLoad. - nsresult rv = ShouldLoad(false, //aHadInsecureImageRedirect + nsresult rv = ShouldLoad(false, // aHadInsecureImageRedirect aContentType, aContentLocation, aRequestingLocation, aRequestingContext, aMimeGuess, aExtra, aRequestPrincipal, aDecision); @@ -376,17 +381,16 @@ nsMixedContentBlocker::ShouldLoad(bool a MOZ_ASSERT(aContentType == nsContentUtils::InternalContentPolicyTypeToExternal(aContentType), "We should only see external content policy types here."); // Assume active (high risk) content and blocked by default MixedContentTypes classification = eMixedScript; // Make decision to block/reject by default *aDecision = REJECT_REQUEST; - // Notes on non-obvious decisions: // // TYPE_DTD: A DTD can contain entity definitions that expand to scripts. // // TYPE_FONT: The TrueType hinting mechanism is basically a scripting // language that gets interpreted by the operating system's font rasterizer. // Mixed content web fonts are relatively uncommon, and we can can fall back // to built-in fonts with minimal disruption in almost all cases. @@ -713,16 +717,43 @@ nsMixedContentBlocker::ShouldLoad(bool a // If there is no securityUI, document doesn't have a security state. // Allow load and return early. if (!securityUI) { *aDecision = nsIContentPolicy::ACCEPT; return NS_OK; } nsresult stateRV = securityUI->GetState(&state); + // At this point we know that the request is mixed content, and the only + // question is whether we block it. Record telemetry at this point as to + // whether HSTS would have fixed things by making the content location + // into an HTTPS URL. + // + // Note that we count this for redirects as well as primary requests. This + // will cause some degree of double-counting, especially when mixed content + // is not blocked (e.g., for images). For more detail, see: + // https://bugzilla.mozilla.org/show_bug.cgi?id=1198572#c19 + // + // We do not count requests aHadInsecureImageRedirect=true, since these are + // just an artifact of the image caching system. + bool active = (classification == eMixedScript); + if (!aHadInsecureImageRedirect) { + if (XRE_IsParentProcess()) { + AccumulateMixedContentHSTS(aContentLocation, active); + } else { + // Ask the parent process to do the same call + mozilla::dom::ContentChild* cc = mozilla::dom::ContentChild::GetSingleton(); + if (cc) { + mozilla::ipc::URIParams uri; + SerializeURI(aContentLocation, uri); + cc->SendAccumulateMixedContentHSTS(uri, active); + } + } + } + // If the content is display content, and the pref says display content should be blocked, block it. if (sBlockMixedDisplay && classification == eMixedDisplay) { if (allowMixedContent) { LogMixedContentMessage(classification, aContentLocation, rootDoc, eUserOverride); *aDecision = nsIContentPolicy::ACCEPT; // See if mixed display content has already loaded on the page or if the state needs to be updated here. // If mixed display hasn't loaded previously, then we need to call OnSecurityChange() to update the UI. if (rootDoc->GetHasMixedDisplayContentLoaded()) { @@ -852,8 +883,59 @@ nsMixedContentBlocker::ShouldProcess(uin return NS_ERROR_FAILURE; } } return ShouldLoad(aContentType, aContentLocation, aRequestingLocation, aRequestingContext, aMimeGuess, aExtra, aRequestPrincipal, aDecision); } + +enum MixedContentHSTSState { + MCB_HSTS_PASSIVE_NO_HSTS = 0, + MCB_HSTS_PASSIVE_WITH_HSTS = 1, + MCB_HSTS_ACTIVE_NO_HSTS = 2, + MCB_HSTS_ACTIVE_WITH_HSTS = 3 +}; + +// Record information on when HSTS would have made mixed content not mixed +// content (regardless of whether it was actually blocked) +void +nsMixedContentBlocker::AccumulateMixedContentHSTS(nsIURI* aURI, bool aActive) +{ + // This method must only be called in the parent, because + // nsSiteSecurityService is only available in the parent + if (!XRE_IsParentProcess()) { + MOZ_ASSERT(false); + return; + } + + bool hsts; + nsresult rv; + nsCOMPtr<nsISiteSecurityService> sss = do_GetService(NS_SSSERVICE_CONTRACTID, &rv); + if (NS_FAILED(rv)) { + return; + } + rv = sss->IsSecureURI(nsISiteSecurityService::HEADER_HSTS, aURI, 0, &hsts); + if (NS_FAILED(rv)) { + return; + } + + if (!aActive) { + if (!hsts) { + Telemetry::Accumulate(Telemetry::MIXED_CONTENT_HSTS, + MCB_HSTS_PASSIVE_NO_HSTS); + } + else { + Telemetry::Accumulate(Telemetry::MIXED_CONTENT_HSTS, + MCB_HSTS_PASSIVE_WITH_HSTS); + } + } else { + if (!hsts) { + Telemetry::Accumulate(Telemetry::MIXED_CONTENT_HSTS, + MCB_HSTS_ACTIVE_NO_HSTS); + } + else { + Telemetry::Accumulate(Telemetry::MIXED_CONTENT_HSTS, + MCB_HSTS_ACTIVE_WITH_HSTS); + } + } +}
--- a/dom/security/nsMixedContentBlocker.h +++ b/dom/security/nsMixedContentBlocker.h @@ -54,13 +54,14 @@ public: uint32_t aContentType, nsIURI* aContentLocation, nsIURI* aRequestingLocation, nsISupports* aRequestingContext, const nsACString& aMimeGuess, nsISupports* aExtra, nsIPrincipal* aRequestPrincipal, int16_t* aDecision); + static void AccumulateMixedContentHSTS(nsIURI* aURI, bool aActive); static bool sBlockMixedScript; static bool sBlockMixedDisplay; }; #endif /* nsMixedContentBlocker_h___ */
--- a/dom/xbl/nsXBLService.cpp +++ b/dom/xbl/nsXBLService.cpp @@ -646,17 +646,17 @@ nsXBLService::BindingReady(nsIContent* a } nsresult nsXBLService::GetBinding(nsIContent* aBoundElement, nsIURI* aURI, bool aPeekOnly, nsIPrincipal* aOriginPrincipal, bool* aIsReady, nsXBLBinding** aResult) { // More than 6 binding URIs are rare, see bug 55070 comment 18. - nsAutoTArray<nsIURI*, 6> uris; + nsAutoTArray<nsCOMPtr<nsIURI>, 6> uris; return GetBinding(aBoundElement, aURI, aPeekOnly, aOriginPrincipal, aIsReady, aResult, uris); } static bool MayBindToContent(nsXBLPrototypeBinding* aProtoBinding, nsIContent* aBoundElement, nsIURI* aURI) { @@ -703,17 +703,17 @@ MayBindToContent(nsXBLPrototypeBinding* // Disallow. return false; } nsresult nsXBLService::GetBinding(nsIContent* aBoundElement, nsIURI* aURI, bool aPeekOnly, nsIPrincipal* aOriginPrincipal, bool* aIsReady, nsXBLBinding** aResult, - nsTArray<nsIURI*>& aDontExtendURIs) + nsTArray<nsCOMPtr<nsIURI>>& aDontExtendURIs) { NS_ASSERTION(aPeekOnly || aResult, "Must have non-null out param if not just peeking to see " "whether the binding is ready"); if (aResult) *aResult = nullptr; @@ -779,17 +779,17 @@ nsXBLService::GetBinding(nsIContent* aBo // be notified when the stylesheets and scripts finish loading. protoBinding->AddResourceListener(aBoundElement); return NS_ERROR_FAILURE; // The binding isn't ready yet. } rv = protoBinding->ResolveBaseBinding(); NS_ENSURE_SUCCESS(rv, rv); - nsIURI* baseBindingURI; + nsCOMPtr<nsIURI> baseBindingURI; nsXBLPrototypeBinding* baseProto = protoBinding->GetBasePrototype(); if (baseProto) { baseBindingURI = baseProto->BindingURI(); } else { baseBindingURI = protoBinding->GetBaseBindingURI(); if (baseBindingURI) { uint32_t count = aDontExtendURIs.Length(); @@ -813,28 +813,30 @@ nsXBLService::GetBinding(nsIContent* aBo return NS_ERROR_ILLEGAL_VALUE; } } } } nsRefPtr<nsXBLBinding> baseBinding; if (baseBindingURI) { - nsIContent* child = protoBinding->GetBindingElement(); + nsCOMPtr<nsIContent> child = protoBinding->GetBindingElement(); rv = GetBinding(aBoundElement, baseBindingURI, aPeekOnly, child->NodePrincipal(), aIsReady, getter_AddRefs(baseBinding), aDontExtendURIs); if (NS_FAILED(rv)) return rv; // We aren't ready yet. } *aIsReady = true; if (!aPeekOnly) { // Make a new binding + protoBinding = docInfo->GetPrototypeBinding(ref); + NS_ENSURE_STATE(protoBinding); nsXBLBinding *newBinding = new nsXBLBinding(protoBinding); if (baseBinding) { if (!baseProto) { protoBinding->SetBasePrototype(baseBinding->PrototypeBinding()); } newBinding->SetBaseBinding(baseBinding); }
--- a/dom/xbl/nsXBLService.h +++ b/dom/xbl/nsXBLService.h @@ -104,17 +104,17 @@ protected: * and NS_ERROR_ILLEGAL_VALUE is returned. * * @note This method always calls LoadBindingDocumentInfo(), so it's * enough to funnel all security checks through that function. */ nsresult GetBinding(nsIContent* aBoundElement, nsIURI* aURI, bool aPeekFlag, nsIPrincipal* aOriginPrincipal, bool* aIsReady, nsXBLBinding** aResult, - nsTArray<nsIURI*>& aDontExtendURIs); + nsTArray<nsCOMPtr<nsIURI>>& aDontExtendURIs); // MEMBER VARIABLES public: static bool gDisableChromeCache; static bool gAllowDataURIs; // Whether we should allow data // urls in -moz-binding. Needed for // testing. };
--- a/js/src/jit/arm/CodeGenerator-arm.cpp +++ b/js/src/jit/arm/CodeGenerator-arm.cpp @@ -542,22 +542,24 @@ CodeGeneratorARM::visitDivI(LDivI* ins) MDiv* mir = ins->mir(); Label done; divICommon(mir, lhs, rhs, output, ins->snapshot(), done); if (mir->canTruncateRemainder()) { masm.ma_sdiv(lhs, rhs, output); } else { - ScratchRegisterScope scratch(masm); - masm.ma_sdiv(lhs, rhs, scratch); - masm.ma_mul(scratch, rhs, temp); - masm.ma_cmp(lhs, temp); + { + ScratchRegisterScope scratch(masm); + masm.ma_sdiv(lhs, rhs, temp); + masm.ma_mul(temp, rhs, scratch); + masm.ma_cmp(lhs, scratch); + } bailoutIf(Assembler::NotEqual, ins->snapshot()); - masm.ma_mov(scratch, output); + masm.ma_mov(temp, output); } masm.bind(&done); } extern "C" { extern MOZ_EXPORT int64_t __aeabi_idivmod(int,int); extern MOZ_EXPORT int64_t __aeabi_uidivmod(int,int);
--- a/layout/base/FrameLayerBuilder.cpp +++ b/layout/base/FrameLayerBuilder.cpp @@ -3665,17 +3665,17 @@ GetScrollClipIntersection(nsDisplayListB return DisplayItemClip(); } nsIScrollableFrame* scrollFrame = nsLayoutUtils::GetScrollableFrameFor(f); if (!scrollFrame) { continue; } - const DisplayItemClip* clip = scrollFrame->ComputeScrollClip(aIsCaret); + Maybe<DisplayItemClip> clip = scrollFrame->ComputeScrollClip(aIsCaret); if (clip) { resultClip.IntersectWith(*clip); } } return resultClip; } /* @@ -4537,17 +4537,17 @@ ContainerState::SetupScrollingMetadata(N Maybe<FrameMetricsAndClip> info = scrollFrame->ComputeFrameMetrics(aEntry->mLayer, mContainerReferenceFrame, mParameters, aEntry->mIsCaret); if (!info) { continue; } FrameMetrics& metrics = info->metrics; - const DisplayItemClip* clip = info->clip; + Maybe<DisplayItemClip> clip = info->clip; if (clip && clip->HasClip() && clip->GetRoundedRectCount() > 0) { // The clip in between this scrollframe and its ancestor scrollframe // requires a mask layer. Since this mask layer should not move with // the APZC associated with this FrameMetrics, we attach the mask
--- a/layout/generic/nsGfxScrollFrame.cpp +++ b/layout/generic/nsGfxScrollFrame.cpp @@ -1801,18 +1801,16 @@ ScrollFrameHelper::ScrollFrameHelper(nsC , mScrollGeneration(++sScrollGenerationCounter) , mDestination(0, 0) , mScrollPosAtLastPaint(0, 0) , mRestorePos(-1, -1) , mLastPos(-1, -1) , mResolution(1.0) , mScrollPosForLayerPixelAlignment(-1, -1) , mLastUpdateImagesPos(-1, -1) - , mAncestorClip(nullptr) - , mAncestorClipForCaret(nullptr) , mNeverHasVerticalScrollbar(false) , mNeverHasHorizontalScrollbar(false) , mHasVerticalScrollbar(false) , mHasHorizontalScrollbar(false) , mFrameIsUpdatingScrollbar(false) , mDidHistoryRestore(false) , mIsRoot(aIsRoot) , mClipAllDescendants(aIsRoot) @@ -2781,18 +2779,18 @@ ScrollFrameHelper::BuildDisplayList(nsDi mScrollPosForLayerPixelAlignment = mScrollPosAtLastPaint; } } else { mScrollPosForLayerPixelAlignment = nsPoint(-1,-1); } } // Clear the scroll port clip that was set during the last paint. - mAncestorClip = nullptr; - mAncestorClipForCaret = nullptr; + mAncestorClip = Nothing(); + mAncestorClipForCaret = Nothing(); // We put non-overlay scrollbars in their own layers when this is the root // scroll frame and we are a toplevel content document. In this situation, // the scrollbar(s) would normally be assigned their own layer anyway, since // they're not scrolled with the rest of the document. But when both // scrollbars are visible, the layer's visible rectangle would be the size // of the viewport, so most layer implementations would create a layer buffer // that's much larger than necessary. Creating independent layers for each @@ -3023,30 +3021,30 @@ ScrollFrameHelper::BuildDisplayList(nsDi } } Maybe<DisplayListClipState::AutoSaveRestore> clipStateNonCaret; if (usingDisplayport) { // Capture the clip state of the parent scroll frame. This will be saved // on FrameMetrics for layers with this frame as their animated geoemetry // root. - mAncestorClipForCaret = aBuilder->ClipState().GetCurrentCombinedClip(aBuilder); + mAncestorClipForCaret = ToMaybe(aBuilder->ClipState().GetCurrentCombinedClip(aBuilder)); // Add the non-caret content box clip here so that it gets picked up by // mAncestorClip. if (contentBoxClipForNonCaretContent) { clipStateNonCaret.emplace(aBuilder); clipStatePtr = &*clipStateNonCaret; if (mClipAllDescendants) { clipStateNonCaret->ClipContentDescendants(*contentBoxClipForNonCaretContent); } else { clipStateNonCaret->ClipContainingBlockDescendants(*contentBoxClipForNonCaretContent); } } - mAncestorClip = aBuilder->ClipState().GetCurrentCombinedClip(aBuilder); + mAncestorClip = ToMaybe(aBuilder->ClipState().GetCurrentCombinedClip(aBuilder)); // If we are using a display port, then ignore any pre-existing clip // passed down from our parents. The pre-existing clip would just defeat // the purpose of a display port which is to paint regions that are not // currently visible so that they can be brought into view asynchronously. // Notes: // - The pre-existing clip state will be restored when the // AutoSaveRestore goes out of scope, so there is no permanent change @@ -3116,22 +3114,22 @@ ScrollFrameHelper::BuildDisplayList(nsDi } } // Now display overlay scrollbars and the resizer, if we have one. AppendScrollPartsTo(aBuilder, aDirtyRect, scrolledContent, usingDisplayport, createLayersForScrollbars, true); scrolledContent.MoveTo(aLists); } -const DisplayItemClip* +Maybe<DisplayItemClip> ScrollFrameHelper::ComputeScrollClip(bool aIsForCaret) const { - const DisplayItemClip* ancestorClip = aIsForCaret ? mAncestorClipForCaret : mAncestorClip; + const Maybe<DisplayItemClip>& ancestorClip = aIsForCaret ? mAncestorClipForCaret : mAncestorClip; if (!mShouldBuildScrollableLayer || mIsScrollableLayerInRootContainer) { - return nullptr; + return Nothing(); } return ancestorClip; } Maybe<FrameMetricsAndClip> ScrollFrameHelper::ComputeFrameMetrics(Layer* aLayer, nsIFrame* aContainerReferenceFrame, @@ -3143,17 +3141,17 @@ ScrollFrameHelper::ComputeFrameMetrics(L } bool needsParentLayerClip = true; if (gfxPrefs::LayoutUseContainersForRootFrames() && !mAddClipRectToLayer) { // For containerful frames, the clip is on the container frame. needsParentLayerClip = false; } - const DisplayItemClip* ancestorClip = aIsForCaret ? mAncestorClipForCaret : mAncestorClip; + const Maybe<DisplayItemClip>& ancestorClip = aIsForCaret ? mAncestorClipForCaret : mAncestorClip; nsPoint toReferenceFrame = mOuter->GetOffsetToCrossDoc(aContainerReferenceFrame); bool isRootContent = mIsRoot && mOuter->PresContext()->IsRootContentDocument(); Maybe<nsRect> parentLayerClip; if (needsParentLayerClip) { nsRect clip = nsRect(mScrollPort.TopLeft() + toReferenceFrame, nsLayoutUtils::CalculateCompositionSizeForFrame(mOuter));
--- a/layout/generic/nsGfxScrollFrame.h +++ b/layout/generic/nsGfxScrollFrame.h @@ -377,17 +377,17 @@ public: mLastSmoothScrollOrigin = nullptr; } } bool WantAsyncScroll() const; Maybe<FrameMetricsAndClip> ComputeFrameMetrics( Layer* aLayer, nsIFrame* aContainerReferenceFrame, const ContainerLayerParameters& aParameters, bool aIsForCaret) const; - virtual const mozilla::DisplayItemClip* ComputeScrollClip(bool aIsForCaret) const; + virtual mozilla::Maybe<mozilla::DisplayItemClip> ComputeScrollClip(bool aIsForCaret) const; // nsIScrollbarMediator void ScrollByPage(nsScrollbarFrame* aScrollbar, int32_t aDirection, nsIScrollbarMediator::ScrollSnapMode aSnap = nsIScrollbarMediator::DISABLE_SNAP); void ScrollByWhole(nsScrollbarFrame* aScrollbar, int32_t aDirection, nsIScrollbarMediator::ScrollSnapMode aSnap = nsIScrollbarMediator::DISABLE_SNAP); @@ -456,19 +456,19 @@ public: // The scroll position where we last updated image visibility. nsPoint mLastUpdateImagesPos; nsRect mPrevScrolledRect; FrameMetrics::ViewID mScrollParentID; - // The scroll port clip. Only valid during painting. - const DisplayItemClip* mAncestorClip; - const DisplayItemClip* mAncestorClipForCaret; + // The scroll port clip. + Maybe<DisplayItemClip> mAncestorClip; + Maybe<DisplayItemClip> mAncestorClipForCaret; bool mNeverHasVerticalScrollbar:1; bool mNeverHasHorizontalScrollbar:1; bool mHasVerticalScrollbar:1; bool mHasHorizontalScrollbar:1; bool mFrameIsUpdatingScrollbar:1; bool mDidHistoryRestore:1; // Is this the scrollframe for the document's viewport? @@ -840,17 +840,17 @@ public: } virtual mozilla::Maybe<mozilla::FrameMetricsAndClip> ComputeFrameMetrics( Layer* aLayer, nsIFrame* aContainerReferenceFrame, const ContainerLayerParameters& aParameters, bool aIsForCaret) const override { return mHelper.ComputeFrameMetrics(aLayer, aContainerReferenceFrame, aParameters, aIsForCaret); } - virtual const mozilla::DisplayItemClip* ComputeScrollClip(bool aIsForCaret) const override + virtual mozilla::Maybe<mozilla::DisplayItemClip> ComputeScrollClip(bool aIsForCaret) const override { return mHelper.ComputeScrollClip(aIsForCaret); } virtual bool IsIgnoringViewportClipping() const override { return mHelper.IsIgnoringViewportClipping(); } virtual void MarkScrollbarsDirtyForReflow() const override { mHelper.MarkScrollbarsDirtyForReflow(); @@ -1240,17 +1240,17 @@ public: } virtual mozilla::Maybe<mozilla::FrameMetricsAndClip> ComputeFrameMetrics( Layer* aLayer, nsIFrame* aContainerReferenceFrame, const ContainerLayerParameters& aParameters, bool aIsForCaret) const override { return mHelper.ComputeFrameMetrics(aLayer, aContainerReferenceFrame, aParameters, aIsForCaret); } - virtual const mozilla::DisplayItemClip* ComputeScrollClip(bool aIsForCaret) const override + virtual mozilla::Maybe<mozilla::DisplayItemClip> ComputeScrollClip(bool aIsForCaret) const override { return mHelper.ComputeScrollClip(aIsForCaret); } virtual bool IsIgnoringViewportClipping() const override { return mHelper.IsIgnoringViewportClipping(); } virtual void MarkScrollbarsDirtyForReflow() const override { mHelper.MarkScrollbarsDirtyForReflow();
--- a/layout/generic/nsIScrollableFrame.h +++ b/layout/generic/nsIScrollableFrame.h @@ -6,16 +6,17 @@ /* * interface that provides scroll APIs implemented by scrollable frames */ #ifndef nsIScrollFrame_h___ #define nsIScrollFrame_h___ #include "nsCoord.h" +#include "DisplayItemClip.h" #include "ScrollbarStyles.h" #include "mozilla/Maybe.h" #include "mozilla/gfx/Point.h" #include "nsIScrollbarMediator.h" #include "Units.h" #include "FrameMetrics.h" #define NS_DEFAULT_VERTICAL_SCROLL_DISTANCE 3 @@ -27,25 +28,24 @@ class nsIFrame; class nsPresContext; class nsIContent; class nsRenderingContext; class nsIAtom; class nsDisplayListBuilder; namespace mozilla { struct ContainerLayerParameters; -class DisplayItemClip; namespace layers { class Layer; } // namespace layers struct FrameMetricsAndClip { layers::FrameMetrics metrics; - const DisplayItemClip* clip; + mozilla::Maybe<DisplayItemClip> clip; }; } // namespace mozilla /** * Interface for frames that are scrollable. This interface exposes * APIs for examining scroll state, observing changes to scroll state, * and triggering scrolling. @@ -444,12 +444,12 @@ public: virtual void SetTransformingByAPZ(bool aTransforming) = 0; virtual bool IsTransformingByAPZ() const = 0; /** * Whether or not this frame uses containerful scrolling. */ virtual bool UsesContainerScrolling() const = 0; - virtual const mozilla::DisplayItemClip* ComputeScrollClip(bool aIsForCaret) const = 0; + virtual mozilla::Maybe<mozilla::DisplayItemClip> ComputeScrollClip(bool aIsForCaret) const = 0; }; #endif
--- a/media/libstagefright/binding/H264.cpp +++ b/media/libstagefright/binding/H264.cpp @@ -21,17 +21,16 @@ class BitReader public: explicit BitReader(const mozilla::MediaByteBuffer* aBuffer) : mBitReader(aBuffer->Elements(), aBuffer->Length()) { } uint32_t ReadBits(size_t aNum) { - MOZ_ASSERT(mBitReader.numBitsLeft()); MOZ_ASSERT(aNum <= 32); if (mBitReader.numBitsLeft() < aNum) { return 0; } return mBitReader.getBits(aNum); } uint32_t ReadBit() @@ -43,17 +42,20 @@ public: uint32_t ReadUE() { uint32_t i = 0; while (ReadBit() == 0 && i < 32) { i++; } if (i == 32) { - MOZ_ASSERT(false); + // This can happen if the data is invalid, or if it's + // short, since ReadBit() will return 0 when it runs + // off the end of the buffer. + NS_WARNING("Invalid H.264 data"); return 0; } uint32_t r = ReadBits(i); r += (1 << i) - 1; return r; } // Read signed integer Exp-Golomb-coded.
--- a/modules/libpref/init/all.js +++ b/modules/libpref/init/all.js @@ -2538,19 +2538,19 @@ pref("dom.ipc.plugins.reportCrashURL", t // How long we wait before unloading an idle plugin process. // Defaults to 30 seconds. pref("dom.ipc.plugins.unloadTimeoutSecs", 30); // Asynchronous plugin initialization should only be enabled on non-e10s // channels until some remaining bugs are resolved. #ifdef E10S_TESTING_ONLY -pref("dom.ipc.plugins.asyncInit", false); +pref("dom.ipc.plugins.asyncInit.enabled", false); #else -pref("dom.ipc.plugins.asyncInit", true); +pref("dom.ipc.plugins.asyncInit.enabled", true); #endif pref("dom.ipc.processCount", 1); // Enable caching of Moz2D Path objects for SVG geometry elements pref("svg.path-caching.enabled", true); // Enable the use of display-lists for SVG hit-testing and painting.
--- a/testing/mochitest/Makefile.in +++ b/testing/mochitest/Makefile.in @@ -27,17 +27,16 @@ TEST_HARNESS_BINS := \ GenerateOCSPResponse$(BIN_SUFFIX) \ fix_stack_using_bpsyms.py \ $(NULL) ifeq ($(OS_ARCH),WINNT) TEST_HARNESS_BINS += \ crashinject$(BIN_SUFFIX) \ crashinjectdll$(DLL_SUFFIX) \ - vmwarerecordinghelper$(DLL_SUFFIX) \ $(NULL) endif ifeq ($(OS_ARCH),Darwin) TEST_HARNESS_BINS += fix_macosx_stack.py endif ifeq ($(OS_ARCH),Linux)
--- a/testing/mochitest/mochitest_options.py +++ b/testing/mochitest/mochitest_options.py @@ -25,19 +25,16 @@ try: MachCommandConditions as conditions, ) build_obj = MozbuildObject.from_environment(cwd=here) except ImportError: build_obj = None conditions = None -VMWARE_RECORDING_HELPER_BASENAME = "vmwarerecordinghelper" - - class ArgumentContainer(): __metaclass__ = ABCMeta @abstractproperty def args(self): pass @abstractproperty @@ -285,24 +282,16 @@ class MochitestArguments(ArgumentContain "suppress": True, }], [["--testing-modules-dir"], {"dest": "testingModulesDir", "default": None, "help": "Directory where testing-only JS modules are located.", "suppress": True, }], - [["--use-vmware-recording"], - {"action": "store_true", - "dest": "vmwareRecording", - "default": False, - "help": "Enables recording while the application is running inside a VMware " - "Workstation 7.0 or later VM.", - "suppress": True, - }], [["--repeat"], {"type": int, "default": 0, "help": "Repeat the tests the given number of times.", }], [["--run-until-failure"], {"action": "store_true", "dest": "runUntilFailure", @@ -622,26 +611,16 @@ class MochitestArguments(ArgumentContain elif build_obj: options.certPath = os.path.join(build_obj.topsrcdir, 'build', 'pgo', 'certs') if options.symbolsPath and len(urlparse(options.symbolsPath).scheme) < 2: options.symbolsPath = self.get_full_path(options.symbolsPath, parser.oldcwd) elif not options.symbolsPath and build_obj: options.symbolsPath = os.path.join(build_obj.distdir, 'crashreporter-symbols') - if options.vmwareRecording: - if not mozinfo.isWin: - parser.error( - "use-vmware-recording is only supported on Windows.") - options.vmwareHelperPath = os.path.join( - options.utilityPath, VMWARE_RECORDING_HELPER_BASENAME + ".dll") - if not os.path.exists(options.vmwareHelperPath): - parser.error("%s not found, cannot automate VMware recording." % - options.vmwareHelperPath) - if options.webapprtContent and options.webapprtChrome: parser.error( "Only one of --webapprt-content and --webapprt-chrome may be given.") if options.jsdebugger: options.extraPrefs += [ "devtools.debugger.remote-enabled=true", "devtools.chrome.enabled=true",
--- a/testing/mochitest/runtests.py +++ b/testing/mochitest/runtests.py @@ -1212,17 +1212,16 @@ def parseKeyValue(strings, separator='=' (context, ','.join(missing)), errors=missing) return [string.split(separator, 1) for string in strings] class Mochitest(MochitestUtilsMixin): _active_tests = None certdbNew = False sslTunnel = None - vmwareHelper = None DEFAULT_TIMEOUT = 60.0 mediaDevices = None # XXX use automation.py for test name to avoid breaking legacy # TODO: replace this with 'runtests.py' or 'mochitest' or the like test_name = 'automation.py' def __init__(self, logger_options): @@ -1619,47 +1618,16 @@ class Mochitest(MochitestUtilsMixin): self.killAndGetStack( processPID, utilityPath, debuggerInfo, dump_screen=not debuggerInfo) return foundZombie - def startVMwareRecording(self, options): - """ starts recording inside VMware VM using the recording helper dll """ - assert mozinfo.isWin - from ctypes import cdll - self.vmwareHelper = cdll.LoadLibrary(self.vmwareHelperPath) - if self.vmwareHelper is None: - self.log.warning("runtests.py | Failed to load " - "VMware recording helper") - return - self.log.info("runtests.py | Starting VMware recording.") - try: - self.vmwareHelper.StartRecording() - except Exception as e: - self.log.warning("runtests.py | Failed to start " - "VMware recording: (%s)" % str(e)) - self.vmwareHelper = None - - def stopVMwareRecording(self): - """ stops recording inside VMware VM using the recording helper dll """ - try: - assert mozinfo.isWin - if self.vmwareHelper is not None: - self.log.info("runtests.py | Stopping VMware recording.") - self.vmwareHelper.StopRecording() - except Exception as e: - self.log.warning("runtests.py | Failed to stop " - "VMware recording: (%s)" % str(e)) - self.log.exception('Error stopping VMWare recording') - - self.vmwareHelper = None - def runApp(self, testUrl, env, app, profile, extraArgs, utilityPath, debuggerInfo=None, @@ -2237,19 +2205,16 @@ class Mochitest(MochitestUtilsMixin): # then again to actually run mochitest if options.timeout: timeout = options.timeout + 30 elif options.debugger or not options.autorun: timeout = None else: timeout = 330.0 # default JS harness timeout is 300 seconds - if options.vmwareRecording: - self.startVMwareRecording(options) - # detect shutdown leaks for m-bc runs detectShutdownLeaks = mozinfo.info[ "debug"] and options.browserChrome and not options.webapprtChrome self.log.info("runtests.py | Running tests: start.\n") try: status = self.runApp(testURL, self.browserEnv, @@ -2271,18 +2236,16 @@ class Mochitest(MochitestUtilsMixin): status = -1 except: traceback.print_exc() self.log.error( "Automation Error: Received unexpected exception while running application\n") status = 1 finally: - if options.vmwareRecording: - self.stopVMwareRecording() self.stopServers() mozleak.process_leak_log( self.leak_report_file, leak_thresholds=options.leakThresholds, ignore_missing_leaks=options.ignoreMissingLeaks, log=self.log, )
--- a/toolkit/components/telemetry/Histograms.json +++ b/toolkit/components/telemetry/Histograms.json @@ -7329,16 +7329,23 @@ "description": "Accumulates type of content (mixed, mixed passive, unmixed) per page load" }, "MIXED_CONTENT_UNBLOCK_COUNTER": { "expires_in_version": "never", "kind": "enumerated", "n_values": 3, "description": "A simple counter of daily mixed-content unblock operations and top documents loaded" }, + "MIXED_CONTENT_HSTS": { + "alert_emails": ["seceng@mozilla.org"], + "expires_in_version": "never", + "kind": "enumerated", + "n_values": 10, + "description": "How often would blocked mixed content be allowed if HSTS upgrades were allowed? 0=display/no-HSTS, 1=display/HSTS, 2=active/no-HSTS, 3=active/HSTS" + }, "NTLM_MODULE_USED_2": { "expires_in_version": "never", "kind": "enumerated", "n_values": 8, "description": "The module used for the NTLM protocol (Windows_API, Kerberos, Samba_auth or Generic) and whether or not the authentication was used to connect to a proxy server. This data is collected only once per session (at first NTLM authentification) ; fixed version." }, "FX_THUMBNAILS_BG_QUEUE_SIZE_ON_CAPTURE": { "expires_in_version": "default",
--- a/toolkit/components/telemetry/TelemetryEnvironment.jsm +++ b/toolkit/components/telemetry/TelemetryEnvironment.jsm @@ -106,17 +106,17 @@ const DEFAULT_ENVIRONMENT_PREFS = new Ma ["browser.startup.homepage", {what: RECORD_PREF_STATE}], ["browser.startup.page", {what: RECORD_PREF_VALUE}], ["browser.urlbar.suggest.searches", {what: RECORD_PREF_VALUE}], ["browser.urlbar.unifiedcomplete", {what: RECORD_PREF_VALUE}], ["browser.urlbar.userMadeSearchSuggestionsChoice", {what: RECORD_PREF_VALUE}], ["devtools.chrome.enabled", {what: RECORD_PREF_VALUE}], ["devtools.debugger.enabled", {what: RECORD_PREF_VALUE}], ["devtools.debugger.remote-enabled", {what: RECORD_PREF_VALUE}], - ["dom.ipc.plugins.asyncInit", {what: RECORD_PREF_VALUE}], + ["dom.ipc.plugins.asyncInit.enabled", {what: RECORD_PREF_VALUE}], ["dom.ipc.plugins.enabled", {what: RECORD_PREF_VALUE}], ["dom.ipc.processCount", {what: RECORD_PREF_VALUE, requiresRestart: true}], ["experiments.manifest.uri", {what: RECORD_PREF_VALUE}], ["extensions.autoDisableScopes", {what: RECORD_PREF_VALUE}], ["extensions.enabledScopes", {what: RECORD_PREF_VALUE}], ["extensions.blocklist.enabled", {what: RECORD_PREF_VALUE}], ["extensions.blocklist.url", {what: RECORD_PREF_VALUE}], ["extensions.strictCompatibility", {what: RECORD_PREF_VALUE}],
--- a/toolkit/components/telemetry/TelemetrySession.jsm +++ b/toolkit/components/telemetry/TelemetrySession.jsm @@ -51,17 +51,17 @@ const MIN_SUBSESSION_LENGTH_MS = Prefere #expand const HISTOGRAMS_FILE_VERSION = "__HISTOGRAMS_FILE_VERSION__"; const LOGGER_NAME = "Toolkit.Telemetry"; const LOGGER_PREFIX = "TelemetrySession" + (Utils.isContentProcess ? "#content::" : "::"); const PREF_BRANCH = "toolkit.telemetry."; const PREF_PREVIOUS_BUILDID = PREF_BRANCH + "previousBuildID"; const PREF_FHR_UPLOAD_ENABLED = "datareporting.healthreport.uploadEnabled"; -const PREF_ASYNC_PLUGIN_INIT = "dom.ipc.plugins.asyncInit"; +const PREF_ASYNC_PLUGIN_INIT = "dom.ipc.plugins.asyncInit.enabled"; const PREF_UNIFIED = PREF_BRANCH + "unified"; const MESSAGE_TELEMETRY_PAYLOAD = "Telemetry:Payload"; const MESSAGE_TELEMETRY_GET_CHILD_PAYLOAD = "Telemetry:GetChildPayload"; const DATAREPORTING_DIRECTORY = "datareporting"; const ABORTED_SESSION_FILE_NAME = "aborted-session-ping";
--- a/widget/cocoa/VibrancyManager.mm +++ b/widget/cocoa/VibrancyManager.mm @@ -206,16 +206,22 @@ enum { NSVisualEffectStateInactive }; enum { NSVisualEffectMaterialTitlebar = 3 }; #endif +#if !defined(MAC_OS_X_VERSION_10_11) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_11 +enum { + NSVisualEffectMaterialMenu = 5 +}; +#endif + static NSUInteger VisualEffectStateForVibrancyType(VibrancyType aType) { switch (aType) { case VibrancyType::TOOLTIP: case VibrancyType::MENU: case VibrancyType::HIGHLIGHTED_MENUITEM: case VibrancyType::SHEET: @@ -258,23 +264,24 @@ VibrancyManager::CreateEffectView(Vibran Class EffectViewClass = HasVibrantForeground(aType) ? EffectViewClassWithForegroundVibrancy : EffectViewClassWithoutForegroundVibrancy; NSView* effectView = [[EffectViewClass alloc] initWithFrame:aRect]; [effectView performSelector:@selector(setAppearance:) withObject:AppearanceForVibrancyType(aType)]; [effectView setState:VisualEffectStateForVibrancyType(aType)]; if (aType == VibrancyType::MENU) { - // NSVisualEffectMaterialTitlebar doesn't match the native menu look - // perfectly but comes pretty close. Ideally we'd use a material with - // materialTypeName "MacLight", since that's what menus use, but there's - // no entry with that material in the internalMaterialType-to- - // CGSWindowBackdropViewSpec table which NSVisualEffectView consults when - // setting up the effect. - [effectView setMaterial:NSVisualEffectMaterialTitlebar]; + if (nsCocoaFeatures::OnElCapitanOrLater()) { + [effectView setMaterial:NSVisualEffectMaterialMenu]; + } else { + // Before 10.11 there is no material that perfectly matches the menu + // look. Of all available material types, NSVisualEffectMaterialTitlebar + // is the one that comes closest. + [effectView setMaterial:NSVisualEffectMaterialTitlebar]; + } } else if (aType == VibrancyType::HIGHLIGHTED_MENUITEM) { [effectView setMaterial:NSVisualEffectMaterialMenuItem]; if ([effectView respondsToSelector:@selector(setEmphasized:)]) { [effectView setEmphasized:YES]; } } return effectView;
--- a/widget/cocoa/nsChildView.mm +++ b/widget/cocoa/nsChildView.mm @@ -6560,17 +6560,17 @@ HandleEvent(CGEventTapProxy aProxy, CGEv CFRunLoopStop(CFRunLoopGetCurrent()); } - (void)shutdownAndReleaseCalledOnAnyThread { [self performSelector:@selector(shutdownAndReleaseCalledOnEventThread) onThread:mThread withObject:nil waitUntilDone:NO]; } -static const CGEventField kCGWindowNumberField = 51; +static const CGEventField kCGWindowNumberField = (const CGEventField) 51; // Called on scroll thread - (void)handleEvent:(CGEventRef)cgEvent type:(CGEventType)type { if (type != kCGEventScrollWheel) { return; }
--- a/widget/cocoa/nsCocoaFeatures.h +++ b/widget/cocoa/nsCocoaFeatures.h @@ -17,16 +17,17 @@ public: static int32_t OSXVersion(); static int32_t OSXVersionMajor(); static int32_t OSXVersionMinor(); static int32_t OSXVersionBugFix(); static bool OnLionOrLater(); static bool OnMountainLionOrLater(); static bool OnMavericksOrLater(); static bool OnYosemiteOrLater(); + static bool OnElCapitanOrLater(); static bool AccelerateByDefault(); static bool IsAtLeastVersion(int32_t aMajor, int32_t aMinor, int32_t aBugFix=0); // These are utilities that do not change or depend on the value of mOSXVersion // and instead just encapsulate the encoding algorithm. Note that GetVersion // actually adjusts to the lowest supported OS, so it will always return // a "supported" version. GetSystemVersion does not make any modifications.
--- a/widget/cocoa/nsCocoaFeatures.mm +++ b/widget/cocoa/nsCocoaFeatures.mm @@ -13,16 +13,17 @@ #define MAC_OS_X_VERSION_MASK 0x0000FFFF #define MAC_OS_X_VERSION_10_0_HEX 0x00001000 #define MAC_OS_X_VERSION_10_6_HEX 0x00001060 #define MAC_OS_X_VERSION_10_7_HEX 0x00001070 #define MAC_OS_X_VERSION_10_8_HEX 0x00001080 #define MAC_OS_X_VERSION_10_9_HEX 0x00001090 #define MAC_OS_X_VERSION_10_10_HEX 0x000010A0 +#define MAC_OS_X_VERSION_10_11_HEX 0x000010B0 #include "nsCocoaFeatures.h" #include "nsCocoaUtils.h" #include "nsDebug.h" #include "nsObjCExceptions.h" #import <Cocoa/Cocoa.h> @@ -168,16 +169,22 @@ nsCocoaFeatures::OnMavericksOrLater() /* static */ bool nsCocoaFeatures::OnYosemiteOrLater() { return (OSXVersion() >= MAC_OS_X_VERSION_10_10_HEX); } /* static */ bool +nsCocoaFeatures::OnElCapitanOrLater() +{ + return (OSXVersion() >= MAC_OS_X_VERSION_10_11_HEX); +} + +/* static */ bool nsCocoaFeatures::AccelerateByDefault() { return IsAtLeastVersion(10, 6, 3); } /* static */ bool nsCocoaFeatures::IsAtLeastVersion(int32_t aMajor, int32_t aMinor, int32_t aBugFix) {