author | Ciure Andrei <aciure@mozilla.com> |
Wed, 03 Oct 2018 19:45:50 +0300 | |
changeset 495165 | 5099db41a664d28a75e0bc2c384a111bf5f2b044 |
parent 495164 | 9368d2715723b4f692b67ae088c125cbb26cb2ea (current diff) |
parent 495121 | 3530790e23d18b6f8f73471e367a942f201dd452 (diff) |
child 495166 | 60fed71d173f2c67d8ddf5ead0d87efd889cdb5c |
push id | 9984 |
push user | ffxbld-merge |
push date | Mon, 15 Oct 2018 21:07:35 +0000 |
treeherder | mozilla-beta@183d27ea8570 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | merge |
milestone | 64.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/accessible/tests/mochitest/value/test_progress.xul +++ b/accessible/tests/mochitest/value/test_progress.xul @@ -17,16 +17,17 @@ <script type="application/javascript"> <![CDATA[ function doTest() { // progressmeter testValue("pm1", "50%", 50, 0, 100, 0); testValue("pm2", "50%", 500, 0, 1000, 0); testValue("pm3", "", 0, 0, 100, 0); + testValue("pm4", "", 0, 0, 100, 0); // aria progressbar testValue("ariapb1", "500", 500, 0, 1000, 0); testValue("ariapb2", "", 0, 0, 0, 0); SimpleTest.finish(); } @@ -45,19 +46,22 @@ <p id="display"></p> <div id="content" style="display: none"> </div> <pre id="test"> </pre> </body> <!-- progressmeter --> - <progressmeter id="pm1" value="50"/> - <progressmeter id="pm2" value="500" max="1000"/> - <progressmeter id="pm3"/> + <vbox> + <progressmeter id="pm1" value="50"/> + <progressmeter id="pm2" value="500" max="1000"/> + <progressmeter id="pm3"/> + <progressmeter id="pm4" mode="undetermined"/> + </vbox> <!-- aria --> <description id="ariapb1" role="progressbar" aria-valuenow="500" aria-valuemin="0" aria-valuemax="1000"/> <description id="ariapb2" role="progressbar"/> </hbox> </window>
--- a/browser/base/content/aboutRestartRequired.xhtml +++ b/browser/base/content/aboutRestartRequired.xhtml @@ -1,56 +1,43 @@ -<?xml version="1.0" encoding="UTF-8"?> - +<?xml version="1.0" encoding="UTF-8" ?> <!-- 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/. --> - -<!DOCTYPE html [ - <!ENTITY % htmlDTD - PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "DTD/xhtml1-strict.dtd"> - %htmlDTD; - <!ENTITY % globalDTD - SYSTEM "chrome://global/locale/global.dtd"> - %globalDTD; - <!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" > - %brandDTD; - <!ENTITY % restartRequiredDTD - SYSTEM "chrome://browser/locale/aboutRestartRequired.dtd"> - %restartRequiredDTD; -]> +<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> - <title>&restartRequired.title;</title> + <title data-l10n-id="restart-required-title"></title> <link rel="stylesheet" type="text/css" media="all" href="chrome://browser/skin/aboutRestartRequired.css"/> <!-- If the location of the favicon is changed here, the FAVICON_ERRORPAGE_URL symbol in toolkit/components/places/src/nsFaviconService.h should be updated. --> - <link rel="icon" id="favicon" + <link rel="icon" type="image/png" id="favicon" href="chrome://global/skin/icons/warning.svg"/> + <link rel="localization" href="branding/brand.ftl"/> + <link rel="localization" href="browser/aboutRestartRequired.ftl"/> </head> - - <body dir="&locale.dir;"> + <body> <!-- PAGE CONTAINER (for styling purposes only) --> <div id="errorPageContainer"> <div id="text-container"> <div id="title"> - <h1 id="title-text">&restartRequired.header;</h1> + <h1 id="title-text" data-l10n-id="restart-required-header"></h1> </div> <div id="errorLongContent"> - <div id="errorLongDesc">&restartRequired.description;</div> + <div id="errorLongDesc"> + <p data-l10n-id="restart-required-intro"></p> + <p data-l10n-id="restart-required-description"></p> + </div> </div> </div> <!-- Restart Button --> <div id="restartButtonContainer" class="button-container"> - <button id="restart" class="primary" autocomplete="off" - onclick="AboutRestartRequired.restart();"> - &restartButton.label; - </button> + <button id="restart" data-l10n-id="restart-button-label" class="primary" autocomplete="off" + onclick="AboutRestartRequired.restart();"></button> </div> </div> </body> <script type="text/javascript" - src="chrome://browser/content/aboutRestartRequired.js"/> + src="chrome://browser/content/aboutRestartRequired.js"/> </html>
--- a/browser/components/downloads/DownloadsViewUI.jsm +++ b/browser/components/downloads/DownloadsViewUI.jsm @@ -9,16 +9,17 @@ "use strict"; var EXPORTED_SYMBOLS = [ "DownloadsViewUI", ]; ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm"); +ChromeUtils.import("resource://gre/modules/AppConstants.jsm"); XPCOMUtils.defineLazyModuleGetters(this, { BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.jsm", Downloads: "resource://gre/modules/Downloads.jsm", DownloadUtils: "resource://gre/modules/DownloadUtils.jsm", DownloadsCommon: "resource:///modules/DownloadsCommon.jsm", FileUtils: "resource://gre/modules/FileUtils.jsm", OS: "resource://gre/modules/osfile.jsm", @@ -423,18 +424,25 @@ this.DownloadsViewUI.DownloadElementShel } // These attributes are set in all code paths, because they are relevant for // downloads that are in progress and for other states where the progress // bar is visible. if (this.download.hasProgress) { this.element.setAttribute("progressmode", "normal"); this.element.setAttribute("progress", this.download.progress); + this.element.removeAttribute("progress-undetermined"); } else { - this.element.setAttribute("progressmode", "undetermined"); + // Suppress the progress animation on Linux for the Downloads Panel + // progress bars when the file size is unknown. + this.element.setAttribute("progressmode", + AppConstants.platform == "linux" ? "normal" : + "undetermined"); + this.element.setAttribute("progress-undetermined", "true"); + this.element.setAttribute("progress", "100"); } if (progressPaused) { this.element.setAttribute("progresspaused", "true"); } else { this.element.removeAttribute("progresspaused"); }
--- a/browser/components/downloads/content/download.xml +++ b/browser/components/downloads/content/download.xml @@ -38,17 +38,17 @@ --> <xul:description class="downloadTarget" crop="center" xbl:inherits="value=displayName,tooltiptext=displayName"/> <xul:progressmeter anonid="progressmeter" class="downloadProgress" min="0" max="100" - xbl:inherits="mode=progressmode,value=progress,paused=progresspaused"/> + xbl:inherits="progress-undetermined,mode=progressmode,value=progress,paused=progresspaused"/> <xul:description class="downloadDetails downloadDetailsNormal" crop="end" xbl:inherits="value=status,tooltiptext=status"/> <xul:description class="downloadDetails downloadDetailsHover" crop="end" xbl:inherits="value=hoverStatus"/> <xul:description class="downloadDetails downloadDetailsButtonHover" crop="end"
--- a/browser/components/sessionstore/SessionStore.jsm +++ b/browser/components/sessionstore/SessionStore.jsm @@ -1041,20 +1041,16 @@ var SessionStoreInternal = { if (target.namespaceURI == NS_XUL && target.localName == "browser" && target.frameLoader && target.permanentKey) { this._lastKnownFrameLoader.set(target.permanentKey, target.frameLoader); this.resetEpoch(target); } break; - case "BrowserWillChangeProcess": - let promise = TabStateFlusher.flush(target); - target.frameLoader.addProcessChangeBlockingPromise(promise); - break; case "BrowserChangedProcess": let newEpoch = 1 + Math.max(this.getCurrentEpoch(target), this.getCurrentEpoch(aEvent.otherBrowser)); this.setCurrentEpoch(target, newEpoch); target.messageManager.sendAsyncMessage("SessionStore:becomeActiveProcess", { epoch: newEpoch, }); break; @@ -1120,17 +1116,16 @@ var SessionStoreInternal = { // notification of tab add/remove/selection/show/hide TAB_EVENTS.forEach(function(aEvent) { tabbrowser.tabContainer.addEventListener(aEvent, this, true); }, this); // Keep track of a browser's latest frameLoader. aWindow.gBrowser.addEventListener("XULFrameLoaderCreated", this); aWindow.gBrowser.addEventListener("BrowserChangedProcess", this); - aWindow.gBrowser.addEventListener("BrowserWillChangeProcess", this); }, /** * Initializes a given window. * * Windows are registered as soon as they are created but we need to wait for * the session file to load, and the initial window's delayed startup to * finish before initializing a window, i.e. restoring data into it. @@ -1386,17 +1381,16 @@ var SessionStoreInternal = { let browsers = Array.from(tabbrowser.browsers); TAB_EVENTS.forEach(function(aEvent) { tabbrowser.tabContainer.removeEventListener(aEvent, this, true); }, this); aWindow.gBrowser.removeEventListener("XULFrameLoaderCreated", this); aWindow.gBrowser.removeEventListener("BrowserChangedProcess", this); - aWindow.gBrowser.removeEventListener("BrowserWillChangeProcess", this); let winData = this._windows[aWindow.__SSi]; // Collect window data only when *not* closed during shutdown. if (RunState.isRunning) { // Grab the most recent window data. The tab data will be updated // once we finish flushing all of the messages from the tabs. let tabMap = this._collectWindowData(aWindow);
--- a/browser/components/sessionstore/test/browser.ini +++ b/browser/components/sessionstore/test/browser.ini @@ -238,17 +238,17 @@ skip-if = (os == 'win' && bits == 64) || # Disabled for frequent intermittent failures [browser_464620_a.js] skip-if = true [browser_464620_b.js] skip-if = true # Disabled on OS X: [browser_625016.js] -skip-if = os == "mac" || (os == "linux" && debug) # linux, Bug 1348583 +skip-if = (os == "mac") || (os == "linux" && debug) || (os == "linux" && asan && bits == 64) # linux, Bug 1348583 # Bug 1430977 [browser_906076_lazy_tabs.js] [browser_911547.js] [browser_1284886_suspend_tab.js] skip-if = !e10s [browser_async_window_flushing.js] [browser_focus_after_restore.js] [browser_forget_async_closings.js]
--- a/browser/config/mozconfigs/linux32/nightly +++ b/browser/config/mozconfigs/linux32/nightly @@ -1,7 +1,8 @@ . "$topsrcdir/browser/config/mozconfigs/linux32/common-opt" ac_add_options --enable-verify-mar +ac_add_options --enable-dmd ac_add_options --with-branding=browser/branding/nightly . "$topsrcdir/build/mozconfig.common.override"
deleted file mode 100644 --- a/browser/config/mozconfigs/linux32/opt-dmd +++ /dev/null @@ -1,3 +0,0 @@ -ac_add_options --enable-dmd - -. "$topsrcdir/browser/config/mozconfigs/linux32/nightly"
--- a/browser/config/mozconfigs/linux32/valgrind +++ b/browser/config/mozconfigs/linux32/valgrind @@ -1,10 +1,11 @@ . $topsrcdir/browser/config/mozconfigs/linux32/nightly ac_add_options --enable-valgrind +ac_add_options --disable-dmd ac_add_options --disable-jemalloc ac_add_options --disable-install-strip ac_add_options --disable-gtest-in-build # Include the override mozconfig again (even though the above includes it) # since it's supposed to override everything. . "$topsrcdir/build/mozconfig.common.override"
--- a/browser/config/mozconfigs/linux64/nightly +++ b/browser/config/mozconfigs/linux64/nightly @@ -1,7 +1,8 @@ . "$topsrcdir/browser/config/mozconfigs/linux64/common-opt" ac_add_options --enable-verify-mar +ac_add_options --enable-dmd ac_add_options --with-branding=browser/branding/nightly . "$topsrcdir/build/mozconfig.common.override"
deleted file mode 100644 --- a/browser/config/mozconfigs/linux64/opt-dmd +++ /dev/null @@ -1,3 +0,0 @@ -ac_add_options --enable-dmd - -. "$topsrcdir/browser/config/mozconfigs/linux64/nightly"
--- a/browser/config/mozconfigs/linux64/valgrind +++ b/browser/config/mozconfigs/linux64/valgrind @@ -1,10 +1,11 @@ . $topsrcdir/browser/config/mozconfigs/linux64/nightly ac_add_options --enable-valgrind +ac_add_options --disable-dmd ac_add_options --disable-jemalloc ac_add_options --disable-install-strip ac_add_options --disable-gtest-in-build # Include the override mozconfig again (even though the above includes it) # since it's supposed to override everything. . "$topsrcdir/build/mozconfig.common.override"
--- a/browser/config/mozconfigs/macosx64/nightly +++ b/browser/config/mozconfigs/macosx64/nightly @@ -1,13 +1,14 @@ . "$topsrcdir/browser/config/mozconfigs/macosx64/common-opt" ac_add_options --disable-install-strip ac_add_options --enable-verify-mar ac_add_options --enable-instruments +ac_add_options --enable-dmd # Cross-compiled builds fail when dtrace is enabled if test `uname -s` != Linux; then ac_add_options --enable-dtrace fi ac_add_options --enable-lto
deleted file mode 100644 --- a/browser/config/mozconfigs/macosx64/opt-dmd +++ /dev/null @@ -1,5 +0,0 @@ -ac_add_options --enable-dmd - -. "$topsrcdir/browser/config/mozconfigs/macosx64/nightly" - -ac_add_options --disable-lto
--- a/browser/config/mozconfigs/whitelist +++ b/browser/config/mozconfigs/whitelist @@ -4,16 +4,17 @@ whitelist = { 'release': {}, 'nightly': {}, } all_platforms = ['win64', 'win32', 'linux32', 'linux64', 'macosx64'] for platform in all_platforms: whitelist['nightly'][platform] = [ + 'ac_add_options --enable-dmd', 'ac_add_options --with-branding=browser/branding/nightly', ] whitelist['nightly']['macosx64'] += [ 'ac_add_options --disable-install-strip', 'ac_add_options --enable-instruments', 'ac_add_options --enable-dtrace', 'if test `uname -s` != Linux; then',
--- a/browser/config/mozconfigs/win32/nightly +++ b/browser/config/mozconfigs/win32/nightly @@ -1,8 +1,9 @@ . "$topsrcdir/build/mozconfig.win-common" . "$topsrcdir/browser/config/mozconfigs/win32/common-opt" ac_add_options --enable-verify-mar +ac_add_options --enable-dmd ac_add_options --with-branding=browser/branding/nightly . "$topsrcdir/build/mozconfig.common.override"
deleted file mode 100644 --- a/browser/config/mozconfigs/win32/opt-dmd +++ /dev/null @@ -1,3 +0,0 @@ -ac_add_options --enable-dmd - -. "$topsrcdir/browser/config/mozconfigs/win32/nightly"
--- a/browser/config/mozconfigs/win64/nightly +++ b/browser/config/mozconfigs/win64/nightly @@ -1,9 +1,10 @@ . "$topsrcdir/build/mozconfig.win-common" . "$topsrcdir/browser/config/mozconfigs/win64/common-win64" . "$topsrcdir/browser/config/mozconfigs/win64/common-opt" ac_add_options --enable-verify-mar +ac_add_options --enable-dmd ac_add_options --with-branding=browser/branding/nightly . "$topsrcdir/build/mozconfig.common.override"
deleted file mode 100644 --- a/browser/config/mozconfigs/win64/opt-dmd +++ /dev/null @@ -1,3 +0,0 @@ -ac_add_options --enable-dmd - -. "$topsrcdir/browser/config/mozconfigs/win64/nightly"
new file mode 100644 --- /dev/null +++ b/browser/locales/en-US/browser/aboutRestartRequired.ftl @@ -0,0 +1,11 @@ +# 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/. + +restart-required-title = Restart Required +restart-required-header = Sorry. We just need to do one small thing to keep going. +restart-required-intro = We have just installed an update in the background. Click Restart { -brand-short-name } to finish + applying it. +restart-required-description = We will restore all your pages, windows and tabs afterwards, so you can be on your way quickly. + +restart-button-label = Restart { -brand-short-name }
deleted file mode 100644 --- a/browser/locales/en-US/chrome/browser/aboutRestartRequired.dtd +++ /dev/null @@ -1,13 +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/. --> - -<!ENTITY restartRequired.title "Restart Required"> - -<!ENTITY restartRequired.header "Sorry. We just need to do one small thing to keep going."> -<!ENTITY restartRequired.description " -<p>We have just installed an update in the background. Click Restart &brandShortName; to finish applying it.</p> -<p>We will restore all your pages, windows and tabs afterwards, so you can be on your way quickly.</p> -"> - -<!ENTITY restartButton.label "Restart &brandShortName;">
--- a/browser/locales/jar.mn +++ b/browser/locales/jar.mn @@ -13,17 +13,16 @@ @AB_CD@.jar: % locale browser @AB_CD@ %locale/browser/ # bookmarks.html is produced by LOCALIZED_GENERATED_FILES. locale/browser/bookmarks.html (bookmarks.html) locale/browser/aboutDialog.dtd (%chrome/browser/aboutDialog.dtd) locale/browser/aboutPrivateBrowsing.dtd (%chrome/browser/aboutPrivateBrowsing.dtd) locale/browser/aboutRobots.dtd (%chrome/browser/aboutRobots.dtd) locale/browser/accounts.properties (%chrome/browser/accounts.properties) - locale/browser/aboutRestartRequired.dtd (%chrome/browser/aboutRestartRequired.dtd) locale/browser/aboutSearchReset.dtd (%chrome/browser/aboutSearchReset.dtd) locale/browser/aboutSessionRestore.dtd (%chrome/browser/aboutSessionRestore.dtd) locale/browser/aboutTabCrashed.dtd (%chrome/browser/aboutTabCrashed.dtd) locale/browser/browser.dtd (%chrome/browser/browser.dtd) locale/browser/baseMenuOverlay.dtd (%chrome/browser/baseMenuOverlay.dtd) locale/browser/browser.properties (%chrome/browser/browser.properties) locale/browser/customizableui/customizableWidgets.properties (%chrome/browser/customizableui/customizableWidgets.properties) locale/browser/lightweightThemes.properties (%chrome/browser/lightweightThemes.properties)
--- a/browser/themes/osx/places/sidebar.css +++ b/browser/themes/osx/places/sidebar.css @@ -21,17 +21,17 @@ min-height: 32px; } .sidebar-placesTreechildren::-moz-tree-separator { border-top: 1px solid #505d6d; margin: 0 10px; } -.sidebar-panel:not([lwt-sidebar]) .sidebar-placesTreechildren::-moz-tree-row(selected) { +.sidebar-panel:not([lwt-sidebar]) .sidebar-placesTreechildren::-moz-tree-row(selected,blur) { -moz-appearance: -moz-mac-source-list-selection; -moz-font-smoothing-background-color: -moz-mac-source-list-selection; } .sidebar-panel:not([lwt-sidebar-highlight]) .sidebar-placesTreechildren::-moz-tree-row(selected,focus) { -moz-appearance: -moz-mac-active-source-list-selection; -moz-font-smoothing-background-color: -moz-mac-active-source-list-selection; }
--- a/browser/themes/osx/syncedtabs/sidebar.css +++ b/browser/themes/osx/syncedtabs/sidebar.css @@ -13,17 +13,17 @@ body:not([lwt-sidebar]) .content-contain .item-title-container { box-sizing: border-box; align-items: center; height: 24px; font-size: 12px; } -body:not([lwt-sidebar]) .item.selected > .item-title-container { +body:not([lwt-sidebar]) .item.selected:not(:focus) > .item-title-container { -moz-appearance: -moz-mac-source-list-selection; -moz-font-smoothing-background-color: -moz-mac-source-list-selection; } body:not([lwt-sidebar-highlight]) .item.selected:focus > .item-title-container { -moz-appearance: -moz-mac-active-source-list-selection; -moz-font-smoothing-background-color: -moz-mac-active-source-list-selection; }
--- a/browser/themes/shared/downloads/progressmeter.inc.css +++ b/browser/themes/shared/downloads/progressmeter.inc.css @@ -8,33 +8,28 @@ /* for overriding rules in progressmeter.css */ -moz-appearance: none; border-style: none; background-color: transparent; min-width: initial; min-height: initial; } -.downloadProgress[mode="undetermined"] { - /* for overriding rules on global.css in Linux. */ - -moz-binding: url("chrome://global/content/bindings/progressmeter.xml#progressmeter"); -} - .downloadProgress > .progress-bar { background-color: Highlight; /* for overriding rules in progressmeter.css */ -moz-appearance: none; } .downloadProgress[paused="true"] > .progress-bar { background-color: GrayText; } -.downloadProgress[mode="undetermined"] > .progress-bar { +.downloadProgress[progress-undetermined] > .progress-bar { /* Make a white reflecting animation. Create a gradient with 2 identical pattern, and enlarge the size to 200%. This allows us to animate background-position with percentage. */ background-image: linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.5) 25%, transparent 50%, rgba(255,255,255,0.5) 75%, transparent 100%); @@ -51,17 +46,17 @@ border-inline-end-width: 1px; background-color: ButtonFace; } .downloadProgress[value="0"] > .progress-remainder { border-width: 1px; } -.downloadProgress > .progress-remainder[mode="undetermined"] { +.downloadProgress[progress-undetermined] > .progress-remainder { border: none; } @keyframes downloadProgressSlideX { 0% { background-position: 0 0; } 100% {
--- a/devtools/client/framework/components/MeatballMenu.js +++ b/devtools/client/framework/components/MeatballMenu.js @@ -1,26 +1,26 @@ /* 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/. */ "use strict"; -const { PureComponent } = require("devtools/client/shared/vendor/react"); +const { PureComponent, createFactory } = require("devtools/client/shared/vendor/react"); const PropTypes = require("devtools/client/shared/vendor/react-prop-types"); -const { createFactory } = require("devtools/client/shared/vendor/react"); const MenuItem = createFactory( require("devtools/client/shared/components/menu/MenuItem") ); const MenuList = createFactory( require("devtools/client/shared/components/menu/MenuList") ); const dom = require("devtools/client/shared/vendor/react-dom-factories"); const { hr } = dom; -const { openDocLink } = require("devtools/client/shared/link"); -const { assert } = require("devtools/shared/DevToolsUtils"); + +loader.lazyRequireGetter(this, "openDocLink", "devtools/client/shared/link", true); +loader.lazyRequireGetter(this, "assert", "devtools/shared/DevToolsUtils", true); const openDevToolsDocsLink = () => { openDocLink( "https://developer.mozilla.org/docs/Tools?utm_source=devtools&utm_medium=tabbar-menu" ); }; const openCommunityLink = () => {
--- a/dom/base/Navigator.cpp +++ b/dom/base/Navigator.cpp @@ -1269,21 +1269,27 @@ Navigator::RequestGamepadServiceTest() mGamepadServiceTest = GamepadServiceTest::CreateTestService(mWindow); } return mGamepadServiceTest; } already_AddRefed<Promise> Navigator::GetVRDisplays(ErrorResult& aRv) { - if (!mWindow || !mWindow->GetDocShell()) { + if (!mWindow || !mWindow->GetDocShell() || !mWindow->GetExtantDoc()) { aRv.Throw(NS_ERROR_UNEXPECTED); return nullptr; } + if (!FeaturePolicyUtils::IsFeatureAllowed(mWindow->GetExtantDoc(), + NS_LITERAL_STRING("vr"))) { + aRv.Throw(NS_ERROR_DOM_SECURITY_ERR); + return nullptr; + } + nsGlobalWindowInner* win = nsGlobalWindowInner::Cast(mWindow); win->NotifyVREventListenerAdded(); RefPtr<Promise> p = Promise::Create(mWindow->AsGlobal(), aRv); if (aRv.Failed()) { return nullptr; }
--- a/dom/base/nsFrameLoader.cpp +++ b/dom/base/nsFrameLoader.cpp @@ -90,17 +90,16 @@ #include "nsSandboxFlags.h" #include "mozilla/layers/CompositorBridgeChild.h" #include "mozilla/dom/CustomEvent.h" #include "mozilla/dom/ipc/StructuredCloneData.h" #include "mozilla/WebBrowserPersistLocalDocument.h" #include "mozilla/dom/Promise.h" #include "mozilla/dom/PromiseNativeHandler.h" -#include "mozilla/dom/GroupedHistoryEvent.h" #include "mozilla/dom/ParentSHistory.h" #include "mozilla/dom/ChildSHistory.h" #include "mozilla/dom/HTMLBodyElement.h" #include "mozilla/ContentPrincipal.h" #ifdef XP_WIN @@ -161,17 +160,16 @@ NS_INTERFACE_MAP_END nsFrameLoader::nsFrameLoader(Element* aOwner, nsPIDOMWindowOuter* aOpener, bool aNetworkCreated, int32_t aJSPluginID) : mOwnerContent(aOwner) , mDetachedSubdocFrame(nullptr) , mOpener(aOpener) , mRemoteBrowser(nullptr) , mChildID(0) , mJSPluginID(aJSPluginID) - , mBrowserChangingProcessBlockers(nullptr) , mDepthTooGreat(false) , mIsTopLevelContent(false) , mDestroyCalled(false) , mNeedsAsyncDestroy(false) , mInSwap(false) , mInShow(false) , mHideCalled(false) , mNetworkCreated(aNetworkCreated) @@ -338,95 +336,16 @@ nsFrameLoader::LoadURI(nsIURI* aURI, nsI rv = doc->InitializeFrameLoader(this); if (NS_FAILED(rv)) { mURIToLoad = nullptr; mTriggeringPrincipal = nullptr; } return rv; } -bool -nsFrameLoader::SwapBrowsersAndNotify(nsFrameLoader* aOther) -{ - // Cache the owner content before calling SwapBrowsers, which will change - // these member variables. - RefPtr<mozilla::dom::Element> primaryContent = mOwnerContent; - RefPtr<mozilla::dom::Element> secondaryContent = aOther->mOwnerContent; - - // Swap loaders through our owner, so the owner's listeners will be correctly - // setup. - nsCOMPtr<nsIBrowser> ourBrowser = do_QueryInterface(primaryContent); - nsCOMPtr<nsIBrowser> otherBrowser = do_QueryInterface(secondaryContent); - if (NS_WARN_IF(!ourBrowser || !otherBrowser)) { - return false; - } - nsresult rv = ourBrowser->SwapBrowsers(otherBrowser, nsIBrowser::SWAP_KEEP_PERMANENT_KEY); - if (NS_WARN_IF(NS_FAILED(rv))) { - return false; - } - - // Dispatch the BrowserChangedProcess event to tell JS that the process swap - // has occurred. - GroupedHistoryEventInit eventInit; - eventInit.mBubbles = true; - eventInit.mCancelable= false; - eventInit.mOtherBrowser = secondaryContent; - RefPtr<GroupedHistoryEvent> event = - GroupedHistoryEvent::Constructor(primaryContent, - NS_LITERAL_STRING("BrowserChangedProcess"), - eventInit); - event->SetTrusted(true); - primaryContent->DispatchEvent(*event); - - return true; -} - -already_AddRefed<Promise> -nsFrameLoader::FireWillChangeProcessEvent() -{ - AutoJSAPI jsapi; - if (NS_WARN_IF(!jsapi.Init(mOwnerContent->GetOwnerGlobal()))) { - return nullptr; - } - JSContext* cx = jsapi.cx(); - - // Set our mBrowserChangingProcessBlockers property to refer to the blockers - // list. We will synchronously dispatch a DOM event to collect this list of - // blockers. - nsTArray<RefPtr<Promise>> blockers; - mBrowserChangingProcessBlockers = &blockers; - - GroupedHistoryEventInit eventInit; - eventInit.mBubbles = true; - eventInit.mCancelable = false; - eventInit.mOtherBrowser = nullptr; - RefPtr<GroupedHistoryEvent> event = - GroupedHistoryEvent::Constructor(mOwnerContent, - NS_LITERAL_STRING("BrowserWillChangeProcess"), - eventInit); - event->SetTrusted(true); - mOwnerContent->DispatchEvent(*event); - - mBrowserChangingProcessBlockers = nullptr; - - ErrorResult rv; - RefPtr<Promise> allPromise = Promise::All(cx, blockers, rv); - return allPromise.forget(); -} - -void -nsFrameLoader::AddProcessChangeBlockingPromise(Promise& aPromise, ErrorResult& aRv) -{ - if (NS_WARN_IF(!mBrowserChangingProcessBlockers)) { - aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); - } else { - mBrowserChangingProcessBlockers->AppendElement(&aPromise); - } -} - nsresult nsFrameLoader::ReallyStartLoading() { nsresult rv = ReallyStartLoadingInternal(); if (NS_FAILED(rv)) { FireErrorEvent(); } @@ -3120,32 +3039,16 @@ nsFrameLoader::RequestNotifyAfterRemoteP { // If remote browsing (e10s), handle this with the TabParent. if (mRemoteBrowser) { Unused << mRemoteBrowser->SendRequestNotifyAfterRemotePaint(); } } void -nsFrameLoader::RequestFrameLoaderClose(ErrorResult& aRv) -{ - nsCOMPtr<nsIBrowser> browser = do_QueryInterface(mOwnerContent); - if (NS_WARN_IF(!browser)) { - // OwnerElement other than nsIBrowser is not supported yet. - aRv.Throw(NS_ERROR_NOT_IMPLEMENTED); - return; - } - - nsresult rv = browser->CloseBrowser(); - if (NS_FAILED(rv)) { - aRv.Throw(rv); - } -} - -void nsFrameLoader::RequestUpdatePosition(ErrorResult& aRv) { if (auto* tabParent = TabParent::GetFrom(GetRemoteBrowser())) { nsresult rv = tabParent->UpdatePosition(); if (NS_FAILED(rv)) { aRv.Throw(rv); }
--- a/dom/base/nsFrameLoader.h +++ b/dom/base/nsFrameLoader.h @@ -134,18 +134,16 @@ public: * @param aURI The URI to load. * @param aTriggeringPrincipal The triggering principal for the load. May be * null, in which case the node principal of the owner content will be * used. */ nsresult LoadURI(nsIURI* aURI, nsIPrincipal* aTriggeringPrincipal, bool aOriginalSrc); - void AddProcessChangeBlockingPromise(mozilla::dom::Promise& aPromise, mozilla::ErrorResult& aRv); - /** * Destroy the frame loader and everything inside it. This will * clear the weak owner content reference. */ void Destroy(); void ActivateRemoteFrame(mozilla::ErrorResult& aRv); @@ -161,18 +159,16 @@ public: mozilla::ErrorResult& aRv); void ActivateFrameEvent(const nsAString& aType, bool aCapture, mozilla::ErrorResult& aRv); void RequestNotifyAfterRemotePaint(); - void RequestFrameLoaderClose(mozilla::ErrorResult& aRv); - void RequestUpdatePosition(mozilla::ErrorResult& aRv); void Print(uint64_t aOuterWindowID, nsIPrintSettings* aPrintSettings, nsIWebProgressListener* aProgressListener, mozilla::ErrorResult& aRv); void StartPersistence(uint64_t aOuterWindowID, @@ -438,24 +434,16 @@ private: eTabParentRemoved, eTabParentChanged }; void MaybeUpdatePrimaryTabParent(TabParentChange aChange); nsresult PopulateUserContextIdFromAttribute(mozilla::OriginAttributes& aAttr); - // Swap ourselves with the frameloader aOther, and notify chrome code with - // a BrowserChangedProcess event. - bool SwapBrowsersAndNotify(nsFrameLoader* aOther); - - // Returns a promise which will be resolved once all of the blockers have - // resolved which were added during the BrowserWillChangeProcess event. - already_AddRefed<mozilla::dom::Promise> FireWillChangeProcessEvent(); - nsCOMPtr<nsIDocShell> mDocShell; nsCOMPtr<nsIURI> mURIToLoad; nsCOMPtr<nsIPrincipal> mTriggeringPrincipal; mozilla::dom::Element* mOwnerContent; // WEAK // After the frameloader has been removed from the DOM but before all of the // messages from the frame have been received, we keep a strong reference to // our <browser> element. @@ -477,20 +465,16 @@ private: TabParent* mRemoteBrowser; uint64_t mChildID; int32_t mJSPluginID; // Holds the last known size of the frame. mozilla::ScreenIntSize mLazySize; - // A stack-maintained reference to an array of promises which are blocking - // grouped history navigation - nsTArray<RefPtr<mozilla::dom::Promise>>* mBrowserChangingProcessBlockers; - RefPtr<mozilla::dom::ParentSHistory> mParentSHistory; bool mDepthTooGreat : 1; bool mIsTopLevelContent : 1; bool mDestroyCalled : 1; bool mNeedsAsyncDestroy : 1; bool mInSwap : 1; bool mInShow : 1;
--- a/dom/security/featurepolicy/FeaturePolicyUtils.cpp +++ b/dom/security/featurepolicy/FeaturePolicyUtils.cpp @@ -35,17 +35,16 @@ static FeatureMap sSupportedFeatures[] = // TODO: not supported yet!!! { "geolocation", FeatureMap::eSelf }, // TODO: not supported yet!!! { "microphone", FeatureMap::eSelf }, { "midi", FeatureMap::eSelf }, { "payment", FeatureMap::eSelf }, // TODO: not supported yet!!! { "speaker", FeatureMap::eSelf }, - // TODO: not supported yet!!! { "vr", FeatureMap::eSelf }, }; /* static */ bool FeaturePolicyUtils::IsSupportedFeature(const nsAString& aFeatureName) { uint32_t numFeatures = (sizeof(sSupportedFeatures) / sizeof(sSupportedFeatures[0])); for (uint32_t i = 0; i < numFeatures; ++i) {
--- a/dom/webidl/FrameLoader.webidl +++ b/dom/webidl/FrameLoader.webidl @@ -35,24 +35,16 @@ interface FrameLoader { /** * Get the ParentSHistory for the nsFrameLoader. May return null if this * frameloader is not for a toplevel frame. */ readonly attribute ParentSHistory? parentSHistory; /** - * Adds a blocking promise for the current cross process navigation. - * This method can only be called while the "BrowserWillChangeProcess" event - * is being fired. - */ - [Throws] - void addProcessChangeBlockingPromise(Promise<any> aPromise); - - /** * Find out whether the loader's frame is at too great a depth in * the frame tree. This can be used to decide what operations may * or may not be allowed on the loader's docshell. */ [Pure] readonly attribute boolean depthTooGreat; /** @@ -93,22 +85,16 @@ interface FrameLoader { /** * Request that the next time a remote layer transaction has been * received by the Compositor, a MozAfterRemoteFrame event be sent * to the window. */ void requestNotifyAfterRemotePaint(); /** - * Close the window through the ownerElement. - */ - [Throws] - void requestFrameLoaderClose(); - - /** * Force a remote browser to recompute its dimension and screen position. */ [Throws] void requestUpdatePosition(); /** * Print the current document. * @@ -125,23 +111,16 @@ interface FrameLoader { /** * If false, then the subdocument is not clipped to its CSS viewport, and the * subdocument's viewport scrollbar(s) are not rendered. * Defaults to true. */ attribute boolean clipSubdocument; /** - * If false, then the subdocument's scroll coordinates will not be clamped - * to their scroll boundaries. - * Defaults to true. - */ - attribute boolean clampScrollPosition; - - /** * The element which owns this frame loader. * * For example, if this is a frame loader for an <iframe>, this attribute * returns the iframe element. */ [Pure] readonly attribute Element? ownerElement;
deleted file mode 100644 --- a/dom/webidl/GroupedHistoryEvent.webidl +++ /dev/null @@ -1,17 +0,0 @@ -/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* 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/. - */ - -[ChromeOnly, - Constructor(DOMString type, optional GroupedHistoryEventInit eventInitDict)] -interface GroupedHistoryEvent : Event -{ - readonly attribute Element? otherBrowser; -}; - -dictionary GroupedHistoryEventInit : EventInit -{ - Element? otherBrowser = null; -};
--- a/dom/webidl/moz.build +++ b/dom/webidl/moz.build @@ -128,19 +128,16 @@ with Files("GeometryUtils.webidl"): BUG_COMPONENT = ("Core", "Layout") with Files("GetUserMediaRequest.webidl"): BUG_COMPONENT = ("Core", "WebRTC") with Files("Grid.webidl"): BUG_COMPONENT = ("Core", "CSS Parsing and Computation") -with Files("GroupedHistoryEvent.webidl"): - BUG_COMPONENT = ("Core", "Document Navigation") - with Files("HTML*"): BUG_COMPONENT = ("Core", "DOM: Core & HTML") with Files("HashChangeEvent.webidl"): BUG_COMPONENT = ("Core", "DOM: Events") with Files("HiddenPluginEvent.webidl"): BUG_COMPONENT = ("Core", "Plug-ins") @@ -1048,17 +1045,16 @@ GENERATED_EVENTS_WEBIDL_FILES = [ 'DeviceLightEvent.webidl', 'DeviceOrientationEvent.webidl', 'DeviceProximityEvent.webidl', 'ErrorEvent.webidl', 'FontFaceSetLoadEvent.webidl', 'GamepadAxisMoveEvent.webidl', 'GamepadButtonEvent.webidl', 'GamepadEvent.webidl', - 'GroupedHistoryEvent.webidl', 'HashChangeEvent.webidl', 'HiddenPluginEvent.webidl', 'ImageCaptureErrorEvent.webidl', 'MediaQueryListEvent.webidl', 'MediaRecorderErrorEvent.webidl', 'MediaStreamEvent.webidl', 'MediaStreamTrackEvent.webidl', 'MIDIConnectionEvent.webidl',
--- a/js/src/shell/js.cpp +++ b/js/src/shell/js.cpp @@ -6681,44 +6681,54 @@ GetSharedObject(JSContext* cx, unsigned case MailboxTag::Empty: { break; } case MailboxTag::SharedArrayBuffer: case MailboxTag::WasmMemory: { // Flag was set in the sender; ensure it is set in the receiver. MOZ_ASSERT(cx->realm()->creationOptions().getSharedMemoryAndAtomicsEnabled()); + // The protocol for creating a SAB requires the refcount to be + // incremented prior to the SAB creation. + SharedArrayRawBuffer* buf = mbx->val.sarb.buffer; uint32_t length = mbx->val.sarb.length; if (!buf->addReference()) { JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_SC_SAB_REFCNT_OFLO); return false; } - auto dropBuf = MakeScopeExit([buf] { buf->dropReference(); }); + + // If the allocation fails we must decrement the refcount before + // returning. Rooted<ArrayBufferObjectMaybeShared*> maybesab(cx, SharedArrayBufferObject::New(cx, buf, length)); if (!maybesab) { - return false; - } + buf->dropReference(); + return false; + } + + // At this point the SAB was created successfully and it owns the + // refcount-increase on the buffer that we performed above. So even + // if we fail to allocate along any path below we must not decrement + // the refcount; the garbage collector must be allowed to handle + // that via finalization of the orphaned SAB object. + if (mbx->tag == MailboxTag::SharedArrayBuffer) { newObj = maybesab; } else { if (!GlobalObject::ensureConstructor(cx, cx->global(), JSProto_WebAssembly)) { return false; } - RootedObject proto(cx, &cx->global()->getPrototype(JSProto_WasmMemory).toObject()); newObj = WasmMemoryObject::create(cx, maybesab, proto); MOZ_ASSERT_IF(newObj, newObj->as<WasmMemoryObject>().isShared()); - } - if (!newObj) { - return false; - } - - dropBuf.release(); + if (!newObj) { + return false; + } + } break; } case MailboxTag::WasmModule: { // Flag was set in the sender; ensure it is set in the receiver. MOZ_ASSERT(cx->realm()->creationOptions().getSharedMemoryAndAtomicsEnabled()); if (!GlobalObject::ensureConstructor(cx, cx->global(), JSProto_WebAssembly)) {
--- a/layout/xul/tree/nsTreeBodyFrame.cpp +++ b/layout/xul/tree/nsTreeBodyFrame.cpp @@ -1843,16 +1843,18 @@ void nsTreeBodyFrame::PrefillPropertyArray(int32_t aRowIndex, nsTreeColumn* aCol) { MOZ_ASSERT(!aCol || aCol->GetFrame(), "invalid column passed"); mScratchArray.Clear(); // focus if (mFocused) mScratchArray.AppendElement(nsGkAtoms::focus); + else + mScratchArray.AppendElement(nsGkAtoms::blur); // sort bool sorted = false; mView->IsSorted(&sorted); if (sorted) mScratchArray.AppendElement(nsGkAtoms::sorted); // drag session
--- a/memory/replace/dmd/dmd.py +++ b/memory/replace/dmd/dmd.py @@ -327,25 +327,27 @@ def getDigestFromFile(args, inputFile): def buildTraceDescription(traceTable, frameTable, traceKey): frameKeys = traceTable[traceKey] fmt = ' #{:02d}{:}' if args.filter_stacks_for_testing: # When running SmokeDMD.cpp, every stack trace should contain at # least one frame that contains 'DMD.cpp', from either |DMD.cpp| or - # |SmokeDMD.cpp|. (Or 'dmd.cpp' on Windows.) If we see such a + # |SmokeDMD.cpp|. (Or 'dmd.cpp' on Windows.) On builds without + # debuginfo we expect just |SmokeDMD|. If we see such a # frame, we replace the entire stack trace with a single, # predictable frame. There is too much variation in the stack # traces across different machines and platforms to do more precise # matching, but this level of matching will result in failure if # stack fixing fails completely. for frameKey in frameKeys: frameDesc = frameTable[frameKey] - if 'DMD.cpp' in frameDesc or 'dmd.cpp' in frameDesc: + expected = ('DMD.cpp', 'dmd.cpp', 'SmokeDMD') + if any(ex in frameDesc for ex in expected): return [fmt.format(1, ': ... DMD.cpp ...')] # The frame number is always '#00' (see DMD.h for why), so we have to # replace that with the correct frame number. desc = [] for n, frameKey in enumerate(traceTable[traceKey], start=1): desc.append(fmt.format(n, frameTable[frameKey][3:])) return desc
--- a/memory/replace/dmd/test/xpcshell.ini +++ b/memory/replace/dmd/test/xpcshell.ini @@ -26,9 +26,9 @@ support-files = script-diff-live2.json script-diff-live-expected.txt script-diff-dark-matter1.json script-diff-dark-matter2.json script-diff-dark-matter-expected.txt [test_dmd.js] dmd = true -skip-if = !(os=='linux' || os=='win' || os=='mac') +skip-if = !(os=='linux' || os=='mac' || (os=='win' && !pgo))
new file mode 100644 --- /dev/null +++ b/python/l10n/fluent_migrations/bug_1488788_aboutrestartrequired.py @@ -0,0 +1,25 @@ +# coding=utf8 + +# Any copyright is dedicated to the Public Domain. +# http://creativecommons.org/publicdomain/zero/1.0/ + +from __future__ import absolute_import +import fluent.syntax.ast as FTL +from fluent.migrate.helpers import transforms_from +from fluent.migrate.helpers import TERM_REFERENCE +from fluent.migrate import REPLACE + +def migrate(ctx): + """Bug 1488788- Migrate about:restartrequired from DTD to Fluent, part {index}.""" + + ctx.add_transforms( + "browser/browser/aboutRestartRequired.ftl", + "browser/browser/aboutRestartRequired.ftl", + transforms_from( +""" +restart-required-title = { COPY("browser/chrome/browser/aboutRestartRequired.dtd", "restartRequired.title") } + +restart-required-header = { COPY("browser/chrome/browser/aboutRestartRequired.dtd", "restartRequired.header") } +""") + ) +
--- a/taskcluster/ci/build/linux.yml +++ b/taskcluster/ci/build/linux.yml @@ -55,50 +55,16 @@ linux64-plain/opt: run-on-projects: [trunk] toolchains: - linux64-binutils - linux64-clang - linux64-rust - linux64-node - linux64-cbindgen -linux64-dmd/opt: - description: "Linux64 DMD Opt" - index: - product: firefox - job-name: linux64-dmd-opt - treeherder: - platform: linux64-dmd/opt - symbol: Bdmd - tier: 2 - worker-type: aws-provisioner-v1/gecko-{level}-b-linux - worker: - max-run-time: 3600 - run: - using: mozharness - actions: [get-secrets build check-test] - config: - - builds/releng_base_firefox.py - - builds/releng_base_linux_64_builds.py - script: "mozharness/scripts/fx_desktop_build.py" - extra-config: - mozconfig_variant: 'opt-dmd' - secrets: true - tooltool-downloads: public - need-xvfb: true - run-on-projects: [] - toolchains: - - linux64-binutils - - linux64-clang - - linux64-rust - - linux64-rust-size - - linux64-cbindgen - - linux64-sccache - - linux64-node - linux64/pgo: description: "Linux64 PGO" index: product: firefox job-name: linux64-pgo attributes: enable-full-crashsymbols: true treeherder:
--- a/taskcluster/ci/build/macosx.yml +++ b/taskcluster/ci/build/macosx.yml @@ -104,54 +104,16 @@ macosx64-asan-fuzzing/opt: - linux64-libdmg - linux64-llvm-dsymutil - linux64-rust-macos - linux64-rust-size - linux64-cbindgen - linux64-sccache - linux64-node -macosx64-dmd/opt: - description: "MacOS X x64 DMD Cross-compile" - index: - product: firefox - job-name: macosx64-dmd-opt - treeherder: - platform: osx-10-10-dmd/opt - symbol: Bdmd - tier: 2 - worker-type: aws-provisioner-v1/gecko-{level}-b-linux - worker: - max-run-time: 3600 - env: - TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/macosx64/cross-releng.manifest" - run: - using: mozharness - actions: [get-secrets build] - config: - - builds/releng_base_firefox.py - - builds/releng_base_mac_64_cross_builds.py - script: "mozharness/scripts/fx_desktop_build.py" - extra-config: - mozconfig_variant: 'opt-dmd' - secrets: true - tooltool-downloads: internal - run-on-projects: [] - toolchains: - - linux64-cctools-port - - linux64-clang - - linux64-hfsplus - - linux64-libdmg - - linux64-llvm-dsymutil - - linux64-rust-macos - - linux64-rust-size - - linux64-cbindgen - - linux64-sccache - - linux64-node - macosx64-devedition-nightly/opt: description: "MacOS X Dev Edition x64 Nightly" attributes: nightly: true enable-full-crashsymbols: true shipping-phase: build shipping-product: devedition index:
--- a/taskcluster/ci/build/windows.yml +++ b/taskcluster/ci/build/windows.yml @@ -65,50 +65,16 @@ win32/opt: toolchains: - win64-clang-cl - win64-rust - win64-rust-size - win64-cbindgen - win64-sccache - win64-node -win32-dmd/opt: - description: "Win32 DMD Opt" - index: - product: firefox - job-name: win32-dmd-opt - treeherder: - platform: windows2012-32-dmd/opt - symbol: Bdmd - tier: 2 - worker-type: aws-provisioner-v1/gecko-{level}-b-win2012 - worker: - max-run-time: 7200 - env: - TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/win32/releng.manifest" - run: - using: mozharness - options: [append-env-variables-from-configs] - script: mozharness/scripts/fx_desktop_build.py - config: - - builds/releng_base_firefox.py - - builds/taskcluster_base_windows.py - - builds/taskcluster_base_win32.py - - builds/taskcluster_sub_win32/opt.py - extra-config: - mozconfig_variant: 'opt-dmd' - run-on-projects: [] - toolchains: - - win64-clang-cl - - win64-rust - - win64-rust-size - - win64-cbindgen - - win64-sccache - - win64-node - win32/pgo: description: "Win32 Opt PGO" index: product: firefox job-name: win32-pgo attributes: enable-full-crashsymbols: true treeherder: @@ -260,50 +226,16 @@ win64-plain/opt: - builds/taskcluster_sub_win64/plain_opt.py run-on-projects: [trunk] toolchains: - win64-clang-cl - win64-rust - win64-node - win64-cbindgen -win64-dmd/opt: - description: "Win64 DMD Opt" - index: - product: firefox - job-name: win64-dmd-opt - treeherder: - platform: windows2012-64-dmd/opt - symbol: Bdmd - tier: 2 - worker-type: aws-provisioner-v1/gecko-{level}-b-win2012 - worker: - max-run-time: 7200 - env: - TOOLTOOL_MANIFEST: "browser/config/tooltool-manifests/win64/releng.manifest" - run: - using: mozharness - options: [append-env-variables-from-configs] - script: mozharness/scripts/fx_desktop_build.py - config: - - builds/releng_base_firefox.py - - builds/taskcluster_base_windows.py - - builds/taskcluster_base_win64.py - - builds/taskcluster_sub_win64/opt.py - extra-config: - mozconfig_variant: 'opt-dmd' - run-on-projects: [] - toolchains: - - win64-clang-cl - - win64-rust - - win64-rust-size - - win64-cbindgen - - win64-sccache - - win64-node - win32-nightly/opt: description: "Win32 Nightly" index: product: firefox job-name: win32-opt type: nightly attributes: nightly: true
--- a/taskcluster/taskgraph/target_tasks.py +++ b/taskcluster/taskgraph/target_tasks.py @@ -548,26 +548,16 @@ def target_tasks_nightly_desktop(full_ta set(target_tasks_nightly_win32(full_task_graph, parameters, graph_config)) | set(target_tasks_nightly_win64(full_task_graph, parameters, graph_config)) | set(target_tasks_nightly_macosx(full_task_graph, parameters, graph_config)) | set(target_tasks_nightly_linux(full_task_graph, parameters, graph_config)) | set(target_tasks_nightly_asan(full_task_graph, parameters, graph_config)) ) -# Opt DMD builds should only run nightly -@_target_task('nightly_dmd') -def target_tasks_dmd(full_task_graph, parameters, graph_config): - """Target DMD that run nightly on the m-c branch.""" - def filter(task): - platform = task.attributes.get('build_platform', '') - return platform.endswith('-dmd') - return [l for l, t in full_task_graph.tasks.iteritems() if filter(t)] - - # Run Searchfox analysis once daily. @_target_task('searchfox_index') def target_tasks_searchfox(full_task_graph, parameters, graph_config): """Select tasks required for indexing Firefox for Searchfox web site each day""" # For now we only do Linux and Mac debug builds. Windows builds # are currently broken (bug 1418415). return ['searchfox-linux64-searchfox/debug', 'searchfox-macosx64-searchfox/debug']
--- a/testing/mozharness/mozharness/mozilla/building/buildbase.py +++ b/testing/mozharness/mozharness/mozilla/building/buildbase.py @@ -389,17 +389,16 @@ class BuildOptionParser(object): 'android-checkstyle': 'builds/releng_sub_%s_configs/%s_checkstyle.py', 'android-lint': 'builds/releng_sub_%s_configs/%s_lint.py', 'android-findbugs': 'builds/releng_sub_%s_configs/%s_findbugs.py', 'android-geckoview-docs': 'builds/releng_sub_%s_configs/%s_geckoview_docs.py', 'valgrind': 'builds/releng_sub_%s_configs/%s_valgrind.py', 'artifact': 'builds/releng_sub_%s_configs/%s_artifact.py', 'debug-artifact': 'builds/releng_sub_%s_configs/%s_debug_artifact.py', 'devedition': 'builds/releng_sub_%s_configs/%s_devedition.py', - 'dmd': 'builds/releng_sub_%s_configs/%s_dmd.py', 'tup': 'builds/releng_sub_%s_configs/%s_tup.py', } build_pool_cfg_file = 'builds/build_pool_specifics.py' branch_cfg_file = 'builds/branch_specifics.py' @classmethod def _query_pltfrm_and_bits(cls, target_option, options): """ determine platform and bits
--- a/testing/web-platform/meta/webvr/__dir__.ini +++ b/testing/web-platform/meta/webvr/__dir__.ini @@ -1,1 +1,1 @@ -prefs: [dom.vr.enabled:true] +prefs: [dom.vr.enabled:true,dom.security.featurePolicy.enabled:true]
deleted file mode 100644 --- a/testing/web-platform/meta/webvr/webvr-disabled-by-feature-policy.https.sub.html.ini +++ /dev/null @@ -1,10 +0,0 @@ -[webvr-disabled-by-feature-policy.https.sub.html] - [Feature-Policy header vr "none" disallows the top-level document.] - expected: FAIL - - [Feature-Policy header vr "none" disallows same-origin iframes.] - expected: FAIL - - [Feature-Policy header vr "none" disallows cross-origin iframes.] - expected: FAIL -
deleted file mode 100644 --- a/testing/web-platform/meta/webvr/webvr-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html.ini +++ /dev/null @@ -1,7 +0,0 @@ -[webvr-enabled-by-feature-policy-attribute-redirect-on-load.https.sub.html] - [Feature-Policy allow="vr" attribute allows same-origin relocation] - expected: FAIL - - [Feature-Policy allow="vr" attribute disallows cross-origin relocation] - expected: FAIL -
--- a/testing/web-platform/meta/webvr/webvr-enabled-by-feature-policy-attribute.https.sub.html.ini +++ b/testing/web-platform/meta/webvr/webvr-enabled-by-feature-policy-attribute.https.sub.html.ini @@ -1,7 +1,4 @@ [webvr-enabled-by-feature-policy-attribute.https.sub.html] - [Feature-Policy allow="vr" attribute allows same-origin iframe] - expected: FAIL - [Feature-Policy allow="vr" attribute allows cross-origin iframe] expected: FAIL
deleted file mode 100644 --- a/testing/web-platform/meta/webvr/webvr-enabled-on-self-origin-by-feature-policy.https.sub.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[webvr-enabled-on-self-origin-by-feature-policy.https.sub.html] - [Feature-Policy header vr "self" disallows cross-origin iframes.] - expected: FAIL -
--- a/toolkit/components/telemetry/Histograms.json +++ b/toolkit/components/telemetry/Histograms.json @@ -527,28 +527,28 @@ "kind": "linear", "high": 500, "n_buckets": 100, "bug_numbers": [1487271], "description": "Number of forget skippables occurred during a minute" }, "FULLSCREEN_TRANSITION_BLACK_MS": { "record_in_processes": ["main", "content"], - "alert_emails": ["xquan@mozilla.com"], + "alert_emails": ["mozilla-telemetry@upsuper.org"], "expires_in_version": "never", "kind": "exponential", "low": 100, "high": 5000, "n_buckets": 50, "bug_numbers": [1271160], "description": "The time spent in the fully-black screen in fullscreen transition" }, "FULLSCREEN_CHANGE_MS": { "record_in_processes": ["main", "content"], - "alert_emails": ["xquan@mozilla.com"], + "alert_emails": ["mozilla-telemetry@upsuper.org"], "expires_in_version": "never", "kind": "exponential", "low": 100, "high": 5000, "n_buckets": 50, "bug_numbers": [1271160], "description": "The time content uses to enter/exit fullscreen regardless of fullscreen transition timeout" }, @@ -14180,17 +14180,17 @@ "expires_in_version": "67", "kind": "exponential", "high": 50, "n_buckets": 20, "description": "Total number of http:// and https:// doc groups per tab group, including docgroups fully in bfcache. Collected at the point when the top level document of the tab group is unloaded." }, "HIDDEN_VIEWPORT_OVERFLOW_TYPE": { "record_in_processes": ["main", "content"], - "alert_emails": ["xquan@mozilla.com", "botond@mozilla.com"], + "alert_emails": ["mozilla-telemetry@upsuper.org", "botond@mozilla.com"], "bug_numbers": [1423013, 1423017], "expires_in_version": "65", "kind": "categorical", "releaseChannelCollection": "opt-out", "labels": ["NoOverflow", "Desktop", "ButNotMinScaleSize", "MinScaleSize"], "description": "How common are different types of out-of-reach viewport overflow?" }, "WR_SCENEBUILD_TIME": {
--- a/toolkit/content/customElements.js +++ b/toolkit/content/customElements.js @@ -196,16 +196,17 @@ window.MozXULElement = MozXULElement; window.MozBaseControl = MozBaseControl; // For now, don't load any elements in the extension dummy document. // We will want to load <browser> when that's migrated (bug 1441935). const isDummyDocument = document.documentURI == "chrome://extensions/content/dummy.xul"; if (!isDummyDocument) { for (let script of [ "chrome://global/content/elements/general.js", + "chrome://global/content/elements/progressmeter.js", "chrome://global/content/elements/radio.js", "chrome://global/content/elements/textbox.js", "chrome://global/content/elements/tabbox.js", ]) { Services.scriptloader.loadSubScript(script, window); } for (let [tag, script] of [
--- a/toolkit/content/jar.mn +++ b/toolkit/content/jar.mn @@ -77,17 +77,16 @@ toolkit.jar: * content/global/bindings/dialog.xml (widgets/dialog.xml) content/global/bindings/general.xml (widgets/general.xml) content/global/bindings/groupbox.xml (widgets/groupbox.xml) content/global/bindings/menu.xml (widgets/menu.xml) content/global/bindings/menulist.xml (widgets/menulist.xml) content/global/bindings/notification.xml (widgets/notification.xml) content/global/bindings/numberbox.xml (widgets/numberbox.xml) content/global/bindings/popup.xml (widgets/popup.xml) - content/global/bindings/progressmeter.xml (widgets/progressmeter.xml) content/global/bindings/radio.xml (widgets/radio.xml) content/global/bindings/richlistbox.xml (widgets/richlistbox.xml) content/global/bindings/scrollbox.xml (widgets/scrollbox.xml) content/global/bindings/spinner.js (widgets/spinner.js) * content/global/bindings/tabbox.xml (widgets/tabbox.xml) content/global/bindings/text.xml (widgets/text.xml) * content/global/bindings/textbox.xml (widgets/textbox.xml) content/global/bindings/timekeeper.js (widgets/timekeeper.js) @@ -95,16 +94,17 @@ toolkit.jar: content/global/bindings/toolbar.xml (widgets/toolbar.xml) content/global/bindings/toolbarbutton.xml (widgets/toolbarbutton.xml) content/global/bindings/tree.xml (widgets/tree.xml) content/global/bindings/videocontrols.xml (widgets/videocontrols.xml) * content/global/bindings/wizard.xml (widgets/wizard.xml) content/global/elements/findbar.js (widgets/findbar.js) content/global/elements/editor.js (widgets/editor.js) content/global/elements/general.js (widgets/general.js) + content/global/elements/progressmeter.js (widgets/progressmeter.js) content/global/elements/radio.js (widgets/radio.js) content/global/elements/stringbundle.js (widgets/stringbundle.js) content/global/elements/tabbox.js (widgets/tabbox.js) content/global/elements/textbox.js (widgets/textbox.js) content/global/elements/videocontrols.js (widgets/videocontrols.js) #ifdef XP_MACOSX content/global/macWindowMenu.js #endif
--- a/toolkit/content/tests/widgets/mochitest.ini +++ b/toolkit/content/tests/widgets/mochitest.ini @@ -30,17 +30,17 @@ skip-if = toolkit == 'android' # Bug 148 [test_mousecapture_area.html] skip-if = (verify && debug) || toolkit == 'android' # Bug 1483656 (android) [test_ua_widget.html] skip-if = toolkit == 'android' # Bug 1483656 [test_videocontrols.html] tags = fullscreen skip-if = toolkit == 'android' || (verify && debug && (os == 'linux')) #TIMED_OUT [test_videocontrols_keyhandler.html] -skip-if = toolkit == 'android' +skip-if = (toolkit == 'android') || (os == 'linux') #Bug 1366957 [test_videocontrols_vtt.html] skip-if = toolkit == 'android' # Bug 1483656 [test_videocontrols_iframe_fullscreen.html] skip-if = toolkit == 'android' # Bug 1483656 [test_videocontrols_size.html] skip-if = toolkit == 'android' # Bug 1483656 [test_videocontrols_audio.html] skip-if = toolkit == 'android' # Bug 1483656
rename from toolkit/content/widgets/progressmeter.xml rename to toolkit/content/widgets/progressmeter.js --- a/toolkit/content/widgets/progressmeter.xml +++ b/toolkit/content/widgets/progressmeter.js @@ -1,112 +1,149 @@ -<?xml version="1.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/. --> +/* 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/. */ +"use strict"; + +// This is loaded into chrome windows with the subscript loader. Wrap in +// a block to prevent accidentally leaking globals onto `window`. +{ -<bindings id="progressmeterBindings" - xmlns="http://www.mozilla.org/xbl" - xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" - xmlns:xbl="http://www.mozilla.org/xbl"> +/** + * XUL progressmeter element. + */ +class MozProgressmeter extends MozXULElement { + get mode() { + return this.getAttribute("mode"); + } - <binding id="progressmeter"> - <content> - <xul:spacer class="progress-bar" xbl:inherits="mode"/> - <xul:spacer class="progress-remainder" xbl:inherits="mode"/> - </content> + set mode(val) { + if (this.mode != val) { + this.setAttribute("mode", val); + } + return val; + } - <implementation> - <property name="mode" onset="if (this.mode != val) this.setAttribute('mode', val); return val;" - onget="return this.getAttribute('mode');"/> + get value() { + return this.getAttribute("value") || "0"; + } - <property name="value" onget="return this.getAttribute('value') || '0';"> - <setter><![CDATA[ - var p = Math.round(val); - var max = Math.round(this.max); - if (p < 0) - p = 0; - else if (p > max) - p = max; - var c = this.value; - if (p != c) { - var delta = p - c; - if (delta < 0) - delta = -delta; - if (delta > 3 || p == 0 || p == max) { - this.setAttribute("value", p); - // Fire DOM event so that accessible value change events occur - var event = document.createEvent("Events"); - event.initEvent("ValueChange", true, true); - this.dispatchEvent(event); - } - } + set value(val) { + let p = Math.round(val); + let max = Math.round(this.max); + if (p < 0) { + p = 0; + } else if (p > max) { + p = max; + } + + let c = this.value; + if (p != c) { + let delta = p - c; + if (delta < 0) { + delta = -delta; + } + if (delta > 3 || p == 0 || p == max) { + this.setAttribute("value", p); + // Fire DOM event so that accessible value change events occur + let event = document.createEvent("Events"); + event.initEvent("ValueChange", true, true); + this.dispatchEvent(event); + } + } + + return val; + } + + get max() { + return this.getAttribute("max") || "100"; + } + + set max(val) { + this.setAttribute("max", isNaN(val) ? 100 : Math.max(val, 1)); + this.value = this.value; + return val; + } - return val; - ]]></setter> - </property> - <property name="max" - onget="return this.getAttribute('max') || '100';" - onset="this.setAttribute('max', isNaN(val) ? 100 : Math.max(val, 1)); - this.value = this.value; - return val;" /> - </implementation> - </binding> + isUndetermined() { + return this.getAttribute("mode") == "undetermined"; + } + + connectedCallback() { + this._initUI(); + } - <binding id="progressmeter-undetermined" - extends="chrome://global/content/bindings/progressmeter.xml#progressmeter"> - <content> - <xul:stack class="progress-remainder" flex="1" anonid="stack" style="overflow: -moz-hidden-unscrollable;"> - <xul:spacer class="progress-bar" anonid="spacer" top="0" style="margin-right: -1000px;"/> - </xul:stack> - </content> + disconnectedCallback() { + this.runAnimation = false; + } + + static get observedAttributes() { + return [ "mode" ]; + } + + attributeChangedCallback(name, oldValue, newValue) { + if (name === "mode" && oldValue != newValue) { + this._initUI(); + } + } - <implementation> - <field name="_alive">true</field> - <method name="_init"> - <body><![CDATA[ - var stack = - document.getAnonymousElementByAttribute(this, "anonid", "stack"); - var spacer = - document.getAnonymousElementByAttribute(this, "anonid", "spacer"); - var isLTR = - document.defaultView.getComputedStyle(this).direction == "ltr"; - var startTime = performance.now(); - var self = this; + _initUI() { + let isUndetermined = this.isUndetermined(); + let content = isUndetermined ? + ` + <spacer class="progress-bar"/> + <spacer class="progress-remainder"/> + ` : + ` + <stack class="progress-remainder" flex="1" style="overflow: -moz-hidden-unscrollable;"> + <spacer class="progress-bar" top="0" style="margin-right: -1000px;"/> + </stack> + `; + + this._stack = null; + this._spacer = null; + this._runAnimation = isUndetermined; + + this.textContent = ""; + this.appendChild(MozXULElement.parseXULToFragment(content)); - function nextStep(t) { - try { - var width = stack.boxObject.width; - if (!width) { - // Maybe we've been removed from the document. - if (self._alive) - requestAnimationFrame(nextStep); - return; - } + if (!isUndetermined) { + return; + } + + this._stack = this.querySelector(".progress-remainder"); + this._spacer = this.querySelector(".progress-bar"); + this._isLTR = document.defaultView.getComputedStyle(this).direction == "ltr"; + this._startTime = window.performance.now(); - var elapsedTime = t - startTime; + let nextStep = (t) => { + if (!this._runAnimation) { + return; + } - // Width of chunk is 1/5 (determined by the ratio 2000:400) of the - // total width of the progress bar. The left edge of the chunk - // starts at -1 and moves all the way to 4. It covers the distance - // in 2 seconds. - var position = isLTR ? ((elapsedTime % 2000) / 400) - 1 : + let width = this._stack.boxObject.width; + if (width) { + let elapsedTime = t - this._startTime; + + // Width of chunk is 1/5 (determined by the ratio 2000:400) of the + // total width of the progress bar. The left edge of the chunk + // starts at -1 and moves all the way to 4. It covers the distance + // in 2 seconds. + let position = this._isLTR ? ((elapsedTime % 2000) / 400) - 1 : ((elapsedTime % 2000) / -400) + 4; - width = width >> 2; - spacer.height = stack.boxObject.height; - spacer.width = width; - spacer.left = width * position; + width = width >> 2; + this._spacer.height = this._stack.boxObject.height; + this._spacer.width = width; + this._spacer.left = width * position; + } - requestAnimationFrame(nextStep); - } catch (e) { - } - } - requestAnimationFrame(nextStep); - ]]></body> - </method> + window.requestAnimationFrame(nextStep); + }; - <constructor>this._init();</constructor> - </implementation> - </binding> + window.requestAnimationFrame(nextStep); + } +} -</bindings> +customElements.define("progressmeter", MozProgressmeter); + +}
--- a/toolkit/content/xul.css +++ b/toolkit/content/xul.css @@ -583,22 +583,16 @@ tabpanels { /********** tooltip *********/ tooltip[titletip="true"] { /* The width of the tooltip isn't limited on cropped <tree> cells. */ max-width: none; } -/********** progressmeter **********/ - -progressmeter { - -moz-binding: url("chrome://global/content/bindings/progressmeter.xml#progressmeter"); -} - /********** basic rule for anonymous content that needs to pass box properties through ********** to an insertion point parent that holds the real kids **************/ .box-inherit { -moz-box-orient: inherit; -moz-box-pack: inherit; -moz-box-align: inherit; -moz-box-direction: inherit;
--- a/toolkit/themes/linux/global/global.css +++ b/toolkit/themes/linux/global/global.css @@ -13,20 +13,16 @@ @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* ::::: XBL bindings ::::: */ menulist > menupopup { -moz-binding: url("chrome://global/content/bindings/popup.xml#popup-scrollbars"); } -progressmeter[mode="undetermined"] { - -moz-binding: url("chrome://global/content/bindings/progressmeter.xml#progressmeter-undetermined"); -} - @media (-moz-menubar-drag) { toolbar[type="menubar"]:not([autohide="true"]) { -moz-binding: url("chrome://global/content/bindings/toolbar.xml#toolbar-drag"); } } /* ::::: Variables ::::: */ :root {
--- a/xpcom/ds/StaticAtoms.py +++ b/xpcom/ds/StaticAtoms.py @@ -160,16 +160,17 @@ STATIC_ATOMS = [ Atom("bgcolor", "bgcolor"), Atom("bgsound", "bgsound"), Atom("big", "big"), Atom("binding", "binding"), Atom("bindings", "bindings"), Atom("bindToUntrustedContent", "bindToUntrustedContent"), Atom("block", "block"), Atom("blockquote", "blockquote"), + Atom("blur", "blur"), Atom("body", "body"), Atom("boolean", "boolean"), Atom("border", "border"), Atom("bordercolor", "bordercolor"), Atom("both", "both"), Atom("bottom", "bottom"), Atom("bottomend", "bottomend"), Atom("bottomstart", "bottomstart"),