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:
Margareta Eliza Balazs 2018-04-24 14:51:28 +03:00
commit fa0ffa186e
136 changed files with 6035 additions and 6672 deletions

View File

@ -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 += [

View File

@ -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}']

View File

@ -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>

View File

@ -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',
]

View File

@ -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

View File

@ -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")

View File

@ -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]

View File

@ -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();
}

View File

@ -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)

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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", "[]");

View File

@ -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();

View File

@ -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

View File

@ -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

View File

@ -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?

View File

@ -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

View File

@ -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

View File

@ -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");
}

View File

@ -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

View File

@ -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],

View File

@ -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",

View File

@ -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": [

View File

@ -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)
{

View File

@ -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;

View File

@ -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)
{

View File

@ -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;

View File

@ -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.
*/

View File

@ -1107,12 +1107,6 @@ nsTextEditorState::GetRootNode()
return mBoundFrame ? mBoundFrame->GetRootNode() : nullptr;
}
Element*
nsTextEditorState::GetPlaceholderNode()
{
return mBoundFrame ? mBoundFrame->GetPlaceholderNode() : nullptr;
}
Element*
nsTextEditorState::GetPreviewNode()
{

View File

@ -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 {

View File

@ -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();

View File

@ -516,6 +516,7 @@ protected:
{}
void Reset(uint8_t aAttrEnum);
void SetUnknownValue(uint8_t aAttrEnum);
};
struct NumberListInfo {

View File

@ -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)

View File

@ -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;

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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) {

View File

@ -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);
}

View File

@ -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

View File

@ -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

View File

@ -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);
}
}

View File

@ -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 =

View File

@ -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);

View File

@ -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());
}

View File

@ -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) {

View File

@ -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) {

View File

@ -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;

View File

@ -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

View File

@ -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,

View File

@ -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,

View File

@ -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
};

View File

@ -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();
}

View File

@ -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();

View File

@ -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)

View File

@ -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;
}

View File

@ -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]

View File

@ -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")) {

View File

@ -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 ],

View File

@ -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).

View File

@ -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(

View File

@ -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);

View File

@ -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) {

View File

@ -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 */

View File

@ -1,6 +1,7 @@
[DEFAULT]
head = head_psm.js
tags = psm
firefox-appdir = browser
support-files =
bad_certs/**
ocsp_certs/**

View File

@ -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");

View File

@ -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")}

View File

@ -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")}

View File

@ -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)
}
}
}

View File

@ -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

View File

@ -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

View File

@ -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)

View File

@ -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)

View File

@ -1,5 +0,0 @@
# lint_ignore=E501
config = {
"stage_product": "devedition",
"bucket_name": "net-mozaws-prod-delivery-archive",
}

View File

@ -1,5 +0,0 @@
# lint_ignore=E501
config = {
"stage_product": "mobile",
"bucket_name": "net-mozaws-prod-delivery-archive",
}

View File

@ -1,5 +0,0 @@
# lint_ignore=E501
config = {
"stage_product": "firefox",
"bucket_name": "net-mozaws-prod-delivery-firefox",
}

View File

@ -1,5 +0,0 @@
# lint_ignore=E501
config = {
"stage_product": "devedition",
"bucket_name": "net-mozaws-stage-delivery-archive",
}

View File

@ -1,5 +0,0 @@
# lint_ignore=E501
config = {
"stage_product": "mobile",
"bucket_name": "net-mozaws-stage-delivery-archive",
}

View File

@ -1,5 +0,0 @@
# lint_ignore=E501
config = {
"stage_product": "firefox",
"bucket_name": "net-mozaws-stage-delivery-firefox",
}

View File

@ -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:

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -1,4 +0,0 @@
[row-gap-animation-001.html]
[row-gap is interpolable]
expected: FAIL

View File

@ -1,4 +0,0 @@
[row-gap-animation-002.html]
[row-gap: normal is not interpolable]
expected: FAIL

View File

@ -1,4 +0,0 @@
[row-gap-animation-003.html]
[Default row-gap is not interpolable]
expected: FAIL

View File

@ -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

View File

@ -1,2 +0,0 @@
[grid-gutters-001.html]
expected: FAIL

View File

@ -1,2 +0,0 @@
[grid-gutters-003.html]
expected: FAIL

View File

@ -1,2 +0,0 @@
[grid-gutters-005.html]
expected: FAIL

View File

@ -1,2 +0,0 @@
[grid-gutters-007.html]
expected: FAIL

View File

@ -1,2 +0,0 @@
[grid-gutters-009.html]
expected: FAIL

View File

@ -1,2 +0,0 @@
[grid-gutters-011.html]
expected: FAIL

View File

@ -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 {

View File

@ -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();

View File

@ -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);
}

View File

@ -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.

View File

@ -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