merge mozilla-central to autoland. r=merge a=merge

This commit is contained in:
Sebastian Hengst 2017-05-27 10:16:21 +02:00
commit cf1d58517f
48 changed files with 1913 additions and 1064 deletions

View File

@ -63,9 +63,6 @@ pref("extensions.hotfix.certs.2.sha1Fingerprint", "39:E7:2B:7A:5B:CF:37:78:F9:5D
// Check AUS for system add-on updates.
pref("extensions.systemAddon.update.url", "https://aus5.mozilla.org/update/3/SystemAddons/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/update.xml");
// Disable screenshots for now, Shield will enable this.
pref("extensions.screenshots.system-disabled", true);
// Disable add-ons that are not installed by the user in all scopes by default.
// See the SCOPE constants in AddonManager.jsm for values to use here.
pref("extensions.autoDisableScopes", 15);

View File

@ -72,7 +72,8 @@
class="accessory-button"
label="&updateHistory2.label;"
accesskey="&updateHistory2.accesskey;"
preference="app.update.disable_button.showUpdateHistory"/>
preference="app.update.disable_button.showUpdateHistory"
searchkeywords="&history.title; &history.intro;"/>
</vbox>
#endif
</hbox>

View File

@ -44,7 +44,7 @@ var gSearchResultsPane = {
*/
stringMatchesFilters(str, filter) {
if (!filter || !str) {
return true;
return false;
}
let searchStr = str.toLowerCase();
let filterStrings = filter.toLowerCase().split(/\s+/);
@ -284,8 +284,6 @@ var gSearchResultsPane = {
let nodeSizes = [];
let allNodeText = "";
let runningSize = 0;
let labelResult = false;
let valueResult = false;
let accessKeyTextNodes = this.textNodeDescendants(nodeObject.boxObject);
for (let node of accessKeyTextNodes) {
@ -298,9 +296,7 @@ var gSearchResultsPane = {
let complexTextNodesResult = this.highlightMatches(accessKeyTextNodes, nodeSizes, allNodeText.toLowerCase(), searchPhrase);
// Searching some elements, such as xul:button, have a 'label' attribute that contains the user-visible text.
if (nodeObject.getAttribute("label")) {
labelResult = this.stringMatchesFilters(nodeObject.getAttribute("label"), searchPhrase);
}
let labelResult = this.stringMatchesFilters(nodeObject.getAttribute("label"), searchPhrase);
// Creating tooltips for buttons
if (labelResult && nodeObject.tagName === "button") {
@ -308,21 +304,26 @@ var gSearchResultsPane = {
}
// Searching some elements, such as xul:label, store their user-visible text in a "value" attribute.
if (nodeObject.getAttribute("value")) {
valueResult = this.stringMatchesFilters(nodeObject.getAttribute("value"), searchPhrase);
}
if ((nodeObject.tagName == "button" || nodeObject.tagName == "menulist" || nodeObject.tagName == "menuitem") &&
(labelResult || valueResult)) {
nodeObject.setAttribute("highlightable", "true");
}
let valueResult = this.stringMatchesFilters(nodeObject.getAttribute("value"), searchPhrase);
// Creating tooltips for buttons
if (valueResult && nodeObject.tagName === "button") {
this.listSearchTooltips.push(nodeObject);
}
matchesFound = matchesFound || complexTextNodesResult || labelResult || valueResult;
// Searching some elements, such as xul:button, buttons to open subdialogs.
let keywordsResult = this.stringMatchesFilters(nodeObject.getAttribute("searchkeywords"), searchPhrase);
// Creating tooltips for buttons
if (keywordsResult && nodeObject.tagName === "button") {
this.listSearchTooltips.push(nodeObject);
}
if (nodeObject.tagName == "button" && (labelResult || valueResult || keywordsResult)) {
nodeObject.setAttribute("highlightable", "true");
}
matchesFound = matchesFound || complexTextNodesResult || labelResult || valueResult || keywordsResult;
}
for (let i = 0; i < nodeObject.childNodes.length; i++) {

View File

@ -315,7 +315,8 @@
class="content-cell-item"
label="&chooseBookmark.label;"
accesskey="&chooseBookmark.accesskey;"
preference="pref.browser.homepage.disable_button.bookmark_page"/>
preference="pref.browser.homepage.disable_button.bookmark_page"
searchkeywords="&selectBookmark.title; &selectBookmark.label;"/>
<button id="restoreDefaultHomePage"
class="content-cell-item"
label="&restoreDefault.label;"
@ -452,7 +453,14 @@
<button id="chooseLanguage"
class="accessory-button"
label="&chooseButton.label;"
accesskey="&chooseButton.accesskey;"/>
accesskey="&chooseButton.accesskey;"
searchkeywords="&languages.customize.Header;
&languages.customize.description;
&languages.customize.moveUp.label;
&languages.customize.moveDown.label;
&languages.customize.deleteButton.label;
&languages.customize.selectLanguage.label;
&languages.customize.addButton.label;"/>
</hbox>
<hbox id="translationBox" hidden="true">
@ -529,7 +537,67 @@
class="accessory-button"
icon="select-font"
label="&advancedFonts.label;"
accesskey="&advancedFonts.accesskey;"/>
accesskey="&advancedFonts.accesskey;"
searchkeywords="&fontsDialog.title;
&language.label;
&size.label;
&proportional.label;
&serif.label;
&sans-serif.label;
&monospace.label;
&font.langGroup.latin;
&font.langGroup.japanese;
&font.langGroup.trad-chinese;
&font.langGroup.simpl-chinese;
&font.langGroup.trad-chinese-hk;
&font.langGroup.korean;
&font.langGroup.cyrillic;
&font.langGroup.el;
&font.langGroup.other;
&font.langGroup.thai;
&font.langGroup.hebrew;
&font.langGroup.arabic;
&font.langGroup.devanagari;
&font.langGroup.tamil;
&font.langGroup.armenian;
&font.langGroup.bengali;
&font.langGroup.canadian;
&font.langGroup.ethiopic;
&font.langGroup.georgian;
&font.langGroup.gujarati;
&font.langGroup.gurmukhi;
&font.langGroup.khmer;
&font.langGroup.malayalam;
&font.langGroup.math;
&font.langGroup.odia;
&font.langGroup.telugu;
&font.langGroup.kannada;
&font.langGroup.sinhala;
&font.langGroup.tibetan;
&minSize.label;
&minSize.none;
&useDefaultFontSerif.label;
&useDefaultFontSansSerif.label;
&allowPagesToUseOwn.label;
&languages.customize.Fallback2.grouplabel;
&languages.customize.Fallback2.label;
&languages.customize.Fallback2.desc;
&languages.customize.Fallback.auto;
&languages.customize.Fallback.arabic;
&languages.customize.Fallback.baltic;
&languages.customize.Fallback.ceiso;
&languages.customize.Fallback.cewindows;
&languages.customize.Fallback.simplified;
&languages.customize.Fallback.traditional;
&languages.customize.Fallback.cyrillic;
&languages.customize.Fallback.greek;
&languages.customize.Fallback.hebrew;
&languages.customize.Fallback.japanese;
&languages.customize.Fallback.korean;
&languages.customize.Fallback.thai;
&languages.customize.Fallback.turkish;
&languages.customize.Fallback.vietnamese;
&languages.customize.Fallback.other;"/>
</hbox>
<hbox id="colorsSettings">
<spacer flex="1" />
@ -537,7 +605,15 @@
class="accessory-button"
icon="select-color"
label="&colors.label;"
accesskey="&colors.accesskey;"/>
accesskey="&colors.accesskey;"
searchkeywords="&overrideDefaultPageColors.label;
&overrideDefaultPageColors.always.label;
&overrideDefaultPageColors.auto.label;
&overrideDefaultPageColors.never.label;
&useSystemColors.label;
&underlineLinks.label;
&linkColor.label;
&visitedLinkColor.label;"/>
</hbox>
</vbox>
</groupbox>

View File

@ -20,6 +20,19 @@
<!ENTITY % globalPreferencesDTD SYSTEM "chrome://global/locale/preferences.dtd">
<!ENTITY % preferencesDTD SYSTEM
"chrome://browser/locale/preferences/preferences.dtd">
<!ENTITY % selectBookmarkDTD SYSTEM
"chrome://browser/locale/preferences/selectBookmark.dtd">
<!ENTITY % languagesDTD SYSTEM "chrome://browser/locale/preferences/languages.dtd">
<!ENTITY % fontDTD SYSTEM "chrome://browser/locale/preferences/fonts.dtd">
<!ENTITY % colorsDTD SYSTEM "chrome://browser/locale/preferences/colors.dtd">
<!ENTITY % permissionsDTD SYSTEM "chrome://browser/locale/preferences/permissions.dtd">
<!ENTITY % passwordManagerDTD SYSTEM "chrome://passwordmgr/locale/passwordManager.dtd">
<!ENTITY % historyDTD SYSTEM "chrome://mozapps/locale/update/history.dtd">
<!ENTITY % certManagerDTD SYSTEM "chrome://pippki/locale/certManager.dtd">
<!ENTITY % deviceManangerDTD SYSTEM "chrome://pippki/locale/deviceManager.dtd">
<!ENTITY % connectionDTD SYSTEM "chrome://browser/locale/preferences/connection.dtd">
<!ENTITY % siteDataSettingsDTD SYSTEM
"chrome://browser/locale/preferences/siteDataSettings.dtd" >
<!ENTITY % privacyDTD SYSTEM "chrome://browser/locale/preferences/privacy.dtd">
<!ENTITY % tabsDTD SYSTEM "chrome://browser/locale/preferences/tabs.dtd">
<!ENTITY % searchDTD SYSTEM "chrome://browser/locale/preferences/search.dtd">
@ -42,6 +55,17 @@
%brandDTD;
%globalPreferencesDTD;
%preferencesDTD;
%selectBookmarkDTD;
%languagesDTD;
%fontDTD;
%colorsDTD;
%permissionsDTD;
%passwordManagerDTD;
%historyDTD;
%certManagerDTD;
%deviceManangerDTD;
%connectionDTD;
%siteDataSettingsDTD;
%privacyDTD;
%tabsDTD;
%searchDTD;
@ -84,6 +108,10 @@
src="chrome://branding/locale/brand.properties"/>
<stringbundle id="bundlePreferences"
src="chrome://browser/locale/preferences/preferences.properties"/>
<stringbundle id="pkiBundle"
src="chrome://pippki/locale/pippki.properties"/>
<stringbundle id="browserBundle"
src="chrome://browser/locale/browser.properties"/>
<stringbundleset id="appManagerBundleset">
<stringbundle id="appManagerBundle"

View File

@ -150,6 +150,13 @@ var gPrivacyPane = {
.addEventListener(aEventType, aCallback.bind(gPrivacyPane));
}
function appendSearchKeywords(aId, keywords) {
let element = document.getElementById(aId);
let searchKeywords = element.getAttribute("searchkeywords");
searchKeywords && keywords.push(searchKeywords);
element.setAttribute("searchkeywords", keywords.join(" "));
}
this._updateSanitizeSettingsButton();
this.initializeHistoryMode();
this.updateHistoryModePane();
@ -319,6 +326,53 @@ var gPrivacyPane = {
setEventListener("submitHealthReportBox", "command",
gPrivacyPane.updateSubmitHealthReport);
}
// Append search keywords into the elements could open subdialogs.
let bundlePrefs = document.getElementById("bundlePreferences");
let signonBundle = document.getElementById("signonBundle");
let pkiBundle = document.getElementById("pkiBundle");
let browserBundle = document.getElementById("browserBundle");
appendSearchKeywords("passwordExceptions", [
bundlePrefs.getString("savedLoginsExceptions_title"),
bundlePrefs.getString("savedLoginsExceptions_desc"),
]);
appendSearchKeywords("showPasswords", [
signonBundle.getString("loginsDescriptionAll"),
]);
appendSearchKeywords("trackingProtectionExceptions", [
bundlePrefs.getString("trackingprotectionpermissionstitle"),
bundlePrefs.getString("trackingprotectionpermissionstext"),
]);
appendSearchKeywords("changeBlockList", [
bundlePrefs.getString("blockliststitle"),
bundlePrefs.getString("blockliststext"),
]);
appendSearchKeywords("popupPolicyButton", [
bundlePrefs.getString("popuppermissionstitle"),
bundlePrefs.getString("popuppermissionstext"),
]);
appendSearchKeywords("notificationsPolicyButton", [
bundlePrefs.getString("notificationspermissionstitle"),
bundlePrefs.getString("notificationspermissionstext4"),
]);
appendSearchKeywords("addonExceptions", [
bundlePrefs.getString("addons_permissions_title"),
bundlePrefs.getString("addonspermissionstext"),
]);
appendSearchKeywords("viewSecurityDevicesButton", [
pkiBundle.getString("enable_fips"),
]);
appendSearchKeywords("browserContainersSettings", [
browserBundle.getString("userContextPersonal.label"),
browserBundle.getString("userContextWork.label"),
browserBundle.getString("userContextBanking.label"),
browserBundle.getString("userContextShopping.label"),
]);
appendSearchKeywords("siteDataSettings", [
bundlePrefs.getString("siteDataSettings.description"),
bundlePrefs.getString("removeAllCookies.label"),
bundlePrefs.getString("removeSelectedCookies.label"),
]);
},
// TRACKING PROTECTION MODE

View File

@ -171,6 +171,7 @@
</preferences>
<stringbundle id="bundlePreferences" src="chrome://browser/locale/preferences/preferences.properties"/>
<stringbundle id="signonBundle" src="chrome://passwordmgr/locale/passwordmgr.properties"/>
<hbox id="header-privacy"
class="header"
@ -317,20 +318,22 @@
class="accessory-button"
label="&passwordExceptions.label;"
accesskey="&passwordExceptions.accesskey;"
preference="pref.privacy.disable_button.view_passwords_exceptions"/>
preference="pref.privacy.disable_button.view_passwords_exceptions"
searchkeywords="&address.label;"/>
</hbox>
<hbox id="showPasswordBox" pack="end">
<button id="showPasswords"
class="accessory-button"
label="&savedLogins.label;" accesskey="&savedLogins.accesskey;"
preference="pref.privacy.disable_button.view_passwords"/>
preference="pref.privacy.disable_button.view_passwords"
searchkeywords="&savedLogins.title;"/>
</hbox>
</vbox>
<hbox id="masterPasswordRow">
<checkbox id="useMasterPassword"
label="&useMasterPassword.label;"
accesskey="&useMasterPassword.accesskey;"
flex="1" />
flex="1"/>
<button id="changeMasterPassword"
class="accessory-button"
label="&changeMasterPassword.label;"
@ -359,12 +362,17 @@
class="accessory-button"
label="&trackingProtectionExceptions.label;"
accesskey="&trackingProtectionExceptions.accesskey;"
preference="pref.privacy.disable_button.tracking_protection_exceptions"/>
preference="pref.privacy.disable_button.tracking_protection_exceptions"
searchkeywords="&removepermission.label;
&removeallpermissions.label;
&button.cancel.label;
&button.ok.label;"/>
<button id="changeBlockList"
class="accessory-button"
label="&changeBlockList.label;"
accesskey="&changeBlockList.accesskey;"
preference="pref.privacy.disable_button.change_blocklist"/>
preference="pref.privacy.disable_button.change_blocklist"
searchkeywords="&button.cancel.label; &button.ok.label;"/>
</vbox>
</hbox>
<radiogroup id="trackingProtectionRadioGroup" aria-labelledby="trackingProtectionDesc">
@ -413,7 +421,8 @@
<button id="popupPolicyButton"
class="accessory-button"
label="&popupExceptions.label;"
accesskey="&popupExceptions.accesskey;"/>
accesskey="&popupExceptions.accesskey;"
searchkeywords="&address.label; &button.cancel.label; &button.ok.label;"/>
</hbox>
</groupbox>
@ -436,7 +445,11 @@
<button id="notificationsPolicyButton"
class="accessory-button"
label="&notificationsPolicyButton.label;"
accesskey="&notificationsPolicyButton.accesskey;"/>
accesskey="&notificationsPolicyButton.accesskey;"
searchkeywords="&removepermission.label;
&removeallpermissions.label;
&button.cancel.label;
&button.ok.label;"/>
</hbox>
</row>
</rows>
@ -483,7 +496,13 @@
<button id="addonExceptions"
class="accessory-button"
label="&addonExceptions.label;"
accesskey="&addonExceptions.accesskey;"/>
accesskey="&addonExceptions.accesskey;"
searchkeywords="&address.label;
&allow.label;
&removepermission.label;
&removeallpermissions.label;
&button.cancel.label;
&button.ok.label;"/>
</hbox>
<separator class="thin"/>
@ -534,12 +553,36 @@
class="accessory-button"
label="&viewCerts.label;"
accesskey="&viewCerts.accesskey;"
preference="security.disable_button.openCertManager"/>
preference="security.disable_button.openCertManager"
searchkeywords="&certmgr.tab.mine;
&certmgr.tab.others2;
&certmgr.tab.websites3;
&certmgr.tab.ca;
&certmgr.tab.orphan2;
&certmgr.mine;
&certmgr.others;
&certmgr.websites2;
&certmgr.cas;
&certmgr.orphans;
&certmgr.certname;
&certmgr.tokenname;
&certmgr.view2.label;
&certmgr.export.label;
&certmgr.delete2.label;"/>
<button id="viewSecurityDevicesButton"
class="accessory-button"
label="&viewSecurityDevices.label;"
accesskey="&viewSecurityDevices.accesskey;"
preference="security.disable_button.openDeviceManager"/>
preference="security.disable_button.openDeviceManager"
searchkeywords="&devmgr.title;
&devmgr.devlist.label;
&devmgr.details.title;
&devmgr.details.title2;
&devmgr.button.login.label;
&devmgr.button.logout.label;
&devmgr.button.changepw.label;
&devmgr.button.load.label;
&devmgr.button.unload.label;"/>
</vbox>
</hbox>
</groupbox>
@ -583,7 +626,10 @@
<button id="browserContainersSettings"
class="accessory-button"
label="&browserContainersSettings.label;"
accesskey="&browserContainersSettings.accesskey;"/>
accesskey="&browserContainersSettings.accesskey;"
searchkeywords="&addButton.label;
&preferencesButton.label;
&removeButton.label;"/>
</hbox>
</vbox>
</groupbox>
@ -599,7 +645,25 @@
class="accessory-button"
icon="network"
label="&connectionSettings.label;"
accesskey="&connectionSettings.accesskey;"/>
accesskey="&connectionSettings.accesskey;"
searchkeywords="&connectionsDialog.title;
&noProxyTypeRadio.label;
&WPADTypeRadio.label;
&systemTypeRadio.label;
&manualTypeRadio.label;
&http.label;
&ssl.label;
&ftp.label;
&socks.label;
&socks4.label;
&socks5.label;
&noproxy.label;
&noproxyExplain.label;
&shareproxy.label;
&autoTypeRadio.label;
&reload.label;
&autologinproxy.label;
&socksRemoteDNS.label2;"/>
</hbox>
</groupbox>
@ -687,7 +751,11 @@
<button id="siteDataSettings"
class="accessory-button"
label="&siteDataSettings.label;"
accesskey="&siteDataSettings.accesskey;"/>
accesskey="&siteDataSettings.accesskey;"
searchkeywords="&window.title;
&hostCol.label;
&statusCol.label;
&usageCol.label;"/>
</vbox>
</groupbox>

View File

@ -14,6 +14,10 @@ skip-if = !updater
[browser_bug705422.js]
[browser_bug731866.js]
[browser_search_within_preferences.js]
[browser_search_subdialogs_within_preferences_1.js]
[browser_search_subdialogs_within_preferences_2.js]
[browser_search_subdialogs_within_preferences_3.js]
[browser_search_subdialogs_within_preferences_4.js]
[browser_bug795764_cachedisabled.js]
[browser_bug1018066_resetScrollPosition.js]
[browser_bug1020245_openPreferences_to_paneContent.js]

View File

@ -0,0 +1,53 @@
/*
* This file contains tests for the Preferences search bar.
*/
// Enabling Searching functionatily. Will display search bar form this testcase forward.
add_task(async function() {
await SpecialPowers.pushPrefEnv({"set": [["browser.preferences.search", true]]});
});
/**
* Test for searching for the "Set Home Page" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("Set Home Page", "startupGroup");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for searching for the "Languages" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("Choose languages", "languagesGroup");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for searching for the "Fonts" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("Text Encoding", "fontsGroup");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for searching for the "Colors" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("Link Colors", "fontsGroup");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for searching for the "Exceptions - Saved Logins" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("sites will not be saved", "passwordsGroup");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});

View File

@ -0,0 +1,53 @@
/*
* This file contains tests for the Preferences search bar.
*/
// Enabling Searching functionatily. Will display search bar form this testcase forward.
add_task(async function() {
await SpecialPowers.pushPrefEnv({"set": [["browser.preferences.search", true]]});
});
/**
* Test for searching for the "Saved Logins" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("sites are stored", "passwordsGroup");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for searching for the "Exceptions - Tracking Protection" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("disabled Tracking Protection", "trackingGroup");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for searching for the "Block Lists" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("block Web elements", "trackingGroup");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for searching for the "Allowed Sites - Pop-ups" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("open pop-up windows", "miscGroup");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for searching for the "Notification Permissions" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("request permission again", "notificationsGroup");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});

View File

@ -0,0 +1,53 @@
/*
* This file contains tests for the Preferences search bar.
*/
// Enabling Searching functionatily. Will display search bar form this testcase forward.
add_task(async function() {
await SpecialPowers.pushPrefEnv({"set": [["browser.preferences.search", true]]});
});
/**
* Test for searching for the "Allowed Sites - Add-ons Installation" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("allowed to install add-ons", "addonsPhishingGroup");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for searching for the "Certificate Manager" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("identify these certificate authorities", "certSelection");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for searching for the "Device Manager" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("Security Modules and Devices", "certSelection");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for searching for the "Connection Settings" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("Use system proxy settings", "connectionGroup");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});
/**
* Test for searching for the "Settings - Site Data" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("store site data on your computer", "siteDataGroup");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});

View File

@ -0,0 +1,17 @@
/*
* This file contains tests for the Preferences search bar.
*/
// Enabling Searching functionatily. Will display search bar form this testcase forward.
add_task(async function() {
await SpecialPowers.pushPrefEnv({"set": [["browser.preferences.search", true]]});
});
/**
* Test for searching for the "Update History" subdialog.
*/
add_task(async function() {
await openPreferencesViaOpenPreferencesAPI("paneGeneral", {leaveOpen: true});
evaluateSearchResults("updates have been installed", "updateApp");
await BrowserTestUtils.removeTab(gBrowser.selectedTab);
});

View File

@ -89,7 +89,11 @@ add_task(async function() {
for (let i = 0; i < mainPrefTag.childElementCount; i++) {
let child = mainPrefTag.children[i]
if (child.id == "passwordsGroup" || child.id == "weavePrefsDeck" || child.id == "header-searchResults") {
if (child.id == "passwordsGroup" ||
child.id == "weavePrefsDeck" ||
child.id == "header-searchResults" ||
child.id == "certSelection" ||
child.id == "connectionGroup") {
is_element_visible(child, "Should be in search results");
} else if (child.id) {
is_element_hidden(child, "Should not be in search results");

View File

@ -218,6 +218,26 @@ function assertSitesListed(doc, hosts) {
is(removeAllBtn.disabled, false, "Should enable the removeAllBtn button");
}
function evaluateSearchResults(keyword, searchReults) {
searchReults = Array.isArray(searchReults) ? searchReults : [searchReults];
searchReults.push("header-searchResults");
let searchInput = gBrowser.contentDocument.getElementById("searchInput");
searchInput.focus();
searchInput.value = keyword;
searchInput.doCommand();
let mainPrefTag = gBrowser.contentDocument.getElementById("mainPrefPane");
for (let i = 0; i < mainPrefTag.childElementCount; i++) {
let child = mainPrefTag.children[i];
if (searchReults.includes(child.id)) {
is_element_visible(child, "Should be in search results");
} else if (child.id) {
is_element_hidden(child, "Should not be in search results");
}
}
}
const mockSiteDataManager = {
_SiteDataManager: null,

View File

@ -1068,6 +1068,7 @@ html .arrow.expanded svg {
display: flex;
flex-direction: column;
overflow: hidden;
position: relative;
}
.sources-panel * {
@ -1127,6 +1128,10 @@ html .arrow.expanded svg {
padding-top: 5px;
text-align: center;
}
.hidden {
display: none;
}
.outline-list {
list-style-type: "-";
}
@ -1287,7 +1292,7 @@ html .toggle-button-end.vertical svg {
left: 0;
right: 1px;
opacity: 1;
z-index: 100;
z-index: 1;
-moz-user-select: none;
user-select: none;
height: var(--editor-footer-height);
@ -1312,7 +1317,7 @@ html .toggle-button-end.vertical svg {
transition: opacity 200ms;
border: none;
background: transparent;
padding: 8px 0.7em;
padding: 6px 0.7em;
}
.source-footer > .commands > .action i {
@ -1440,14 +1445,10 @@ html .toggle-button-end.vertical svg {
fill: white;
}
.search-bottom-bar .search-modifiers button.disabled svg {
fill: var(--theme-comment-alt);
cursor: default;
}
.search-bottom-bar .search-type-toggles {
display: flex;
align-items: center;
max-width: 68%;
}
.search-bottom-bar .search-type-toggles .search-toggle-title {
@ -1455,10 +1456,13 @@ html .toggle-button-end.vertical svg {
font-size: 11px;
font-weight: normal;
margin: 0;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.search-bottom-bar .search-type-toggles .search-type-btn {
margin: 0 6px;
margin: 0 0 0 6px;
border: none;
background: transparent;
color: var(--theme-comment-alt);
@ -1594,7 +1598,7 @@ html .toggle-button-end.vertical svg {
.tooltip .preview {
background: var(--theme-toolbar-background);
max-width: 350px;
max-width: inherit;
min-height: 80px;
border: 1px solid var(--theme-splitter-color);
box-shadow: 1px 2px 4px 1px var(--theme-toolbar-background-alt);
@ -1845,6 +1849,47 @@ html[dir="rtl"] .editor-mount {
.visible {
visibility: visible;
}
.cm-highlight {
position: relative;
}
.cm-highlight::before {
position: absolute;
border-top-style: solid;
border-bottom-style: solid;
border-top-color: var(--theme-comment-alt);
border-bottom-color: var(--theme-comment-alt);
border-top-width: 1px;
border-bottom-width: 1px;
top: -1px;
bottom: 0;
left: 0;
right: 0;
content: "";
margin-bottom: -1px;
}
.cm-highlight-full::before {
border: 1px solid var(--theme-comment-alt);
}
.cm-highlight-start::before {
border-left-width: 1px;
border-left-style: solid;
border-left-color: var(--theme-comment-alt);
margin: 0 0 -1px -1px;
border-top-left-radius: 2px;
border-bottom-left-radius: 2px;
}
.cm-highlight-end::before {
border-right-width: 1px;
border-right-style: solid;
border-right-color: var(--theme-comment-alt);
margin: 0 -1px -1px 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
}
.why-paused {
background-color: var(--theme-body-background);

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@ -24,8 +24,8 @@ add_task(function*() {
// The pretty-print button should go away in the pretty-printed
// source.
ok(!findElement(dbg, "sourceFooter"), "Footer is hidden");
ok(!findElement(dbg, "editorFooter"), "Footer is hidden");
yield selectSource(dbg, "math.min.js");
ok(findElement(dbg, "sourceFooter"), "Footer is hidden");
ok(findElement(dbg, "editorFooter"), "Footer is hidden");
});

View File

@ -645,7 +645,8 @@ const selectors = {
stepIn: ".stepIn.active",
toggleBreakpoints: ".breakpoints-toggle",
prettyPrintButton: ".prettyPrint",
sourceFooter: ".source-footer",
sourcesFooter: ".sources-panel .source-footer",
editorFooter: ".editor-pane .source-footer",
sourceNode: i => `.sources-list .tree-node:nth-child(${i})`,
sourceNodes: ".sources-list .tree-node",
sourceArrow: i => `.sources-list .tree-node:nth-child(${i}) .arrow`

View File

@ -140,6 +140,14 @@ sources.search.alt.key=CmdOrCtrl+O
# does not have any sources.
sources.noSourcesAvailable=This page has no sources
# LOCALIZATION NOTE (sourcesPane.showSourcesTooltip): The tooltip shown when
# the user will navigate to the source tree view.
sourcesPane.showSourcesTooltip=Show sources
# LOCALIZATION NOTE (sourcesPane.showOutlineTooltip): The tooltip shown when
# the user will navigate to the source outline view.
sourcesPane.showOutlineTooltip=Show outline
# LOCALIZATION NOTE (sourceSearch.search.key2): Key shortcut to open the search
# for searching within a the currently opened files in the editor
sourceSearch.search.key2=CmdOrCtrl+F
@ -310,13 +318,17 @@ editor.jumpToMappedLocation1=Jump to %S location
# context menu to disable framework grouping.
framework.disableGrouping=Disable Framework Grouping
# LOCALIZATION NOTE (framework.disableGrouping.accesskey): Access key to toggle
# framework grouping from the context menu.
framework.disableGrouping.accesskey=u
# LOCALIZATION NOTE (framework.enableGrouping): This is the text that appears in the
# context menu to enable framework grouping.
framework.enableGrouping=Enable Framework Grouping
# LOCALIZATION NOTE (framework.accesskey): Access key to toggle framework grouping from
# the context menu.
framework.accesskey=u
# LOCALIZATION NOTE (framework.enableGrouping.accesskey): Access key to toggle
# framework grouping from the context menu.
framework.enableGrouping.accesskey=u
# LOCALIZATION NOTE (generated): Source Map term for a server source location
generated=generated
@ -392,6 +404,10 @@ sourceFooter.blackbox=Blackbox Source
# with the blackbox button
sourceFooter.unblackbox=Unblackbox Source
# LOCALIZATION NOTE (sourceFooter.unblackbox.accesskey): Access key to blackbox
# an associated source
sourceFooter.unblackbox.accesskey=b
# LOCALIZATION NOTE (sourceFooter.blackbox.accesskey): Access key to blackbox
# an associated source
sourceFooter.blackbox.accesskey=b

View File

@ -39,3 +39,6 @@ pref("devtools.debugger.tabs", "[]");
pref("devtools.debugger.pending-selected-location", "{}");
pref("devtools.debugger.pending-breakpoints", "[]");
pref("devtools.debugger.expressions", "[]");
pref("devtools.debugger.file-search-case-sensitive", true);
pref("devtools.debugger.file-search-whole-word", false );
pref("devtools.debugger.file-search-regex-match", false);

View File

@ -901,6 +901,13 @@ GLContext::InitWithPrefixImpl(const char* prefix, bool trygl)
mMaxRenderbufferSize /= 2;
mNeedsTextureSizeChecks = true;
}
// Bug 1367570. Explicitly set vertex attributes [1,3] to opaque
// black because Nvidia doesn't do it for us.
if (mVendor == GLVendor::NVIDIA) {
for (size_t i = 1; i <= 3; ++i) {
mSymbols.fVertexAttrib4f(i, 0, 0, 0, 1);
}
}
}
#endif
if (mWorkAroundDriverBugs &&

View File

@ -1682,7 +1682,7 @@ static SK_ALWAYS_INLINE void aaa_fill_path(const SkPath& path, const SkIRect& cl
rightBound = SkTMin(rightBound, SkIntToFixed(ir.fRight));
}
if (!path.isInverseFillType() && path.isConvex()) {
if (!path.isInverseFillType() && path.isConvex() && count >= 2) {
SkASSERT(count >= 2); // convex walker does not handle missing right edges
aaa_walk_convex_edges(&headEdge, blitter, start_y, stop_y,
leftBound, rightBound, isUsingMask);

View File

@ -467,7 +467,7 @@ void sk_fill_path(const SkPath& path, const SkIRect& clipRect, SkBlitter* blitte
proc = PrePostInverseBlitterProc;
}
if (path.isConvex() && (nullptr == proc)) {
if (path.isConvex() && (nullptr == proc) && count >= 2) {
SkASSERT(count >= 2); // convex walker does not handle missing right edges
walk_convex_edges(&headEdge, path.getFillType(), blitter, start_y, stop_y, nullptr);
} else {

View File

@ -138,6 +138,8 @@ static const uint32_t kMinTelemetryIPCWriteLatencyMs = 1;
// Note: we round the time we spend waiting for a response to the nearest
// millisecond. So a min value of 1 ms actually captures from 500us and above.
// This is used for both the sending and receiving side telemetry for sync IPC,
// (IPC_SYNC_MAIN_LATENCY_MS and IPC_SYNC_RECEIVE_MS).
static const uint32_t kMinTelemetrySyncIPCLatencyMs = 1;
const int32_t MessageChannel::kNoTimeout = INT32_MIN;
@ -2019,6 +2021,8 @@ MessageChannel::DispatchSyncMessage(const Message& aMsg, Message*& aReply)
{
AssertWorkerThread();
mozilla::TimeStamp start = TimeStamp::Now();
int nestedLevel = aMsg.nested_level();
MOZ_RELEASE_ASSERT(nestedLevel == IPC::Message::NOT_NESTED || NS_IsMainThread());
@ -2035,6 +2039,13 @@ MessageChannel::DispatchSyncMessage(const Message& aMsg, Message*& aReply)
rv = mListener->OnMessageReceived(aMsg, aReply);
}
uint32_t latencyMs = round((TimeStamp::Now() - start).ToMilliseconds());
if (latencyMs >= kMinTelemetrySyncIPCLatencyMs) {
Telemetry::Accumulate(Telemetry::IPC_SYNC_RECEIVE_MS,
nsDependentCString(aMsg.name()),
latencyMs);
}
if (!MaybeHandleError(rv, aMsg, "DispatchSyncMessage")) {
aReply = new Message();
aReply->set_sync();

View File

@ -283,7 +283,7 @@ ProcessLink::OnChannelOpened()
mExistingListener = mTransport->set_listener(this);
#ifdef DEBUG
if (mExistingListener) {
queue<Message> pending;
std::queue<Message> pending;
mExistingListener->GetQueuedMessages(pending);
MOZ_ASSERT(pending.empty());
}
@ -300,7 +300,7 @@ ProcessLink::OnTakeConnectedChannel()
{
AssertIOThread();
queue<Message> pending;
std::queue<Message> pending;
{
MonitorAutoLock lock(*mChan->mMonitor);

View File

@ -1013,6 +1013,8 @@ nsFrame::DidSetStyleContext(nsStyleContext* aOldStyleContext)
RemoveStateBits(NS_FRAME_SIMPLE_EVENT_REGIONS |
NS_FRAME_SIMPLE_DISPLAYLIST);
mMayHaveRoundedCorners = true;
}
void
@ -1587,6 +1589,11 @@ nsIFrame::OutsetBorderRadii(nscoord aRadii[8], const nsMargin &aOffsets)
nsIFrame::GetBorderRadii(const nsSize& aFrameSize, const nsSize& aBorderArea,
Sides aSkipSides, nscoord aRadii[8]) const
{
if (!mMayHaveRoundedCorners) {
memset(aRadii, 0, sizeof(nscoord) * 8);
return false;
}
if (IsThemed()) {
// When we're themed, the native theme code draws the border and
// background, and therefore it doesn't make sense to tell other
@ -1600,9 +1607,12 @@ nsIFrame::GetBorderRadii(const nsSize& aFrameSize, const nsSize& aBorderArea,
}
return false;
}
return ComputeBorderRadii(StyleBorder()->mBorderRadius,
aFrameSize, aBorderArea,
aSkipSides, aRadii);
const_cast<nsIFrame*>(this)->mMayHaveRoundedCorners =
ComputeBorderRadii(StyleBorder()->mBorderRadius,
aFrameSize, aBorderArea,
aSkipSides, aRadii);
return mMayHaveRoundedCorners;
}
bool

View File

@ -616,6 +616,7 @@ public:
, mPrevSibling(nullptr)
, mState(NS_FRAME_FIRST_REFLOW | NS_FRAME_IS_DIRTY)
, mClass(aID)
, mMayHaveRoundedCorners(false)
{
mozilla::PodZero(&mOverflow);
}
@ -3921,6 +3922,9 @@ protected:
/** The ClassID of the concrete class of this instance. */
ClassID mClass; // 1 byte
bool mMayHaveRoundedCorners : 1;
// There should be a 15-bit gap left here.
// Helpers
/**
* Can we stop inside this frame when we're skipping non-rendered whitespace?

View File

@ -167,30 +167,6 @@ ComputeLinearRGBLuminanceMask(const uint8_t *aSourceData,
}
}
static void
ComputeAlphaMask(const uint8_t *aSourceData,
int32_t aSourceStride,
uint8_t *aDestData,
int32_t aDestStride,
const IntSize &aSize,
float aOpacity)
{
int32_t sourceOffset = aSourceStride - 4 * aSize.width;
const uint8_t *sourcePixel = aSourceData;
int32_t destOffset = aDestStride - aSize.width;
uint8_t *destPixel = aDestData;
for (int32_t y = 0; y < aSize.height; y++) {
for (int32_t x = 0; x < aSize.width; x++) {
*destPixel = sourcePixel[GFX_ARGB32_OFFSET_A] * aOpacity;
sourcePixel += 4;
destPixel++;
}
sourcePixel += sourceOffset;
destPixel += destOffset;
}
}
//----------------------------------------------------------------------
// Implementation
@ -236,9 +212,22 @@ nsSVGMaskFrame::GetMaskForMaskedFrame(MaskParams& aParams)
return nullptr;
}
RefPtr<DrawTarget> maskDT =
gfxPlatform::GetPlatform()->CreateOffscreenContentDrawTarget(
maskSurfaceSize, SurfaceFormat::B8G8R8A8);
uint8_t maskType;
if (aParams.maskMode == NS_STYLE_MASK_MODE_MATCH_SOURCE) {
maskType = StyleSVGReset()->mMaskType;
} else {
maskType = aParams.maskMode == NS_STYLE_MASK_MODE_LUMINANCE
? NS_STYLE_MASK_TYPE_LUMINANCE : NS_STYLE_MASK_TYPE_ALPHA;
}
RefPtr<DrawTarget> maskDT;
if (maskType == NS_STYLE_MASK_TYPE_LUMINANCE) {
maskDT = gfxPlatform::GetPlatform()->CreateOffscreenContentDrawTarget(
maskSurfaceSize, SurfaceFormat::B8G8R8A8);
} else {
maskDT = gfxPlatform::GetPlatform()->CreateOffscreenContentDrawTarget(
maskSurfaceSize, SurfaceFormat::A8);
}
if (!maskDT || !maskDT->IsValid()) {
return nullptr;
@ -269,37 +258,30 @@ nsSVGMaskFrame::GetMaskForMaskedFrame(MaskParams& aParams)
nsSVGUtils::PaintFrameWithEffects(kid, *tmpCtx, m, aParams.imgParams);
}
RefPtr<SourceSurface> maskSnapshot = maskDT->Snapshot();
if (!maskSnapshot) {
return nullptr;
}
RefPtr<DataSourceSurface> maskSurface = maskSnapshot->GetDataSurface();
DataSourceSurface::MappedSurface map;
if (!maskSurface ||
!maskSurface->Map(DataSourceSurface::MapType::READ, &map)) {
return nullptr;
}
// Create alpha channel mask for output
RefPtr<DataSourceSurface> destMaskSurface =
Factory::CreateDataSourceSurface(maskSurfaceSize, SurfaceFormat::A8);
if (!destMaskSurface) {
return nullptr;
}
DataSourceSurface::MappedSurface destMap;
if (!destMaskSurface->Map(DataSourceSurface::MapType::WRITE, &destMap)) {
return nullptr;
}
uint8_t maskType;
if (aParams.maskMode == NS_STYLE_MASK_MODE_MATCH_SOURCE) {
maskType = StyleSVGReset()->mMaskType;
} else {
maskType = aParams.maskMode == NS_STYLE_MASK_MODE_LUMINANCE
? NS_STYLE_MASK_TYPE_LUMINANCE : NS_STYLE_MASK_TYPE_ALPHA;
}
RefPtr<SourceSurface> surface;
if (maskType == NS_STYLE_MASK_TYPE_LUMINANCE) {
RefPtr<SourceSurface> maskSnapshot = maskDT->Snapshot();
if (!maskSnapshot) {
return nullptr;
}
RefPtr<DataSourceSurface> maskSurface = maskSnapshot->GetDataSurface();
DataSourceSurface::MappedSurface map;
if (!maskSurface->Map(DataSourceSurface::MapType::READ, &map)) {
return nullptr;
}
// Create alpha channel mask for output
RefPtr<DataSourceSurface> destMaskSurface =
Factory::CreateDataSourceSurface(maskSurfaceSize, SurfaceFormat::A8);
if (!destMaskSurface) {
return nullptr;
}
DataSourceSurface::MappedSurface destMap;
if (!destMaskSurface->Map(DataSourceSurface::MapType::WRITE, &destMap)) {
return nullptr;
}
if (StyleSVG()->mColorInterpolation ==
NS_STYLE_COLOR_INTERPOLATION_LINEARRGB) {
ComputeLinearRGBLuminanceMask(map.mData, map.mStride,
@ -310,14 +292,19 @@ nsSVGMaskFrame::GetMaskForMaskedFrame(MaskParams& aParams)
destMap.mData, destMap.mStride,
maskSurfaceSize, aParams.opacity);
}
} else {
ComputeAlphaMask(map.mData, map.mStride,
destMap.mData, destMap.mStride,
maskSurfaceSize, aParams.opacity);
}
maskSurface->Unmap();
destMaskSurface->Unmap();
maskSurface->Unmap();
destMaskSurface->Unmap();
surface = destMaskSurface.forget();
} else {
maskDT->SetTransform(Matrix());
maskDT->FillRect(Rect(0, 0, maskSurfaceSize.width, maskSurfaceSize.height), ColorPattern(Color(1.0f, 1.0f, 1.0f, aParams.opacity)), DrawOptions(1, CompositionOp::OP_IN));
RefPtr<SourceSurface> maskSnapshot = maskDT->Snapshot();
if (!maskSnapshot) {
return nullptr;
}
surface = maskSnapshot.forget();
}
// Moz2D transforms in the opposite direction to Thebes
if (!maskSurfaceMatrix.Invert()) {
@ -325,7 +312,7 @@ nsSVGMaskFrame::GetMaskForMaskedFrame(MaskParams& aParams)
}
*aParams.maskTransform = ToMatrix(maskSurfaceMatrix);
return destMaskSurface.forget();
return surface.forget();
}
gfxRect

View File

@ -1245,8 +1245,8 @@ nsHttpHandler::PrefsChanged(nsIPrefBranch *prefs, const char *pref)
mSpoofReferrerSource = cVar;
}
if (PREF_CHANGED(HTTP_PREF("referer.spoofOnionSource"))) {
rv = prefs->GetBoolPref(HTTP_PREF("referer.spoofOnionSource"), &cVar);
if (PREF_CHANGED(HTTP_PREF("referer.hideOnionSource"))) {
rv = prefs->GetBoolPref(HTTP_PREF("referer.hideOnionSource"), &cVar);
if (NS_SUCCEEDED(rv))
mHideOnionReferrerSource = cVar;
}

View File

@ -264,7 +264,7 @@ class BaseBootstrapper(object):
'%s does not yet implement suggest_mobile_android_artifact_mode_mozconfig()'
% __name__)
def ensure_stylo_packages(self, state_dir):
def ensure_stylo_packages(self, state_dir, checkout_root):
'''
Install any necessary packages needed for Stylo development.
'''
@ -272,52 +272,24 @@ class BaseBootstrapper(object):
'%s does not yet implement ensure_stylo_packages()'
% __name__)
def install_tooltool_clang_package(self, state_dir,
package_filename, package_sha512sum):
TOOLTOOL_API = 'https://api.pub.build.mozilla.org/tooltool/sha512/'
def install_tooltool_clang_package(self, state_dir, checkout_root, manifest_file):
abs_manifest_file = os.path.join(checkout_root, manifest_file)
# XXX this is similar to the Android NDK download. We should unify them.
download_path = os.path.join(state_dir, 'mozboot')
try:
os.makedirs(download_path)
except OSError as e:
if e.errno == errno.EEXIST and os.path.isdir(download_path):
pass
else:
raise
mach_binary = os.path.join(checkout_root, 'mach')
if not os.path.exists(mach_binary):
raise ValueError("mach not found at %s" % mach_binary)
try:
package_url = TOOLTOOL_API + package_sha512sum
downloaded_filename = os.path.join(download_path, package_sha512sum)
print('Downloading clang package from', package_url)
self.http_download_and_save(package_url, downloaded_filename,
package_sha512sum, 'sha512')
# If Python can't figure out what its own executable is, there's little
# chance we're going to be able to execute mach on its own, particularly
# on Windows.
if not sys.executable:
raise ValueError("cannot determine path to Python executable")
# We don't have to handle a great variety of archive types here.
if package_filename.endswith('tar.gz'):
cmd = ['tar', 'zxf', downloaded_filename]
elif package_filename.endswith('.tar.bz2'):
cmd = ['tar', 'jxf', downloaded_filename]
elif package_filename.endswith('.tar.xz'):
cmd = ['tar', 'Jxf', downloaded_filename]
else:
raise NotImplementedError("Don't know how to unpack file: %s"
% package_filename)
cmd = [sys.executable, mach_binary, 'artifact', 'toolchain',
'--tooltool-manifest', abs_manifest_file,
'clang']
print('Download complete!')
print('Unpacking %s...' % downloaded_filename)
with open(os.devnull, 'w') as stdout:
subprocess.check_call(cmd, stdout=stdout, cwd=state_dir)
print('Unpacking %s...DONE' % downloaded_filename)
finally:
try:
os.remove(downloaded_filename)
except OSError as e:
if e.errno != errno.ENOENT:
raise
subprocess.check_call(cmd, cwd=state_dir)
def which(self, name):
"""Python implementation of which.

View File

@ -113,6 +113,12 @@ On this machine, that directory is:
Please restart bootstrap and create that directory when prompted.
'''
STYLO_REQUIRES_CLONE = '''
Installing Stylo packages requires a checkout of mozilla-central. Once you
have such a checkout, please re-run `./mach bootstrap` from the checkout
directory.
'''
FINISHED = '''
Your system should be ready to build %s!
'''
@ -272,30 +278,9 @@ class Bootstrapper(object):
state_dir_available = os.path.exists(state_dir)
# Install the clang packages needed for developing stylo.
if not self.instance.no_interactive:
choice = self.instance.prompt_int(
prompt=STYLO_DEVELOPMENT_INFO,
low=1,
high=2)
# The best place to install our packages is in the state directory
# we have. If the user doesn't have one, we need them to re-run
# bootstrap and create the directory.
#
# XXX Android bootstrap just assumes the existence of the state
# directory and writes the NDK into it. Should we do the same?
if choice == 1:
if not state_dir_available:
print(STYLO_DIRECTORY_MESSAGE.format(statedir=state_dir))
sys.exit(1)
self.instance.stylo = True
self.instance.state_dir = state_dir
self.instance.ensure_stylo_packages(state_dir)
checkout_type = current_firefox_checkout(check_output=self.instance.check_output,
hg=self.instance.which('hg'))
r = current_firefox_checkout(check_output=self.instance.check_output,
hg=self.instance.which('hg'))
(checkout_type, checkout_root) = r
# Possibly configure Mercurial, but not if the current checkout is Git.
# TODO offer to configure Git.
@ -323,10 +308,37 @@ class Bootstrapper(object):
if dest:
dest = os.path.expanduser(dest)
have_clone = clone_firefox(self.instance.which('hg'), dest)
checkout_root = dest
if not have_clone:
print(SOURCE_ADVERTISE)
# Install the clang packages needed for developing stylo.
if not self.instance.no_interactive:
choice = self.instance.prompt_int(
prompt=STYLO_DEVELOPMENT_INFO,
low=1,
high=2)
# The best place to install our packages is in the state directory
# we have. If the user doesn't have one, we need them to re-run
# bootstrap and create the directory.
#
# XXX Android bootstrap just assumes the existence of the state
# directory and writes the NDK into it. Should we do the same?
wants_stylo = choice == 1
if wants_stylo and not state_dir_available:
print(STYLO_DIRECTORY_MESSAGE.format(statedir=state_dir))
sys.exit(1)
if wants_stylo and not have_clone:
print(STYLO_REQUIRES_CLONE)
sys.exit(1)
self.instance.stylo = True
self.instance.state_dir = state_dir
self.instance.ensure_stylo_packages(state_dir, checkout_root)
print(self.finished % name)
if not (self.instance.which('rustc') and self.instance._parse_version('rustc') >= MODERN_RUST_VERSION):
print("To build %s, please restart the shell (Start a new terminal window)" % name)
@ -466,7 +478,7 @@ def current_firefox_checkout(check_output, hg=None):
try:
node = check_output([hg, 'log', '-r', '0', '--template', '{node}'], cwd=path)
if node in HG_ROOT_REVISIONS:
return 'hg'
return ('hg', path)
# Else the root revision is different. There could be nested
# repos. So keep traversing the parents.
except subprocess.CalledProcessError:
@ -475,10 +487,10 @@ def current_firefox_checkout(check_output, hg=None):
# TODO check git remotes or `git rev-parse -q --verify $sha1^{commit}`
# for signs of Firefox.
elif os.path.exists(git_dir):
return 'git'
return ('git', path)
path, child = os.path.split(path)
if child == '':
break
return None
return (None, None)

View File

@ -70,7 +70,7 @@ class FreeBSDBootstrapper(BaseBootstrapper):
# TODO: Figure out what not to install for artifact mode
self.pkg_install(*self.browser_packages)
def ensure_stylo_packages(self, state_dir):
def ensure_stylo_packages(self, state_dir, checkout_root):
self.pkg_install('llvm40')
def suggest_browser_mozconfig(self):

View File

@ -9,6 +9,6 @@ class StyloInstall(object):
def __init__(self, **kwargs):
pass
def ensure_stylo_packages(self, state_dir):
def ensure_stylo_packages(self, state_dir, checkout_root):
import stylo
self.install_tooltool_clang_package(state_dir, **stylo.LINUX)
self.install_tooltool_clang_package(state_dir, checkout_root, stylo.LINUX)

View File

@ -17,8 +17,8 @@ To enable Stylo in your builds, paste the lines between the chevrons
<<<
ac_add_options --enable-stylo
ac_add_options --with-libclang-path={state_dir}/clang/lib
ac_add_options --with-clang-path={state_dir}/clang/bin/clang.exe
ac_add_options --with-libclang-path="{state_dir}/clang/bin"
ac_add_options --with-clang-path="{state_dir}/clang/bin/clang.exe"
>>>
'''
@ -89,9 +89,9 @@ class MozillaBuildBootstrapper(BaseBootstrapper):
if self.stylo:
print(STYLO_MOZCONFIG.format(state_dir=self.state_dir))
def ensure_stylo_packages(self, state_dir):
def ensure_stylo_packages(self, state_dir, checkout_root):
import stylo
self.install_tooltool_clang_package(state_dir, **stylo.WINDOWS)
self.install_tooltool_clang_package(state_dir, checkout_root, stylo.WINDOWS)
def _update_package_manager(self):
pass

View File

@ -521,9 +521,9 @@ class OSXBootstrapper(BaseBootstrapper):
return active_name.lower()
def ensure_stylo_packages(self, state_dir):
def ensure_stylo_packages(self, state_dir, checkout_root):
import stylo
self.install_tooltool_clang_package(state_dir, **stylo.OSX)
self.install_tooltool_clang_package(state_dir, checkout_root, stylo.OSX)
def install_homebrew(self):
print(PACKAGE_MANAGER_INSTALL % ('Homebrew', 'Homebrew', 'Homebrew', 'brew'))

View File

@ -4,67 +4,6 @@
from __future__ import print_function, unicode_literals
# Tooltool packages generated from the script below.
WINDOWS = {
'package_filename': 'clang.tar.bz2',
'package_sha512sum': 'cd3ed31acefd185f441632158dde73538c62bab7ebf2a8ec630985ab345938ec522983721ddb1bead1de22d5ac1571d50a958ae002364d739f2a78c6e7244222',
}
OSX = {
'package_filename': 'clang.tar.bz2',
'package_sha512sum': '0e1a556b65d6398fa812b9ceb5ce5e2dec3eda77d4a032a818182b34fc8ce602412f42388bb1fda6bea265d35c1dde3847a730b264fec01cd7e3dcfd39941660',
}
LINUX = {
'package_filename': 'clang.tar.xz',
'package_sha512sum': '52f3fc23f0f5c98050f8b0ac7c92a6752d067582a16f712a5a58074be98975d594f9e36249fc2be7f1cc2ca6d509c663faaf2bea66f949243cc1f41651638ba6',
}
if __name__ == '__main__':
'''Allow invoking the module as a utility to update tooltool downloads.'''
import json
import os
import sys
mod_path = os.path.dirname(__file__)
browser_config_dir = os.path.join('browser', 'config', 'tooltool-manifests')
os_map = {
'WINDOWS': ('win64', 'clang.manifest'),
'OSX': ('macosx64', 'releng.manifest'),
'LINUX': ('linux64', 'releng.manifest'),
}
for os_name, (os_dir, f) in os_map.iteritems():
manifest_file = os.path.join(browser_config_dir, os_dir, f)
abspath = os.path.join(mod_path, '..', '..', '..', manifest_file)
with open(abspath, 'r') as s:
manifest = json.load(s)
entries = filter(lambda x: x['filename'].startswith('clang'), manifest)
if not entries:
print('ERROR: could not find clang tooltool entry in %s' % manifest_file)
sys.exit(1)
if len(entries) > 1:
print('ERROR: too many clang entries in %s' % manifest_file)
sys.exit(1)
clang = entries[0]
if clang['algorithm'] != 'sha512':
print("ERROR: don't know how to handle digest %s in %s" % (clang['algorithm'],
manifest_file))
sys.exit(1)
FORMAT_STRING = """{os} = {{
'package_filename': '{filename}',
'package_sha512sum': '{digest}',
}}
"""
digest = clang['digest']
if os_name == 'WINDOWS':
# The only clang version we can retrieve from the tooltool manifest
# doesn't work with Stylo bindgen due to regressions in LLVM. This
# is an older version that works.
digest = 'cd3ed31acefd185f441632158dde73538c62bab7ebf2a8ec630985ab345938ec522983721ddb1bead1de22d5ac1571d50a958ae002364d739f2a78c6e7244222'
print(FORMAT_STRING.format(os=os_name,
filename=clang['filename'],
digest=digest))
WINDOWS = 'browser/config/tooltool-manifests/win64/clang.manifest'
OSX = 'browser/config/tooltool-manifests/macosx64/releng.manifest'
LINUX = 'browser/config/tooltool-manifests/linux64/clang.manifest'

View File

@ -15,8 +15,8 @@ To enable Stylo in your builds, paste the lines between the chevrons
<<<
ac_add_options --enable-stylo
ac_add_options --with-libclang-path={state_dir}/clang/lib
ac_add_options --with-clang-path={state_dir}/clang/bin/clang.exe
ac_add_options --with-libclang-path="{state_dir}/clang/bin"
ac_add_options --with-clang-path="{state_dir}/clang/bin/clang.exe"
>>>
'''
@ -84,9 +84,9 @@ class WindowsBootstrapper(BaseBootstrapper):
if self.stylo:
print(STYLO_MOZCONFIG.format(state_dir=self.state_dir))
def ensure_stylo_packages(self, state_dir):
def ensure_stylo_packages(self, state_dir, checkout_root):
import stylo
self.install_tooltool_clang_package(state_dir, **stylo.WINDOWS)
self.install_tooltool_clang_package(state_dir, checkout_root, stylo.WINDOWS)
def _update_package_manager(self):
self.pacman_update()

View File

@ -1308,6 +1308,7 @@ talos-g2:
run-on-projects:
by-test-platform:
linux64-stylo/.*: ['mozilla-central', 'try']
linux64-stylo-sequential/.*: ['try']
default: ['mozilla-beta', 'mozilla-aurora', 'mozilla-central', 'mozilla-inbound', 'autoland', 'try']
e10s: true
mozharness:

View File

@ -15,11 +15,10 @@ from taskgraph.transforms.task import task_description_schema
from voluptuous import Any, Required, Optional
# For developers: if you are adding any new artifacts here that need to be
# transfered to S3, please be aware you also need to follow-up with patch in
# the actual beetmoverscript logic that lies under
# https://github.com/mozilla-releng/beetmoverscript/. See example in bug
# 1348286
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
_DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [
"balrog_props.json",
"target.common.tests.zip",
@ -42,16 +41,32 @@ _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [
"host/bin/mar",
"host/bin/mbsdiff",
]
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
_DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_EN_US = [
"update/target.complete.mar",
]
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
_DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_L10N = [
"target.langpack.xpi",
"balrog_props.json",
]
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
_DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_L10N = [
"target.complete.mar",
]
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
_MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [
"en-US/target.common.tests.zip",
"en-US/target.cppunittest.tests.zip",
@ -72,6 +87,10 @@ _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [
"en-US/robocop.apk",
"en-US/target.jsshell.zip",
]
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
_MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI = [
"balrog_props.json",
"target.common.tests.zip",
@ -92,14 +111,26 @@ _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI = [
"robocop.apk",
"target.jsshell.zip",
]
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
_MOBILE_UPSTREAM_ARTIFACTS_SIGNED_EN_US = [
"en-US/target.apk",
]
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
_MOBILE_UPSTREAM_ARTIFACTS_SIGNED_MULTI = [
"target.apk",
]
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
UPSTREAM_ARTIFACT_UNSIGNED_PATHS = {
'linux64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
'linux-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
@ -122,6 +153,10 @@ UPSTREAM_ARTIFACT_UNSIGNED_PATHS = {
'android-api-15-old-id-nightly-multi': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI,
'macosx64-nightly-l10n': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_L10N,
}
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
UPSTREAM_ARTIFACT_SIGNED_PATHS = {
'linux64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_EN_US + [
"target.tar.bz2",

View File

@ -92,6 +92,10 @@ def make_beetmover_checksums_description(config, jobs):
def generate_upstream_artifacts(refs, platform, locale=None):
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
common_paths = [
"public/target.checksums",
"public/target.checksums.asc",

View File

@ -17,11 +17,10 @@ from voluptuous import Any, Required, Optional
import logging
logger = logging.getLogger(__name__)
# For developers: if you are adding any new artifacts here that need to be
# transfered to S3, please be aware you also need to follow-up with patch in
# the actual beetmoverscript logic that lies under
# https://github.com/mozilla-releng/beetmoverscript/. See example in bug
# 1348286
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
_DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [
"balrog_props.json",
"target.common.tests.zip",
@ -44,25 +43,49 @@ _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [
"host/bin/mar",
"host/bin/mbsdiff",
]
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
_DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_EN_US = [
"update/target.complete.mar",
]
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
_DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_L10N = [
"target.langpack.xpi",
"balrog_props.json",
]
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
_DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_L10N = [
"target.complete.mar",
]
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
UPSTREAM_ARTIFACT_UNSIGNED_PATHS = {
'macosx64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
'macosx64-nightly-l10n': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_L10N,
}
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
UPSTREAM_ARTIFACT_SIGNED_PATHS = {
'macosx64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_EN_US,
'macosx64-nightly-l10n': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_L10N,
}
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
# need to be transfered to S3, please be aware you also need to follow-up
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
# See example in bug 1348286
UPSTREAM_ARTIFACT_REPACKAGE_PATHS = {
'macosx64-nightly': ["target.dmg"],
'macosx64-nightly-l10n': ["target.dmg"],

View File

@ -1,3 +1,5 @@
[display-none.html]
type: testharness
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1358668
[Intersecting notification after first rAF.]
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1359318

View File

@ -1,3 +1,5 @@
[multiple-thresholds.html]
type: testharness
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1335644
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1359318
[First rAF.]
https://bugzilla.mozilla.org/show_bug.cgi?id=1335644

View File

@ -1,3 +1,5 @@
[root-margin.html]
type: testharness
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1335644
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1359318
[First rAF.]
https://bugzilla.mozilla.org/show_bug.cgi?id=1335644

View File

@ -1,3 +1,5 @@
[same-document-no-root.html]
type: testharness
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1335644
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1359318
[First rAF.]
https://bugzilla.mozilla.org/show_bug.cgi?id=1335644

View File

@ -1,3 +1,5 @@
[same-document-zero-size-target.html]
type: testharness
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1335644
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1359318
[First rAF.]
https://bugzilla.mozilla.org/show_bug.cgi?id=1335644

View File

@ -13233,5 +13233,17 @@
"n_buckets": 100,
"bug_numbers": [1366640],
"description": "Time (ms) VideoFrameContainer::ClearFutureFrames spent holding a lock."
},
"IPC_SYNC_RECEIVE_MS": {
"record_in_processes": ["main", "content", "gpu"],
"alert_emails": ["michael@thelayzells.com"],
"bug_numbers": [1365719],
"expires_in_version": "60",
"kind": "exponential",
"low": 32,
"high": 750,
"n_buckets": 40,
"keyed": true,
"description": "Measures the number of milliseconds we spend processing sync IPC messages in the receiving process, keyed by message name. Note: only messages that take over 500 microseconds are included in this probe."
}
}