mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-15 06:15:43 +00:00
Merge mozilla-central to autoland. a=merge CLOSED TREE
--HG-- rename : toolkit/mozapps/extensions/internal/XPIProviderUtils.js => toolkit/mozapps/extensions/internal/XPIDatabase.jsm
This commit is contained in:
commit
fa0ffa186e
@ -24,16 +24,11 @@ with Files("moz.build"):
|
||||
with Files("Makefile.in"):
|
||||
BUG_COMPONENT = ("Firefox Build System", "General")
|
||||
|
||||
with Files("profile/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/**"):
|
||||
BUG_COMPONENT = ("Firefox", "Theme")
|
||||
with Files("profile/channel-prefs.js"):
|
||||
BUG_COMPONENT = ("Firefox", "Installer")
|
||||
with Files("profile/firefox.js"):
|
||||
BUG_COMPONENT = ("Firefox", "General")
|
||||
|
||||
|
||||
DIRS += ['profile/extensions']
|
||||
|
||||
GeckoProgram(CONFIG['MOZ_APP_NAME'])
|
||||
|
||||
SOURCES += [
|
||||
|
@ -1,7 +0,0 @@
|
||||
# -*- Mode: python; 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/.
|
||||
|
||||
DIRS += ['{972ce4c6-7e08-4474-a285-3208198ce6fd}']
|
@ -1,42 +0,0 @@
|
||||
<?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/. -->
|
||||
|
||||
|
||||
#filter substitution
|
||||
|
||||
<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:em="http://www.mozilla.org/2004/em-rdf#">
|
||||
|
||||
<Description about="urn:mozilla:install-manifest">
|
||||
<em:id>{972ce4c6-7e08-4474-a285-3208198ce6fd}</em:id>
|
||||
<em:version>@FIREFOX_VERSION@</em:version>
|
||||
|
||||
<!-- Target Application this theme can install into,
|
||||
with minimum and maximum supported versions. -->
|
||||
<em:targetApplication>
|
||||
<Description>
|
||||
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
|
||||
<em:minVersion>@FIREFOX_VERSION@</em:minVersion>
|
||||
<em:maxVersion>@FIREFOX_VERSION@</em:maxVersion>
|
||||
</Description>
|
||||
</em:targetApplication>
|
||||
|
||||
<!-- Front End MetaData -->
|
||||
<em:name>Default</em:name>
|
||||
<em:description>The default theme.</em:description>
|
||||
|
||||
<!-- Front End Integration Hooks (used by Theme Manager)-->
|
||||
<em:creator>Mozilla</em:creator>
|
||||
<em:contributor>Mozilla Contributors</em:contributor>
|
||||
|
||||
<!-- Allow lightweight themes to apply to this theme -->
|
||||
<em:skinnable>true</em:skinnable>
|
||||
|
||||
<em:internalName>classic/1.0</em:internalName>
|
||||
|
||||
<em:iconURL>chrome://browser/content/default-theme-icon.svg</em:iconURL>
|
||||
</Description>
|
||||
|
||||
</RDF>
|
@ -1,11 +0,0 @@
|
||||
# -*- Mode: python; 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/.
|
||||
|
||||
FINAL_TARGET = 'dist/bin/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}'
|
||||
|
||||
FINAL_TARGET_PP_FILES += [
|
||||
'install.rdf.in',
|
||||
]
|
@ -81,7 +81,7 @@ pref("extensions.webextensions.remote", true);
|
||||
#endif
|
||||
|
||||
// Extensions that should not be flagged as legacy in about:addons
|
||||
pref("extensions.legacy.exceptions", "{972ce4c6-7e08-4474-a285-3208198ce6fd},testpilot@cliqz.com,@testpilot-containers,jid1-NeEaf3sAHdKHPA@jetpack,@activity-streams,pulse@mozilla.com,@testpilot-addon,@min-vid,tabcentertest1@mozilla.com,snoozetabs@mozilla.com,speaktome@mozilla.com,hoverpad@mozilla.com");
|
||||
pref("extensions.legacy.exceptions", "testpilot@cliqz.com,@testpilot-containers,jid1-NeEaf3sAHdKHPA@jetpack,@activity-streams,pulse@mozilla.com,@testpilot-addon,@min-vid,tabcentertest1@mozilla.com,snoozetabs@mozilla.com,speaktome@mozilla.com,hoverpad@mozilla.com");
|
||||
|
||||
// Require signed add-ons by default
|
||||
pref("extensions.langpacks.signatures.required", true);
|
||||
@ -190,9 +190,6 @@ pref("extensions.update.background.url", "https://versioncheck-bg.addons.mozilla
|
||||
pref("extensions.update.interval", 86400); // Check for updates to Extensions and
|
||||
// Themes every day
|
||||
|
||||
pref("extensions.{972ce4c6-7e08-4474-a285-3208198ce6fd}.name", "chrome://browser/locale/browser.properties");
|
||||
pref("extensions.{972ce4c6-7e08-4474-a285-3208198ce6fd}.description", "chrome://browser/locale/browser.properties");
|
||||
|
||||
pref("extensions.webextensions.themes.enabled", true);
|
||||
pref("extensions.webextensions.themes.icons.buttons", "back,forward,reload,stop,bookmark_star,bookmark_menu,downloads,home,app_menu,cut,copy,paste,new_window,new_private_window,save_page,print,history,full_screen,find,options,addons,developer,synced_tabs,open_file,sidebars,share_page,subscribe,text_encoding,email_link,forget,pocket");
|
||||
|
||||
@ -1257,7 +1254,7 @@ pref("services.sync.syncedTabs.showRemoteIcons", true);
|
||||
pref("lightweightThemes.selectedThemeID", "firefox-compact-dark@mozilla.org",
|
||||
sticky);
|
||||
#else
|
||||
pref("lightweightThemes.selectedThemeID", "", sticky);
|
||||
pref("lightweightThemes.selectedThemeID", "default-theme@mozilla.org", sticky);
|
||||
#endif
|
||||
|
||||
// Whether the character encoding menu is under the main Firefox button. This
|
||||
|
@ -146,9 +146,6 @@ with Files("browser-tabPreviews.xml"):
|
||||
with Files("contentSearch*"):
|
||||
BUG_COMPONENT = ("Firefox", "Search")
|
||||
|
||||
with Files("*.svg"):
|
||||
BUG_COMPONENT = ("Firefox", "Theme")
|
||||
|
||||
with Files("hiddenWindow.xul"):
|
||||
BUG_COMPONENT = ("Firefox", "Device Permissions")
|
||||
|
||||
|
@ -78,7 +78,6 @@ support-files =
|
||||
!/image/test/mochitest/blue.png
|
||||
!/toolkit/content/tests/browser/common/mockTransfer.js
|
||||
!/toolkit/modules/tests/browser/metadata_*.html
|
||||
!/toolkit/mozapps/extensions/test/xpinstall/theme.xpi
|
||||
|
||||
# DO NOT ADD MORE TESTS HERE. USE A TOPICAL DIRECTORY INSTEAD.
|
||||
[browser_addKeywordSearch.js]
|
||||
@ -211,8 +210,6 @@ skip-if = toolkit != "cocoa" # Because of tests for supporting pasting from Serv
|
||||
# DO NOT ADD MORE TESTS HERE. USE A TOPICAL DIRECTORY INSTEAD.
|
||||
[browser_bug585830.js]
|
||||
# DO NOT ADD MORE TESTS HERE. USE A TOPICAL DIRECTORY INSTEAD.
|
||||
[browser_bug592338.js]
|
||||
# DO NOT ADD MORE TESTS HERE. USE A TOPICAL DIRECTORY INSTEAD.
|
||||
[browser_bug594131.js]
|
||||
# DO NOT ADD MORE TESTS HERE. USE A TOPICAL DIRECTORY INSTEAD.
|
||||
[browser_bug596687.js]
|
||||
|
@ -1,117 +0,0 @@
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||
*/
|
||||
|
||||
const TESTROOT = "http://example.com/browser/toolkit/mozapps/extensions/test/xpinstall/";
|
||||
|
||||
const {LightweightThemeManager} = ChromeUtils.import("resource://gre/modules/LightweightThemeManager.jsm", {});
|
||||
|
||||
/**
|
||||
* Wait for the given PopupNotification to display
|
||||
*
|
||||
* @param {string} name
|
||||
* The name of the notification to wait for.
|
||||
*
|
||||
* @returns {Promise}
|
||||
* Resolves with the notification window.
|
||||
*/
|
||||
function promisePopupNotificationShown(name) {
|
||||
return new Promise(resolve => {
|
||||
function popupshown() {
|
||||
let notification = PopupNotifications.getNotification(name);
|
||||
if (!notification) { return; }
|
||||
|
||||
ok(notification, `${name} notification shown`);
|
||||
ok(PopupNotifications.isPanelOpen, "notification panel open");
|
||||
|
||||
PopupNotifications.panel.removeEventListener("popupshown", popupshown);
|
||||
resolve(PopupNotifications.panel.firstChild);
|
||||
}
|
||||
|
||||
PopupNotifications.panel.addEventListener("popupshown", popupshown);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
var TESTS = [
|
||||
function test_install_http() {
|
||||
is(LightweightThemeManager.currentTheme, null, "Should be no lightweight theme selected");
|
||||
|
||||
var pm = Services.perms;
|
||||
pm.add(makeURI("http://example.org/"), "install", pm.ALLOW_ACTION);
|
||||
|
||||
// NB: Not https so no installs allowed.
|
||||
const URL = "http://example.org/browser/browser/base/content/test/general/bug592338.html";
|
||||
BrowserTestUtils.openNewForegroundTab({ gBrowser, url: URL }).then(async function() {
|
||||
let prompted = promisePopupNotificationShown("addon-webext-permissions");
|
||||
BrowserTestUtils.synthesizeMouse("#theme-install", 2, 2, {}, gBrowser.selectedBrowser);
|
||||
await prompted;
|
||||
|
||||
is(LightweightThemeManager.currentTheme, null, "Should not have installed the test theme");
|
||||
|
||||
gBrowser.removeTab(gBrowser.selectedTab);
|
||||
|
||||
pm.remove(makeURI("http://example.org/"), "install");
|
||||
|
||||
runNextTest();
|
||||
});
|
||||
},
|
||||
|
||||
function test_install_lwtheme() {
|
||||
is(LightweightThemeManager.currentTheme, null, "Should be no lightweight theme selected");
|
||||
|
||||
var pm = Services.perms;
|
||||
pm.add(makeURI("https://example.com/"), "install", pm.ALLOW_ACTION);
|
||||
|
||||
const URL = "https://example.com/browser/browser/base/content/test/general/bug592338.html";
|
||||
BrowserTestUtils.openNewForegroundTab({ gBrowser, url: URL }).then(() => {
|
||||
let promise = promisePopupNotificationShown("addon-installed");
|
||||
BrowserTestUtils.synthesizeMouse("#theme-install", 2, 2, {}, gBrowser.selectedBrowser);
|
||||
promise.then(() => {
|
||||
is(LightweightThemeManager.currentTheme.id, "test", "Should have installed the test theme");
|
||||
|
||||
LightweightThemeManager.currentTheme = null;
|
||||
gBrowser.removeTab(gBrowser.selectedTab);
|
||||
Services.perms.remove(makeURI("http://example.com/"), "install");
|
||||
|
||||
runNextTest();
|
||||
});
|
||||
});
|
||||
}
|
||||
];
|
||||
|
||||
async function runNextTest() {
|
||||
let aInstalls = await AddonManager.getAllInstalls();
|
||||
is(aInstalls.length, 0, "Should be no active installs");
|
||||
|
||||
if (TESTS.length == 0) {
|
||||
let aAddon = await AddonManager.getAddonByID("theme-xpi@tests.mozilla.org");
|
||||
aAddon.uninstall();
|
||||
|
||||
Services.prefs.setBoolPref("extensions.logging.enabled", false);
|
||||
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
|
||||
info("Running " + TESTS[0].name);
|
||||
TESTS.shift()();
|
||||
}
|
||||
|
||||
async function test() {
|
||||
waitForExplicitFinish();
|
||||
|
||||
Services.prefs.setBoolPref("extensions.logging.enabled", true);
|
||||
|
||||
let aInstall = await AddonManager.getInstallForURL(TESTROOT + "theme.xpi", "application/x-xpinstall");
|
||||
aInstall.addListener({
|
||||
async onInstallEnded() {
|
||||
let aAddon = await AddonManager.getAddonByID("theme-xpi@tests.mozilla.org");
|
||||
isnot(aAddon, null, "Should have installed the test theme.");
|
||||
|
||||
runNextTest();
|
||||
}
|
||||
});
|
||||
|
||||
aInstall.install();
|
||||
}
|
@ -76,7 +76,6 @@ browser.jar:
|
||||
content/browser/browser-webrender.js (content/browser-webrender.js)
|
||||
content/browser/tab-content.js (content/tab-content.js)
|
||||
content/browser/content.js (content/content.js)
|
||||
content/browser/default-theme-icon.svg (content/default-theme-icon.svg)
|
||||
content/browser/defaultthemes/1.header.jpg (content/defaultthemes/1.header.jpg)
|
||||
content/browser/defaultthemes/1.icon.jpg (content/defaultthemes/1.icon.jpg)
|
||||
content/browser/defaultthemes/1.preview.jpg (content/defaultthemes/1.preview.jpg)
|
||||
@ -92,8 +91,8 @@ browser.jar:
|
||||
content/browser/defaultthemes/5.header.png (content/defaultthemes/5.header.png)
|
||||
content/browser/defaultthemes/5.icon.jpg (content/defaultthemes/5.icon.jpg)
|
||||
content/browser/defaultthemes/5.preview.jpg (content/defaultthemes/5.preview.jpg)
|
||||
content/browser/defaultthemes/dark.icon.svg (content/defaultthemes/dark.icon.svg)
|
||||
content/browser/defaultthemes/light.icon.svg (content/defaultthemes/light.icon.svg)
|
||||
content/browser/defaultthemes/dark.icon.svg (content/defaultthemes/dark.icon.svg)
|
||||
content/browser/defaultthemes/light.icon.svg (content/defaultthemes/light.icon.svg)
|
||||
* content/browser/pageinfo/pageInfo.xul (content/pageinfo/pageInfo.xul)
|
||||
content/browser/pageinfo/pageInfo.js (content/pageinfo/pageInfo.js)
|
||||
content/browser/pageinfo/pageInfo.css (content/pageinfo/pageInfo.css)
|
||||
|
@ -2905,7 +2905,8 @@ var CustomizableUIInternal = {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (LightweightThemeManager.currentTheme) {
|
||||
if (LightweightThemeManager.currentTheme &&
|
||||
LightweightThemeManager.currentTheme.id != "default-theme@mozilla.org") {
|
||||
log.debug(LightweightThemeManager.currentTheme + " theme is non-default");
|
||||
return false;
|
||||
}
|
||||
|
@ -1339,8 +1339,8 @@ CustomizeMode.prototype = {
|
||||
this._onUIChange();
|
||||
},
|
||||
|
||||
async onLWThemesMenuShowing(aEvent) {
|
||||
const DEFAULT_THEME_ID = "{972ce4c6-7e08-4474-a285-3208198ce6fd}";
|
||||
onLWThemesMenuShowing(aEvent) {
|
||||
const DEFAULT_THEME_ID = "default-theme@mozilla.org";
|
||||
const LIGHT_THEME_ID = "firefox-compact-light@mozilla.org";
|
||||
const DARK_THEME_ID = "firefox-compact-dark@mozilla.org";
|
||||
const MAX_THEME_COUNT = 6;
|
||||
@ -1363,21 +1363,13 @@ CustomizeMode.prototype = {
|
||||
panel.hidePopup();
|
||||
};
|
||||
|
||||
let aDefaultTheme = await AddonManager.getAddonByID(DEFAULT_THEME_ID);
|
||||
let doc = this.window.document;
|
||||
|
||||
function buildToolbarButton(aTheme) {
|
||||
let tbb = doc.createElement("toolbarbutton");
|
||||
tbb.theme = aTheme;
|
||||
tbb.setAttribute("label", aTheme.name);
|
||||
if (aDefaultTheme == aTheme) {
|
||||
// The actual icon is set up so it looks nice in about:addons, but
|
||||
// we'd like the version that's correct for the OS we're on, so we set
|
||||
// an attribute that our styling will then use to display the icon.
|
||||
tbb.setAttribute("defaulttheme", "true");
|
||||
} else {
|
||||
tbb.setAttribute("image", aTheme.iconURL);
|
||||
}
|
||||
tbb.setAttribute("image", aTheme.iconURL);
|
||||
if (aTheme.description)
|
||||
tbb.setAttribute("tooltiptext", aTheme.description);
|
||||
tbb.setAttribute("tabindex", "0");
|
||||
@ -1396,14 +1388,14 @@ CustomizeMode.prototype = {
|
||||
return tbb;
|
||||
}
|
||||
|
||||
let themes = [aDefaultTheme];
|
||||
let themes = [];
|
||||
let lwts = LightweightThemeManager.usedThemes;
|
||||
let currentLwt = LightweightThemeManager.currentTheme;
|
||||
|
||||
let activeThemeID = currentLwt ? currentLwt.id : DEFAULT_THEME_ID;
|
||||
|
||||
// Move the current theme (if any) and the light/dark themes to the start:
|
||||
let importantThemes = [LIGHT_THEME_ID, DARK_THEME_ID];
|
||||
let importantThemes = [DEFAULT_THEME_ID, LIGHT_THEME_ID, DARK_THEME_ID];
|
||||
if (currentLwt && !importantThemes.includes(currentLwt.id)) {
|
||||
importantThemes.push(currentLwt.id);
|
||||
}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
const DEFAULT_THEME_ID = "{972ce4c6-7e08-4474-a285-3208198ce6fd}";
|
||||
const DEFAULT_THEME_ID = "default-theme@mozilla.org";
|
||||
const LIGHT_THEME_ID = "firefox-compact-light@mozilla.org";
|
||||
const DARK_THEME_ID = "firefox-compact-dark@mozilla.org";
|
||||
const {LightweightThemeManager} = ChromeUtils.import("resource://gre/modules/LightweightThemeManager.jsm", {});
|
||||
@ -95,7 +95,8 @@ add_task(async function() {
|
||||
|
||||
let defaultTheme = header.nextSibling;
|
||||
defaultTheme.doCommand();
|
||||
is(Services.prefs.getCharPref("lightweightThemes.selectedThemeID"), "", "No lwtheme should be selected");
|
||||
is(Services.prefs.getCharPref("lightweightThemes.selectedThemeID"),
|
||||
DEFAULT_THEME_ID, "Default theme should be selected");
|
||||
|
||||
// ensure current theme isn't set to "Default"
|
||||
popupShownPromise = popupShown(popup);
|
||||
@ -111,7 +112,7 @@ add_task(async function() {
|
||||
|
||||
// check that "Restore Defaults" button resets theme
|
||||
await gCustomizeMode.reset();
|
||||
is(LightweightThemeManager.currentTheme, null, "Current theme reset to default");
|
||||
is(LightweightThemeManager.currentTheme.id, DEFAULT_THEME_ID, "Current theme reset to default");
|
||||
|
||||
await endCustomizing();
|
||||
Services.prefs.setCharPref("lightweightThemes.usedThemes", "[]");
|
||||
|
@ -37,7 +37,7 @@ add_task(async function() {
|
||||
|
||||
ok(CustomizableUI.inDefaultState, "In default state after reset");
|
||||
is(undoResetButton.hidden, false, "The undo button is visible after reset");
|
||||
is(LightweightThemeManager.currentTheme, null, "Theme reset to default");
|
||||
is(LightweightThemeManager.currentTheme.id, "default-theme@mozilla.org", "Theme reset to default");
|
||||
|
||||
await gCustomizeMode.undoReset();
|
||||
|
||||
|
@ -81,7 +81,6 @@ browser/chrome/pdfjs/content/web/images/findbarButton-previous-rtl.png
|
||||
browser/chrome/pdfjs/content/web/images/findbarButton-previous-rtl@2x.png
|
||||
browser/chrome/pdfjs/content/web/images/findbarButton-previous.png
|
||||
browser/chrome/pdfjs/content/web/images/findbarButton-previous@2x.png
|
||||
browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/icon.png
|
||||
browser/features/firefox@getpocket.com/chrome/skin/linux/menuPanel.png
|
||||
browser/features/firefox@getpocket.com/chrome/skin/linux/menuPanel@2x.png
|
||||
browser/features/firefox@getpocket.com/chrome/skin/windows/menuPanel.png
|
||||
|
@ -404,8 +404,6 @@
|
||||
@RESPATH@/browser/chrome/browser.manifest
|
||||
@RESPATH@/browser/chrome/pdfjs.manifest
|
||||
@RESPATH@/browser/chrome/pdfjs/*
|
||||
@RESPATH@/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/chrome.manifest
|
||||
@RESPATH@/browser/extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}/install.rdf
|
||||
@RESPATH@/chrome/toolkit@JAREXT@
|
||||
@RESPATH@/chrome/toolkit.manifest
|
||||
@RESPATH@/chrome/recording.manifest
|
||||
|
@ -625,9 +625,6 @@ ctrlTab.listAllTabs.label=;List All #1 Tabs
|
||||
# Used as the bookmark name when saving a keyword for a search field.
|
||||
addKeywordTitleAutoFill=Search %S
|
||||
|
||||
extensions.{972ce4c6-7e08-4474-a285-3208198ce6fd}.name=Default
|
||||
extensions.{972ce4c6-7e08-4474-a285-3208198ce6fd}.description=The default theme.
|
||||
|
||||
# safeModeRestart
|
||||
safeModeRestartPromptTitle=Restart with Add-ons Disabled
|
||||
safeModeRestartPromptMessage=Are you sure you want to disable all add-ons and restart?
|
||||
|
@ -50,7 +50,6 @@ browser.jar:
|
||||
|
||||
skin/classic/browser/e10s-64@2x.png (../shared/e10s-64@2x.png)
|
||||
|
||||
[extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
|
||||
% override chrome://browser/skin/feeds/audioFeedIcon.png chrome://browser/skin/feeds/feedIcon.png
|
||||
% override chrome://browser/skin/feeds/audioFeedIcon16.png chrome://browser/skin/feeds/feedIcon16.png
|
||||
% override chrome://browser/skin/feeds/videoFeedIcon.png chrome://browser/skin/feeds/feedIcon.png
|
||||
|
@ -61,7 +61,6 @@ browser.jar:
|
||||
skin/classic/browser/tabbrowser/tabDragIndicator@2x.png (tabbrowser/tabDragIndicator@2x.png)
|
||||
skin/classic/browser/e10s-64@2x.png (../shared/e10s-64@2x.png)
|
||||
|
||||
[extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
|
||||
% override chrome://browser/skin/feeds/audioFeedIcon.png chrome://browser/skin/feeds/feedIcon.png
|
||||
% override chrome://browser/skin/feeds/audioFeedIcon16.png chrome://browser/skin/feeds/feedIcon16.png
|
||||
% override chrome://browser/skin/feeds/videoFeedIcon.png chrome://browser/skin/feeds/feedIcon.png
|
||||
|
@ -158,7 +158,7 @@
|
||||
}
|
||||
|
||||
#customization-lwtheme-button > .box-inherit > .box-inherit > .button-icon {
|
||||
background-image: url("chrome://browser/content/default-theme-icon.svg");
|
||||
background-image: url("chrome://mozapps/content/extensions/default-theme-icon.svg");
|
||||
}
|
||||
|
||||
#customization-uidensity-button > .box-inherit > .box-inherit > .button-icon {
|
||||
@ -334,10 +334,6 @@ toolbarpaletteitem[place=toolbar] > toolbarspring {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.customization-lwtheme-menu-theme[defaulttheme] {
|
||||
list-style-image: url(chrome://browser/content/default-theme-icon.svg);
|
||||
}
|
||||
|
||||
#customization-uidensity-menuitem-normal {
|
||||
list-style-image: url("chrome://browser/skin/customizableui/density-normal.svg");
|
||||
}
|
||||
|
@ -61,7 +61,6 @@ browser.jar:
|
||||
skin/classic/browser/window-controls/restore-themes.svg (window-controls/restore-themes.svg)
|
||||
skin/classic/browser/e10s-64@2x.png (../shared/e10s-64@2x.png)
|
||||
|
||||
[extensions/{972ce4c6-7e08-4474-a285-3208198ce6fd}] chrome.jar:
|
||||
% override chrome://browser/skin/page-livemarks.png chrome://browser/skin/feeds/feedIcon16.png
|
||||
% override chrome://browser/skin/feeds/audioFeedIcon.png chrome://browser/skin/feeds/feedIcon.png
|
||||
% override chrome://browser/skin/feeds/audioFeedIcon16.png chrome://browser/skin/feeds/feedIcon16.png
|
||||
|
@ -29,7 +29,8 @@ const changeTestData = [
|
||||
// Creates a new CSS property value.
|
||||
// Checks that grid-area autocompletes column and row names.
|
||||
const newAreaTestData = [
|
||||
["g", {}, "grid", OPEN, SELECTED, !CHANGE],
|
||||
["g", {}, "gap", OPEN, SELECTED, !CHANGE],
|
||||
["VK_DOWN", {}, "grid", OPEN, SELECTED, !CHANGE],
|
||||
["VK_DOWN", {}, "grid-area", OPEN, SELECTED, !CHANGE],
|
||||
["VK_TAB", {}, "", !OPEN, !SELECTED, !CHANGE],
|
||||
"grid-line-names-updated",
|
||||
@ -46,7 +47,7 @@ const newAreaTestData = [
|
||||
// Creates a new CSS property value.
|
||||
// Checks that grid-row only autocompletes row names.
|
||||
const newRowTestData = [
|
||||
["g", {}, "grid", OPEN, SELECTED, !CHANGE],
|
||||
["g", {}, "gap", OPEN, SELECTED, !CHANGE],
|
||||
["r", {}, "grid", OPEN, SELECTED, !CHANGE],
|
||||
["i", {}, "grid", OPEN, SELECTED, !CHANGE],
|
||||
["d", {}, "grid", OPEN, SELECTED, !CHANGE],
|
||||
|
@ -283,8 +283,6 @@ exports.ANIMATION_TYPE_FOR_LONGHANDS = [
|
||||
"column-gap",
|
||||
"column-width",
|
||||
"flex-basis",
|
||||
"grid-column-gap",
|
||||
"grid-row-gap",
|
||||
"height",
|
||||
"left",
|
||||
"letter-spacing",
|
||||
@ -307,6 +305,7 @@ exports.ANIMATION_TYPE_FOR_LONGHANDS = [
|
||||
"padding-top",
|
||||
"perspective",
|
||||
"right",
|
||||
"row-gap",
|
||||
"stroke-dashoffset",
|
||||
"stroke-width",
|
||||
"-moz-tab-size",
|
||||
|
@ -2986,10 +2986,8 @@ exports.CSS_PROPERTIES = {
|
||||
"grid-auto-flow",
|
||||
"grid-auto-rows",
|
||||
"grid-column-end",
|
||||
"grid-column-gap",
|
||||
"grid-column-start",
|
||||
"grid-row-end",
|
||||
"grid-row-gap",
|
||||
"grid-row-start",
|
||||
"grid-template-areas",
|
||||
"grid-template-columns",
|
||||
@ -3089,6 +3087,7 @@ exports.CSS_PROPERTIES = {
|
||||
"resize",
|
||||
"right",
|
||||
"rotate",
|
||||
"row-gap",
|
||||
"ruby-align",
|
||||
"ruby-position",
|
||||
"scale",
|
||||
@ -6167,6 +6166,24 @@ exports.CSS_PROPERTIES = {
|
||||
"unset"
|
||||
]
|
||||
},
|
||||
"gap": {
|
||||
"isInherited": false,
|
||||
"subproperties": [
|
||||
"row-gap",
|
||||
"column-gap"
|
||||
],
|
||||
"supports": [
|
||||
6,
|
||||
8
|
||||
],
|
||||
"values": [
|
||||
"calc",
|
||||
"inherit",
|
||||
"initial",
|
||||
"normal",
|
||||
"unset"
|
||||
]
|
||||
},
|
||||
"grid": {
|
||||
"isInherited": false,
|
||||
"subproperties": [
|
||||
@ -6290,7 +6307,7 @@ exports.CSS_PROPERTIES = {
|
||||
"grid-column-gap": {
|
||||
"isInherited": false,
|
||||
"subproperties": [
|
||||
"grid-column-gap"
|
||||
"column-gap"
|
||||
],
|
||||
"supports": [
|
||||
6,
|
||||
@ -6300,6 +6317,7 @@ exports.CSS_PROPERTIES = {
|
||||
"calc",
|
||||
"inherit",
|
||||
"initial",
|
||||
"normal",
|
||||
"unset"
|
||||
]
|
||||
},
|
||||
@ -6320,8 +6338,8 @@ exports.CSS_PROPERTIES = {
|
||||
"grid-gap": {
|
||||
"isInherited": false,
|
||||
"subproperties": [
|
||||
"grid-row-gap",
|
||||
"grid-column-gap"
|
||||
"row-gap",
|
||||
"column-gap"
|
||||
],
|
||||
"supports": [
|
||||
6,
|
||||
@ -6331,6 +6349,7 @@ exports.CSS_PROPERTIES = {
|
||||
"calc",
|
||||
"inherit",
|
||||
"initial",
|
||||
"normal",
|
||||
"unset"
|
||||
]
|
||||
},
|
||||
@ -6366,7 +6385,7 @@ exports.CSS_PROPERTIES = {
|
||||
"grid-row-gap": {
|
||||
"isInherited": false,
|
||||
"subproperties": [
|
||||
"grid-row-gap"
|
||||
"row-gap"
|
||||
],
|
||||
"supports": [
|
||||
6,
|
||||
@ -6376,6 +6395,7 @@ exports.CSS_PROPERTIES = {
|
||||
"calc",
|
||||
"inherit",
|
||||
"initial",
|
||||
"normal",
|
||||
"unset"
|
||||
]
|
||||
},
|
||||
@ -8354,6 +8374,23 @@ exports.CSS_PROPERTIES = {
|
||||
"unset"
|
||||
]
|
||||
},
|
||||
"row-gap": {
|
||||
"isInherited": false,
|
||||
"subproperties": [
|
||||
"row-gap"
|
||||
],
|
||||
"supports": [
|
||||
6,
|
||||
8
|
||||
],
|
||||
"values": [
|
||||
"calc",
|
||||
"inherit",
|
||||
"initial",
|
||||
"normal",
|
||||
"unset"
|
||||
]
|
||||
},
|
||||
"ruby-align": {
|
||||
"isInherited": true,
|
||||
"subproperties": [
|
||||
|
@ -2460,26 +2460,6 @@ HTMLInputElement::CreateEditor()
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP_(Element*)
|
||||
HTMLInputElement::GetRootEditorNode()
|
||||
{
|
||||
nsTextEditorState* state = GetEditorState();
|
||||
if (state) {
|
||||
return state->GetRootNode();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP_(Element*)
|
||||
HTMLInputElement::GetPlaceholderNode()
|
||||
{
|
||||
nsTextEditorState* state = GetEditorState();
|
||||
if (state) {
|
||||
return state->GetPlaceholderNode();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP_(void)
|
||||
HTMLInputElement::UpdateOverlayTextVisibility(bool aNotify)
|
||||
{
|
||||
@ -2500,16 +2480,6 @@ HTMLInputElement::GetPlaceholderVisibility()
|
||||
return state->GetPlaceholderVisibility();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP_(Element*)
|
||||
HTMLInputElement::GetPreviewNode()
|
||||
{
|
||||
nsTextEditorState* state = GetEditorState();
|
||||
if (state) {
|
||||
return state->GetPreviewNode();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP_(void)
|
||||
HTMLInputElement::SetPreviewValue(const nsAString& aValue)
|
||||
{
|
||||
|
@ -246,9 +246,6 @@ public:
|
||||
NS_IMETHOD BindToFrame(nsTextControlFrame* aFrame) override;
|
||||
NS_IMETHOD_(void) UnbindFromFrame(nsTextControlFrame* aFrame) override;
|
||||
NS_IMETHOD CreateEditor() override;
|
||||
NS_IMETHOD_(Element*) GetRootEditorNode() override;
|
||||
NS_IMETHOD_(Element*) GetPlaceholderNode() override;
|
||||
NS_IMETHOD_(Element*) GetPreviewNode() override;
|
||||
NS_IMETHOD_(void) UpdateOverlayTextVisibility(bool aNotify) override;
|
||||
NS_IMETHOD_(void) SetPreviewValue(const nsAString& aValue) override;
|
||||
NS_IMETHOD_(void) GetPreviewValue(nsAString& aValue) override;
|
||||
|
@ -261,18 +261,6 @@ HTMLTextAreaElement::CreateEditor()
|
||||
return mState.PrepareEditor();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP_(Element*)
|
||||
HTMLTextAreaElement::GetRootEditorNode()
|
||||
{
|
||||
return mState.GetRootNode();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP_(Element*)
|
||||
HTMLTextAreaElement::GetPlaceholderNode()
|
||||
{
|
||||
return mState.GetPlaceholderNode();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP_(void)
|
||||
HTMLTextAreaElement::UpdateOverlayTextVisibility(bool aNotify)
|
||||
{
|
||||
@ -285,12 +273,6 @@ HTMLTextAreaElement::GetPlaceholderVisibility()
|
||||
return mState.GetPlaceholderVisibility();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP_(Element*)
|
||||
HTMLTextAreaElement::GetPreviewNode()
|
||||
{
|
||||
return mState.GetPreviewNode();
|
||||
}
|
||||
|
||||
NS_IMETHODIMP_(void)
|
||||
HTMLTextAreaElement::SetPreviewValue(const nsAString& aValue)
|
||||
{
|
||||
|
@ -99,9 +99,6 @@ public:
|
||||
NS_IMETHOD BindToFrame(nsTextControlFrame* aFrame) override;
|
||||
NS_IMETHOD_(void) UnbindFromFrame(nsTextControlFrame* aFrame) override;
|
||||
NS_IMETHOD CreateEditor() override;
|
||||
NS_IMETHOD_(Element*) GetRootEditorNode() override;
|
||||
NS_IMETHOD_(Element*) GetPlaceholderNode() override;
|
||||
NS_IMETHOD_(Element*) GetPreviewNode() override;
|
||||
NS_IMETHOD_(void) UpdateOverlayTextVisibility(bool aNotify) override;
|
||||
NS_IMETHOD_(bool) GetPlaceholderVisibility() override;
|
||||
NS_IMETHOD_(bool) GetPreviewVisibility() override;
|
||||
|
@ -133,21 +133,6 @@ public:
|
||||
*/
|
||||
NS_IMETHOD CreateEditor() = 0;
|
||||
|
||||
/**
|
||||
* Get the anonymous root node for the text control.
|
||||
*/
|
||||
NS_IMETHOD_(mozilla::dom::Element*) GetRootEditorNode() = 0;
|
||||
|
||||
/**
|
||||
* Get the placeholder anonymous node for the text control.
|
||||
*/
|
||||
NS_IMETHOD_(mozilla::dom::Element*) GetPlaceholderNode() = 0;
|
||||
|
||||
/**
|
||||
* Get the preview anonymous node for the text control.
|
||||
*/
|
||||
NS_IMETHOD_(mozilla::dom::Element*) GetPreviewNode() = 0;
|
||||
|
||||
/**
|
||||
* Update preview value for the text control.
|
||||
*/
|
||||
|
@ -1107,12 +1107,6 @@ nsTextEditorState::GetRootNode()
|
||||
return mBoundFrame ? mBoundFrame->GetRootNode() : nullptr;
|
||||
}
|
||||
|
||||
Element*
|
||||
nsTextEditorState::GetPlaceholderNode()
|
||||
{
|
||||
return mBoundFrame ? mBoundFrame->GetPlaceholderNode() : nullptr;
|
||||
}
|
||||
|
||||
Element*
|
||||
nsTextEditorState::GetPreviewNode()
|
||||
{
|
||||
|
@ -199,7 +199,6 @@ public:
|
||||
bool IsEmpty() const { return mValue ? mValue->IsEmpty() : true; }
|
||||
|
||||
mozilla::dom::Element* GetRootNode();
|
||||
mozilla::dom::Element* GetPlaceholderNode();
|
||||
mozilla::dom::Element* GetPreviewNode();
|
||||
|
||||
bool IsSingleLineTextControl() const {
|
||||
|
@ -535,7 +535,7 @@ nsSVGElement::ParseAttribute(int32_t aNamespaceID,
|
||||
RefPtr<nsAtom> valAtom = NS_Atomize(aValue);
|
||||
rv = enumInfo.mEnums[i].SetBaseValueAtom(valAtom, this);
|
||||
if (NS_FAILED(rv)) {
|
||||
enumInfo.Reset(i);
|
||||
enumInfo.SetUnknownValue(i);
|
||||
} else {
|
||||
aResult.SetTo(valAtom);
|
||||
didSetResult = true;
|
||||
@ -1508,7 +1508,8 @@ nsSVGElement::GetLengthInfo()
|
||||
return LengthAttributesInfo(nullptr, nullptr, 0);
|
||||
}
|
||||
|
||||
void nsSVGElement::LengthAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
void
|
||||
nsSVGElement::LengthAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
{
|
||||
mLengths[aAttrEnum].Init(mLengthInfo[aAttrEnum].mCtxType,
|
||||
aAttrEnum,
|
||||
@ -1858,7 +1859,8 @@ nsSVGElement::GetNumberInfo()
|
||||
return NumberAttributesInfo(nullptr, nullptr, 0);
|
||||
}
|
||||
|
||||
void nsSVGElement::NumberAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
void
|
||||
nsSVGElement::NumberAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
{
|
||||
mNumbers[aAttrEnum].Init(aAttrEnum,
|
||||
mNumberInfo[aAttrEnum].mDefaultValue);
|
||||
@ -1920,7 +1922,8 @@ nsSVGElement::GetNumberPairInfo()
|
||||
return NumberPairAttributesInfo(nullptr, nullptr, 0);
|
||||
}
|
||||
|
||||
void nsSVGElement::NumberPairAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
void
|
||||
nsSVGElement::NumberPairAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
{
|
||||
mNumberPairs[aAttrEnum].Init(aAttrEnum,
|
||||
mNumberPairInfo[aAttrEnum].mDefaultValue1,
|
||||
@ -1969,7 +1972,8 @@ nsSVGElement::GetIntegerInfo()
|
||||
return IntegerAttributesInfo(nullptr, nullptr, 0);
|
||||
}
|
||||
|
||||
void nsSVGElement::IntegerAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
void
|
||||
nsSVGElement::IntegerAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
{
|
||||
mIntegers[aAttrEnum].Init(aAttrEnum,
|
||||
mIntegerInfo[aAttrEnum].mDefaultValue);
|
||||
@ -2031,7 +2035,8 @@ nsSVGElement::GetIntegerPairInfo()
|
||||
return IntegerPairAttributesInfo(nullptr, nullptr, 0);
|
||||
}
|
||||
|
||||
void nsSVGElement::IntegerPairAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
void
|
||||
nsSVGElement::IntegerPairAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
{
|
||||
mIntegerPairs[aAttrEnum].Init(aAttrEnum,
|
||||
mIntegerPairInfo[aAttrEnum].mDefaultValue1,
|
||||
@ -2081,7 +2086,8 @@ nsSVGElement::GetAngleInfo()
|
||||
return AngleAttributesInfo(nullptr, nullptr, 0);
|
||||
}
|
||||
|
||||
void nsSVGElement::AngleAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
void
|
||||
nsSVGElement::AngleAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
{
|
||||
mAngles[aAttrEnum].Init(aAttrEnum,
|
||||
mAngleInfo[aAttrEnum].mDefaultValue,
|
||||
@ -2129,7 +2135,8 @@ nsSVGElement::GetBooleanInfo()
|
||||
return BooleanAttributesInfo(nullptr, nullptr, 0);
|
||||
}
|
||||
|
||||
void nsSVGElement::BooleanAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
void
|
||||
nsSVGElement::BooleanAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
{
|
||||
mBooleans[aAttrEnum].Init(aAttrEnum,
|
||||
mBooleanInfo[aAttrEnum].mDefaultValue);
|
||||
@ -2168,12 +2175,20 @@ nsSVGElement::GetEnumInfo()
|
||||
return EnumAttributesInfo(nullptr, nullptr, 0);
|
||||
}
|
||||
|
||||
void nsSVGElement::EnumAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
void
|
||||
nsSVGElement::EnumAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
{
|
||||
mEnums[aAttrEnum].Init(aAttrEnum,
|
||||
mEnumInfo[aAttrEnum].mDefaultValue);
|
||||
}
|
||||
|
||||
void
|
||||
nsSVGElement::EnumAttributesInfo::SetUnknownValue(uint8_t aAttrEnum)
|
||||
{
|
||||
// Fortunately in SVG every enum's unknown value is 0
|
||||
mEnums[aAttrEnum].Init(aAttrEnum, 0);
|
||||
}
|
||||
|
||||
void
|
||||
nsSVGElement::DidChangeEnum(uint8_t aAttrEnum)
|
||||
{
|
||||
@ -2332,12 +2347,14 @@ nsSVGElement::GetStringInfo()
|
||||
return StringAttributesInfo(nullptr, nullptr, 0);
|
||||
}
|
||||
|
||||
void nsSVGElement::StringAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
void
|
||||
nsSVGElement::StringAttributesInfo::Reset(uint8_t aAttrEnum)
|
||||
{
|
||||
mStrings[aAttrEnum].Init(aAttrEnum);
|
||||
}
|
||||
|
||||
void nsSVGElement::GetStringBaseValue(uint8_t aAttrEnum, nsAString& aResult) const
|
||||
void
|
||||
nsSVGElement::GetStringBaseValue(uint8_t aAttrEnum, nsAString& aResult) const
|
||||
{
|
||||
nsSVGElement::StringAttributesInfo info = const_cast<nsSVGElement*>(this)->GetStringInfo();
|
||||
|
||||
@ -2350,7 +2367,8 @@ void nsSVGElement::GetStringBaseValue(uint8_t aAttrEnum, nsAString& aResult) con
|
||||
*info.mStringInfo[aAttrEnum].mName, aResult);
|
||||
}
|
||||
|
||||
void nsSVGElement::SetStringBaseValue(uint8_t aAttrEnum, const nsAString& aValue)
|
||||
void
|
||||
nsSVGElement::SetStringBaseValue(uint8_t aAttrEnum, const nsAString& aValue)
|
||||
{
|
||||
nsSVGElement::StringAttributesInfo info = GetStringInfo();
|
||||
|
||||
|
@ -516,6 +516,7 @@ protected:
|
||||
{}
|
||||
|
||||
void Reset(uint8_t aAttrEnum);
|
||||
void SetUnknownValue(uint8_t aAttrEnum);
|
||||
};
|
||||
|
||||
struct NumberListInfo {
|
||||
|
@ -509,7 +509,8 @@ struct HelperThreadStats
|
||||
#define FOR_EACH_SIZE(macro) \
|
||||
macro(_, MallocHeap, stateData) \
|
||||
macro(_, MallocHeap, parseTask) \
|
||||
macro(_, MallocHeap, ionBuilder)
|
||||
macro(_, MallocHeap, ionBuilder) \
|
||||
macro(_, MallocHeap, wasmCompile)
|
||||
|
||||
explicit HelperThreadStats()
|
||||
: FOR_EACH_SIZE(ZERO_SIZE)
|
||||
|
@ -725,10 +725,8 @@ js::Nursery::collect(JS::gcreason::Reason reason)
|
||||
|
||||
TenureCountCache tenureCounts;
|
||||
previousGC.reason = JS::gcreason::NO_REASON;
|
||||
mozilla::Maybe<AutoTraceSession> session;
|
||||
if (!isEmpty()) {
|
||||
session.emplace(rt, JS::HeapState::MinorCollecting);
|
||||
doCollection(reason, session.ref(), tenureCounts);
|
||||
doCollection(reason, tenureCounts);
|
||||
} else {
|
||||
previousGC.nurseryUsedBytes = 0;
|
||||
previousGC.nurseryCapacity = spaceToEnd(maxChunkCount());
|
||||
@ -763,9 +761,12 @@ js::Nursery::collect(JS::gcreason::Reason reason)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mozilla::Maybe<AutoTraceSession> session;
|
||||
for (ZonesIter zone(rt, SkipAtoms); !zone.done(); zone.next()) {
|
||||
if (shouldPretenure && zone->allocNurseryStrings && zone->tenuredStrings >= 30 * 1000) {
|
||||
MOZ_ASSERT(session.isSome(), "discarding JIT code must be in an AutoTraceSession");
|
||||
if (!session.isSome())
|
||||
session.emplace(rt, JS::HeapState::MinorCollecting);
|
||||
CancelOffThreadIonCompile(zone);
|
||||
bool preserving = zone->isPreservingCode();
|
||||
zone->setPreservingCode(false);
|
||||
@ -781,6 +782,7 @@ js::Nursery::collect(JS::gcreason::Reason reason)
|
||||
}
|
||||
zone->tenuredStrings = 0;
|
||||
}
|
||||
session.reset(); // End the minor GC session, if running one.
|
||||
endProfile(ProfileKey::Pretenure);
|
||||
|
||||
// We ignore gcMaxBytes when allocating for minor collection. However, if we
|
||||
@ -795,7 +797,6 @@ js::Nursery::collect(JS::gcreason::Reason reason)
|
||||
disable();
|
||||
|
||||
endProfile(ProfileKey::Total);
|
||||
session.reset(); // End the minor GC session, if running one.
|
||||
rt->gc.incMinorGcNumber();
|
||||
|
||||
TimeDuration totalTime = profileDurations_[ProfileKey::Total];
|
||||
@ -831,11 +832,10 @@ js::Nursery::collect(JS::gcreason::Reason reason)
|
||||
}
|
||||
|
||||
void
|
||||
js::Nursery::doCollection(JS::gcreason::Reason reason,
|
||||
AutoTraceSession& session,
|
||||
TenureCountCache& tenureCounts)
|
||||
js::Nursery::doCollection(JS::gcreason::Reason reason, TenureCountCache& tenureCounts)
|
||||
{
|
||||
JSRuntime* rt = runtime();
|
||||
AutoTraceSession session(rt, JS::HeapState::MinorCollecting);
|
||||
AutoSetThreadIsPerformingGC performingGC;
|
||||
AutoStopVerifyingBarriers av(rt, false);
|
||||
AutoDisableProxyCheck disableStrictProxyChecking;
|
||||
|
@ -517,9 +517,7 @@ class Nursery
|
||||
/* Common internal allocator function. */
|
||||
void* allocate(size_t size);
|
||||
|
||||
void doCollection(JS::gcreason::Reason reason,
|
||||
gc::AutoTraceSession& sesssion,
|
||||
gc::TenureCountCache& tenureCounts);
|
||||
void doCollection(JS::gcreason::Reason reason, gc::TenureCountCache& tenureCounts);
|
||||
|
||||
/*
|
||||
* Move the object at |src| in the Nursery to an already-allocated cell
|
||||
|
@ -110,7 +110,7 @@ struct PhaseInfo
|
||||
Phase parent;
|
||||
Phase firstChild;
|
||||
Phase nextSibling;
|
||||
Phase nextInPhase;
|
||||
Phase nextWithPhaseKind;
|
||||
PhaseKind phaseKind;
|
||||
uint8_t depth;
|
||||
const char* name;
|
||||
@ -166,7 +166,7 @@ Statistics::lookupChildPhase(PhaseKind phaseKind) const
|
||||
Phase phase;
|
||||
for (phase = phaseKinds[phaseKind].firstPhase;
|
||||
phase != Phase::NONE;
|
||||
phase = phases[phase].nextInPhase)
|
||||
phase = phases[phase].nextWithPhaseKind)
|
||||
{
|
||||
if (phases[phase].parent == currentPhase())
|
||||
break;
|
||||
@ -634,7 +634,7 @@ Statistics::formatJsonDescription(uint64_t timestamp, JSONPrinter& json) const
|
||||
sccDurations(&sccTotal, &sccLongest);
|
||||
json.property("scc_sweep_total", sccTotal, JSONPrinter::MILLISECONDS); // #14
|
||||
json.property("scc_sweep_max_pause", sccLongest, JSONPrinter::MILLISECONDS); // #15
|
||||
|
||||
|
||||
if (nonincrementalReason_ != AbortReason::None)
|
||||
json.property("nonincremental_reason", ExplainAbortReason(nonincrementalReason_)); // #16
|
||||
json.property("allocated_bytes", preBytes); // #17
|
||||
@ -769,10 +769,10 @@ Statistics::initialize()
|
||||
MOZ_ASSERT(parent == phases[nextSibling].parent);
|
||||
MOZ_ASSERT(phases[i].depth == phases[nextSibling].depth);
|
||||
}
|
||||
auto nextInPhase = phases[i].nextInPhase;
|
||||
if (nextInPhase != Phase::NONE) {
|
||||
MOZ_ASSERT(phases[i].phaseKind == phases[nextInPhase].phaseKind);
|
||||
MOZ_ASSERT(parent != phases[nextInPhase].parent);
|
||||
auto nextWithPhaseKind = phases[i].nextWithPhaseKind;
|
||||
if (nextWithPhaseKind != Phase::NONE) {
|
||||
MOZ_ASSERT(phases[i].phaseKind == phases[nextWithPhaseKind].phaseKind);
|
||||
MOZ_ASSERT(parent != phases[nextWithPhaseKind].parent);
|
||||
}
|
||||
}
|
||||
for (auto i : AllPhaseKinds()) {
|
||||
@ -825,7 +825,7 @@ SumPhase(PhaseKind phaseKind, const Statistics::PhaseTimeTable& times)
|
||||
TimeDuration sum = 0;
|
||||
for (Phase phase = phaseKinds[phaseKind].firstPhase;
|
||||
phase != Phase::NONE;
|
||||
phase = phases[phase].nextInPhase)
|
||||
phase = phases[phase].nextWithPhaseKind)
|
||||
{
|
||||
sum += times[phase];
|
||||
}
|
||||
@ -870,7 +870,7 @@ LongestPhaseSelfTimeInMajorGC(const Statistics::PhaseTimeTable& times)
|
||||
|
||||
// This happens very occasionally in release builds. Skip collecting
|
||||
// longest phase telemetry if it does.
|
||||
MOZ_ASSERT(ok, "Inconsistent time data");
|
||||
MOZ_ASSERT(ok, "Inconsistent time data; see bug 1400153");
|
||||
if (!ok)
|
||||
return PhaseKind::NONE;
|
||||
|
||||
@ -1098,7 +1098,12 @@ Statistics::endSlice()
|
||||
// Clear the timers at the end of a GC, preserving the data for PhaseKind::MUTATOR.
|
||||
auto mutatorStartTime = phaseStartTimes[Phase::MUTATOR];
|
||||
auto mutatorTime = phaseTimes[Phase::MUTATOR];
|
||||
PodZero(&phaseStartTimes);
|
||||
for (mozilla::TimeStamp& t : phaseStartTimes)
|
||||
t = TimeStamp();
|
||||
#ifdef DEBUG
|
||||
for (mozilla::TimeStamp& t : phaseEndTimes)
|
||||
t = TimeStamp();
|
||||
#endif
|
||||
PodZero(&phaseTimes);
|
||||
phaseStartTimes[Phase::MUTATOR] = mutatorStartTime;
|
||||
phaseTimes[Phase::MUTATOR] = mutatorTime;
|
||||
@ -1212,8 +1217,7 @@ Statistics::recordPhaseBegin(Phase phase)
|
||||
TimeStamp now = TimeStamp::Now();
|
||||
|
||||
if (current != Phase::NONE) {
|
||||
// Sadly this happens sometimes.
|
||||
MOZ_ASSERT(now >= phaseStartTimes[currentPhase()]);
|
||||
MOZ_ASSERT(now >= phaseStartTimes[currentPhase()], "Inconsistent time data; see bug 1400153");
|
||||
if (now < phaseStartTimes[currentPhase()]) {
|
||||
now = phaseStartTimes[currentPhase()];
|
||||
aborted = true;
|
||||
@ -1233,8 +1237,26 @@ Statistics::recordPhaseEnd(Phase phase)
|
||||
|
||||
TimeStamp now = TimeStamp::Now();
|
||||
|
||||
// Sadly this happens sometimes.
|
||||
MOZ_ASSERT(now >= phaseStartTimes[phase]);
|
||||
// Make sure this phase ends after it starts.
|
||||
MOZ_ASSERT(now >= phaseStartTimes[phase], "Inconsistent time data; see bug 1400153");
|
||||
|
||||
#ifdef DEBUG
|
||||
// Make sure this phase ends after all of its children. Note that some
|
||||
// children might not have run in this instance, in which case they will
|
||||
// have run in a previous instance of this parent or not at all.
|
||||
for (Phase kid = phases[phase].firstChild; kid != Phase::NONE; kid = phases[kid].nextSibling) {
|
||||
if (phaseEndTimes[kid].IsNull())
|
||||
continue;
|
||||
if (phaseEndTimes[kid] > now)
|
||||
fprintf(stderr, "Parent %s ended at %.3fms, before child %s ended at %.3fms?\n",
|
||||
phases[phase].name,
|
||||
t(now - TimeStamp::ProcessCreation()),
|
||||
phases[kid].name,
|
||||
t(phaseEndTimes[kid] - TimeStamp::ProcessCreation()));
|
||||
MOZ_ASSERT(phaseEndTimes[kid] <= now, "Inconsistent time data; see bug 1400153");
|
||||
}
|
||||
#endif
|
||||
|
||||
if (now < phaseStartTimes[phase]) {
|
||||
now = phaseStartTimes[phase];
|
||||
aborted = true;
|
||||
@ -1250,6 +1272,10 @@ Statistics::recordPhaseEnd(Phase phase)
|
||||
slices_.back().phaseTimes[phase] += t;
|
||||
phaseTimes[phase] += t;
|
||||
phaseStartTimes[phase] = TimeStamp();
|
||||
|
||||
#ifdef DEBUG
|
||||
phaseEndTimes[phase] = now;
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -289,6 +289,11 @@ struct Statistics
|
||||
/* Most recent time when the given phase started. */
|
||||
EnumeratedArray<Phase, Phase::LIMIT, TimeStamp> phaseStartTimes;
|
||||
|
||||
#ifdef DEBUG
|
||||
/* Most recent time when the given phase ended. */
|
||||
EnumeratedArray<Phase, Phase::LIMIT, TimeStamp> phaseEndTimes;
|
||||
#endif
|
||||
|
||||
/* Bookkeeping for GC timings when timingMutator is true */
|
||||
TimeStamp timedGCStart;
|
||||
TimeDuration timedGCTime;
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "vm/Time.h"
|
||||
#include "vm/TraceLogging.h"
|
||||
#include "vm/Xdr.h"
|
||||
#include "wasm/WasmGenerator.h"
|
||||
|
||||
#include "gc/PrivateIterators-inl.h"
|
||||
#include "vm/JSCompartment-inl.h"
|
||||
@ -1176,6 +1177,12 @@ GlobalHelperThreadState::addSizeOfIncludingThis(JS::GlobalStats* stats,
|
||||
for (auto builder : ionFreeList_)
|
||||
htStats.ionBuilder += builder->sizeOfIncludingThis(mallocSizeOf);
|
||||
|
||||
// Report wasm::CompileTasks on wait lists
|
||||
for (auto task : wasmWorklist_tier1_)
|
||||
htStats.wasmCompile += task->sizeOfIncludingThis(mallocSizeOf);
|
||||
for (auto task : wasmWorklist_tier2_)
|
||||
htStats.wasmCompile += task->sizeOfIncludingThis(mallocSizeOf);
|
||||
|
||||
// Report number of helper threads.
|
||||
MOZ_ASSERT(htStats.idleThreadCount == 0);
|
||||
if (threads) {
|
||||
|
@ -1025,3 +1025,28 @@ ModuleGenerator::finishTier2(Module& module)
|
||||
|
||||
return module.finishTier2(Move(linkDataTier_), Move(tier2), env_);
|
||||
}
|
||||
|
||||
size_t
|
||||
CompiledCode::sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const
|
||||
{
|
||||
size_t trapSitesSize = 0;
|
||||
for (const TrapSiteVector& vec : trapSites)
|
||||
trapSitesSize += vec.sizeOfExcludingThis(mallocSizeOf);
|
||||
|
||||
return bytes.sizeOfExcludingThis(mallocSizeOf) +
|
||||
codeRanges.sizeOfExcludingThis(mallocSizeOf) +
|
||||
callSites.sizeOfExcludingThis(mallocSizeOf) +
|
||||
callSiteTargets.sizeOfExcludingThis(mallocSizeOf) +
|
||||
trapSitesSize +
|
||||
callFarJumps.sizeOfExcludingThis(mallocSizeOf) +
|
||||
symbolicAccesses.sizeOfExcludingThis(mallocSizeOf) +
|
||||
codeLabels.sizeOfExcludingThis(mallocSizeOf);
|
||||
}
|
||||
|
||||
size_t
|
||||
CompileTask::sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const
|
||||
{
|
||||
return lifo.sizeOfExcludingThis(mallocSizeOf) +
|
||||
inputs.sizeOfExcludingThis(mallocSizeOf) +
|
||||
output.sizeOfExcludingThis(mallocSizeOf);
|
||||
}
|
||||
|
@ -19,6 +19,8 @@
|
||||
#ifndef wasm_generator_h
|
||||
#define wasm_generator_h
|
||||
|
||||
#include "mozilla/MemoryReporting.h"
|
||||
|
||||
#include "jit/MacroAssembler.h"
|
||||
#include "wasm/WasmCompile.h"
|
||||
#include "wasm/WasmModule.h"
|
||||
@ -93,6 +95,8 @@ struct CompiledCode
|
||||
symbolicAccesses.empty() &&
|
||||
codeLabels.empty();
|
||||
}
|
||||
|
||||
size_t sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const;
|
||||
};
|
||||
|
||||
// The CompileTaskState of a ModuleGenerator contains the mutable state shared
|
||||
@ -128,6 +132,12 @@ struct CompileTask
|
||||
state(state),
|
||||
lifo(defaultChunkSize)
|
||||
{}
|
||||
|
||||
size_t sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const;
|
||||
size_t sizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf) const
|
||||
{
|
||||
return mallocSizeOf(this) + sizeOfExcludingThis(mallocSizeOf);
|
||||
}
|
||||
};
|
||||
|
||||
// A ModuleGenerator encapsulates the creation of a wasm module. During the
|
||||
|
@ -2499,6 +2499,10 @@ JSReporter::CollectReports(WindowPaths* windowPaths,
|
||||
REPORT_BYTES(NS_LITERAL_CSTRING("explicit/js-non-window/helper-thread/ion-builder"),
|
||||
KIND_HEAP, gStats.helperThread.ionBuilder,
|
||||
"The memory used by IonBuilders waiting in HelperThreadState.");
|
||||
|
||||
REPORT_BYTES(NS_LITERAL_CSTRING("explicit/js-non-window/helper-thread/wasm-compile"),
|
||||
KIND_HEAP, gStats.helperThread.parseTask,
|
||||
"The memory used by Wasm compilations waiting in HelperThreadState.");
|
||||
}
|
||||
|
||||
static nsresult
|
||||
|
@ -1351,10 +1351,15 @@ CallMethodHelper::GetArraySizeFromParam(uint8_t paramIndex,
|
||||
: nullptr);
|
||||
|
||||
bool isArray;
|
||||
if (!JS_IsArrayObject(mCallContext, maybeArray, &isArray) ||
|
||||
!isArray ||
|
||||
!JS_GetArrayLength(mCallContext, arrayOrNull, &GetDispatchParam(paramIndex)->val.u32))
|
||||
{
|
||||
bool ok = false;
|
||||
if (JS_IsArrayObject(mCallContext, maybeArray, &isArray) && isArray) {
|
||||
ok = JS_GetArrayLength(mCallContext, arrayOrNull, &GetDispatchParam(paramIndex)->val.u32);
|
||||
} else if (JS_IsTypedArrayObject(&maybeArray.toObject())) {
|
||||
GetDispatchParam(paramIndex)->val.u32 = JS_GetTypedArrayLength(&maybeArray.toObject());
|
||||
ok = true;
|
||||
}
|
||||
|
||||
if (!ok) {
|
||||
return Throw(NS_ERROR_XPC_CANT_CONVERT_OBJECT_TO_ARRAY, mCallContext);
|
||||
}
|
||||
}
|
||||
|
@ -2592,6 +2592,8 @@ RestyleManager::ProcessPostTraversal(
|
||||
nsIFrame* styleFrame = nsLayoutUtils::GetStyleFrame(aElement);
|
||||
nsIFrame* primaryFrame = aElement->GetPrimaryFrame();
|
||||
|
||||
MOZ_ASSERT(aElement->HasServoData(), "How in the world?");
|
||||
|
||||
// NOTE(emilio): This is needed because for table frames the bit is set on the
|
||||
// table wrapper (which is the primary frame), not on the table itself.
|
||||
const bool isOutOfFlow =
|
||||
|
@ -927,37 +927,25 @@ nsTextControlFrame::ScrollSelectionIntoView()
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsTextControlFrame::GetRootNodeAndInitializeEditor(nsIDOMElement **aRootElement)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aRootElement);
|
||||
|
||||
RefPtr<TextEditor> textEditor = GetTextEditor();
|
||||
if (!textEditor) {
|
||||
return NS_OK;
|
||||
}
|
||||
return textEditor->GetRootElement(aRootElement);
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsTextControlFrame::SelectAllOrCollapseToEndOfText(bool aSelect)
|
||||
{
|
||||
nsCOMPtr<nsIDOMElement> rootElement;
|
||||
nsresult rv = GetRootNodeAndInitializeEditor(getter_AddRefs(rootElement));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsresult rv = EnsureEditorInitialized();
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIContent> rootContent = do_QueryInterface(rootElement);
|
||||
nsCOMPtr<nsINode> rootNode;
|
||||
rootNode = rootContent;
|
||||
rootNode= mRootNode;
|
||||
|
||||
NS_ENSURE_TRUE(rootNode && rootContent, NS_ERROR_FAILURE);
|
||||
NS_ENSURE_TRUE(rootNode, NS_ERROR_FAILURE);
|
||||
|
||||
int32_t numChildren = rootContent->GetChildCount();
|
||||
int32_t numChildren = mRootNode->GetChildCount();
|
||||
|
||||
if (numChildren > 0) {
|
||||
// We never want to place the selection after the last
|
||||
// br under the root node!
|
||||
nsIContent *child = rootContent->GetLastChild();
|
||||
nsIContent *child = mRootNode->GetLastChild();
|
||||
if (child) {
|
||||
if (child->IsHTMLElement(nsGkAtoms::br)) {
|
||||
child = child->GetPreviousSibling();
|
||||
@ -1047,11 +1035,12 @@ nsTextControlFrame::OffsetToDOMPoint(uint32_t aOffset,
|
||||
*aResult = nullptr;
|
||||
*aPosition = 0;
|
||||
|
||||
nsCOMPtr<nsIDOMElement> rootElement;
|
||||
nsresult rv = GetRootNodeAndInitializeEditor(getter_AddRefs(rootElement));
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
nsCOMPtr<nsINode> rootNode(do_QueryInterface(rootElement));
|
||||
nsresult rv = EnsureEditorInitialized();
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
RefPtr<Element> rootNode = mRootNode;
|
||||
NS_ENSURE_TRUE(rootNode, NS_ERROR_FAILURE);
|
||||
|
||||
nsCOMPtr<nsINodeList> nodeList = rootNode->ChildNodes();
|
||||
@ -1063,7 +1052,7 @@ nsTextControlFrame::OffsetToDOMPoint(uint32_t aOffset,
|
||||
Text* textNode = firstNode ? firstNode->GetAsText() : nullptr;
|
||||
|
||||
if (length == 0) {
|
||||
NS_IF_ADDREF(*aResult = rootNode);
|
||||
rootNode.forget(aResult);
|
||||
*aPosition = 0;
|
||||
} else if (textNode) {
|
||||
uint32_t textLength = textNode->Length();
|
||||
@ -1352,13 +1341,10 @@ nsTextControlFrame::GetOwnedFrameSelection()
|
||||
UniquePtr<PresState>
|
||||
nsTextControlFrame::SaveState()
|
||||
{
|
||||
nsCOMPtr<nsITextControlElement> txtCtrl = do_QueryInterface(GetContent());
|
||||
NS_ASSERTION(txtCtrl, "Content not a text control element");
|
||||
|
||||
nsIContent* rootNode = txtCtrl->GetRootEditorNode();
|
||||
if (rootNode) {
|
||||
if (mRootNode) {
|
||||
// Query the nsIStatefulFrame from the HTMLScrollFrame
|
||||
nsIStatefulFrame* scrollStateFrame = do_QueryFrame(rootNode->GetPrimaryFrame());
|
||||
nsIStatefulFrame* scrollStateFrame =
|
||||
do_QueryFrame(mRootNode->GetPrimaryFrame());
|
||||
if (scrollStateFrame) {
|
||||
return scrollStateFrame->SaveState();
|
||||
}
|
||||
@ -1372,13 +1358,10 @@ nsTextControlFrame::RestoreState(PresState* aState)
|
||||
{
|
||||
NS_ENSURE_ARG_POINTER(aState);
|
||||
|
||||
nsCOMPtr<nsITextControlElement> txtCtrl = do_QueryInterface(GetContent());
|
||||
NS_ASSERTION(txtCtrl, "Content not a text control element");
|
||||
|
||||
nsIContent* rootNode = txtCtrl->GetRootEditorNode();
|
||||
if (rootNode) {
|
||||
if (mRootNode) {
|
||||
// Query the nsIStatefulFrame from the HTMLScrollFrame
|
||||
nsIStatefulFrame* scrollStateFrame = do_QueryFrame(rootNode->GetPrimaryFrame());
|
||||
nsIStatefulFrame* scrollStateFrame =
|
||||
do_QueryFrame(mRootNode->GetPrimaryFrame());
|
||||
if (scrollStateFrame) {
|
||||
return scrollStateFrame->RestoreState(aState);
|
||||
}
|
||||
@ -1424,9 +1407,9 @@ nsTextControlFrame::BuildDisplayList(nsDisplayListBuilder* aBuilder,
|
||||
while (kid) {
|
||||
// If the frame is the placeholder or preview frame, we should only show
|
||||
// it if it has to be visible.
|
||||
if (!((kid->GetContent() == txtCtrl->GetPlaceholderNode() &&
|
||||
if (!((kid->GetContent() == mPlaceholderDiv &&
|
||||
!txtCtrl->GetPlaceholderVisibility()) ||
|
||||
(kid->GetContent() == txtCtrl->GetPreviewNode() &&
|
||||
(kid->GetContent() == mPreviewDiv &&
|
||||
!txtCtrl->GetPreviewVisibility()))) {
|
||||
BuildDisplayListForChild(aBuilder, kid, set, 0);
|
||||
}
|
||||
@ -1438,8 +1421,7 @@ mozilla::dom::Element*
|
||||
nsTextControlFrame::GetPseudoElement(CSSPseudoElementType aType)
|
||||
{
|
||||
if (aType == CSSPseudoElementType::placeholder) {
|
||||
nsCOMPtr<nsITextControlElement> txtCtrl = do_QueryInterface(GetContent());
|
||||
return txtCtrl->GetPlaceholderNode();
|
||||
return mPlaceholderDiv;
|
||||
}
|
||||
|
||||
return nsContainerFrame::GetPseudoElement(aType);
|
||||
|
@ -193,10 +193,6 @@ public: //for methods who access nsTextControlFrame directly
|
||||
return mRootNode;
|
||||
}
|
||||
|
||||
mozilla::dom::Element* GetPlaceholderNode() const {
|
||||
return mPlaceholderDiv;
|
||||
}
|
||||
|
||||
mozilla::dom::Element* GetPreviewNode() const {
|
||||
return mPreviewDiv;
|
||||
}
|
||||
@ -327,16 +323,6 @@ private:
|
||||
nsresult SetSelectionEndPoints(uint32_t aSelStart, uint32_t aSelEnd,
|
||||
SelectionDirection aDirection = eNone);
|
||||
|
||||
/**
|
||||
* Return the root DOM element, and implicitly initialize the editor if
|
||||
* needed.
|
||||
*
|
||||
* XXXbz This function is slow. Very slow. Consider using
|
||||
* EnsureEditorInitialized() if you need that, and
|
||||
* nsITextControlElement::GetRootEditorNode on our content if you need that.
|
||||
*/
|
||||
nsresult GetRootNodeAndInitializeEditor(nsIDOMElement **aRootElement);
|
||||
|
||||
void FinishedInitializer() {
|
||||
DeleteProperty(TextControlInitializer());
|
||||
}
|
||||
|
@ -288,11 +288,10 @@ nsColumnSetFrame::GetAvailableContentBSize(const ReflowInput& aReflowInput)
|
||||
}
|
||||
|
||||
static nscoord
|
||||
GetColumnGap(nsColumnSetFrame* aFrame,
|
||||
const nsStyleColumn* aColStyle,
|
||||
nscoord aPercentageBasis)
|
||||
GetColumnGap(nsColumnSetFrame* aFrame,
|
||||
nscoord aPercentageBasis)
|
||||
{
|
||||
const auto& columnGap = aColStyle->mColumnGap;
|
||||
const auto& columnGap = aFrame->StylePosition()->mColumnGap;
|
||||
if (columnGap.GetUnit() == eStyleUnit_Normal) {
|
||||
return aFrame->StyleFont()->mFont.size;
|
||||
}
|
||||
@ -330,7 +329,7 @@ nsColumnSetFrame::ChooseColumnStrategy(const ReflowInput& aReflowInput,
|
||||
colBSize = std::min(colBSize, aReflowInput.ComputedMaxBSize());
|
||||
}
|
||||
|
||||
nscoord colGap = GetColumnGap(this, colStyle, aReflowInput.ComputedISize());
|
||||
nscoord colGap = GetColumnGap(this, aReflowInput.ComputedISize());
|
||||
int32_t numColumns = colStyle->mColumnCount;
|
||||
|
||||
// If column-fill is set to 'balance', then we want to balance the columns.
|
||||
@ -514,7 +513,7 @@ nsColumnSetFrame::GetMinISize(gfxContext *aRenderingContext)
|
||||
// include n-1 column gaps.
|
||||
colISize = iSize;
|
||||
iSize *= colStyle->mColumnCount;
|
||||
nscoord colGap = GetColumnGap(this, colStyle, NS_UNCONSTRAINEDSIZE);
|
||||
nscoord colGap = GetColumnGap(this, NS_UNCONSTRAINEDSIZE);
|
||||
iSize += colGap * (colStyle->mColumnCount - 1);
|
||||
// The multiplication above can make 'width' negative (integer overflow),
|
||||
// so use std::max to protect against that.
|
||||
@ -535,7 +534,7 @@ nsColumnSetFrame::GetPrefISize(gfxContext *aRenderingContext)
|
||||
nscoord result = 0;
|
||||
DISPLAY_PREF_WIDTH(this, result);
|
||||
const nsStyleColumn* colStyle = StyleColumn();
|
||||
nscoord colGap = GetColumnGap(this, colStyle, NS_UNCONSTRAINEDSIZE);
|
||||
nscoord colGap = GetColumnGap(this, NS_UNCONSTRAINEDSIZE);
|
||||
|
||||
nscoord colISize;
|
||||
if (colStyle->mColumnWidth.GetUnit() == eStyleUnit_Coord) {
|
||||
|
@ -2375,9 +2375,9 @@ nsGridContainerFrame::GridReflowInput::CalculateTrackSizes(
|
||||
const LogicalSize& aContentBox,
|
||||
SizingConstraint aConstraint)
|
||||
{
|
||||
mCols.Initialize(mColFunctions, mGridStyle->mGridColumnGap,
|
||||
mCols.Initialize(mColFunctions, mGridStyle->mColumnGap,
|
||||
aGrid.mGridColEnd, aContentBox.ISize(mWM));
|
||||
mRows.Initialize(mRowFunctions, mGridStyle->mGridRowGap,
|
||||
mRows.Initialize(mRowFunctions, mGridStyle->mRowGap,
|
||||
aGrid.mGridRowEnd, aContentBox.BSize(mWM));
|
||||
|
||||
mCols.CalculateSizes(*this, mGridItems, mColFunctions,
|
||||
@ -3131,7 +3131,7 @@ nsGridContainerFrame::Grid::PlaceGridItems(GridReflowInput& aState,
|
||||
// to a 0,0 based grid after placing definite lines.
|
||||
auto areas = gridStyle->mGridTemplateAreas.get();
|
||||
uint32_t numRepeatCols = aState.mColFunctions.InitRepeatTracks(
|
||||
gridStyle->mGridColumnGap,
|
||||
gridStyle->mColumnGap,
|
||||
aComputedMinSize.ISize(aState.mWM),
|
||||
aComputedSize.ISize(aState.mWM),
|
||||
aComputedMaxSize.ISize(aState.mWM));
|
||||
@ -3140,7 +3140,7 @@ nsGridContainerFrame::Grid::PlaceGridItems(GridReflowInput& aState,
|
||||
LineNameMap colLineNameMap(gridStyle->GridTemplateColumns(), numRepeatCols);
|
||||
|
||||
uint32_t numRepeatRows = aState.mRowFunctions.InitRepeatTracks(
|
||||
gridStyle->mGridRowGap,
|
||||
gridStyle->mRowGap,
|
||||
aComputedMinSize.BSize(aState.mWM),
|
||||
aComputedSize.BSize(aState.mWM),
|
||||
aComputedMaxSize.BSize(aState.mWM));
|
||||
@ -6370,7 +6370,7 @@ nsGridContainerFrame::IntrinsicISize(gfxContext* aRenderingContext,
|
||||
if (grid.mGridColEnd == 0) {
|
||||
return 0;
|
||||
}
|
||||
state.mCols.Initialize(state.mColFunctions, state.mGridStyle->mGridColumnGap,
|
||||
state.mCols.Initialize(state.mColFunctions, state.mGridStyle->mColumnGap,
|
||||
grid.mGridColEnd, NS_UNCONSTRAINEDSIZE);
|
||||
auto constraint = aType == nsLayoutUtils::MIN_ISIZE ?
|
||||
SizingConstraint::eMinContent : SizingConstraint::eMaxContent;
|
||||
@ -6378,7 +6378,7 @@ nsGridContainerFrame::IntrinsicISize(gfxContext* aRenderingContext,
|
||||
NS_UNCONSTRAINEDSIZE, &GridArea::mCols,
|
||||
constraint);
|
||||
state.mCols.mGridGap =
|
||||
nsLayoutUtils::ResolveGapToLength(state.mGridStyle->mGridColumnGap,
|
||||
nsLayoutUtils::ResolveGapToLength(state.mGridStyle->mColumnGap,
|
||||
NS_UNCONSTRAINEDSIZE);
|
||||
nscoord length = 0;
|
||||
for (const TrackSize& sz : state.mCols.mSizes) {
|
||||
|
@ -2401,8 +2401,9 @@ nsDisplayList::ComputeVisibilityForSublist(nsDisplayListBuilder* aBuilder,
|
||||
#ifdef DEBUG
|
||||
nsRegion r;
|
||||
r.And(*aVisibleRegion, GetBounds(aBuilder));
|
||||
NS_ASSERTION(r.GetBounds().IsEqualInterior(aListVisibleBounds),
|
||||
"bad aListVisibleBounds");
|
||||
// XXX this fails sometimes:
|
||||
NS_WARNING_ASSERTION(r.GetBounds().IsEqualInterior(aListVisibleBounds),
|
||||
"bad aListVisibleBounds");
|
||||
#endif
|
||||
|
||||
bool anyVisible = false;
|
||||
|
@ -16,5 +16,4 @@
|
||||
<rect x="250" y="50" width="50" height="50" fill="#B5DF3F"/>
|
||||
<rect x="300" y="50" width="50" height="50" fill="#DFC88E"/>
|
||||
<rect x="350" y="50" width="50" height="50" fill="#B5CC3F"/>
|
||||
<rect x="0" y="100" width="50" height="50" fill="#DFB53F"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1011 B |
@ -597,6 +597,21 @@ CSS_PROP_ALIAS(-webkit-user-select,
|
||||
WEBKIT_PREFIX_PREF)
|
||||
#undef WEBKIT_PREFIX_PREF
|
||||
|
||||
CSS_PROP_ALIAS(grid-column-gap,
|
||||
grid_column_gap,
|
||||
column_gap,
|
||||
GridColumnGap,
|
||||
"")
|
||||
CSS_PROP_ALIAS(grid-gap,
|
||||
grid_gap,
|
||||
gap,
|
||||
GridGap,
|
||||
"")
|
||||
CSS_PROP_ALIAS(grid-row-gap,
|
||||
grid_row_gap,
|
||||
row_gap,
|
||||
GridRowGap,
|
||||
"")
|
||||
CSS_PROP_ALIAS(word-wrap,
|
||||
word_wrap,
|
||||
overflow_wrap,
|
||||
|
@ -1363,6 +1363,12 @@ CSS_PROP_(
|
||||
"",
|
||||
VARIANT_HI,
|
||||
nullptr) // bug 58646
|
||||
CSS_PROP_SHORTHAND(
|
||||
gap,
|
||||
gap,
|
||||
Gap,
|
||||
CSS_PROPERTY_PARSE_FUNCTION,
|
||||
"")
|
||||
CSS_PROP_SHORTHAND(
|
||||
grid,
|
||||
grid,
|
||||
@ -1413,14 +1419,6 @@ CSS_PROP_(
|
||||
"",
|
||||
0,
|
||||
nullptr)
|
||||
CSS_PROP_(
|
||||
grid-column-gap,
|
||||
grid_column_gap,
|
||||
GridColumnGap,
|
||||
0,
|
||||
"",
|
||||
VARIANT_HLP | VARIANT_CALC,
|
||||
nullptr)
|
||||
CSS_PROP_(
|
||||
grid-column-start,
|
||||
grid_column_start,
|
||||
@ -1429,12 +1427,6 @@ CSS_PROP_(
|
||||
"",
|
||||
0,
|
||||
nullptr)
|
||||
CSS_PROP_SHORTHAND(
|
||||
grid-gap,
|
||||
grid_gap,
|
||||
GridGap,
|
||||
CSS_PROPERTY_PARSE_FUNCTION,
|
||||
"")
|
||||
CSS_PROP_SHORTHAND(
|
||||
grid-row,
|
||||
grid_row,
|
||||
@ -1449,14 +1441,6 @@ CSS_PROP_(
|
||||
"",
|
||||
0,
|
||||
nullptr)
|
||||
CSS_PROP_(
|
||||
grid-row-gap,
|
||||
grid_row_gap,
|
||||
GridRowGap,
|
||||
0,
|
||||
"",
|
||||
VARIANT_HLP | VARIANT_CALC,
|
||||
nullptr)
|
||||
CSS_PROP_(
|
||||
grid-row-start,
|
||||
grid_row_start,
|
||||
@ -2383,6 +2367,14 @@ CSS_PROP_(
|
||||
"layout.css.individual-transform.enabled",
|
||||
0,
|
||||
nullptr)
|
||||
CSS_PROP_(
|
||||
row-gap,
|
||||
row_gap,
|
||||
RowGap,
|
||||
0,
|
||||
"",
|
||||
VARIANT_HLP | VARIANT_NORMAL | VARIANT_CALC,
|
||||
nullptr)
|
||||
CSS_PROP_(
|
||||
ruby-align,
|
||||
ruby_align,
|
||||
|
@ -2672,9 +2672,9 @@ static const nsCSSPropertyID gGridAreaSubpropTable[] = {
|
||||
eCSSProperty_UNKNOWN
|
||||
};
|
||||
|
||||
static const nsCSSPropertyID gGridGapSubpropTable[] = {
|
||||
eCSSProperty_grid_row_gap,
|
||||
eCSSProperty_grid_column_gap,
|
||||
static const nsCSSPropertyID gGapSubpropTable[] = {
|
||||
eCSSProperty_row_gap,
|
||||
eCSSProperty_column_gap,
|
||||
eCSSProperty_UNKNOWN
|
||||
};
|
||||
|
||||
|
@ -1251,21 +1251,6 @@ nsComputedDOMStyle::DoGetColumnWidth()
|
||||
return val.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<CSSValue>
|
||||
nsComputedDOMStyle::DoGetColumnGap()
|
||||
{
|
||||
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
|
||||
|
||||
const nsStyleColumn* column = StyleColumn();
|
||||
if (column->mColumnGap.GetUnit() == eStyleUnit_Normal) {
|
||||
val->SetIdent(eCSSKeyword_normal);
|
||||
} else {
|
||||
SetValueToCoord(val, StyleColumn()->mColumnGap, true);
|
||||
}
|
||||
|
||||
return val.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<CSSValue>
|
||||
nsComputedDOMStyle::DoGetColumnFill()
|
||||
{
|
||||
@ -3429,18 +3414,28 @@ nsComputedDOMStyle::DoGetGridRowEnd()
|
||||
}
|
||||
|
||||
already_AddRefed<CSSValue>
|
||||
nsComputedDOMStyle::DoGetGridColumnGap()
|
||||
nsComputedDOMStyle::DoGetColumnGap()
|
||||
{
|
||||
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
|
||||
SetValueToCoord(val, StylePosition()->mGridColumnGap, true);
|
||||
const auto& columnGap = StylePosition()->mColumnGap;
|
||||
if (columnGap.GetUnit() == eStyleUnit_Normal) {
|
||||
val->SetIdent(eCSSKeyword_normal);
|
||||
} else {
|
||||
SetValueToCoord(val, columnGap, true);
|
||||
}
|
||||
return val.forget();
|
||||
}
|
||||
|
||||
already_AddRefed<CSSValue>
|
||||
nsComputedDOMStyle::DoGetGridRowGap()
|
||||
nsComputedDOMStyle::DoGetRowGap()
|
||||
{
|
||||
RefPtr<nsROCSSPrimitiveValue> val = new nsROCSSPrimitiveValue;
|
||||
SetValueToCoord(val, StylePosition()->mGridRowGap, true);
|
||||
const auto& rowGap = StylePosition()->mRowGap;
|
||||
if (rowGap.GetUnit() == eStyleUnit_Normal) {
|
||||
val->SetIdent(eCSSKeyword_normal);
|
||||
} else {
|
||||
SetValueToCoord(val, rowGap, true);
|
||||
}
|
||||
return val.forget();
|
||||
}
|
||||
|
||||
|
@ -316,8 +316,6 @@ private:
|
||||
already_AddRefed<CSSValue> DoGetGridColumnEnd();
|
||||
already_AddRefed<CSSValue> DoGetGridRowStart();
|
||||
already_AddRefed<CSSValue> DoGetGridRowEnd();
|
||||
already_AddRefed<CSSValue> DoGetGridColumnGap();
|
||||
already_AddRefed<CSSValue> DoGetGridRowGap();
|
||||
|
||||
/* StyleImageLayer properties */
|
||||
already_AddRefed<CSSValue> DoGetImageLayerImage(const nsStyleImageLayers& aLayers);
|
||||
@ -539,7 +537,6 @@ private:
|
||||
already_AddRefed<CSSValue> DoGetColumnFill();
|
||||
already_AddRefed<CSSValue> DoGetColumnSpan();
|
||||
already_AddRefed<CSSValue> DoGetColumnWidth();
|
||||
already_AddRefed<CSSValue> DoGetColumnGap();
|
||||
already_AddRefed<CSSValue> DoGetColumnRuleWidth();
|
||||
already_AddRefed<CSSValue> DoGetColumnRuleStyle();
|
||||
already_AddRefed<CSSValue> DoGetColumnRuleColor();
|
||||
@ -577,6 +574,8 @@ private:
|
||||
already_AddRefed<CSSValue> DoGetJustifyContent();
|
||||
already_AddRefed<CSSValue> DoGetJustifyItems();
|
||||
already_AddRefed<CSSValue> DoGetJustifySelf();
|
||||
already_AddRefed<CSSValue> DoGetColumnGap();
|
||||
already_AddRefed<CSSValue> DoGetRowGap();
|
||||
|
||||
/* SVG properties */
|
||||
already_AddRefed<CSSValue> DoGetFill();
|
||||
|
@ -154,10 +154,8 @@ COMPUTED_STYLE_PROP(grid_auto_columns, GridAutoColumns)
|
||||
COMPUTED_STYLE_PROP(grid_auto_flow, GridAutoFlow)
|
||||
COMPUTED_STYLE_PROP(grid_auto_rows, GridAutoRows)
|
||||
COMPUTED_STYLE_PROP(grid_column_end, GridColumnEnd)
|
||||
COMPUTED_STYLE_PROP(grid_column_gap, GridColumnGap)
|
||||
COMPUTED_STYLE_PROP(grid_column_start, GridColumnStart)
|
||||
COMPUTED_STYLE_PROP(grid_row_end, GridRowEnd)
|
||||
COMPUTED_STYLE_PROP(grid_row_gap, GridRowGap)
|
||||
COMPUTED_STYLE_PROP(grid_row_start, GridRowStart)
|
||||
COMPUTED_STYLE_PROP(grid_template_areas, GridTemplateAreas)
|
||||
COMPUTED_STYLE_PROP(grid_template_columns, GridTemplateColumns)
|
||||
@ -224,6 +222,7 @@ COMPUTED_STYLE_PROP(quotes, Quotes)
|
||||
COMPUTED_STYLE_PROP(resize, Resize)
|
||||
COMPUTED_STYLE_PROP(right, Right)
|
||||
COMPUTED_STYLE_PROP(rotate, Rotate)
|
||||
COMPUTED_STYLE_PROP(row_gap, RowGap)
|
||||
COMPUTED_STYLE_PROP(ruby_align, RubyAlign)
|
||||
COMPUTED_STYLE_PROP(ruby_position, RubyPosition)
|
||||
COMPUTED_STYLE_PROP(scale, Scale)
|
||||
|
@ -756,7 +756,6 @@ nsStyleXUL::CalcDifference(const nsStyleXUL& aNewData) const
|
||||
nsStyleColumn::nsStyleColumn(const nsPresContext* aContext)
|
||||
: mColumnCount(NS_STYLE_COLUMN_COUNT_AUTO)
|
||||
, mColumnWidth(eStyleUnit_Auto)
|
||||
, mColumnGap(eStyleUnit_Normal)
|
||||
, mColumnRuleColor(StyleComplexColor::CurrentColor())
|
||||
, mColumnRuleStyle(NS_STYLE_BORDER_STYLE_NONE)
|
||||
, mColumnFill(NS_STYLE_COLUMN_FILL_BALANCE)
|
||||
@ -776,7 +775,6 @@ nsStyleColumn::~nsStyleColumn()
|
||||
nsStyleColumn::nsStyleColumn(const nsStyleColumn& aSource)
|
||||
: mColumnCount(aSource.mColumnCount)
|
||||
, mColumnWidth(aSource.mColumnWidth)
|
||||
, mColumnGap(aSource.mColumnGap)
|
||||
, mColumnRuleColor(aSource.mColumnRuleColor)
|
||||
, mColumnRuleStyle(aSource.mColumnRuleStyle)
|
||||
, mColumnFill(aSource.mColumnFill)
|
||||
@ -801,7 +799,6 @@ nsStyleColumn::CalcDifference(const nsStyleColumn& aNewData) const
|
||||
}
|
||||
|
||||
if (mColumnWidth != aNewData.mColumnWidth ||
|
||||
mColumnGap != aNewData.mColumnGap ||
|
||||
mColumnFill != aNewData.mColumnFill) {
|
||||
return NS_STYLE_HINT_REFLOW;
|
||||
}
|
||||
@ -1523,8 +1520,8 @@ nsStylePosition::nsStylePosition(const nsPresContext* aContext)
|
||||
, mFlexGrow(0.0f)
|
||||
, mFlexShrink(1.0f)
|
||||
, mZIndex(eStyleUnit_Auto)
|
||||
, mGridColumnGap(nscoord(0), nsStyleCoord::CoordConstructor)
|
||||
, mGridRowGap(nscoord(0), nsStyleCoord::CoordConstructor)
|
||||
, mColumnGap(eStyleUnit_Normal)
|
||||
, mRowGap(eStyleUnit_Normal)
|
||||
{
|
||||
MOZ_COUNT_CTOR(nsStylePosition);
|
||||
|
||||
@ -1587,8 +1584,8 @@ nsStylePosition::nsStylePosition(const nsStylePosition& aSource)
|
||||
, mGridColumnEnd(aSource.mGridColumnEnd)
|
||||
, mGridRowStart(aSource.mGridRowStart)
|
||||
, mGridRowEnd(aSource.mGridRowEnd)
|
||||
, mGridColumnGap(aSource.mGridColumnGap)
|
||||
, mGridRowGap(aSource.mGridRowGap)
|
||||
, mColumnGap(aSource.mColumnGap)
|
||||
, mRowGap(aSource.mRowGap)
|
||||
{
|
||||
MOZ_COUNT_CTOR(nsStylePosition);
|
||||
|
||||
@ -1712,8 +1709,8 @@ nsStylePosition::CalcDifference(const nsStylePosition& aNewData,
|
||||
mGridColumnEnd != aNewData.mGridColumnEnd ||
|
||||
mGridRowStart != aNewData.mGridRowStart ||
|
||||
mGridRowEnd != aNewData.mGridRowEnd ||
|
||||
mGridColumnGap != aNewData.mGridColumnGap ||
|
||||
mGridRowGap != aNewData.mGridRowGap) {
|
||||
mColumnGap != aNewData.mColumnGap ||
|
||||
mRowGap != aNewData.mRowGap) {
|
||||
return hint |
|
||||
nsChangeHint_AllReflowHints;
|
||||
}
|
||||
|
@ -1507,8 +1507,8 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStylePosition
|
||||
nsStyleGridLine mGridColumnEnd;
|
||||
nsStyleGridLine mGridRowStart;
|
||||
nsStyleGridLine mGridRowEnd;
|
||||
nsStyleCoord mGridColumnGap; // [reset] coord, percent, calc
|
||||
nsStyleCoord mGridRowGap; // [reset] coord, percent, calc
|
||||
nsStyleCoord mColumnGap; // [reset] normal, coord, percent, calc
|
||||
nsStyleCoord mRowGap; // [reset] normal, coord, percent, calc
|
||||
|
||||
// FIXME: Logical-coordinate equivalents to these WidthDepends... and
|
||||
// HeightDepends... methods have been introduced (see below); we probably
|
||||
@ -2931,7 +2931,6 @@ struct MOZ_NEEDS_MEMMOVABLE_MEMBERS nsStyleColumn
|
||||
|
||||
uint32_t mColumnCount; // [reset] see nsStyleConsts.h
|
||||
nsStyleCoord mColumnWidth; // [reset] coord, auto
|
||||
nsStyleCoord mColumnGap; // [reset] <length-percentage> | normal
|
||||
|
||||
mozilla::StyleComplexColor mColumnRuleColor; // [reset]
|
||||
uint8_t mColumnRuleStyle; // [reset]
|
||||
|
@ -1705,24 +1705,6 @@ var gCSSProperties = {
|
||||
alias_for: "column-fill",
|
||||
subproperties: [ "column-fill" ]
|
||||
},
|
||||
"column-gap": {
|
||||
domProp: "columnGap",
|
||||
inherited: false,
|
||||
type: CSS_TYPE_LONGHAND,
|
||||
initial_values: [ "normal" ],
|
||||
other_values: [ "2px", "1em", "4em", "3%", "calc(3%)", "calc(1em - 3%)",
|
||||
"calc(2px)",
|
||||
"calc(-2px)",
|
||||
"calc(0px)",
|
||||
"calc(0pt)",
|
||||
"calc(5em)",
|
||||
"calc(-2em + 3em)",
|
||||
"calc(3*25px)",
|
||||
"calc(25px*3)",
|
||||
"calc(3*25px + 5em)",
|
||||
],
|
||||
invalid_values: [ "-3%", "-1px", "4" ]
|
||||
},
|
||||
"-moz-column-gap": {
|
||||
domProp: "MozColumnGap",
|
||||
inherited: false,
|
||||
@ -7226,33 +7208,55 @@ gCSSProperties["grid-area"] = {
|
||||
invalid_values: gridAreaInvalidValues
|
||||
};
|
||||
|
||||
gCSSProperties["grid-column-gap"] = {
|
||||
domProp: "gridColumnGap",
|
||||
gCSSProperties["column-gap"] = {
|
||||
domProp: "columnGap",
|
||||
inherited: false,
|
||||
type: CSS_TYPE_LONGHAND,
|
||||
initial_values: [ "0" ],
|
||||
initial_values: [ "normal" ],
|
||||
other_values: [ "2px", "2%", "1em", "calc(1px + 1em)", "calc(1%)",
|
||||
"calc(1% + 1ch)" , "calc(1px - 99%)" ],
|
||||
invalid_values: [ "-1px", "auto", "none", "1px 1px", "-1%", "fit-content(1px)" ],
|
||||
};
|
||||
gCSSProperties["grid-row-gap"] = {
|
||||
domProp: "gridRowGap",
|
||||
gCSSProperties["grid-column-gap"] = {
|
||||
domProp: "gridColumnGap",
|
||||
inherited: false,
|
||||
type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
|
||||
alias_for: "column-gap",
|
||||
subproperties: [ "column-gap" ]
|
||||
};
|
||||
gCSSProperties["row-gap"] = {
|
||||
domProp: "rowGap",
|
||||
inherited: false,
|
||||
type: CSS_TYPE_LONGHAND,
|
||||
initial_values: [ "0" ],
|
||||
initial_values: [ "normal" ],
|
||||
other_values: [ "2px", "2%", "1em", "calc(1px + 1em)", "calc(1%)",
|
||||
"calc(1% + 1ch)" , "calc(1px - 99%)" ],
|
||||
invalid_values: [ "-1px", "auto", "none", "1px 1px", "-1%", "min-content" ],
|
||||
};
|
||||
gCSSProperties["grid-row-gap"] = {
|
||||
domProp: "gridRowGap",
|
||||
inherited: false,
|
||||
type: CSS_TYPE_SHORTHAND_AND_LONGHAND,
|
||||
alias_for: "row-gap",
|
||||
subproperties: [ "row-gap" ]
|
||||
};
|
||||
gCSSProperties["gap"] = {
|
||||
domProp: "gap",
|
||||
inherited: false,
|
||||
type: CSS_TYPE_TRUE_SHORTHAND,
|
||||
subproperties: [ "column-gap", "row-gap" ],
|
||||
initial_values: [ "normal", "normal normal" ],
|
||||
other_values: [ "1ch 0", "1px 1%", "1em 1px", "calc(1px) calc(1%)",
|
||||
"normal 0", "1% normal" ],
|
||||
invalid_values: [ "-1px", "1px -1px", "1px 1px 1px", "inherit 1px",
|
||||
"1px auto" ]
|
||||
};
|
||||
gCSSProperties["grid-gap"] = {
|
||||
domProp: "gridGap",
|
||||
inherited: false,
|
||||
type: CSS_TYPE_TRUE_SHORTHAND,
|
||||
subproperties: [ "grid-column-gap", "grid-row-gap" ],
|
||||
initial_values: [ "0", "0 0" ],
|
||||
other_values: [ "1ch 0", "1px 1%", "1em 1px", "calc(1px) calc(1%)" ],
|
||||
invalid_values: [ "-1px", "1px -1px", "1px 1px 1px", "inherit 1px",
|
||||
"1px auto" ]
|
||||
alias_for: "gap",
|
||||
subproperties: [ "column-gap", "row-gap" ],
|
||||
};
|
||||
|
||||
if (IsCSSPropertyPrefEnabled("layout.css.contain.enabled")) {
|
||||
|
@ -73,8 +73,6 @@ var supported_properties = {
|
||||
"box-shadow": [ test_shadow_transition ],
|
||||
"column-count": [ test_pos_integer_or_auto_transition,
|
||||
test_integer_at_least_one_clamping ],
|
||||
"column-gap": [ test_length_transition,
|
||||
test_length_clamped ],
|
||||
"column-rule-color": [ test_color_transition,
|
||||
test_true_currentcolor_transition ],
|
||||
"column-rule-width": [ test_length_transition,
|
||||
@ -169,8 +167,8 @@ var supported_properties = {
|
||||
/* test_float_zeroToOne_clamped */ ],
|
||||
"font-stretch": [ test_percent_transition, test_percent_clamped ],
|
||||
"font-weight": [ test_font_weight ],
|
||||
"grid-column-gap": [ test_grid_gap ],
|
||||
"grid-row-gap": [ test_grid_gap ],
|
||||
"column-gap": [ test_grid_gap ],
|
||||
"row-gap": [ test_grid_gap ],
|
||||
"height": [ test_length_transition, test_percent_transition,
|
||||
test_length_percent_calc_transition,
|
||||
test_length_clamped, test_percent_clamped ],
|
||||
|
@ -189,7 +189,8 @@ android.libraryVariants.all { variant ->
|
||||
include 'org/mozilla/geckoview/**'
|
||||
options.addPathOption('sourcepath', ':').setValue(
|
||||
variant.sourceSets.collect({ it.javaDirectories }).flatten() +
|
||||
variant.generateBuildConfig.sourceOutputDir)
|
||||
variant.generateBuildConfig.sourceOutputDir +
|
||||
variant.aidlCompile.sourceOutputDir)
|
||||
|
||||
// javadoc 8 has a bug that requires the rt.jar file from the JRE to be
|
||||
// in the bootclasspath (https://stackoverflow.com/a/30458820).
|
||||
|
@ -34,6 +34,7 @@ public final class GeckoRuntime implements Parcelable {
|
||||
* Note: Only use this for session-less apps.
|
||||
* For regular apps, use create() and createSession() instead.
|
||||
*
|
||||
* @param context An application context for the default runtime.
|
||||
* @return The (static) default runtime for the context.
|
||||
*/
|
||||
public static synchronized @NonNull GeckoRuntime getDefault(
|
||||
|
@ -40,6 +40,7 @@ public final class GeckoRuntimeSettings implements Parcelable {
|
||||
* Set the content process hint flag.
|
||||
*
|
||||
* @param use If true, this will reload the content process for future use.
|
||||
* @return This Builder instance.
|
||||
*/
|
||||
public @NonNull Builder useContentProcessHint(final boolean use) {
|
||||
mSettings.mUseContentProcess = use;
|
||||
@ -50,6 +51,7 @@ public final class GeckoRuntimeSettings implements Parcelable {
|
||||
* Set the custom Gecko process arguments.
|
||||
*
|
||||
* @param args The Gecko process arguments.
|
||||
* @return This Builder instance.
|
||||
*/
|
||||
public @NonNull Builder arguments(final @NonNull String[] args) {
|
||||
if (args == null) {
|
||||
@ -63,6 +65,7 @@ public final class GeckoRuntimeSettings implements Parcelable {
|
||||
* Set the custom Gecko intent extras.
|
||||
*
|
||||
* @param extras The Gecko intent extras.
|
||||
* @return This Builder instance.
|
||||
*/
|
||||
public @NonNull Builder extras(final @NonNull Bundle extras) {
|
||||
if (extras == null) {
|
||||
@ -76,6 +79,7 @@ public final class GeckoRuntimeSettings implements Parcelable {
|
||||
* Set whether JavaScript support should be enabled.
|
||||
*
|
||||
* @param flag A flag determining whether JavaScript should be enabled.
|
||||
* @return This Builder instance.
|
||||
*/
|
||||
public @NonNull Builder javaScriptEnabled(final boolean flag) {
|
||||
mSettings.mJavaScript.set(flag);
|
||||
@ -86,6 +90,7 @@ public final class GeckoRuntimeSettings implements Parcelable {
|
||||
* Set whether remote debugging support should be enabled.
|
||||
*
|
||||
* @param enabled True if remote debugging should be enabled.
|
||||
* @return This Builder instance.
|
||||
*/
|
||||
public @NonNull Builder remoteDebuggingEnabled(final boolean enabled) {
|
||||
mSettings.mRemoteDebugging.set(enabled);
|
||||
@ -96,6 +101,7 @@ public final class GeckoRuntimeSettings implements Parcelable {
|
||||
* Set whether support for web fonts should be enabled.
|
||||
*
|
||||
* @param flag A flag determining whether web fonts should be enabled.
|
||||
* @return This Builder instance.
|
||||
*/
|
||||
public @NonNull Builder webFontsEnabled(final boolean flag) {
|
||||
mSettings.mWebFonts.set(flag);
|
||||
@ -222,6 +228,7 @@ public final class GeckoRuntimeSettings implements Parcelable {
|
||||
* Set whether JavaScript support should be enabled.
|
||||
*
|
||||
* @param flag A flag determining whether JavaScript should be enabled.
|
||||
* @return This GeckoRuntimeSettings instance.
|
||||
*/
|
||||
public @NonNull GeckoRuntimeSettings setJavaScriptEnabled(final boolean flag) {
|
||||
mJavaScript.set(flag);
|
||||
@ -241,6 +248,7 @@ public final class GeckoRuntimeSettings implements Parcelable {
|
||||
* Set whether remote debugging support should be enabled.
|
||||
*
|
||||
* @param enabled True if remote debugging should be enabled.
|
||||
* @return This GeckoRuntimeSettings instance.
|
||||
*/
|
||||
public @NonNull GeckoRuntimeSettings setRemoteDebuggingEnabled(final boolean enabled) {
|
||||
mRemoteDebugging.set(enabled);
|
||||
@ -260,6 +268,7 @@ public final class GeckoRuntimeSettings implements Parcelable {
|
||||
* Set whether support for web fonts should be enabled.
|
||||
*
|
||||
* @param flag A flag determining whether web fonts should be enabled.
|
||||
* @return This GeckoRuntimeSettings instance.
|
||||
*/
|
||||
public @NonNull GeckoRuntimeSettings setWebFontsEnabled(final boolean flag) {
|
||||
mWebFonts.set(flag);
|
||||
|
@ -60,16 +60,18 @@ public class SessionAccessibility {
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the GeckoView instance that delegates accessibility to this session.
|
||||
* Get the View instance that delegates accessibility to this session.
|
||||
*
|
||||
* @return GeckoView instance.
|
||||
* @return View instance.
|
||||
*/
|
||||
public View getView() {
|
||||
return mView;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the GeckoView instance that should delegate accessibility to this session.
|
||||
* Set the View instance that should delegate accessibility to this session.
|
||||
*
|
||||
* @param view View instance.
|
||||
*/
|
||||
public void setView(final View view) {
|
||||
if (mView != null) {
|
||||
|
@ -10,6 +10,7 @@
|
||||
|
||||
html {
|
||||
background: -moz-Dialog;
|
||||
color: -moz-DialogText;
|
||||
font: message-box;
|
||||
}
|
||||
|
||||
@ -31,6 +32,7 @@ div.section {
|
||||
border: 1px solid ThreeDShadow;
|
||||
border-radius: 10px;
|
||||
background: -moz-Field;
|
||||
color: -moz-FieldText;
|
||||
}
|
||||
|
||||
div.opsRow {
|
||||
@ -40,6 +42,7 @@ div.opsRow {
|
||||
border: 1px solid ThreeDShadow;
|
||||
border-radius: 10px;
|
||||
background: -moz-Field;
|
||||
color: -moz-FieldText;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
@ -65,25 +68,38 @@ h1 {
|
||||
}
|
||||
|
||||
h2 {
|
||||
background: #ddd;
|
||||
padding-left: .1em;
|
||||
}
|
||||
|
||||
.accuracyWarning, .badInputWarning, .invalid {
|
||||
/*
|
||||
* Technically this should be used with the default background colour,
|
||||
* instead we're using the default field background colour,
|
||||
* I hope this will be okay.
|
||||
*/
|
||||
color: -moz-activehyperlinktext;
|
||||
}
|
||||
|
||||
.accuracyWarning {
|
||||
color: #d22;
|
||||
}
|
||||
|
||||
.badInputWarning {
|
||||
color: #f00;
|
||||
}
|
||||
|
||||
.treeline {
|
||||
color: #888;
|
||||
color: -moz-FieldText;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
/*
|
||||
* We might like to style these but cannot find a colour that always
|
||||
* contrasts with the background colour.
|
||||
*/
|
||||
.mrValue, .mrName, .mrNote {
|
||||
}
|
||||
|
||||
.mrValue {
|
||||
font-weight: bold;
|
||||
color: #400;
|
||||
}
|
||||
|
||||
.mrPerc {
|
||||
@ -92,14 +108,6 @@ h2 {
|
||||
.mrSep {
|
||||
}
|
||||
|
||||
.mrName {
|
||||
color: #004;
|
||||
}
|
||||
|
||||
.mrNote {
|
||||
color: #604;
|
||||
}
|
||||
|
||||
.hasKids {
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -130,11 +138,6 @@ h2 {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.invalid {
|
||||
color: #fff;
|
||||
background-color: #f00;
|
||||
}
|
||||
|
||||
/* Mobile-specific parts go here. */
|
||||
|
||||
/* buttons are different sizes and overlapping without this */
|
||||
|
@ -1,6 +1,7 @@
|
||||
[DEFAULT]
|
||||
head = head_psm.js
|
||||
tags = psm
|
||||
firefox-appdir = browser
|
||||
support-files =
|
||||
bad_certs/**
|
||||
ocsp_certs/**
|
||||
|
@ -109,8 +109,7 @@ add_task(async function run_test() {
|
||||
// Ensure we don't go to the network to fetch personas and end up leaking
|
||||
// stuff.
|
||||
Services.io.offline = true;
|
||||
Assert.ok(!prefs.get("lightweightThemes.selectedThemeID"));
|
||||
Assert.equal(LightweightThemeManager.currentTheme, null);
|
||||
Assert.equal(LightweightThemeManager.currentTheme.id, "default-theme@mozilla.org");
|
||||
|
||||
let persona1 = makePersona();
|
||||
let persona2 = makePersona();
|
||||
@ -130,8 +129,7 @@ add_task(async function run_test() {
|
||||
"lightweightThemes.usedThemes": usedThemes
|
||||
};
|
||||
await store.update(record);
|
||||
Assert.ok(!prefs.get("lightweightThemes.selectedThemeID"));
|
||||
Assert.equal(LightweightThemeManager.currentTheme, null);
|
||||
Assert.equal(LightweightThemeManager.currentTheme.id, "default-theme@mozilla.org");
|
||||
|
||||
_("Only the current app's preferences are applied.");
|
||||
record = new PrefRec("prefs", "some-fake-app");
|
||||
|
@ -31,17 +31,6 @@ ${helpers.predefined_type(
|
||||
|
||||
|
||||
|
||||
${helpers.predefined_type(
|
||||
"column-gap",
|
||||
"length::NonNegativeLengthOrPercentageOrNormal",
|
||||
"Either::Second(Normal)",
|
||||
extra_prefixes="moz",
|
||||
servo_pref="layout.columns.enabled",
|
||||
animation_value_type="NonNegativeLengthOrPercentageOrNormal",
|
||||
spec="https://drafts.csswg.org/css-multicol/#propdef-column-gap",
|
||||
servo_restyle_damage = "reflow",
|
||||
)}
|
||||
|
||||
${helpers.single_keyword("column-fill", "balance auto", extra_prefixes="moz",
|
||||
products="gecko", animation_value_type="discrete",
|
||||
spec="https://drafts.csswg.org/css-multicol/#propdef-column-fill")}
|
||||
|
@ -302,13 +302,6 @@ ${helpers.predefined_type("object-position",
|
||||
animation_value_type="ComputedValue")}
|
||||
|
||||
% for kind in ["row", "column"]:
|
||||
${helpers.predefined_type("grid-%s-gap" % kind,
|
||||
"NonNegativeLengthOrPercentage",
|
||||
"computed::NonNegativeLengthOrPercentage::zero()",
|
||||
spec="https://drafts.csswg.org/css-grid/#propdef-grid-%s-gap" % kind,
|
||||
animation_value_type="NonNegativeLengthOrPercentage",
|
||||
products="gecko")}
|
||||
|
||||
% for range in ["start", "end"]:
|
||||
${helpers.predefined_type("grid-%s-%s" % (kind, range),
|
||||
"GridLine",
|
||||
@ -355,3 +348,23 @@ ${helpers.predefined_type("grid-template-areas",
|
||||
products="gecko",
|
||||
animation_value_type="discrete",
|
||||
spec="https://drafts.csswg.org/css-grid/#propdef-grid-template-areas")}
|
||||
|
||||
${helpers.predefined_type("column-gap",
|
||||
"length::NonNegativeLengthOrPercentageOrNormal",
|
||||
"Either::Second(Normal)",
|
||||
alias="grid-column-gap",
|
||||
extra_prefixes="moz",
|
||||
servo_pref="layout.columns.enabled",
|
||||
spec="https://drafts.csswg.org/css-align-3/#propdef-column-gap",
|
||||
animation_value_type="NonNegativeLengthOrPercentageOrNormal",
|
||||
servo_restyle_damage = "reflow")}
|
||||
|
||||
// no need for -moz- prefixed alias for this property
|
||||
${helpers.predefined_type("row-gap",
|
||||
"length::NonNegativeLengthOrPercentageOrNormal",
|
||||
"Either::Second(Normal)",
|
||||
alias="grid-row-gap",
|
||||
servo_pref="layout.columns.enabled",
|
||||
spec="https://drafts.csswg.org/css-align-3/#propdef-row-gap",
|
||||
animation_value_type="NonNegativeLengthOrPercentageOrNormal",
|
||||
servo_restyle_damage = "reflow")}
|
||||
|
@ -108,30 +108,30 @@
|
||||
}
|
||||
</%helpers:shorthand>
|
||||
|
||||
<%helpers:shorthand name="grid-gap" sub_properties="grid-row-gap grid-column-gap"
|
||||
spec="https://drafts.csswg.org/css-grid/#propdef-grid-gap"
|
||||
<%helpers:shorthand name="gap" alias="grid-gap" sub_properties="row-gap column-gap"
|
||||
spec="https://drafts.csswg.org/css-align-3/#gap-shorthand"
|
||||
products="gecko">
|
||||
use properties::longhands::{grid_row_gap, grid_column_gap};
|
||||
use properties::longhands::{row_gap, column_gap};
|
||||
|
||||
pub fn parse_value<'i, 't>(context: &ParserContext, input: &mut Parser<'i, 't>)
|
||||
-> Result<Longhands, ParseError<'i>> {
|
||||
let row_gap = grid_row_gap::parse(context, input)?;
|
||||
let column_gap = input.try(|input| grid_column_gap::parse(context, input)).unwrap_or(row_gap.clone());
|
||||
let r_gap = row_gap::parse(context, input)?;
|
||||
let c_gap = input.try(|input| column_gap::parse(context, input)).unwrap_or(r_gap.clone());
|
||||
|
||||
Ok(expanded! {
|
||||
grid_row_gap: row_gap,
|
||||
grid_column_gap: column_gap,
|
||||
row_gap: r_gap,
|
||||
column_gap: c_gap,
|
||||
})
|
||||
}
|
||||
|
||||
impl<'a> ToCss for LonghandsToSerialize<'a> {
|
||||
fn to_css<W>(&self, dest: &mut CssWriter<W>) -> fmt::Result where W: fmt::Write {
|
||||
if self.grid_row_gap == self.grid_column_gap {
|
||||
self.grid_row_gap.to_css(dest)
|
||||
if self.row_gap == self.column_gap {
|
||||
self.row_gap.to_css(dest)
|
||||
} else {
|
||||
self.grid_row_gap.to_css(dest)?;
|
||||
self.row_gap.to_css(dest)?;
|
||||
dest.write_str(" ")?;
|
||||
self.grid_column_gap.to_css(dest)
|
||||
self.column_gap.to_css(dest)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ job-defaults:
|
||||
type: file
|
||||
run:
|
||||
using: mozharness
|
||||
config: [] # See extra-config below
|
||||
actions: [create-virtualenv collect-individual-checksums create-big-checksums create-summary]
|
||||
options:
|
||||
- "version={version}"
|
||||
@ -57,16 +58,14 @@ jobs:
|
||||
build_platform: linux64
|
||||
build_type: opt
|
||||
run:
|
||||
config:
|
||||
extra-config:
|
||||
by-project:
|
||||
mozilla-release:
|
||||
- releases/checksums_firefox.py
|
||||
mozilla-beta:
|
||||
- releases/checksums_firefox.py
|
||||
maple:
|
||||
- releases/dev_checksums_firefox.py
|
||||
mozilla-(release|beta):
|
||||
stage_product: "firefox"
|
||||
bucket_name: "net-mozaws-prod-delivery-firefox"
|
||||
default:
|
||||
- releases/dev_checksums_firefox.py
|
||||
stage_product: "firefox"
|
||||
bucket_name: "net-mozaws-stage-delivery-firefox"
|
||||
treeherder:
|
||||
platform: linux64/opt
|
||||
|
||||
@ -76,16 +75,14 @@ jobs:
|
||||
build_platform: android-nightly
|
||||
build_type: opt
|
||||
run:
|
||||
config:
|
||||
extra-config:
|
||||
by-project:
|
||||
mozilla-release:
|
||||
- releases/checksums_fennec.py
|
||||
mozilla-beta:
|
||||
- releases/checksums_fennec.py
|
||||
maple:
|
||||
- releases/dev_checksums_fennec.py
|
||||
mozilla-(release|beta):
|
||||
stage_product: "mobile"
|
||||
bucket_name: "net-mozaws-prod-delivery-archive"
|
||||
default:
|
||||
- releases/dev_checksums_fennec.py
|
||||
stage_product: "mobile"
|
||||
bucket_name: "net-mozaws-stage-delivery-archive"
|
||||
treeherder:
|
||||
platform: Android/opt
|
||||
|
||||
@ -95,15 +92,13 @@ jobs:
|
||||
build_platform: linux64-devedition
|
||||
build_type: opt
|
||||
run:
|
||||
config:
|
||||
extra-config:
|
||||
by-project:
|
||||
mozilla-release:
|
||||
- releases/checksums_devedition.py
|
||||
mozilla-beta:
|
||||
- releases/checksums_devedition.py
|
||||
maple:
|
||||
- releases/dev_checksums_devedition.py
|
||||
stage_product: "devedition"
|
||||
bucket_name: "net-mozaws-prod-delivery-archive"
|
||||
default:
|
||||
- releases/dev_checksums_devedition.py
|
||||
stage_product: "devedition"
|
||||
bucket_name: "net-mozaws-stage-delivery-archive"
|
||||
treeherder:
|
||||
platform: linux64-devedition/opt
|
||||
|
@ -53,7 +53,7 @@ fi
|
||||
|
||||
# test required parameters are supplied
|
||||
if [[ -z ${MOZHARNESS_SCRIPT} ]]; then fail "MOZHARNESS_SCRIPT is not set"; fi
|
||||
if [[ -z ${MOZHARNESS_CONFIG} ]]; then fail "MOZHARNESS_CONFIG is not set"; fi
|
||||
if [[ -z "${MOZHARNESS_CONFIG}" && -z "${EXTRA_MOZHARNESS_CONFIG}" ]]; then fail "MOZHARNESS_CONFIG or EXTRA_MOZHARNESS_CONFIG is not set"; fi
|
||||
|
||||
# run XVfb in the background, if necessary
|
||||
if $NEED_XVFB; then
|
||||
|
@ -188,7 +188,7 @@ def load_parameters_file(filename, strict=True):
|
||||
if filename.startswith("task-id="):
|
||||
task_id = filename.split("=")[1]
|
||||
elif filename.startswith("project="):
|
||||
index = "gecko.v2.{project}.latest.firefox.decision".format(
|
||||
index = "gecko.v2.{project}.latest.taskgraph.decision".format(
|
||||
project=filename.split("=")[1],
|
||||
)
|
||||
task_id = find_task_id(index)
|
||||
|
@ -25,7 +25,8 @@ transforms = TransformSequence()
|
||||
def handle_keyed_by(config, jobs):
|
||||
"""Resolve fields that can be keyed by project, etc."""
|
||||
fields = [
|
||||
"run.config",
|
||||
"run.config",
|
||||
"run.extra-config",
|
||||
]
|
||||
for job in jobs:
|
||||
job = copy.deepcopy(job)
|
||||
|
@ -1,5 +0,0 @@
|
||||
# lint_ignore=E501
|
||||
config = {
|
||||
"stage_product": "devedition",
|
||||
"bucket_name": "net-mozaws-prod-delivery-archive",
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
# lint_ignore=E501
|
||||
config = {
|
||||
"stage_product": "mobile",
|
||||
"bucket_name": "net-mozaws-prod-delivery-archive",
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
# lint_ignore=E501
|
||||
config = {
|
||||
"stage_product": "firefox",
|
||||
"bucket_name": "net-mozaws-prod-delivery-firefox",
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
# lint_ignore=E501
|
||||
config = {
|
||||
"stage_product": "devedition",
|
||||
"bucket_name": "net-mozaws-stage-delivery-archive",
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
# lint_ignore=E501
|
||||
config = {
|
||||
"stage_product": "mobile",
|
||||
"bucket_name": "net-mozaws-stage-delivery-archive",
|
||||
}
|
@ -1,5 +0,0 @@
|
||||
# lint_ignore=E501
|
||||
config = {
|
||||
"stage_product": "firefox",
|
||||
"bucket_name": "net-mozaws-stage-delivery-firefox",
|
||||
}
|
@ -285,8 +285,9 @@ class BaseConfig(object):
|
||||
type="string", help="Specify additional paths to search for config files.",
|
||||
)
|
||||
self.config_parser.add_option(
|
||||
"-c", "--config-file", "--cfg", action="extend", dest="config_files",
|
||||
type="string", help="Specify a config file; can be repeated"
|
||||
"-c", "--config-file", "--cfg", action="extend",
|
||||
dest="config_files", default=[], type="string",
|
||||
help="Specify a config file; can be repeated",
|
||||
)
|
||||
self.config_parser.add_option(
|
||||
"-C", "--opt-config-file", "--opt-cfg", action="extend",
|
||||
@ -489,35 +490,36 @@ class BaseConfig(object):
|
||||
self.list_actions()
|
||||
print("Required config file not set! (use --config-file option)")
|
||||
raise SystemExit(-1)
|
||||
|
||||
# this is what get_cfgs_from_files returns. It will represent each
|
||||
# config file name and its assoctiated dict
|
||||
# eg ('builds/branch_specifics.py', {'foo': 'bar'})
|
||||
# let's store this to self for things like --interpret-config-files
|
||||
self.all_cfg_files_and_dicts.extend(self.get_cfgs_from_files(
|
||||
# append opt_config to allow them to overwrite previous configs
|
||||
options.config_files + options.opt_config_files, options=options
|
||||
))
|
||||
config = {}
|
||||
if (self.append_env_variables_from_configs
|
||||
or options.append_env_variables_from_configs):
|
||||
# We only append values from various configs for the 'env' entry
|
||||
# For everything else we follow the standard behaviour
|
||||
for i, (c_file, c_dict) in enumerate(self.all_cfg_files_and_dicts):
|
||||
for v in c_dict.keys():
|
||||
if v == 'env' and v in config:
|
||||
config[v].update(c_dict[v])
|
||||
else:
|
||||
config[v] = c_dict[v]
|
||||
else:
|
||||
# this is what get_cfgs_from_files returns. It will represent each
|
||||
# config file name and its assoctiated dict
|
||||
# eg ('builds/branch_specifics.py', {'foo': 'bar'})
|
||||
# let's store this to self for things like --interpret-config-files
|
||||
self.all_cfg_files_and_dicts.extend(self.get_cfgs_from_files(
|
||||
# append opt_config to allow them to overwrite previous configs
|
||||
options.config_files + options.opt_config_files, options=options
|
||||
))
|
||||
config = {}
|
||||
if (self.append_env_variables_from_configs
|
||||
or options.append_env_variables_from_configs):
|
||||
# We only append values from various configs for the 'env' entry
|
||||
# For everything else we follow the standard behaviour
|
||||
for i, (c_file, c_dict) in enumerate(self.all_cfg_files_and_dicts):
|
||||
for v in c_dict.keys():
|
||||
if v == 'env' and v in config:
|
||||
config[v].update(c_dict[v])
|
||||
else:
|
||||
config[v] = c_dict[v]
|
||||
else:
|
||||
for i, (c_file, c_dict) in enumerate(self.all_cfg_files_and_dicts):
|
||||
config.update(c_dict)
|
||||
# assign or update self._config depending on if it exists or not
|
||||
# NOTE self._config will be passed to ReadOnlyConfig's init -- a
|
||||
# dict subclass with immutable locking capabilities -- and serve
|
||||
# as the keys/values that make up that instance. Ultimately,
|
||||
# this becomes self.config during BaseScript's init
|
||||
self.set_config(config)
|
||||
for i, (c_file, c_dict) in enumerate(self.all_cfg_files_and_dicts):
|
||||
config.update(c_dict)
|
||||
# assign or update self._config depending on if it exists or not
|
||||
# NOTE self._config will be passed to ReadOnlyConfig's init -- a
|
||||
# dict subclass with immutable locking capabilities -- and serve
|
||||
# as the keys/values that make up that instance. Ultimately,
|
||||
# this becomes self.config during BaseScript's init
|
||||
self.set_config(config)
|
||||
|
||||
for key in defaults.keys():
|
||||
value = getattr(options, key)
|
||||
if value is None:
|
||||
|
@ -1,10 +0,0 @@
|
||||
[gap-normal-computed-001.html]
|
||||
[row-gap:normal computes to normal on multicol elements]
|
||||
expected: FAIL
|
||||
|
||||
[row-gap:normal computes to normal on grid]
|
||||
expected: FAIL
|
||||
|
||||
[row-gap:normal (cross axis) computes to normal on flexbox]
|
||||
expected: FAIL
|
||||
|
@ -1,79 +0,0 @@
|
||||
[gap-parsing-001.html]
|
||||
[Default gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts pixels]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts pixels 2]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts pixels combined with percentage]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts em]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts em 2]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts vw]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts vw and vh]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts percentage]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts percentage 2]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts calc()]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts calc() 2]
|
||||
expected: FAIL
|
||||
|
||||
[Initial gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[Initial gap is 'normal' 2]
|
||||
expected: FAIL
|
||||
|
||||
[Initial inherited gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[gap is inheritable]
|
||||
expected: FAIL
|
||||
|
||||
[Negative gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
['max-content' gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
['none' gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Angle gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Resolution gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Time gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[gap with three values is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[gap with slash is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[gap with one wrong value is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts calc() mixing fixed and percentage values]
|
||||
expected: FAIL
|
||||
|
@ -1,22 +0,0 @@
|
||||
[grid-column-gap-parsing-001.html]
|
||||
[grid-column-gap accepts pixels]
|
||||
expected: FAIL
|
||||
|
||||
[grid-column-gap accepts em]
|
||||
expected: FAIL
|
||||
|
||||
[grid-column-gap accepts vw]
|
||||
expected: FAIL
|
||||
|
||||
[grid-column-gap accepts percentage]
|
||||
expected: FAIL
|
||||
|
||||
[grid-column-gap accepts calc()]
|
||||
expected: FAIL
|
||||
|
||||
[grid-column-gap accepts calc() mixing fixed and percentage values]
|
||||
expected: FAIL
|
||||
|
||||
[grid-column-gap is inheritable]
|
||||
expected: FAIL
|
||||
|
@ -1,154 +0,0 @@
|
||||
[grid-gap-parsing-001.html]
|
||||
[Default gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts pixels]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts pixels 2]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts pixels combined with percentage]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts em]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts em 2]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts vw]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts vw and vh]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts percentage]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts percentage 2]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts calc()]
|
||||
expected: FAIL
|
||||
|
||||
[gap accepts calc() 2]
|
||||
expected: FAIL
|
||||
|
||||
[Initial gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[Initial gap is 'normal' 2]
|
||||
expected: FAIL
|
||||
|
||||
[Initial inherited gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[gap is inheritable]
|
||||
expected: FAIL
|
||||
|
||||
[Negative gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
['max-content' gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
['none' gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Angle gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Resolution gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Time gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[gap with three values is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[gap with slash is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[gap with one wrong value is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Default grid-gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap accepts pixels]
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap accepts pixels 2]
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap accepts pixels combined with percentage]
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap accepts em]
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap accepts em 2]
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap accepts vw]
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap accepts vw and vh]
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap accepts percentage]
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap accepts percentage 2]
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap accepts calc()]
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap accepts calc() mixing fixed and percentage values]
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap accepts calc() 2]
|
||||
expected: FAIL
|
||||
|
||||
[Initial grid-gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[Initial grid-gap is 'normal' 2]
|
||||
expected: FAIL
|
||||
|
||||
[Initial inherited grid-gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap is inheritable]
|
||||
expected: FAIL
|
||||
|
||||
[Negative grid-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
['max-content' grid-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
['none' grid-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Angle grid-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Resolution grid-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Time grid-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap with three values is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap with slash is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[grid-gap with one wrong value is invalid]
|
||||
expected: FAIL
|
||||
|
@ -1,100 +0,0 @@
|
||||
[grid-row-gap-parsing-001.html]
|
||||
[Default row-gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[row-gap accepts pixels]
|
||||
expected: FAIL
|
||||
|
||||
[row-gap accepts em]
|
||||
expected: FAIL
|
||||
|
||||
[row-gap accepts percentage]
|
||||
expected: FAIL
|
||||
|
||||
[row-gap accepts calc()]
|
||||
expected: FAIL
|
||||
|
||||
[Initial row-gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[Initial row-gap is 'normal' 2]
|
||||
expected: FAIL
|
||||
|
||||
[Initial inherited row-gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[row-gap is inheritable]
|
||||
expected: FAIL
|
||||
|
||||
[Negative row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
['max-content' row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
['none' row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[row-gap with multiple values is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Angle row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Resolution row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Time row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Default grid-row-gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[grid-row-gap accepts pixels]
|
||||
expected: FAIL
|
||||
|
||||
[grid-row-gap accepts em]
|
||||
expected: FAIL
|
||||
|
||||
[grid-row-gap accepts percentage]
|
||||
expected: FAIL
|
||||
|
||||
[grid-row-gap accepts calc()]
|
||||
expected: FAIL
|
||||
|
||||
[grid-row-gap accepts calc() mixing fixed and percentage values]
|
||||
expected: FAIL
|
||||
|
||||
[Initial grid-row-gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[Initial grid-row-gap is 'normal' 2]
|
||||
expected: FAIL
|
||||
|
||||
[Initial inherited grid-row-gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[grid-row-gap is inheritable]
|
||||
expected: FAIL
|
||||
|
||||
[Negative grid-row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
['max-content' grid-row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
['none' grid-row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[grid-row-gap with multiple values is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Angle grid-row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Resolution grid-row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Time grid-row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
@ -1,4 +0,0 @@
|
||||
[row-gap-animation-001.html]
|
||||
[row-gap is interpolable]
|
||||
expected: FAIL
|
||||
|
@ -1,4 +0,0 @@
|
||||
[row-gap-animation-002.html]
|
||||
[row-gap: normal is not interpolable]
|
||||
expected: FAIL
|
||||
|
@ -1,4 +0,0 @@
|
||||
[row-gap-animation-003.html]
|
||||
[Default row-gap is not interpolable]
|
||||
expected: FAIL
|
||||
|
@ -1,52 +0,0 @@
|
||||
[row-gap-parsing-001.html]
|
||||
[Default row-gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[row-gap accepts pixels]
|
||||
expected: FAIL
|
||||
|
||||
[row-gap accepts em]
|
||||
expected: FAIL
|
||||
|
||||
[row-gap accepts percentage]
|
||||
expected: FAIL
|
||||
|
||||
[row-gap accepts calc()]
|
||||
expected: FAIL
|
||||
|
||||
[Initial row-gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[Initial row-gap is 'normal' 2]
|
||||
expected: FAIL
|
||||
|
||||
[Initial inherited row-gap is 'normal']
|
||||
expected: FAIL
|
||||
|
||||
[row-gap is inheritable]
|
||||
expected: FAIL
|
||||
|
||||
[Negative row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
['max-content' row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
['none' row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[row-gap with multiple values is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Angle row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Resolution row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[Time row-gap is invalid]
|
||||
expected: FAIL
|
||||
|
||||
[row-gap accepts calc() mixing fixed and percentage values]
|
||||
expected: FAIL
|
||||
|
@ -1,2 +0,0 @@
|
||||
[grid-gutters-001.html]
|
||||
expected: FAIL
|
@ -1,2 +0,0 @@
|
||||
[grid-gutters-003.html]
|
||||
expected: FAIL
|
@ -1,2 +0,0 @@
|
||||
[grid-gutters-005.html]
|
||||
expected: FAIL
|
@ -1,2 +0,0 @@
|
||||
[grid-gutters-007.html]
|
||||
expected: FAIL
|
@ -1,2 +0,0 @@
|
||||
[grid-gutters-009.html]
|
||||
expected: FAIL
|
@ -1,2 +0,0 @@
|
||||
[grid-gutters-011.html]
|
||||
expected: FAIL
|
@ -10,6 +10,7 @@
|
||||
|
||||
html {
|
||||
background: -moz-Dialog;
|
||||
color: -moz-DialogText;
|
||||
font: message-box;
|
||||
}
|
||||
|
||||
@ -31,6 +32,7 @@ div.section {
|
||||
border: 1px solid ThreeDShadow;
|
||||
border-radius: 10px;
|
||||
background: -moz-Field;
|
||||
color: -moz-FieldText;
|
||||
}
|
||||
|
||||
div.opsRow {
|
||||
@ -40,6 +42,7 @@ div.opsRow {
|
||||
border: 1px solid ThreeDShadow;
|
||||
border-radius: 10px;
|
||||
background: -moz-Field;
|
||||
color: -moz-FieldText;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
@ -66,7 +69,6 @@ h1 {
|
||||
}
|
||||
|
||||
h2 {
|
||||
background: #ddd;
|
||||
padding-left: .1em;
|
||||
}
|
||||
|
||||
@ -80,21 +82,35 @@ a.upDownArrow {
|
||||
-moz-user-select: none; /* no need to include this when cutting+pasting */
|
||||
}
|
||||
|
||||
.accuracyWarning, .badInputWarning, .invalid {
|
||||
/*
|
||||
* Technically this should be used with the default background colour,
|
||||
* instead we're using the default field background colour,
|
||||
* I hope this will be okay.
|
||||
*/
|
||||
color: -moz-activehyperlinktext;
|
||||
}
|
||||
|
||||
.accuracyWarning {
|
||||
color: #d22;
|
||||
}
|
||||
|
||||
.badInputWarning {
|
||||
color: #f00;
|
||||
}
|
||||
|
||||
.treeline {
|
||||
color: #888;
|
||||
color: -moz-FieldText;
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
/*
|
||||
* We might like to style these but cannot find a colour that always
|
||||
* contrasts with the background colour.
|
||||
*/
|
||||
.mrValue, .mrName, .mrNote {
|
||||
}
|
||||
|
||||
.mrValue {
|
||||
font-weight: bold;
|
||||
color: #400;
|
||||
}
|
||||
|
||||
.mrPerc {
|
||||
@ -103,14 +119,6 @@ a.upDownArrow {
|
||||
.mrSep {
|
||||
}
|
||||
|
||||
.mrName {
|
||||
color: #004;
|
||||
}
|
||||
|
||||
.mrNote {
|
||||
color: #604;
|
||||
}
|
||||
|
||||
.hasKids {
|
||||
cursor: pointer;
|
||||
}
|
||||
@ -141,11 +149,6 @@ a.upDownArrow {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.invalid {
|
||||
color: #fff;
|
||||
background-color: #f00;
|
||||
}
|
||||
|
||||
/* Desktop-specific parts go here. */
|
||||
|
||||
.hasKids:hover {
|
||||
|
@ -124,7 +124,6 @@ add_task(async function test_management_themes() {
|
||||
accentcolor: Math.random().toString(),
|
||||
};
|
||||
is(await extension.awaitMessage("onInstalled"), "Bling", "LWT installed");
|
||||
is(await extension.awaitMessage("onDisabled"), "Default", "default disabled");
|
||||
is(await extension.awaitMessage("onEnabled"), "Bling", "LWT enabled");
|
||||
|
||||
await theme.startup();
|
||||
|
@ -34,7 +34,7 @@ add_task(async function test_management_getAll() {
|
||||
});
|
||||
|
||||
let addons = await browser.management.getAll();
|
||||
browser.test.assertEq(addons.length, 2, "management.getAll returned two extensions.");
|
||||
browser.test.assertEq(addons.length, 3, "management.getAll returned three add-ons.");
|
||||
browser.test.sendMessage("addons", addons);
|
||||
}
|
||||
|
||||
|
@ -513,7 +513,7 @@ EnvironmentAddonBuilder.prototype = {
|
||||
this._pendingTask = (async () => {
|
||||
try {
|
||||
// Gather initial addons details
|
||||
await this._updateAddons();
|
||||
await this._updateAddons(true);
|
||||
|
||||
if (!this._environment._addonsAreFull) {
|
||||
// The addon database has not been loaded, so listen for the event
|
||||
@ -628,11 +628,15 @@ EnvironmentAddonBuilder.prototype = {
|
||||
* This should only be called from _pendingTask; otherwise we risk
|
||||
* running this during addon manager shutdown.
|
||||
*
|
||||
* @param {boolean} [atStartup]
|
||||
* True if this is the first check we're performing at startup. In that
|
||||
* situation, we defer some more expensive initialization.
|
||||
*
|
||||
* @returns Promise<Object> This returns a Promise resolved with a status object with the following members:
|
||||
* changed - Whether the environment changed.
|
||||
* oldEnvironment - Only set if a change occured, contains the environment data before the change.
|
||||
*/
|
||||
async _updateAddons() {
|
||||
async _updateAddons(atStartup) {
|
||||
this._environment._log.trace("_updateAddons");
|
||||
let personaId = null;
|
||||
let theme = LightweightThemeManager.currentTheme;
|
||||
@ -643,8 +647,8 @@ EnvironmentAddonBuilder.prototype = {
|
||||
let addons = {
|
||||
activeAddons: await this._getActiveAddons(),
|
||||
theme: await this._getActiveTheme(),
|
||||
activePlugins: this._getActivePlugins(),
|
||||
activeGMPlugins: await this._getActiveGMPlugins(),
|
||||
activePlugins: this._getActivePlugins(atStartup),
|
||||
activeGMPlugins: await this._getActiveGMPlugins(atStartup),
|
||||
activeExperiment: {},
|
||||
persona: personaId,
|
||||
};
|
||||
@ -752,12 +756,17 @@ EnvironmentAddonBuilder.prototype = {
|
||||
|
||||
/**
|
||||
* Get the plugins data in object form.
|
||||
*
|
||||
* @param {boolean} [atStartup]
|
||||
* True if this is the first check we're performing at startup. In that
|
||||
* situation, we defer some more expensive initialization.
|
||||
*
|
||||
* @return Object containing the plugins data.
|
||||
*/
|
||||
_getActivePlugins() {
|
||||
_getActivePlugins(atStartup) {
|
||||
// If we haven't yet loaded the blocklist, pass back dummy data for now,
|
||||
// and add an observer to update this data as soon as we get it.
|
||||
if (!Services.blocklist.isLoaded) {
|
||||
if (atStartup || !Services.blocklist.isLoaded) {
|
||||
if (!this._blocklistObserverAdded) {
|
||||
Services.obs.addObserver(this, BLOCKLIST_LOADED_TOPIC);
|
||||
this._blocklistObserverAdded = true;
|
||||
@ -804,21 +813,26 @@ EnvironmentAddonBuilder.prototype = {
|
||||
|
||||
/**
|
||||
* Get the GMPlugins data in object form.
|
||||
*
|
||||
* @param {boolean} [atStartup]
|
||||
* True if this is the first check we're performing at startup. In that
|
||||
* situation, we defer some more expensive initialization.
|
||||
*
|
||||
* @return Object containing the GMPlugins data.
|
||||
*
|
||||
* This should only be called from _pendingTask; otherwise we risk
|
||||
* running this during addon manager shutdown.
|
||||
*/
|
||||
async _getActiveGMPlugins() {
|
||||
async _getActiveGMPlugins(atStartup) {
|
||||
// If we haven't yet loaded the blocklist, pass back dummy data for now,
|
||||
// and add an observer to update this data as soon as we get it.
|
||||
if (!Services.blocklist.isLoaded) {
|
||||
if (atStartup || !Services.blocklist.isLoaded) {
|
||||
if (!this._blocklistObserverAdded) {
|
||||
Services.obs.addObserver(this, BLOCKLIST_LOADED_TOPIC);
|
||||
this._blocklistObserverAdded = true;
|
||||
}
|
||||
return {
|
||||
"dummy-gmp": {version: "0.1", userDisabled: false, applyBackgroundUpdates: true}
|
||||
"dummy-gmp": {version: "0.1", userDisabled: false, applyBackgroundUpdates: 1}
|
||||
};
|
||||
}
|
||||
// Request plugins, asynchronously.
|
||||
|
@ -11,7 +11,6 @@ support-files =
|
||||
engine.xml
|
||||
system.xpi
|
||||
restartless.xpi
|
||||
theme.xpi
|
||||
testUnicodePDB32.dll
|
||||
testNoPDB32.dll
|
||||
testUnicodePDB64.dll
|
||||
@ -22,7 +21,6 @@ generated-files =
|
||||
experiment.xpi
|
||||
system.xpi
|
||||
restartless.xpi
|
||||
theme.xpi
|
||||
|
||||
[test_MigratePendingPings.js]
|
||||
[test_TelemetryHistograms.js]
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user