forked from mirrors/gecko-dev
merge mozilla-inbound to mozilla-central. r=merge a=merge
MozReview-Commit-ID: CEadD9RweN4
This commit is contained in:
commit
d8e719c8a3
48 changed files with 1913 additions and 1064 deletions
|
|
@ -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.
|
// 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");
|
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.
|
// 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.
|
// See the SCOPE constants in AddonManager.jsm for values to use here.
|
||||||
pref("extensions.autoDisableScopes", 15);
|
pref("extensions.autoDisableScopes", 15);
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,8 @@
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
label="&updateHistory2.label;"
|
label="&updateHistory2.label;"
|
||||||
accesskey="&updateHistory2.accesskey;"
|
accesskey="&updateHistory2.accesskey;"
|
||||||
preference="app.update.disable_button.showUpdateHistory"/>
|
preference="app.update.disable_button.showUpdateHistory"
|
||||||
|
searchkeywords="&history.title; &history.intro;"/>
|
||||||
</vbox>
|
</vbox>
|
||||||
#endif
|
#endif
|
||||||
</hbox>
|
</hbox>
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ var gSearchResultsPane = {
|
||||||
*/
|
*/
|
||||||
stringMatchesFilters(str, filter) {
|
stringMatchesFilters(str, filter) {
|
||||||
if (!filter || !str) {
|
if (!filter || !str) {
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
let searchStr = str.toLowerCase();
|
let searchStr = str.toLowerCase();
|
||||||
let filterStrings = filter.toLowerCase().split(/\s+/);
|
let filterStrings = filter.toLowerCase().split(/\s+/);
|
||||||
|
|
@ -284,8 +284,6 @@ var gSearchResultsPane = {
|
||||||
let nodeSizes = [];
|
let nodeSizes = [];
|
||||||
let allNodeText = "";
|
let allNodeText = "";
|
||||||
let runningSize = 0;
|
let runningSize = 0;
|
||||||
let labelResult = false;
|
|
||||||
let valueResult = false;
|
|
||||||
let accessKeyTextNodes = this.textNodeDescendants(nodeObject.boxObject);
|
let accessKeyTextNodes = this.textNodeDescendants(nodeObject.boxObject);
|
||||||
|
|
||||||
for (let node of accessKeyTextNodes) {
|
for (let node of accessKeyTextNodes) {
|
||||||
|
|
@ -298,9 +296,7 @@ var gSearchResultsPane = {
|
||||||
let complexTextNodesResult = this.highlightMatches(accessKeyTextNodes, nodeSizes, allNodeText.toLowerCase(), searchPhrase);
|
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.
|
// Searching some elements, such as xul:button, have a 'label' attribute that contains the user-visible text.
|
||||||
if (nodeObject.getAttribute("label")) {
|
let labelResult = this.stringMatchesFilters(nodeObject.getAttribute("label"), searchPhrase);
|
||||||
labelResult = this.stringMatchesFilters(nodeObject.getAttribute("label"), searchPhrase);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Creating tooltips for buttons
|
// Creating tooltips for buttons
|
||||||
if (labelResult && nodeObject.tagName === "button") {
|
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.
|
// Searching some elements, such as xul:label, store their user-visible text in a "value" attribute.
|
||||||
if (nodeObject.getAttribute("value")) {
|
let valueResult = this.stringMatchesFilters(nodeObject.getAttribute("value"), searchPhrase);
|
||||||
valueResult = this.stringMatchesFilters(nodeObject.getAttribute("value"), searchPhrase);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((nodeObject.tagName == "button" || nodeObject.tagName == "menulist" || nodeObject.tagName == "menuitem") &&
|
|
||||||
(labelResult || valueResult)) {
|
|
||||||
nodeObject.setAttribute("highlightable", "true");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Creating tooltips for buttons
|
// Creating tooltips for buttons
|
||||||
if (valueResult && nodeObject.tagName === "button") {
|
if (valueResult && nodeObject.tagName === "button") {
|
||||||
this.listSearchTooltips.push(nodeObject);
|
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++) {
|
for (let i = 0; i < nodeObject.childNodes.length; i++) {
|
||||||
|
|
|
||||||
|
|
@ -315,7 +315,8 @@
|
||||||
class="content-cell-item"
|
class="content-cell-item"
|
||||||
label="&chooseBookmark.label;"
|
label="&chooseBookmark.label;"
|
||||||
accesskey="&chooseBookmark.accesskey;"
|
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"
|
<button id="restoreDefaultHomePage"
|
||||||
class="content-cell-item"
|
class="content-cell-item"
|
||||||
label="&restoreDefault.label;"
|
label="&restoreDefault.label;"
|
||||||
|
|
@ -452,7 +453,14 @@
|
||||||
<button id="chooseLanguage"
|
<button id="chooseLanguage"
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
label="&chooseButton.label;"
|
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>
|
||||||
|
|
||||||
<hbox id="translationBox" hidden="true">
|
<hbox id="translationBox" hidden="true">
|
||||||
|
|
@ -529,7 +537,67 @@
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
icon="select-font"
|
icon="select-font"
|
||||||
label="&advancedFonts.label;"
|
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>
|
||||||
<hbox id="colorsSettings">
|
<hbox id="colorsSettings">
|
||||||
<spacer flex="1" />
|
<spacer flex="1" />
|
||||||
|
|
@ -537,7 +605,15 @@
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
icon="select-color"
|
icon="select-color"
|
||||||
label="&colors.label;"
|
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>
|
</hbox>
|
||||||
</vbox>
|
</vbox>
|
||||||
</groupbox>
|
</groupbox>
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,19 @@
|
||||||
<!ENTITY % globalPreferencesDTD SYSTEM "chrome://global/locale/preferences.dtd">
|
<!ENTITY % globalPreferencesDTD SYSTEM "chrome://global/locale/preferences.dtd">
|
||||||
<!ENTITY % preferencesDTD SYSTEM
|
<!ENTITY % preferencesDTD SYSTEM
|
||||||
"chrome://browser/locale/preferences/preferences.dtd">
|
"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 % privacyDTD SYSTEM "chrome://browser/locale/preferences/privacy.dtd">
|
||||||
<!ENTITY % tabsDTD SYSTEM "chrome://browser/locale/preferences/tabs.dtd">
|
<!ENTITY % tabsDTD SYSTEM "chrome://browser/locale/preferences/tabs.dtd">
|
||||||
<!ENTITY % searchDTD SYSTEM "chrome://browser/locale/preferences/search.dtd">
|
<!ENTITY % searchDTD SYSTEM "chrome://browser/locale/preferences/search.dtd">
|
||||||
|
|
@ -42,6 +55,17 @@
|
||||||
%brandDTD;
|
%brandDTD;
|
||||||
%globalPreferencesDTD;
|
%globalPreferencesDTD;
|
||||||
%preferencesDTD;
|
%preferencesDTD;
|
||||||
|
%selectBookmarkDTD;
|
||||||
|
%languagesDTD;
|
||||||
|
%fontDTD;
|
||||||
|
%colorsDTD;
|
||||||
|
%permissionsDTD;
|
||||||
|
%passwordManagerDTD;
|
||||||
|
%historyDTD;
|
||||||
|
%certManagerDTD;
|
||||||
|
%deviceManangerDTD;
|
||||||
|
%connectionDTD;
|
||||||
|
%siteDataSettingsDTD;
|
||||||
%privacyDTD;
|
%privacyDTD;
|
||||||
%tabsDTD;
|
%tabsDTD;
|
||||||
%searchDTD;
|
%searchDTD;
|
||||||
|
|
@ -84,6 +108,10 @@
|
||||||
src="chrome://branding/locale/brand.properties"/>
|
src="chrome://branding/locale/brand.properties"/>
|
||||||
<stringbundle id="bundlePreferences"
|
<stringbundle id="bundlePreferences"
|
||||||
src="chrome://browser/locale/preferences/preferences.properties"/>
|
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">
|
<stringbundleset id="appManagerBundleset">
|
||||||
<stringbundle id="appManagerBundle"
|
<stringbundle id="appManagerBundle"
|
||||||
|
|
|
||||||
|
|
@ -150,6 +150,13 @@ var gPrivacyPane = {
|
||||||
.addEventListener(aEventType, aCallback.bind(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._updateSanitizeSettingsButton();
|
||||||
this.initializeHistoryMode();
|
this.initializeHistoryMode();
|
||||||
this.updateHistoryModePane();
|
this.updateHistoryModePane();
|
||||||
|
|
@ -319,6 +326,53 @@ var gPrivacyPane = {
|
||||||
setEventListener("submitHealthReportBox", "command",
|
setEventListener("submitHealthReportBox", "command",
|
||||||
gPrivacyPane.updateSubmitHealthReport);
|
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
|
// TRACKING PROTECTION MODE
|
||||||
|
|
|
||||||
|
|
@ -171,6 +171,7 @@
|
||||||
</preferences>
|
</preferences>
|
||||||
|
|
||||||
<stringbundle id="bundlePreferences" src="chrome://browser/locale/preferences/preferences.properties"/>
|
<stringbundle id="bundlePreferences" src="chrome://browser/locale/preferences/preferences.properties"/>
|
||||||
|
<stringbundle id="signonBundle" src="chrome://passwordmgr/locale/passwordmgr.properties"/>
|
||||||
|
|
||||||
<hbox id="header-privacy"
|
<hbox id="header-privacy"
|
||||||
class="header"
|
class="header"
|
||||||
|
|
@ -317,20 +318,22 @@
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
label="&passwordExceptions.label;"
|
label="&passwordExceptions.label;"
|
||||||
accesskey="&passwordExceptions.accesskey;"
|
accesskey="&passwordExceptions.accesskey;"
|
||||||
preference="pref.privacy.disable_button.view_passwords_exceptions"/>
|
preference="pref.privacy.disable_button.view_passwords_exceptions"
|
||||||
|
searchkeywords="&address.label;"/>
|
||||||
</hbox>
|
</hbox>
|
||||||
<hbox id="showPasswordBox" pack="end">
|
<hbox id="showPasswordBox" pack="end">
|
||||||
<button id="showPasswords"
|
<button id="showPasswords"
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
label="&savedLogins.label;" accesskey="&savedLogins.accesskey;"
|
label="&savedLogins.label;" accesskey="&savedLogins.accesskey;"
|
||||||
preference="pref.privacy.disable_button.view_passwords"/>
|
preference="pref.privacy.disable_button.view_passwords"
|
||||||
|
searchkeywords="&savedLogins.title;"/>
|
||||||
</hbox>
|
</hbox>
|
||||||
</vbox>
|
</vbox>
|
||||||
<hbox id="masterPasswordRow">
|
<hbox id="masterPasswordRow">
|
||||||
<checkbox id="useMasterPassword"
|
<checkbox id="useMasterPassword"
|
||||||
label="&useMasterPassword.label;"
|
label="&useMasterPassword.label;"
|
||||||
accesskey="&useMasterPassword.accesskey;"
|
accesskey="&useMasterPassword.accesskey;"
|
||||||
flex="1" />
|
flex="1"/>
|
||||||
<button id="changeMasterPassword"
|
<button id="changeMasterPassword"
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
label="&changeMasterPassword.label;"
|
label="&changeMasterPassword.label;"
|
||||||
|
|
@ -359,12 +362,17 @@
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
label="&trackingProtectionExceptions.label;"
|
label="&trackingProtectionExceptions.label;"
|
||||||
accesskey="&trackingProtectionExceptions.accesskey;"
|
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"
|
<button id="changeBlockList"
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
label="&changeBlockList.label;"
|
label="&changeBlockList.label;"
|
||||||
accesskey="&changeBlockList.accesskey;"
|
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>
|
</vbox>
|
||||||
</hbox>
|
</hbox>
|
||||||
<radiogroup id="trackingProtectionRadioGroup" aria-labelledby="trackingProtectionDesc">
|
<radiogroup id="trackingProtectionRadioGroup" aria-labelledby="trackingProtectionDesc">
|
||||||
|
|
@ -413,7 +421,8 @@
|
||||||
<button id="popupPolicyButton"
|
<button id="popupPolicyButton"
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
label="&popupExceptions.label;"
|
label="&popupExceptions.label;"
|
||||||
accesskey="&popupExceptions.accesskey;"/>
|
accesskey="&popupExceptions.accesskey;"
|
||||||
|
searchkeywords="&address.label; &button.cancel.label; &button.ok.label;"/>
|
||||||
</hbox>
|
</hbox>
|
||||||
</groupbox>
|
</groupbox>
|
||||||
|
|
||||||
|
|
@ -436,7 +445,11 @@
|
||||||
<button id="notificationsPolicyButton"
|
<button id="notificationsPolicyButton"
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
label="¬ificationsPolicyButton.label;"
|
label="¬ificationsPolicyButton.label;"
|
||||||
accesskey="¬ificationsPolicyButton.accesskey;"/>
|
accesskey="¬ificationsPolicyButton.accesskey;"
|
||||||
|
searchkeywords="&removepermission.label;
|
||||||
|
&removeallpermissions.label;
|
||||||
|
&button.cancel.label;
|
||||||
|
&button.ok.label;"/>
|
||||||
</hbox>
|
</hbox>
|
||||||
</row>
|
</row>
|
||||||
</rows>
|
</rows>
|
||||||
|
|
@ -483,7 +496,13 @@
|
||||||
<button id="addonExceptions"
|
<button id="addonExceptions"
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
label="&addonExceptions.label;"
|
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>
|
</hbox>
|
||||||
|
|
||||||
<separator class="thin"/>
|
<separator class="thin"/>
|
||||||
|
|
@ -534,12 +553,36 @@
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
label="&viewCerts.label;"
|
label="&viewCerts.label;"
|
||||||
accesskey="&viewCerts.accesskey;"
|
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"
|
<button id="viewSecurityDevicesButton"
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
label="&viewSecurityDevices.label;"
|
label="&viewSecurityDevices.label;"
|
||||||
accesskey="&viewSecurityDevices.accesskey;"
|
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>
|
</vbox>
|
||||||
</hbox>
|
</hbox>
|
||||||
</groupbox>
|
</groupbox>
|
||||||
|
|
@ -583,7 +626,10 @@
|
||||||
<button id="browserContainersSettings"
|
<button id="browserContainersSettings"
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
label="&browserContainersSettings.label;"
|
label="&browserContainersSettings.label;"
|
||||||
accesskey="&browserContainersSettings.accesskey;"/>
|
accesskey="&browserContainersSettings.accesskey;"
|
||||||
|
searchkeywords="&addButton.label;
|
||||||
|
&preferencesButton.label;
|
||||||
|
&removeButton.label;"/>
|
||||||
</hbox>
|
</hbox>
|
||||||
</vbox>
|
</vbox>
|
||||||
</groupbox>
|
</groupbox>
|
||||||
|
|
@ -599,7 +645,25 @@
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
icon="network"
|
icon="network"
|
||||||
label="&connectionSettings.label;"
|
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>
|
</hbox>
|
||||||
</groupbox>
|
</groupbox>
|
||||||
|
|
||||||
|
|
@ -687,7 +751,11 @@
|
||||||
<button id="siteDataSettings"
|
<button id="siteDataSettings"
|
||||||
class="accessory-button"
|
class="accessory-button"
|
||||||
label="&siteDataSettings.label;"
|
label="&siteDataSettings.label;"
|
||||||
accesskey="&siteDataSettings.accesskey;"/>
|
accesskey="&siteDataSettings.accesskey;"
|
||||||
|
searchkeywords="&window.title;
|
||||||
|
&hostCol.label;
|
||||||
|
&statusCol.label;
|
||||||
|
&usageCol.label;"/>
|
||||||
</vbox>
|
</vbox>
|
||||||
</groupbox>
|
</groupbox>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,10 @@ skip-if = !updater
|
||||||
[browser_bug705422.js]
|
[browser_bug705422.js]
|
||||||
[browser_bug731866.js]
|
[browser_bug731866.js]
|
||||||
[browser_search_within_preferences.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_bug795764_cachedisabled.js]
|
||||||
[browser_bug1018066_resetScrollPosition.js]
|
[browser_bug1018066_resetScrollPosition.js]
|
||||||
[browser_bug1020245_openPreferences_to_paneContent.js]
|
[browser_bug1020245_openPreferences_to_paneContent.js]
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
});
|
||||||
|
|
@ -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);
|
||||||
|
});
|
||||||
|
|
@ -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);
|
||||||
|
});
|
||||||
|
|
@ -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);
|
||||||
|
});
|
||||||
|
|
@ -89,7 +89,11 @@ add_task(async function() {
|
||||||
|
|
||||||
for (let i = 0; i < mainPrefTag.childElementCount; i++) {
|
for (let i = 0; i < mainPrefTag.childElementCount; i++) {
|
||||||
let child = mainPrefTag.children[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");
|
is_element_visible(child, "Should be in search results");
|
||||||
} else if (child.id) {
|
} else if (child.id) {
|
||||||
is_element_hidden(child, "Should not be in search results");
|
is_element_hidden(child, "Should not be in search results");
|
||||||
|
|
|
||||||
|
|
@ -218,6 +218,26 @@ function assertSitesListed(doc, hosts) {
|
||||||
is(removeAllBtn.disabled, false, "Should enable the removeAllBtn button");
|
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 = {
|
const mockSiteDataManager = {
|
||||||
|
|
||||||
_SiteDataManager: null,
|
_SiteDataManager: null,
|
||||||
|
|
|
||||||
|
|
@ -1068,6 +1068,7 @@ html .arrow.expanded svg {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sources-panel * {
|
.sources-panel * {
|
||||||
|
|
@ -1127,6 +1128,10 @@ html .arrow.expanded svg {
|
||||||
padding-top: 5px;
|
padding-top: 5px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
.outline-list {
|
.outline-list {
|
||||||
list-style-type: "-";
|
list-style-type: "-";
|
||||||
}
|
}
|
||||||
|
|
@ -1287,7 +1292,7 @@ html .toggle-button-end.vertical svg {
|
||||||
left: 0;
|
left: 0;
|
||||||
right: 1px;
|
right: 1px;
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
z-index: 100;
|
z-index: 1;
|
||||||
-moz-user-select: none;
|
-moz-user-select: none;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
height: var(--editor-footer-height);
|
height: var(--editor-footer-height);
|
||||||
|
|
@ -1312,7 +1317,7 @@ html .toggle-button-end.vertical svg {
|
||||||
transition: opacity 200ms;
|
transition: opacity 200ms;
|
||||||
border: none;
|
border: none;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
padding: 8px 0.7em;
|
padding: 6px 0.7em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.source-footer > .commands > .action i {
|
.source-footer > .commands > .action i {
|
||||||
|
|
@ -1440,14 +1445,10 @@ html .toggle-button-end.vertical svg {
|
||||||
fill: white;
|
fill: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-bottom-bar .search-modifiers button.disabled svg {
|
|
||||||
fill: var(--theme-comment-alt);
|
|
||||||
cursor: default;
|
|
||||||
}
|
|
||||||
|
|
||||||
.search-bottom-bar .search-type-toggles {
|
.search-bottom-bar .search-type-toggles {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
|
max-width: 68%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-bottom-bar .search-type-toggles .search-toggle-title {
|
.search-bottom-bar .search-type-toggles .search-toggle-title {
|
||||||
|
|
@ -1455,10 +1456,13 @@ html .toggle-button-end.vertical svg {
|
||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
.search-bottom-bar .search-type-toggles .search-type-btn {
|
.search-bottom-bar .search-type-toggles .search-type-btn {
|
||||||
margin: 0 6px;
|
margin: 0 0 0 6px;
|
||||||
border: none;
|
border: none;
|
||||||
background: transparent;
|
background: transparent;
|
||||||
color: var(--theme-comment-alt);
|
color: var(--theme-comment-alt);
|
||||||
|
|
@ -1594,7 +1598,7 @@ html .toggle-button-end.vertical svg {
|
||||||
|
|
||||||
.tooltip .preview {
|
.tooltip .preview {
|
||||||
background: var(--theme-toolbar-background);
|
background: var(--theme-toolbar-background);
|
||||||
max-width: 350px;
|
max-width: inherit;
|
||||||
min-height: 80px;
|
min-height: 80px;
|
||||||
border: 1px solid var(--theme-splitter-color);
|
border: 1px solid var(--theme-splitter-color);
|
||||||
box-shadow: 1px 2px 4px 1px var(--theme-toolbar-background-alt);
|
box-shadow: 1px 2px 4px 1px var(--theme-toolbar-background-alt);
|
||||||
|
|
@ -1845,6 +1849,47 @@ html[dir="rtl"] .editor-mount {
|
||||||
.visible {
|
.visible {
|
||||||
visibility: 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 {
|
.why-paused {
|
||||||
background-color: var(--theme-body-background);
|
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
|
|
@ -24,8 +24,8 @@ add_task(function*() {
|
||||||
|
|
||||||
// The pretty-print button should go away in the pretty-printed
|
// The pretty-print button should go away in the pretty-printed
|
||||||
// source.
|
// source.
|
||||||
ok(!findElement(dbg, "sourceFooter"), "Footer is hidden");
|
ok(!findElement(dbg, "editorFooter"), "Footer is hidden");
|
||||||
|
|
||||||
yield selectSource(dbg, "math.min.js");
|
yield selectSource(dbg, "math.min.js");
|
||||||
ok(findElement(dbg, "sourceFooter"), "Footer is hidden");
|
ok(findElement(dbg, "editorFooter"), "Footer is hidden");
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -645,7 +645,8 @@ const selectors = {
|
||||||
stepIn: ".stepIn.active",
|
stepIn: ".stepIn.active",
|
||||||
toggleBreakpoints: ".breakpoints-toggle",
|
toggleBreakpoints: ".breakpoints-toggle",
|
||||||
prettyPrintButton: ".prettyPrint",
|
prettyPrintButton: ".prettyPrint",
|
||||||
sourceFooter: ".source-footer",
|
sourcesFooter: ".sources-panel .source-footer",
|
||||||
|
editorFooter: ".editor-pane .source-footer",
|
||||||
sourceNode: i => `.sources-list .tree-node:nth-child(${i})`,
|
sourceNode: i => `.sources-list .tree-node:nth-child(${i})`,
|
||||||
sourceNodes: ".sources-list .tree-node",
|
sourceNodes: ".sources-list .tree-node",
|
||||||
sourceArrow: i => `.sources-list .tree-node:nth-child(${i}) .arrow`
|
sourceArrow: i => `.sources-list .tree-node:nth-child(${i}) .arrow`
|
||||||
|
|
|
||||||
|
|
@ -140,6 +140,14 @@ sources.search.alt.key=CmdOrCtrl+O
|
||||||
# does not have any sources.
|
# does not have any sources.
|
||||||
sources.noSourcesAvailable=This page has no 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
|
# LOCALIZATION NOTE (sourceSearch.search.key2): Key shortcut to open the search
|
||||||
# for searching within a the currently opened files in the editor
|
# for searching within a the currently opened files in the editor
|
||||||
sourceSearch.search.key2=CmdOrCtrl+F
|
sourceSearch.search.key2=CmdOrCtrl+F
|
||||||
|
|
@ -310,13 +318,17 @@ editor.jumpToMappedLocation1=Jump to %S location
|
||||||
# context menu to disable framework grouping.
|
# context menu to disable framework grouping.
|
||||||
framework.disableGrouping=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
|
# LOCALIZATION NOTE (framework.enableGrouping): This is the text that appears in the
|
||||||
# context menu to enable framework grouping.
|
# context menu to enable framework grouping.
|
||||||
framework.enableGrouping=Enable Framework Grouping
|
framework.enableGrouping=Enable Framework Grouping
|
||||||
|
|
||||||
# LOCALIZATION NOTE (framework.accesskey): Access key to toggle framework grouping from
|
# LOCALIZATION NOTE (framework.enableGrouping.accesskey): Access key to toggle
|
||||||
# the context menu.
|
# framework grouping from the context menu.
|
||||||
framework.accesskey=u
|
framework.enableGrouping.accesskey=u
|
||||||
|
|
||||||
# LOCALIZATION NOTE (generated): Source Map term for a server source location
|
# LOCALIZATION NOTE (generated): Source Map term for a server source location
|
||||||
generated=generated
|
generated=generated
|
||||||
|
|
@ -392,6 +404,10 @@ sourceFooter.blackbox=Blackbox Source
|
||||||
# with the blackbox button
|
# with the blackbox button
|
||||||
sourceFooter.unblackbox=Unblackbox Source
|
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
|
# LOCALIZATION NOTE (sourceFooter.blackbox.accesskey): Access key to blackbox
|
||||||
# an associated source
|
# an associated source
|
||||||
sourceFooter.blackbox.accesskey=b
|
sourceFooter.blackbox.accesskey=b
|
||||||
|
|
|
||||||
|
|
@ -39,3 +39,6 @@ pref("devtools.debugger.tabs", "[]");
|
||||||
pref("devtools.debugger.pending-selected-location", "{}");
|
pref("devtools.debugger.pending-selected-location", "{}");
|
||||||
pref("devtools.debugger.pending-breakpoints", "[]");
|
pref("devtools.debugger.pending-breakpoints", "[]");
|
||||||
pref("devtools.debugger.expressions", "[]");
|
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);
|
||||||
|
|
|
||||||
|
|
@ -901,6 +901,13 @@ GLContext::InitWithPrefixImpl(const char* prefix, bool trygl)
|
||||||
mMaxRenderbufferSize /= 2;
|
mMaxRenderbufferSize /= 2;
|
||||||
mNeedsTextureSizeChecks = true;
|
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
|
#endif
|
||||||
if (mWorkAroundDriverBugs &&
|
if (mWorkAroundDriverBugs &&
|
||||||
|
|
|
||||||
|
|
@ -1682,7 +1682,7 @@ static SK_ALWAYS_INLINE void aaa_fill_path(const SkPath& path, const SkIRect& cl
|
||||||
rightBound = SkTMin(rightBound, SkIntToFixed(ir.fRight));
|
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
|
SkASSERT(count >= 2); // convex walker does not handle missing right edges
|
||||||
aaa_walk_convex_edges(&headEdge, blitter, start_y, stop_y,
|
aaa_walk_convex_edges(&headEdge, blitter, start_y, stop_y,
|
||||||
leftBound, rightBound, isUsingMask);
|
leftBound, rightBound, isUsingMask);
|
||||||
|
|
|
||||||
|
|
@ -467,7 +467,7 @@ void sk_fill_path(const SkPath& path, const SkIRect& clipRect, SkBlitter* blitte
|
||||||
proc = PrePostInverseBlitterProc;
|
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
|
SkASSERT(count >= 2); // convex walker does not handle missing right edges
|
||||||
walk_convex_edges(&headEdge, path.getFillType(), blitter, start_y, stop_y, nullptr);
|
walk_convex_edges(&headEdge, path.getFillType(), blitter, start_y, stop_y, nullptr);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -138,6 +138,8 @@ static const uint32_t kMinTelemetryIPCWriteLatencyMs = 1;
|
||||||
|
|
||||||
// Note: we round the time we spend waiting for a response to the nearest
|
// 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.
|
// 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;
|
static const uint32_t kMinTelemetrySyncIPCLatencyMs = 1;
|
||||||
|
|
||||||
const int32_t MessageChannel::kNoTimeout = INT32_MIN;
|
const int32_t MessageChannel::kNoTimeout = INT32_MIN;
|
||||||
|
|
@ -2019,6 +2021,8 @@ MessageChannel::DispatchSyncMessage(const Message& aMsg, Message*& aReply)
|
||||||
{
|
{
|
||||||
AssertWorkerThread();
|
AssertWorkerThread();
|
||||||
|
|
||||||
|
mozilla::TimeStamp start = TimeStamp::Now();
|
||||||
|
|
||||||
int nestedLevel = aMsg.nested_level();
|
int nestedLevel = aMsg.nested_level();
|
||||||
|
|
||||||
MOZ_RELEASE_ASSERT(nestedLevel == IPC::Message::NOT_NESTED || NS_IsMainThread());
|
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);
|
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")) {
|
if (!MaybeHandleError(rv, aMsg, "DispatchSyncMessage")) {
|
||||||
aReply = new Message();
|
aReply = new Message();
|
||||||
aReply->set_sync();
|
aReply->set_sync();
|
||||||
|
|
|
||||||
|
|
@ -283,7 +283,7 @@ ProcessLink::OnChannelOpened()
|
||||||
mExistingListener = mTransport->set_listener(this);
|
mExistingListener = mTransport->set_listener(this);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
if (mExistingListener) {
|
if (mExistingListener) {
|
||||||
queue<Message> pending;
|
std::queue<Message> pending;
|
||||||
mExistingListener->GetQueuedMessages(pending);
|
mExistingListener->GetQueuedMessages(pending);
|
||||||
MOZ_ASSERT(pending.empty());
|
MOZ_ASSERT(pending.empty());
|
||||||
}
|
}
|
||||||
|
|
@ -300,7 +300,7 @@ ProcessLink::OnTakeConnectedChannel()
|
||||||
{
|
{
|
||||||
AssertIOThread();
|
AssertIOThread();
|
||||||
|
|
||||||
queue<Message> pending;
|
std::queue<Message> pending;
|
||||||
{
|
{
|
||||||
MonitorAutoLock lock(*mChan->mMonitor);
|
MonitorAutoLock lock(*mChan->mMonitor);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1013,6 +1013,8 @@ nsFrame::DidSetStyleContext(nsStyleContext* aOldStyleContext)
|
||||||
|
|
||||||
RemoveStateBits(NS_FRAME_SIMPLE_EVENT_REGIONS |
|
RemoveStateBits(NS_FRAME_SIMPLE_EVENT_REGIONS |
|
||||||
NS_FRAME_SIMPLE_DISPLAYLIST);
|
NS_FRAME_SIMPLE_DISPLAYLIST);
|
||||||
|
|
||||||
|
mMayHaveRoundedCorners = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -1587,6 +1589,11 @@ nsIFrame::OutsetBorderRadii(nscoord aRadii[8], const nsMargin &aOffsets)
|
||||||
nsIFrame::GetBorderRadii(const nsSize& aFrameSize, const nsSize& aBorderArea,
|
nsIFrame::GetBorderRadii(const nsSize& aFrameSize, const nsSize& aBorderArea,
|
||||||
Sides aSkipSides, nscoord aRadii[8]) const
|
Sides aSkipSides, nscoord aRadii[8]) const
|
||||||
{
|
{
|
||||||
|
if (!mMayHaveRoundedCorners) {
|
||||||
|
memset(aRadii, 0, sizeof(nscoord) * 8);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (IsThemed()) {
|
if (IsThemed()) {
|
||||||
// When we're themed, the native theme code draws the border and
|
// When we're themed, the native theme code draws the border and
|
||||||
// background, and therefore it doesn't make sense to tell other
|
// 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 false;
|
||||||
}
|
}
|
||||||
return ComputeBorderRadii(StyleBorder()->mBorderRadius,
|
|
||||||
aFrameSize, aBorderArea,
|
const_cast<nsIFrame*>(this)->mMayHaveRoundedCorners =
|
||||||
aSkipSides, aRadii);
|
ComputeBorderRadii(StyleBorder()->mBorderRadius,
|
||||||
|
aFrameSize, aBorderArea,
|
||||||
|
aSkipSides, aRadii);
|
||||||
|
return mMayHaveRoundedCorners;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
|
||||||
|
|
@ -616,6 +616,7 @@ public:
|
||||||
, mPrevSibling(nullptr)
|
, mPrevSibling(nullptr)
|
||||||
, mState(NS_FRAME_FIRST_REFLOW | NS_FRAME_IS_DIRTY)
|
, mState(NS_FRAME_FIRST_REFLOW | NS_FRAME_IS_DIRTY)
|
||||||
, mClass(aID)
|
, mClass(aID)
|
||||||
|
, mMayHaveRoundedCorners(false)
|
||||||
{
|
{
|
||||||
mozilla::PodZero(&mOverflow);
|
mozilla::PodZero(&mOverflow);
|
||||||
}
|
}
|
||||||
|
|
@ -3921,6 +3922,9 @@ protected:
|
||||||
/** The ClassID of the concrete class of this instance. */
|
/** The ClassID of the concrete class of this instance. */
|
||||||
ClassID mClass; // 1 byte
|
ClassID mClass; // 1 byte
|
||||||
|
|
||||||
|
bool mMayHaveRoundedCorners : 1;
|
||||||
|
// There should be a 15-bit gap left here.
|
||||||
|
|
||||||
// Helpers
|
// Helpers
|
||||||
/**
|
/**
|
||||||
* Can we stop inside this frame when we're skipping non-rendered whitespace?
|
* Can we stop inside this frame when we're skipping non-rendered whitespace?
|
||||||
|
|
|
||||||
|
|
@ -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
|
// Implementation
|
||||||
|
|
||||||
|
|
@ -236,9 +212,22 @@ nsSVGMaskFrame::GetMaskForMaskedFrame(MaskParams& aParams)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<DrawTarget> maskDT =
|
uint8_t maskType;
|
||||||
gfxPlatform::GetPlatform()->CreateOffscreenContentDrawTarget(
|
if (aParams.maskMode == NS_STYLE_MASK_MODE_MATCH_SOURCE) {
|
||||||
maskSurfaceSize, SurfaceFormat::B8G8R8A8);
|
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()) {
|
if (!maskDT || !maskDT->IsValid()) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
@ -269,37 +258,30 @@ nsSVGMaskFrame::GetMaskForMaskedFrame(MaskParams& aParams)
|
||||||
nsSVGUtils::PaintFrameWithEffects(kid, *tmpCtx, m, aParams.imgParams);
|
nsSVGUtils::PaintFrameWithEffects(kid, *tmpCtx, m, aParams.imgParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<SourceSurface> maskSnapshot = maskDT->Snapshot();
|
RefPtr<SourceSurface> surface;
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (maskType == NS_STYLE_MASK_TYPE_LUMINANCE) {
|
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 ==
|
if (StyleSVG()->mColorInterpolation ==
|
||||||
NS_STYLE_COLOR_INTERPOLATION_LINEARRGB) {
|
NS_STYLE_COLOR_INTERPOLATION_LINEARRGB) {
|
||||||
ComputeLinearRGBLuminanceMask(map.mData, map.mStride,
|
ComputeLinearRGBLuminanceMask(map.mData, map.mStride,
|
||||||
|
|
@ -310,14 +292,19 @@ nsSVGMaskFrame::GetMaskForMaskedFrame(MaskParams& aParams)
|
||||||
destMap.mData, destMap.mStride,
|
destMap.mData, destMap.mStride,
|
||||||
maskSurfaceSize, aParams.opacity);
|
maskSurfaceSize, aParams.opacity);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
ComputeAlphaMask(map.mData, map.mStride,
|
|
||||||
destMap.mData, destMap.mStride,
|
|
||||||
maskSurfaceSize, aParams.opacity);
|
|
||||||
}
|
|
||||||
|
|
||||||
maskSurface->Unmap();
|
maskSurface->Unmap();
|
||||||
destMaskSurface->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
|
// Moz2D transforms in the opposite direction to Thebes
|
||||||
if (!maskSurfaceMatrix.Invert()) {
|
if (!maskSurfaceMatrix.Invert()) {
|
||||||
|
|
@ -325,7 +312,7 @@ nsSVGMaskFrame::GetMaskForMaskedFrame(MaskParams& aParams)
|
||||||
}
|
}
|
||||||
|
|
||||||
*aParams.maskTransform = ToMatrix(maskSurfaceMatrix);
|
*aParams.maskTransform = ToMatrix(maskSurfaceMatrix);
|
||||||
return destMaskSurface.forget();
|
return surface.forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
gfxRect
|
gfxRect
|
||||||
|
|
|
||||||
|
|
@ -1245,8 +1245,8 @@ nsHttpHandler::PrefsChanged(nsIPrefBranch *prefs, const char *pref)
|
||||||
mSpoofReferrerSource = cVar;
|
mSpoofReferrerSource = cVar;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PREF_CHANGED(HTTP_PREF("referer.spoofOnionSource"))) {
|
if (PREF_CHANGED(HTTP_PREF("referer.hideOnionSource"))) {
|
||||||
rv = prefs->GetBoolPref(HTTP_PREF("referer.spoofOnionSource"), &cVar);
|
rv = prefs->GetBoolPref(HTTP_PREF("referer.hideOnionSource"), &cVar);
|
||||||
if (NS_SUCCEEDED(rv))
|
if (NS_SUCCEEDED(rv))
|
||||||
mHideOnionReferrerSource = cVar;
|
mHideOnionReferrerSource = cVar;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -264,7 +264,7 @@ class BaseBootstrapper(object):
|
||||||
'%s does not yet implement suggest_mobile_android_artifact_mode_mozconfig()'
|
'%s does not yet implement suggest_mobile_android_artifact_mode_mozconfig()'
|
||||||
% __name__)
|
% __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.
|
Install any necessary packages needed for Stylo development.
|
||||||
'''
|
'''
|
||||||
|
|
@ -272,52 +272,24 @@ class BaseBootstrapper(object):
|
||||||
'%s does not yet implement ensure_stylo_packages()'
|
'%s does not yet implement ensure_stylo_packages()'
|
||||||
% __name__)
|
% __name__)
|
||||||
|
|
||||||
def install_tooltool_clang_package(self, state_dir,
|
def install_tooltool_clang_package(self, state_dir, checkout_root, manifest_file):
|
||||||
package_filename, package_sha512sum):
|
abs_manifest_file = os.path.join(checkout_root, manifest_file)
|
||||||
TOOLTOOL_API = 'https://api.pub.build.mozilla.org/tooltool/sha512/'
|
|
||||||
|
|
||||||
# XXX this is similar to the Android NDK download. We should unify them.
|
mach_binary = os.path.join(checkout_root, 'mach')
|
||||||
download_path = os.path.join(state_dir, 'mozboot')
|
if not os.path.exists(mach_binary):
|
||||||
try:
|
raise ValueError("mach not found at %s" % mach_binary)
|
||||||
os.makedirs(download_path)
|
|
||||||
except OSError as e:
|
|
||||||
if e.errno == errno.EEXIST and os.path.isdir(download_path):
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
raise
|
|
||||||
|
|
||||||
try:
|
# If Python can't figure out what its own executable is, there's little
|
||||||
package_url = TOOLTOOL_API + package_sha512sum
|
# chance we're going to be able to execute mach on its own, particularly
|
||||||
downloaded_filename = os.path.join(download_path, package_sha512sum)
|
# on Windows.
|
||||||
print('Downloading clang package from', package_url)
|
if not sys.executable:
|
||||||
self.http_download_and_save(package_url, downloaded_filename,
|
raise ValueError("cannot determine path to Python executable")
|
||||||
package_sha512sum, 'sha512')
|
|
||||||
|
|
||||||
# We don't have to handle a great variety of archive types here.
|
cmd = [sys.executable, mach_binary, 'artifact', 'toolchain',
|
||||||
if package_filename.endswith('tar.gz'):
|
'--tooltool-manifest', abs_manifest_file,
|
||||||
cmd = ['tar', 'zxf', downloaded_filename]
|
'clang']
|
||||||
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)
|
|
||||||
|
|
||||||
print('Download complete!')
|
subprocess.check_call(cmd, cwd=state_dir)
|
||||||
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
|
|
||||||
|
|
||||||
def which(self, name):
|
def which(self, name):
|
||||||
"""Python implementation of which.
|
"""Python implementation of which.
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,12 @@ On this machine, that directory is:
|
||||||
Please restart bootstrap and create that directory when prompted.
|
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 = '''
|
FINISHED = '''
|
||||||
Your system should be ready to build %s!
|
Your system should be ready to build %s!
|
||||||
'''
|
'''
|
||||||
|
|
@ -272,30 +278,9 @@ class Bootstrapper(object):
|
||||||
|
|
||||||
state_dir_available = os.path.exists(state_dir)
|
state_dir_available = os.path.exists(state_dir)
|
||||||
|
|
||||||
# Install the clang packages needed for developing stylo.
|
r = current_firefox_checkout(check_output=self.instance.check_output,
|
||||||
if not self.instance.no_interactive:
|
hg=self.instance.which('hg'))
|
||||||
choice = self.instance.prompt_int(
|
(checkout_type, checkout_root) = r
|
||||||
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'))
|
|
||||||
|
|
||||||
# Possibly configure Mercurial, but not if the current checkout is Git.
|
# Possibly configure Mercurial, but not if the current checkout is Git.
|
||||||
# TODO offer to configure Git.
|
# TODO offer to configure Git.
|
||||||
|
|
@ -323,10 +308,37 @@ class Bootstrapper(object):
|
||||||
if dest:
|
if dest:
|
||||||
dest = os.path.expanduser(dest)
|
dest = os.path.expanduser(dest)
|
||||||
have_clone = clone_firefox(self.instance.which('hg'), dest)
|
have_clone = clone_firefox(self.instance.which('hg'), dest)
|
||||||
|
checkout_root = dest
|
||||||
|
|
||||||
if not have_clone:
|
if not have_clone:
|
||||||
print(SOURCE_ADVERTISE)
|
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)
|
print(self.finished % name)
|
||||||
if not (self.instance.which('rustc') and self.instance._parse_version('rustc') >= MODERN_RUST_VERSION):
|
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)
|
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:
|
try:
|
||||||
node = check_output([hg, 'log', '-r', '0', '--template', '{node}'], cwd=path)
|
node = check_output([hg, 'log', '-r', '0', '--template', '{node}'], cwd=path)
|
||||||
if node in HG_ROOT_REVISIONS:
|
if node in HG_ROOT_REVISIONS:
|
||||||
return 'hg'
|
return ('hg', path)
|
||||||
# Else the root revision is different. There could be nested
|
# Else the root revision is different. There could be nested
|
||||||
# repos. So keep traversing the parents.
|
# repos. So keep traversing the parents.
|
||||||
except subprocess.CalledProcessError:
|
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}`
|
# TODO check git remotes or `git rev-parse -q --verify $sha1^{commit}`
|
||||||
# for signs of Firefox.
|
# for signs of Firefox.
|
||||||
elif os.path.exists(git_dir):
|
elif os.path.exists(git_dir):
|
||||||
return 'git'
|
return ('git', path)
|
||||||
|
|
||||||
path, child = os.path.split(path)
|
path, child = os.path.split(path)
|
||||||
if child == '':
|
if child == '':
|
||||||
break
|
break
|
||||||
|
|
||||||
return None
|
return (None, None)
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ class FreeBSDBootstrapper(BaseBootstrapper):
|
||||||
# TODO: Figure out what not to install for artifact mode
|
# TODO: Figure out what not to install for artifact mode
|
||||||
self.pkg_install(*self.browser_packages)
|
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')
|
self.pkg_install('llvm40')
|
||||||
|
|
||||||
def suggest_browser_mozconfig(self):
|
def suggest_browser_mozconfig(self):
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,6 @@ class StyloInstall(object):
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def ensure_stylo_packages(self, state_dir):
|
def ensure_stylo_packages(self, state_dir, checkout_root):
|
||||||
import stylo
|
import stylo
|
||||||
self.install_tooltool_clang_package(state_dir, **stylo.LINUX)
|
self.install_tooltool_clang_package(state_dir, checkout_root, stylo.LINUX)
|
||||||
|
|
|
||||||
|
|
@ -17,8 +17,8 @@ To enable Stylo in your builds, paste the lines between the chevrons
|
||||||
<<<
|
<<<
|
||||||
ac_add_options --enable-stylo
|
ac_add_options --enable-stylo
|
||||||
|
|
||||||
ac_add_options --with-libclang-path={state_dir}/clang/lib
|
ac_add_options --with-libclang-path="{state_dir}/clang/bin"
|
||||||
ac_add_options --with-clang-path={state_dir}/clang/bin/clang.exe
|
ac_add_options --with-clang-path="{state_dir}/clang/bin/clang.exe"
|
||||||
>>>
|
>>>
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
@ -89,9 +89,9 @@ class MozillaBuildBootstrapper(BaseBootstrapper):
|
||||||
if self.stylo:
|
if self.stylo:
|
||||||
print(STYLO_MOZCONFIG.format(state_dir=self.state_dir))
|
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
|
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):
|
def _update_package_manager(self):
|
||||||
pass
|
pass
|
||||||
|
|
|
||||||
|
|
@ -521,9 +521,9 @@ class OSXBootstrapper(BaseBootstrapper):
|
||||||
|
|
||||||
return active_name.lower()
|
return active_name.lower()
|
||||||
|
|
||||||
def ensure_stylo_packages(self, state_dir):
|
def ensure_stylo_packages(self, state_dir, checkout_root):
|
||||||
import stylo
|
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):
|
def install_homebrew(self):
|
||||||
print(PACKAGE_MANAGER_INSTALL % ('Homebrew', 'Homebrew', 'Homebrew', 'brew'))
|
print(PACKAGE_MANAGER_INSTALL % ('Homebrew', 'Homebrew', 'Homebrew', 'brew'))
|
||||||
|
|
|
||||||
|
|
@ -4,67 +4,6 @@
|
||||||
|
|
||||||
from __future__ import print_function, unicode_literals
|
from __future__ import print_function, unicode_literals
|
||||||
|
|
||||||
# Tooltool packages generated from the script below.
|
WINDOWS = 'browser/config/tooltool-manifests/win64/clang.manifest'
|
||||||
WINDOWS = {
|
OSX = 'browser/config/tooltool-manifests/macosx64/releng.manifest'
|
||||||
'package_filename': 'clang.tar.bz2',
|
LINUX = 'browser/config/tooltool-manifests/linux64/clang.manifest'
|
||||||
'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))
|
|
||||||
|
|
|
||||||
|
|
@ -15,8 +15,8 @@ To enable Stylo in your builds, paste the lines between the chevrons
|
||||||
<<<
|
<<<
|
||||||
ac_add_options --enable-stylo
|
ac_add_options --enable-stylo
|
||||||
|
|
||||||
ac_add_options --with-libclang-path={state_dir}/clang/lib
|
ac_add_options --with-libclang-path="{state_dir}/clang/bin"
|
||||||
ac_add_options --with-clang-path={state_dir}/clang/bin/clang.exe
|
ac_add_options --with-clang-path="{state_dir}/clang/bin/clang.exe"
|
||||||
>>>
|
>>>
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
@ -84,9 +84,9 @@ class WindowsBootstrapper(BaseBootstrapper):
|
||||||
if self.stylo:
|
if self.stylo:
|
||||||
print(STYLO_MOZCONFIG.format(state_dir=self.state_dir))
|
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
|
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):
|
def _update_package_manager(self):
|
||||||
self.pacman_update()
|
self.pacman_update()
|
||||||
|
|
|
||||||
|
|
@ -1308,6 +1308,7 @@ talos-g2:
|
||||||
run-on-projects:
|
run-on-projects:
|
||||||
by-test-platform:
|
by-test-platform:
|
||||||
linux64-stylo/.*: ['mozilla-central', 'try']
|
linux64-stylo/.*: ['mozilla-central', 'try']
|
||||||
|
linux64-stylo-sequential/.*: ['try']
|
||||||
default: ['mozilla-beta', 'mozilla-aurora', 'mozilla-central', 'mozilla-inbound', 'autoland', 'try']
|
default: ['mozilla-beta', 'mozilla-aurora', 'mozilla-central', 'mozilla-inbound', 'autoland', 'try']
|
||||||
e10s: true
|
e10s: true
|
||||||
mozharness:
|
mozharness:
|
||||||
|
|
|
||||||
|
|
@ -15,11 +15,10 @@ from taskgraph.transforms.task import task_description_schema
|
||||||
from voluptuous import Any, Required, Optional
|
from voluptuous import Any, Required, Optional
|
||||||
|
|
||||||
|
|
||||||
# For developers: if you are adding any new artifacts here that need to be
|
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
|
||||||
# transfered to S3, please be aware you also need to follow-up with patch in
|
# need to be transfered to S3, please be aware you also need to follow-up
|
||||||
# the actual beetmoverscript logic that lies under
|
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
|
||||||
# https://github.com/mozilla-releng/beetmoverscript/. See example in bug
|
# See example in bug 1348286
|
||||||
# 1348286
|
|
||||||
_DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [
|
_DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [
|
||||||
"balrog_props.json",
|
"balrog_props.json",
|
||||||
"target.common.tests.zip",
|
"target.common.tests.zip",
|
||||||
|
|
@ -42,16 +41,32 @@ _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [
|
||||||
"host/bin/mar",
|
"host/bin/mar",
|
||||||
"host/bin/mbsdiff",
|
"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 = [
|
_DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_EN_US = [
|
||||||
"update/target.complete.mar",
|
"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 = [
|
_DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_L10N = [
|
||||||
"target.langpack.xpi",
|
"target.langpack.xpi",
|
||||||
"balrog_props.json",
|
"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 = [
|
_DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_L10N = [
|
||||||
"target.complete.mar",
|
"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 = [
|
_MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [
|
||||||
"en-US/target.common.tests.zip",
|
"en-US/target.common.tests.zip",
|
||||||
"en-US/target.cppunittest.tests.zip",
|
"en-US/target.cppunittest.tests.zip",
|
||||||
|
|
@ -72,6 +87,10 @@ _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [
|
||||||
"en-US/robocop.apk",
|
"en-US/robocop.apk",
|
||||||
"en-US/target.jsshell.zip",
|
"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 = [
|
_MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI = [
|
||||||
"balrog_props.json",
|
"balrog_props.json",
|
||||||
"target.common.tests.zip",
|
"target.common.tests.zip",
|
||||||
|
|
@ -92,14 +111,26 @@ _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI = [
|
||||||
"robocop.apk",
|
"robocop.apk",
|
||||||
"target.jsshell.zip",
|
"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 = [
|
_MOBILE_UPSTREAM_ARTIFACTS_SIGNED_EN_US = [
|
||||||
"en-US/target.apk",
|
"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 = [
|
_MOBILE_UPSTREAM_ARTIFACTS_SIGNED_MULTI = [
|
||||||
"target.apk",
|
"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 = {
|
UPSTREAM_ARTIFACT_UNSIGNED_PATHS = {
|
||||||
'linux64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
|
'linux64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
|
||||||
'linux-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,
|
'android-api-15-old-id-nightly-multi': _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI,
|
||||||
'macosx64-nightly-l10n': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_L10N,
|
'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 = {
|
UPSTREAM_ARTIFACT_SIGNED_PATHS = {
|
||||||
'linux64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_EN_US + [
|
'linux64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_EN_US + [
|
||||||
"target.tar.bz2",
|
"target.tar.bz2",
|
||||||
|
|
|
||||||
|
|
@ -92,6 +92,10 @@ def make_beetmover_checksums_description(config, jobs):
|
||||||
|
|
||||||
|
|
||||||
def generate_upstream_artifacts(refs, platform, locale=None):
|
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 = [
|
common_paths = [
|
||||||
"public/target.checksums",
|
"public/target.checksums",
|
||||||
"public/target.checksums.asc",
|
"public/target.checksums.asc",
|
||||||
|
|
|
||||||
|
|
@ -17,11 +17,10 @@ from voluptuous import Any, Required, Optional
|
||||||
import logging
|
import logging
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
# For developers: if you are adding any new artifacts here that need to be
|
# Until bug 1331141 is fixed, if you are adding any new artifacts here that
|
||||||
# transfered to S3, please be aware you also need to follow-up with patch in
|
# need to be transfered to S3, please be aware you also need to follow-up
|
||||||
# the actual beetmoverscript logic that lies under
|
# with a beetmover patch in https://github.com/mozilla-releng/beetmoverscript/.
|
||||||
# https://github.com/mozilla-releng/beetmoverscript/. See example in bug
|
# See example in bug 1348286
|
||||||
# 1348286
|
|
||||||
_DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [
|
_DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [
|
||||||
"balrog_props.json",
|
"balrog_props.json",
|
||||||
"target.common.tests.zip",
|
"target.common.tests.zip",
|
||||||
|
|
@ -44,25 +43,49 @@ _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [
|
||||||
"host/bin/mar",
|
"host/bin/mar",
|
||||||
"host/bin/mbsdiff",
|
"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 = [
|
_DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_EN_US = [
|
||||||
"update/target.complete.mar",
|
"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 = [
|
_DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_L10N = [
|
||||||
"target.langpack.xpi",
|
"target.langpack.xpi",
|
||||||
"balrog_props.json",
|
"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 = [
|
_DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_L10N = [
|
||||||
"target.complete.mar",
|
"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 = {
|
UPSTREAM_ARTIFACT_UNSIGNED_PATHS = {
|
||||||
'macosx64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
|
'macosx64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US,
|
||||||
'macosx64-nightly-l10n': _DESKTOP_UPSTREAM_ARTIFACTS_UNSIGNED_L10N,
|
'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 = {
|
UPSTREAM_ARTIFACT_SIGNED_PATHS = {
|
||||||
'macosx64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_EN_US,
|
'macosx64-nightly': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_EN_US,
|
||||||
'macosx64-nightly-l10n': _DESKTOP_UPSTREAM_ARTIFACTS_SIGNED_L10N,
|
'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 = {
|
UPSTREAM_ARTIFACT_REPACKAGE_PATHS = {
|
||||||
'macosx64-nightly': ["target.dmg"],
|
'macosx64-nightly': ["target.dmg"],
|
||||||
'macosx64-nightly-l10n': ["target.dmg"],
|
'macosx64-nightly-l10n': ["target.dmg"],
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
[display-none.html]
|
[display-none.html]
|
||||||
type: testharness
|
type: testharness
|
||||||
disabled: https://bugzilla.mozilla.org/show_bug.cgi?id=1358668
|
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
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
[multiple-thresholds.html]
|
[multiple-thresholds.html]
|
||||||
type: testharness
|
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
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
[root-margin.html]
|
[root-margin.html]
|
||||||
type: testharness
|
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
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
[same-document-no-root.html]
|
[same-document-no-root.html]
|
||||||
type: testharness
|
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
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
[same-document-zero-size-target.html]
|
[same-document-zero-size-target.html]
|
||||||
type: testharness
|
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
|
||||||
|
|
|
||||||
|
|
@ -13233,5 +13233,17 @@
|
||||||
"n_buckets": 100,
|
"n_buckets": 100,
|
||||||
"bug_numbers": [1366640],
|
"bug_numbers": [1366640],
|
||||||
"description": "Time (ms) VideoFrameContainer::ClearFutureFrames spent holding a lock."
|
"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."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue