author | Carsten "Tomcat" Book <cbook@mozilla.com> |
Fri, 21 Oct 2016 16:56:14 +0200 | |
changeset 318824 | 28681d252003e3110105473754da2f4097cb83a6 |
parent 318817 | fcadf6ec5ccf67c480047de89b5d063116938fea (current diff) |
parent 318823 | 75c306c21c0f719b590d4ebd63e1ca7ad8981adc (diff) |
child 318938 | 806054dd12bdcbdee81dbd75f1583156cef9b649 |
push id | 30853 |
push user | cbook@mozilla.com |
push date | Fri, 21 Oct 2016 14:56:24 +0000 |
treeherder | mozilla-central@28681d252003 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | merge |
milestone | 52.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/browser/components/preferences/in-content/privacy.js +++ b/browser/components/preferences/in-content/privacy.js @@ -646,32 +646,32 @@ var gPrivacyPane = { gSubDialog.open("chrome://browser/content/preferences/sanitize.xul", "resizable=no"); }, /** * Displays a dialog from which individual parts of private data may be * cleared. */ - clearPrivateDataNow: function (aClearEverything) - { + clearPrivateDataNow: function (aClearEverything) { var ts = document.getElementById("privacy.sanitize.timeSpan"); var timeSpanOrig = ts.value; - if (aClearEverything) + + if (aClearEverything) { ts.value = 0; + } - const Cc = Components.classes, Ci = Components.interfaces; - var glue = Cc["@mozilla.org/browser/browserglue;1"] - .getService(Ci.nsIBrowserGlue); - glue.sanitize(window); + gSubDialog.open("chrome://browser/content/sanitize.xul", "resizable=no", null, () => { + // reset the timeSpan pref + if (aClearEverything) { + ts.value = timeSpanOrig; + } - // reset the timeSpan pref - if (aClearEverything) - ts.value = timeSpanOrig; - Services.obs.notifyObservers(null, "clear-private-data", null); + Services.obs.notifyObservers(null, "clear-private-data", null); + }); }, /** * Enables or disables the "Settings..." button depending * on the privacy.sanitize.sanitizeOnShutdown preference value */ _updateSanitizeSettingsButton: function () { var settingsButton = document.getElementById("clearDataSettings");
--- a/browser/components/preferences/in-content/subdialogs.js +++ b/browser/components/preferences/in-content/subdialogs.js @@ -168,16 +168,28 @@ var gSubDialog = { this.injectXMLStylesheet(styleSheetURL); } // Provide the ability for the dialog to know that it is being loaded "in-content". this._frame.contentDocument.documentElement.setAttribute("subdialog", "true"); this._frame.contentWindow.addEventListener("dialogclosing", this); + let oldResizeBy = this._frame.contentWindow.resizeBy; + this._frame.contentWindow.resizeBy = function(resizeByWidth, resizeByHeight) { + // Only handle resizeByHeight currently. + let frameHeight = gSubDialog._frame.clientHeight; + let boxMinHeight = parseFloat(getComputedStyle(gSubDialog._box).minHeight, 10); + + gSubDialog._frame.style.height = (frameHeight + resizeByHeight) + "px"; + gSubDialog._box.style.minHeight = (boxMinHeight + resizeByHeight) + "px"; + + oldResizeBy.call(gSubDialog._frame.contentWindow, resizeByWidth, resizeByHeight); + }; + // Make window.close calls work like dialog closing. let oldClose = this._frame.contentWindow.close; this._frame.contentWindow.close = function() { var closingEvent = gSubDialog._closingEvent; if (!closingEvent) { closingEvent = new CustomEvent("dialogclosing", { bubbles: true, detail: { button: null }, @@ -268,18 +280,20 @@ var gSubDialog = { this._frame.style.height = frameHeight; this._box.style.minHeight = "calc(" + (boxVerticalBorder + groupBoxTitleHeight + boxVerticalPadding) + "px + " + frameMinHeight + ")"; this._overlay.style.visibility = "visible"; this._overlay.style.opacity = ""; // XXX: focus hack continued from _onContentLoaded - this._resizeObserver = new MutationObserver(this._onResize); - this._resizeObserver.observe(this._box, {attributes: true}); + if (this._box.getAttribute("resizable") == "true") { + this._resizeObserver = new MutationObserver(this._onResize); + this._resizeObserver.observe(this._box, {attributes: true}); + } this._trapFocus(); }, _onResize: function(mutations) { let frame = gSubDialog._frame; // The width and height styles are needed for the initial // layout of the frame, but afterward they need to be removed
--- a/browser/themes/linux/sanitizeDialog.css +++ b/browser/themes/linux/sanitizeDialog.css @@ -51,17 +51,17 @@ } /* Progressive disclosure button */ #detailsExpanderWrapper { padding: 0; margin-top: 6px; margin-bottom: 6px; - margin-inline-start: -6px; + margin-inline-start: -4px; margin-inline-end: 0; } .expander-up, .expander-down { min-width: 0; padding: 2px 0; padding-inline-start: 2px;
--- a/browser/themes/shared/incontentprefs/preferences.inc.css +++ b/browser/themes/shared/incontentprefs/preferences.inc.css @@ -364,17 +364,16 @@ description > html|a { #dialogBox > .groupbox-body { -moz-appearance: none; padding: 20px; } #dialogFrame { -moz-box-flex: 1; /* Default dialog dimensions */ - height: 20em; width: 66ch; } .largeDialogContainer.doScroll { overflow-y: auto; -moz-box-flex: 1; }
--- a/browser/tools/mozscreenshots/mozscreenshots/extension/configurations/Preferences.jsm +++ b/browser/tools/mozscreenshots/mozscreenshots/extension/configurations/Preferences.jsm @@ -18,16 +18,17 @@ this.Preferences = { init(libDir) { let panes = [ ["paneGeneral", null], ["paneSearch", null], ["paneContent", null], ["paneApplications", null], ["panePrivacy", null], ["panePrivacy", null, DNTDialog], + ["panePrivacy", null, clearRecentHistoryDialog], ["paneSecurity", null], ["paneSync", null], ["paneAdvanced", "generalTab"], ["paneAdvanced", "dataChoicesTab"], ["paneAdvanced", "networkTab"], ["paneAdvanced", "networkTab", connectionDialog], ["paneAdvanced", "updateTab"], ["paneAdvanced", "encryptionTab"], @@ -102,16 +103,22 @@ function* DNTDialog(aBrowser) { } function* connectionDialog(aBrowser) { yield ContentTask.spawn(aBrowser, null, function* () { content.document.getElementById("connectionSettings").click(); }); } +function* clearRecentHistoryDialog(aBrowser) { + yield ContentTask.spawn(aBrowser, null, function* () { + content.document.getElementById("historyRememberClear").click(); + }); +} + function* certManager(aBrowser) { yield ContentTask.spawn(aBrowser, null, function* () { content.document.getElementById("viewCertificatesButton").click(); }); } function* deviceManager(aBrowser) { yield ContentTask.spawn(aBrowser, null, function* () {
--- a/devtools/client/framework/toolbox-options.xhtml +++ b/devtools/client/framework/toolbox-options.xhtml @@ -79,16 +79,26 @@ <label title="&options.timestampMessages.tooltip;"> <input type="checkbox" id="webconsole-timestamp-messages" data-pref="devtools.webconsole.timestampMessages"/> <span>&options.timestampMessages.label;</span> </label> </fieldset> + <fieldset id="debugger-options" class="options-groupbox"> + <legend>&options.debugger.label;</legend> + <label title="&options.sourceMaps.tooltip;"> + <input type="checkbox" + id="debugger-sourcemaps" + data-pref="devtools.debugger.client-source-maps-enabled"/> + <span>&options.sourceMaps.label;</span> + </label> + </fieldset> + <fieldset id="styleeditor-options" class="options-groupbox"> <legend>&options.styleeditor.label;</legend> <label title="&options.stylesheetSourceMaps.tooltip;"> <input type="checkbox" data-pref="devtools.styleeditor.source-maps-enabled"/> <span>&options.stylesheetSourceMaps.label;</span> </label> <label title="&options.stylesheetAutocompletion.tooltip;">
--- a/devtools/client/framework/toolbox-process-window.js +++ b/devtools/client/framework/toolbox-process-window.js @@ -66,16 +66,17 @@ function setPrefDefaults() { Services.prefs.setBoolPref("devtools.performance.ui.show-platform-data", true); Services.prefs.setBoolPref("devtools.inspector.showAllAnonymousContent", true); Services.prefs.setBoolPref("browser.dom.window.dump.enabled", true); Services.prefs.setBoolPref("devtools.command-button-noautohide.enabled", true); Services.prefs.setBoolPref("devtools.scratchpad.enabled", true); // Bug 1225160 - Using source maps with browser debugging can lead to a crash Services.prefs.setBoolPref("devtools.debugger.source-maps-enabled", false); Services.prefs.setBoolPref("devtools.debugger.new-debugger-frontend", false); + Services.prefs.setBoolPref("devtools.debugger.client-source-maps-enabled", true); } window.addEventListener("load", function() { let cmdClose = document.getElementById("toolbox-cmd-close"); cmdClose.addEventListener("command", onCloseCommand); setPrefDefaults(); connect().catch(e => { let errorMessageContainer = document.getElementById("error-message-container");
--- a/devtools/client/locales/en-US/toolbox.dtd +++ b/devtools/client/locales/en-US/toolbox.dtd @@ -154,16 +154,25 @@ - heading of the group of Web Console preferences in the options panel. --> <!ENTITY options.webconsole.label "Web Console"> <!-- LOCALIZATION NOTE (options.timestampMessages.label): This is the - label for the checkbox that toggles timestamps in the Web Console --> <!ENTITY options.timestampMessages.label "Enable timestamps"> <!ENTITY options.timestampMessages.tooltip "If you enable this option commands and output in the Web Console will display a timestamp"> +<!-- LOCALIZATION NOTE (options.debugger.label): This is the label for the + - heading of the group of Debugger preferences in the options panel. --> +<!ENTITY options.debugger.label "Debugger"> + +<!-- LOCALIZATION NOTE (options.sourceMap.label): This is the + - label for the checkbox that toggles source maps in the Debugger --> +<!ENTITY options.sourceMaps.label "Enable Source Maps"> +<!ENTITY options.sourceMaps.tooltip "If you enable this option sources will be mapped in the Debugger and Console."> + <!-- LOCALIZATION NOTE (options.styleeditor.label): This is the label for the - heading of the group of Style Editor preferences in the options - panel. --> <!ENTITY options.styleeditor.label "Style Editor"> <!-- LOCALIZATION NOTE (options.stylesheetSourceMaps.label): This is the - label for the checkbox that toggles showing original sources in the Style Editor --> <!ENTITY options.stylesheetSourceMaps.label "Show original sources">
--- a/devtools/client/preferences/devtools.js +++ b/devtools/client/preferences/devtools.js @@ -90,16 +90,17 @@ pref("devtools.debugger.enabled", true); pref("devtools.debugger.chrome-debugging-host", "localhost"); pref("devtools.debugger.chrome-debugging-port", 6080); pref("devtools.debugger.chrome-debugging-websocket", false); pref("devtools.debugger.remote-host", "localhost"); pref("devtools.debugger.remote-timeout", 20000); pref("devtools.debugger.pause-on-exceptions", false); pref("devtools.debugger.ignore-caught-exceptions", true); pref("devtools.debugger.source-maps-enabled", true); +pref("devtools.debugger.client-source-maps-enabled", true); pref("devtools.debugger.pretty-print-enabled", true); pref("devtools.debugger.auto-pretty-print", false); pref("devtools.debugger.auto-black-box", true); pref("devtools.debugger.workers", false); pref("devtools.debugger.promise", false); #if defined(NIGHTLY_BUILD) pref("devtools.debugger.new-debugger-frontend", true);
--- a/devtools/server/actors/highlighters/box-model.js +++ b/devtools/server/actors/highlighters/box-model.js @@ -1,43 +1,38 @@ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; -const { Cu } = require("chrome"); const { extend } = require("sdk/core/heritage"); const { AutoRefreshHighlighter } = require("./auto-refresh"); -const { CssGridHighlighter } = require("./css-grid"); const { CanvasFrameAnonymousContentHelper, createNode, createSVGNode, getBindingElementAndPseudo, hasPseudoClassLock, isNodeValid, moveInfobar, } = require("./utils/markup"); const { setIgnoreLayoutChanges } = require("devtools/shared/layout/utils"); const inspector = require("devtools/server/actors/inspector"); const nodeConstants = require("devtools/shared/dom-node-constants"); -const Services = require("Services"); // Note that the order of items in this array is important because it is used // for drawing the BoxModelHighlighter's path elements correctly. const BOX_MODEL_REGIONS = ["margin", "border", "padding", "content"]; const BOX_MODEL_SIDES = ["top", "right", "bottom", "left"]; // Width of boxmodelhighlighter guides const GUIDE_STROKE_WIDTH = 1; // FIXME: add ":visited" and ":link" after bug 713106 is fixed const PSEUDO_CLASSES = [":hover", ":active", ":focus"]; -const GRID_ENABLED_PREF = "layout.css.grid.enabled"; - /** * The BoxModelHighlighter draws the box model regions on top of a node. * If the node is a block box, then each region will be displayed as 1 polygon. * If the node is an inline box though, each region may be represented by 1 or * more polygons, depending on how many line boxes the inline element has. * * Usage example: * @@ -92,20 +87,16 @@ const GRID_ENABLED_PREF = "layout.css.gr * <div class="box-model-infobar-arrow box-model-infobar-arrow-bottom"/> * </div> * </div> * </div> */ function BoxModelHighlighter(highlighterEnv) { AutoRefreshHighlighter.call(this, highlighterEnv); - if (Services.prefs.getBoolPref(GRID_ENABLED_PREF)) { - this.cssGridHighlighter = new CssGridHighlighter(this.highlighterEnv); - } - this.markup = new CanvasFrameAnonymousContentHelper(this.highlighterEnv, this._buildMarkup.bind(this)); /** * Optionally customize each region's fill color by adding an entry to the * regionFill property: `highlighter.regionFill.margin = "red"; */ this.regionFill = {}; @@ -258,21 +249,16 @@ BoxModelHighlighter.prototype = extend(A }, /** * Destroy the nodes. Remove listeners. */ destroy: function () { AutoRefreshHighlighter.prototype.destroy.call(this); this.markup.destroy(); - - if (this.cssGridHighlighter) { - this.cssGridHighlighter.destroy(); - this.cssGridHighlighter = null; - } }, getElement: function (id) { return this.markup.getElement(this.ID_CLASS_PREFIX + id); }, /** * Override the AutoRefreshHighlighter's _isNodeValid method to also return true for @@ -287,38 +273,16 @@ BoxModelHighlighter.prototype = extend(A /** * Show the highlighter on a given node */ _show: function () { if (BOX_MODEL_REGIONS.indexOf(this.options.region) == -1) { this.options.region = "content"; } - // Show the CSS grid highlighter if the current node is a grid container or grid item. - if (this.cssGridHighlighter) { - this.cssGridHighlighter.hide(); - let gridNode; - if (this.currentNode && - this.currentNode.getGridFragments && - this.currentNode.getGridFragments().length) { - gridNode = this.currentNode; - } else if (this.currentNode.parentNode && - this.currentNode.parentNode.getGridFragments && - this.currentNode.parentNode.getGridFragments().length) { - gridNode = this.currentNode.parentNode; - } - - if (gridNode) { - // Display the grid highlighter for the grid container and - // hide the box model guides. - this.cssGridHighlighter.show(gridNode); - this.options.hideGuides = true; - } - } - let shown = this._update(); this._trackMutations(); this.emit("ready"); return shown; }, /** * Track the current node markup mutations so that the node info bar can be @@ -375,20 +339,16 @@ BoxModelHighlighter.prototype = extend(A */ _hide: function () { setIgnoreLayoutChanges(true); this._untrackMutations(); this._hideBoxModel(); this._hideInfobar(); - if (this.cssGridHighlighter) { - this.cssGridHighlighter.hide(); - } - setIgnoreLayoutChanges(false, this.currentNode.ownerDocument.documentElement); }, /** * Hide the infobar */ _hideInfobar: function () { this.getElement("infobar-container").setAttribute("hidden", "true");
--- a/devtools/server/actors/highlighters/css-grid.js +++ b/devtools/server/actors/highlighters/css-grid.js @@ -1,15 +1,14 @@ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; -const { Cu } = require("chrome"); const { extend } = require("sdk/core/heritage"); const { AutoRefreshHighlighter } = require("./auto-refresh"); const { CanvasFrameAnonymousContentHelper, createNode, createSVGNode, moveInfobar, } = require("./utils/markup"); @@ -41,21 +40,17 @@ const GRID_LINES_PROPERTIES = { const GRID_GAP_PATTERN_WIDTH = 14; const GRID_GAP_PATTERN_HEIGHT = 14; const GRID_GAP_PATTERN_LINE_DASH = [5, 3]; const GRID_GAP_PATTERN_STROKE_STYLE = "#9370DB"; /** * Cached used by `CssGridHighlighter.getGridGapPattern`. */ -const gCachedGridPattern = new WeakMap(); -// WeakMap key for the Row grid pattern. -const ROW_KEY = {}; -// WeakMap key for the Column grid pattern. -const COLUMN_KEY = {}; +const gCachedGridPattern = new Map(); /** * The CssGridHighlighter is the class that overlays a visual grid on top of * display:grid elements. * * Usage example: * let h = new CssGridHighlighter(env); * h.show(node, options); @@ -93,19 +88,16 @@ const COLUMN_KEY = {}; * </div> * </div> */ function CssGridHighlighter(highlighterEnv) { AutoRefreshHighlighter.call(this, highlighterEnv); this.markup = new CanvasFrameAnonymousContentHelper(this.highlighterEnv, this._buildMarkup.bind(this)); - - this.onNavigate = this.onNavigate.bind(this); - this.highlighterEnv.on("navigate", this.onNavigate); } CssGridHighlighter.prototype = extend(AutoRefreshHighlighter.prototype, { typeName: "CssGridHighlighter", ID_CLASS_PREFIX: "css-grid-", _buildMarkup() { @@ -206,19 +198,19 @@ CssGridHighlighter.prototype = extend(Au }, prefix: this.ID_CLASS_PREFIX }); return container; }, destroy() { - this.highlighterEnv.off("navigate", this.onNavigate); + AutoRefreshHighlighter.prototype.destroy.call(this); this.markup.destroy(); - AutoRefreshHighlighter.prototype.destroy.call(this); + gCachedGridPattern.clear(); }, getElement(id) { return this.markup.getElement(this.ID_CLASS_PREFIX + id); }, get ctx() { return this.canvas.getCanvasContext("2d"); @@ -226,61 +218,51 @@ CssGridHighlighter.prototype = extend(Au get canvas() { return this.getElement("canvas"); }, /** * Gets the grid gap pattern used to render the gap regions. * - * @param {Object} dimension - * Refers to the WeakMap key for the grid dimension type which is either the - * constant COLUMN or ROW. + * @param {String} dimensionType + * The grid dimension type which is either the constant COLUMNS or ROWS. * @return {CanvasPattern} grid gap pattern. */ - getGridGapPattern(dimension) { - if (gCachedGridPattern.has(dimension)) { - return gCachedGridPattern.get(dimension); + getGridGapPattern(dimensionType) { + if (gCachedGridPattern.has(dimensionType)) { + return gCachedGridPattern.get(dimensionType); } // Create the diagonal lines pattern for the rendering the grid gaps. let canvas = createNode(this.win, { nodeType: "canvas" }); canvas.width = GRID_GAP_PATTERN_WIDTH; canvas.height = GRID_GAP_PATTERN_HEIGHT; let ctx = canvas.getContext("2d"); ctx.setLineDash(GRID_GAP_PATTERN_LINE_DASH); ctx.beginPath(); ctx.translate(.5, .5); - if (dimension === COLUMN_KEY) { + if (dimensionType === COLUMNS) { ctx.moveTo(0, 0); ctx.lineTo(GRID_GAP_PATTERN_WIDTH, GRID_GAP_PATTERN_HEIGHT); } else { ctx.moveTo(GRID_GAP_PATTERN_WIDTH, 0); ctx.lineTo(0, GRID_GAP_PATTERN_HEIGHT); } ctx.strokeStyle = GRID_GAP_PATTERN_STROKE_STYLE; ctx.stroke(); let pattern = ctx.createPattern(canvas, "repeat"); - gCachedGridPattern.set(dimension, pattern); + gCachedGridPattern.set(dimensionType, pattern); return pattern; }, - /** - * Called when the page navigates. Used to clear the cached gap patterns and avoid - * using DeadWrapper objects as gap patterns the next time. - */ - onNavigate() { - gCachedGridPattern.delete(ROW_KEY); - gCachedGridPattern.delete(COLUMN_KEY); - }, - _show() { if (Services.prefs.getBoolPref(CSS_GRID_ENABLED_PREF) && !this.isGrid()) { this.hide(); return false; } return this._update(); }, @@ -615,22 +597,21 @@ CssGridHighlighter.prototype = extend(Au * The end position of the cross side of the grid line. * @param {Number} breadth * The grid line breadth value. * @param {String} dimensionType * The grid dimension type which is either the constant COLUMNS or ROWS. */ renderGridGap(linePos, startPos, endPos, breadth, dimensionType) { this.ctx.save(); + this.ctx.fillStyle = this.getGridGapPattern(dimensionType); if (dimensionType === COLUMNS) { - this.ctx.fillStyle = this.getGridGapPattern(COLUMN_KEY); this.ctx.fillRect(linePos, startPos, breadth, endPos - startPos); } else { - this.ctx.fillStyle = this.getGridGapPattern(ROW_KEY); this.ctx.fillRect(startPos, linePos, endPos - startPos, breadth); } this.ctx.restore(); }, /** * Render the grid area highlight for the given area name or for all the grid areas. @@ -724,20 +705,16 @@ exports.CssGridHighlighter = CssGridHigh * Stringify CSS Grid data as returned by node.getGridFragments. * This is useful to compare grid state at each update and redraw the highlighter if * needed. * * @param {Object} Grid Fragments * @return {String} representation of the CSS grid fragment data. */ function stringifyGridFragments(fragments = []) { - if (fragments[0] && Cu.isDeadWrapper(fragments[0])) { - return {}; - } - return JSON.stringify(fragments.map(getStringifiableFragment)); } function getStringifiableFragment(fragment) { return { cols: getStringifiableDimension(fragment.cols), rows: getStringifiableDimension(fragment.rows) };