diff --git a/b2g/config/aries/sources.xml b/b2g/config/aries/sources.xml index 65ea4897e61..ae84a3e0165 100644 --- a/b2g/config/aries/sources.xml +++ b/b2g/config/aries/sources.xml @@ -15,11 +15,11 @@ - + - + diff --git a/b2g/config/dolphin/sources.xml b/b2g/config/dolphin/sources.xml index 6df6f66f4f2..f3eb2c75917 100644 --- a/b2g/config/dolphin/sources.xml +++ b/b2g/config/dolphin/sources.xml @@ -15,11 +15,11 @@ - + - + diff --git a/b2g/config/emulator-ics/sources.xml b/b2g/config/emulator-ics/sources.xml index c5199623eaf..b7c6964d1cd 100644 --- a/b2g/config/emulator-ics/sources.xml +++ b/b2g/config/emulator-ics/sources.xml @@ -19,12 +19,12 @@ - + - + diff --git a/b2g/config/emulator-jb/sources.xml b/b2g/config/emulator-jb/sources.xml index afe6947d7ca..1fa8c5d5d9d 100644 --- a/b2g/config/emulator-jb/sources.xml +++ b/b2g/config/emulator-jb/sources.xml @@ -17,9 +17,9 @@ - + - + diff --git a/b2g/config/emulator-kk/sources.xml b/b2g/config/emulator-kk/sources.xml index 77d5c6b37fb..369a970c54b 100644 --- a/b2g/config/emulator-kk/sources.xml +++ b/b2g/config/emulator-kk/sources.xml @@ -15,11 +15,11 @@ - + - + diff --git a/b2g/config/emulator-l/sources.xml b/b2g/config/emulator-l/sources.xml index a9796908667..b661043e04c 100644 --- a/b2g/config/emulator-l/sources.xml +++ b/b2g/config/emulator-l/sources.xml @@ -15,11 +15,11 @@ - + - + diff --git a/b2g/config/emulator/sources.xml b/b2g/config/emulator/sources.xml index c5199623eaf..b7c6964d1cd 100644 --- a/b2g/config/emulator/sources.xml +++ b/b2g/config/emulator/sources.xml @@ -19,12 +19,12 @@ - + - + diff --git a/b2g/config/flame-kk/sources.xml b/b2g/config/flame-kk/sources.xml index 1e2fadf0914..573e0005c94 100644 --- a/b2g/config/flame-kk/sources.xml +++ b/b2g/config/flame-kk/sources.xml @@ -15,11 +15,11 @@ - + - + diff --git a/b2g/config/gaia.json b/b2g/config/gaia.json index d4555d600b4..d38092b6236 100644 --- a/b2g/config/gaia.json +++ b/b2g/config/gaia.json @@ -1,9 +1,9 @@ { "git": { - "git_revision": "d7385b79e68d4ad662cacf810506e9ee53345d23", + "git_revision": "85ae6808d298a4010aaab341c66699f1b87eec9c", "remote": "https://git.mozilla.org/releases/gaia.git", "branch": "" }, - "revision": "c379332cd161e9675eedc580725f101a18be38f6", + "revision": "40beee0c2eb5e129dc5a30f0fc83f73be0eb33da", "repo_path": "integration/gaia-central" } diff --git a/b2g/config/nexus-4/sources.xml b/b2g/config/nexus-4/sources.xml index 6fd0b23fc18..6ea0fb5d959 100644 --- a/b2g/config/nexus-4/sources.xml +++ b/b2g/config/nexus-4/sources.xml @@ -17,9 +17,9 @@ - + - + diff --git a/b2g/config/nexus-5-l/sources.xml b/b2g/config/nexus-5-l/sources.xml index ad0480b3e66..c211656ca20 100644 --- a/b2g/config/nexus-5-l/sources.xml +++ b/b2g/config/nexus-5-l/sources.xml @@ -15,11 +15,11 @@ - + - + diff --git a/browser/base/content/browser-syncui.js b/browser/base/content/browser-syncui.js index 0b2146bc228..98b5dc46cb1 100644 --- a/browser/base/content/browser-syncui.js +++ b/browser/base/content/browser-syncui.js @@ -248,7 +248,7 @@ let gSyncUI = { }, handleToolbarButton: function SUI_handleStatusbarButton() { - if (this._needsSetup()) + if (this._needsSetup() || this._loginFailed()) this.openSetup(); else this.doSync(); diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 113060fb503..49a715653f8 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -6795,9 +6795,13 @@ var gIdentityHandler = { delete this._permissionList; return this._permissionList = document.getElementById("identity-popup-permission-list"); }, - get _permissionSubviewList () { - delete this._permissionSubviewList; - return this._permissionSubviewList = document.getElementById("identity-popup-permission-subview-list"); + get _permissionSubviewListPageFunctionality () { + delete this._permissionSubviewListPageFunctionality; + return this._permissionSubviewListPageFunctionality = document.getElementById("permission-subview-list-page-functionality"); + }, + get _permissionSubviewListSystemAccess () { + delete this._permissionSubviewListSystemAccess; + return this._permissionSubviewListSystemAccess = document.getElementById("permission-subview-list-system-access"); }, /** @@ -6819,7 +6823,8 @@ var gIdentityHandler = { this._identityIcon = document.getElementById("page-proxy-favicon"); this._permissionsContainer = document.getElementById("identity-popup-permissions"); this._permissionList = document.getElementById("identity-popup-permission-list"); - this._permissionSubviewList = document.getElementById("identity-popup-permission-subview-list"); + this._permissionSubviewListPageFunctionality = document.getElementById("permission-subview-list-page-functionality"); + this._permissionSubviewListSystemAccess = document.getElementById("permission-subview-list-system-access"); }, /** @@ -7290,26 +7295,33 @@ var gIdentityHandler = { }, updateSitePermissions: function () { - while (this._permissionList.hasChildNodes()) - this._permissionList.removeChild(this._permissionList.lastChild); - - while (this._permissionSubviewList.hasChildNodes()) - this._permissionSubviewList.removeChild(this._permissionSubviewList.lastChild); + // Clear all lists and then repopulate them. + this._permissionList.textContent = ""; + this._permissionSubviewListPageFunctionality.textContent = ""; + this._permissionSubviewListSystemAccess.textContent = ""; let uri = gBrowser.currentURI; - for (let permission of SitePermissions.listPermissions()) { + for (let permission of SitePermissions.listPageFunctionalityPermissions()) { let state = SitePermissions.get(uri, permission); let item = this._createPermissionItem(permission, state); + this._permissionSubviewListPageFunctionality.appendChild(item); + } + for (let permission of SitePermissions.listSystemAccessPermissions()) { + let state = SitePermissions.get(uri, permission); + let item = this._createPermissionItem(permission, state); + this._permissionSubviewListSystemAccess.appendChild(item); + } + + for (let permission of SitePermissions.listPermissions()) { // Add to the main view only if there is a known / non-default // value for the permission for this site. + let state = SitePermissions.get(uri, permission); if (state != SitePermissions.UNKNOWN) { - this._permissionList.appendChild(item.cloneNode(true)); + let item = this._createPermissionItem(permission, state); + this._permissionList.appendChild(item); } - - // Add all permissions to the subview. - this._permissionSubviewList.appendChild(item); } this._permissionsContainer.hidden = !this._permissionList.hasChildNodes(); diff --git a/browser/base/content/test/general/browser_permissions.js b/browser/base/content/test/general/browser_permissions.js index d74f6db6931..611d53854ee 100644 --- a/browser/base/content/test/general/browser_permissions.js +++ b/browser/base/content/test/general/browser_permissions.js @@ -46,14 +46,14 @@ add_task(function* testSubviewListing() { info("Opening control center and expanding permissions subview"); gIdentityHandler._identityBox.click(); - let menulists = gIdentityHandler._permissionSubviewList.querySelectorAll("menulist"); - let perms = SitePermissions.listPermissions(); + info("Checking 'Page Functionality' permissions"); + let pageFunctionalityMenulists = gIdentityHandler._permissionSubviewListPageFunctionality.querySelectorAll("menulist"); + let pageFunctionalityPerms = SitePermissions.listPageFunctionalityPermissions(); + is(pageFunctionalityMenulists.length, pageFunctionalityPerms.length, "One menulist for each permission"); - is(menulists.length, perms.length, "One menulist for each permission"); - - for (let i = 0; i < menulists.length; i++) { - let menulist = menulists[i]; - let perm = perms[i]; + for (let i = 0; i < pageFunctionalityMenulists.length; i++) { + let menulist = pageFunctionalityMenulists[i]; + let perm = pageFunctionalityPerms[i]; let expectedValue = SitePermissions.get(gBrowser.currentURI, perm); if (expectedValue == SitePermissions.UNKNOWN) { expectedValue = SitePermissions.getDefault(perm); @@ -62,5 +62,23 @@ add_task(function* testSubviewListing() { is(menulist.id, "identity-popup-permission:" + perm, "Correct id for menulist: " + perm); is(menulist.value, expectedValue, "Correct value on menulist: " + perm); } + + info("Checking 'System Access' permissions"); + let systemAccessMenulists = gIdentityHandler._permissionSubviewListSystemAccess.querySelectorAll("menulist"); + let systemAccessPerms = SitePermissions.listSystemAccessPermissions(); + is(systemAccessMenulists.length, systemAccessPerms.length, "One menulist for each permission"); + + for (let i = 0; i < systemAccessMenulists.length; i++) { + let menulist = systemAccessMenulists[i]; + let perm = systemAccessPerms[i]; + let expectedValue = SitePermissions.get(gBrowser.currentURI, perm); + if (expectedValue == SitePermissions.UNKNOWN) { + expectedValue = SitePermissions.getDefault(perm); + } + + is(menulist.id, "identity-popup-permission:" + perm, "Correct id for menulist: " + perm); + is(menulist.value, expectedValue, "Correct value on menulist: " + perm); + } + gIdentityHandler._identityPopup.hidden = true; }); diff --git a/browser/components/controlcenter/content/panel.inc.xul b/browser/components/controlcenter/content/panel.inc.xul index 5992b3048bd..de1641d4b86 100644 --- a/browser/components/controlcenter/content/panel.inc.xul +++ b/browser/components/controlcenter/content/panel.inc.xul @@ -172,7 +172,16 @@ - + + diff --git a/browser/components/loop/content/css/panel.css b/browser/components/loop/content/css/panel.css index 7c279082cee..048633cb6d9 100644 --- a/browser/components/loop/content/css/panel.css +++ b/browser/components/loop/content/css/panel.css @@ -542,11 +542,11 @@ html[dir="rtl"] .room-entry-call-btn { html[dir="rtl"] .room-entry-context-actions > .dropdown-menu { right: auto; - left: 45px; + left: 21px; } .room-entry-context-actions > .dropdown-menu { - right: 45px; + right: 21px; bottom: auto; left: auto; } diff --git a/browser/components/nsBrowserGlue.js b/browser/components/nsBrowserGlue.js index 1d7649d037d..4ad75524ff8 100644 --- a/browser/components/nsBrowserGlue.js +++ b/browser/components/nsBrowserGlue.js @@ -175,6 +175,9 @@ XPCOMUtils.defineLazyModuleGetter(this, "ExtensionManagement", XPCOMUtils.defineLazyModuleGetter(this, "AppConstants", "resource://gre/modules/AppConstants.jsm"); +XPCOMUtils.defineLazyServiceGetter(this, "WindowsUIUtils", + "@mozilla.org/windows-ui-utils;1", "nsIWindowsUIUtils"); + const PREF_PLUGINS_NOTIFYUSER = "plugins.update.notifyUser"; const PREF_PLUGINS_UPDATEURL = "plugins.update.url"; @@ -507,6 +510,12 @@ BrowserGlue.prototype = { case "autocomplete-did-enter-text": this._handleURLBarTelemetry(subject.QueryInterface(Ci.nsIAutoCompleteInput)); break; + case "tablet-mode-change": + if (data == "tablet-mode") { + Services.telemetry.getHistogramById("FX_TABLET_MODE_USED_DURING_SESSION") + .add(1); + } + break; } }, @@ -613,6 +622,7 @@ BrowserGlue.prototype = { os.addObserver(this, "flash-plugin-hang", false); os.addObserver(this, "xpi-signature-changed", false); os.addObserver(this, "autocomplete-did-enter-text", false); + os.addObserver(this, "tablet-mode-change", false); ExtensionManagement.registerScript("chrome://browser/content/ext-utils.js"); ExtensionManagement.registerScript("chrome://browser/content/ext-browserAction.js"); @@ -668,6 +678,7 @@ BrowserGlue.prototype = { os.removeObserver(this, "flash-plugin-hang"); os.removeObserver(this, "xpi-signature-changed"); os.removeObserver(this, "autocomplete-did-enter-text"); + os.removeObserver(this, "tablet-mode-change"); }, _onAppDefaults: function BG__onAppDefaults() { @@ -1041,6 +1052,13 @@ BrowserGlue.prototype = { let scaling = aWindow.devicePixelRatio * 100; Services.telemetry.getHistogramById(SCALING_PROBE_NAME).add(scaling); } + +#ifdef XP_WIN + if (WindowsUIUtils.inTabletMode) { + Services.telemetry.getHistogramById("FX_TABLET_MODE_USED_DURING_SESSION") + .add(1); + } +#endif }, // the first browser window has finished initializing diff --git a/browser/components/places/PlacesUIUtils.jsm b/browser/components/places/PlacesUIUtils.jsm index 8faaa9d5340..07a4126ab84 100644 --- a/browser/components/places/PlacesUIUtils.jsm +++ b/browser/components/places/PlacesUIUtils.jsm @@ -461,21 +461,17 @@ this.PlacesUIUtils = { showBookmarkDialog: function PUIU_showBookmarkDialog(aInfo, aParentWindow) { // Preserve size attributes differently based on the fact the dialog has - // a folder picker or not. If the picker is visible, the dialog should - // be resizable since it may not show enough content for the folders - // hierarchy. + // a folder picker or not, since it needs more horizontal space than the + // other controls. let hasFolderPicker = !("hiddenRows" in aInfo) || aInfo.hiddenRows.indexOf("folderPicker") == -1; - // Use a different chrome url, since this allows to persist different sizes, - // based on resizability of the dialog. + // Use a different chrome url to persist different sizes. let dialogURL = hasFolderPicker ? "chrome://browser/content/places/bookmarkProperties2.xul" : "chrome://browser/content/places/bookmarkProperties.xul"; - let features = - "centerscreen,chrome,modal,resizable=" + (hasFolderPicker ? "yes" : "no"); - - aParentWindow.openDialog(dialogURL, "", features, aInfo); + let features = "centerscreen,chrome,modal,resizable=yes"; + aParentWindow.openDialog(dialogURL, "", features, aInfo); return ("performed" in aInfo && aInfo.performed); }, diff --git a/browser/components/places/content/bookmarkProperties.js b/browser/components/places/content/bookmarkProperties.js index 940443dd7f4..fbcafd55a3d 100644 --- a/browser/components/places/content/bookmarkProperties.js +++ b/browser/components/places/content/bookmarkProperties.js @@ -72,6 +72,8 @@ const LIVEMARK_CONTAINER = 2; const ACTION_EDIT = 0; const ACTION_ADD = 1; +let elementsHeight = new Map(); + var BookmarkPropertiesPanel = { /** UI Text Strings */ @@ -271,6 +273,43 @@ var BookmarkPropertiesPanel = { var acceptButton = document.documentElement.getButton("accept"); acceptButton.label = this._getAcceptLabel(); + // Do not use sizeToContent, otherwise, due to bug 90276, the dialog will + // grow at every opening. + // Since elements can be uncollapsed asynchronously, we must observe their + // mutations and resize the dialog using a cached element size. + this._height = window.outerHeight; + this._mutationObserver = new MutationObserver(mutations => { + for (let mutation of mutations) { + let target = mutation.target; + let id = target.id; + if (!/^editBMPanel_.*(Row|Checkbox)$/.test(id)) + continue; + + let collapsed = target.getAttribute("collapsed") === "true"; + let wasCollapsed = mutation.oldValue === "true"; + if (collapsed == wasCollapsed) + continue; + + if (collapsed) { + this._height -= elementsHeight.get(id); + elementsHeight.delete(id); + } else { + elementsHeight.set(id, target.boxObject.height); + this._height += elementsHeight.get(id); + } + window.resizeTo(window.outerWidth, this._height); + } + }); + + this._mutationObserver.observe(document, + { subtree: true, + attributeOldValue: true, + attributeFilter: ["collapsed"] }); + + // Some controls are flexible and we want to update their cached size when + // the dialog is resized. + window.addEventListener("resize", this); + this._beginBatch(); switch (this._action) { @@ -300,25 +339,6 @@ var BookmarkPropertiesPanel = { break; } - // Adjust the dialog size to the changes done by initPanel. This is necessary because - // initPanel, which shows and hides elements, may run after some async work was done - // here - i.e. after the DOM load event was processed. - window.sizeToContent(); - - // When collapsible elements change their collapsed attribute we must - // resize the dialog. - // sizeToContent is not usable due to bug 90276, so we'll use resizeTo - // instead and cache the element size. See WSucks in the legacy - // UI code (addBookmark2.js). - if (!this._element("tagsRow").collapsed) { - this._element("tagsSelectorRow") - .addEventListener("DOMAttrModified", this, false); - } - if (!this._element("folderRow").collapsed) { - this._element("folderTreeRow") - .addEventListener("DOMAttrModified", this, false); - } - if (!gEditItemOverlay.readOnly) { // Listen on uri fields to enable accept button if input is valid if (this._itemType == BOOKMARK_ITEM) { @@ -330,12 +350,9 @@ var BookmarkPropertiesPanel = { } } } - - window.sizeToContent(); }), // nsIDOMEventListener - _elementsHeight: [], handleEvent: function BPP_handleEvent(aEvent) { var target = aEvent.target; switch (aEvent.type) { @@ -347,24 +364,11 @@ var BookmarkPropertiesPanel = { .getButton("accept").disabled = !this._inputIsValid(); } break; - - case "DOMAttrModified": - // this is called when collapsing a node, but also its direct children, - // we only need to resize when the original node changes. - if ((target.id == "editBMPanel_tagsSelectorRow" || - target.id == "editBMPanel_folderTreeRow") && - aEvent.attrName == "collapsed" && - target == aEvent.originalTarget) { - var id = target.id; - var newHeight = window.outerHeight; - if (aEvent.newValue) // is collapsed - newHeight -= this._elementsHeight[id]; - else { - this._elementsHeight[id] = target.boxObject.height; - newHeight += this._elementsHeight[id]; - } - - window.resizeTo(window.outerWidth, newHeight); + case "resize": + for (let [id, oldHeight] of elementsHeight) { + let newHeight = document.getElementById(id).boxObject.height; + this._height += - oldHeight + newHeight; + elementsHeight.set(id, newHeight); } break; } @@ -418,12 +422,13 @@ var BookmarkPropertiesPanel = { onDialogUnload() { // gEditItemOverlay does not exist anymore here, so don't rely on it. + this._mutationObserver.disconnect(); + delete this._mutationObserver; + + window.removeEventListener("resize", this); + // Calling removeEventListener with arguments which do not identify any // currently registered EventListener on the EventTarget has no effect. - this._element("tagsSelectorRow") - .removeEventListener("DOMAttrModified", this, false); - this._element("folderTreeRow") - .removeEventListener("DOMAttrModified", this, false); this._element("locationField") .removeEventListener("input", this, false); }, @@ -578,48 +583,44 @@ var BookmarkPropertiesPanel = { childItemsTransactions); }, - /** - * Returns a transaction for creating a new live-bookmark item representing - * the various fields and opening arguments of the dialog. - */ - _getCreateNewLivemarkTransaction: - function BPP__getCreateNewLivemarkTransaction(aContainer, aIndex) { - return new PlacesCreateLivemarkTransaction(this._feedURI, this._siteURI, - this._title, - aContainer, aIndex); - }, - - _createNewItem: function BPP__getCreateItemTransaction() { - var [container, index] = this._getInsertionPointDetails(); - var txn; - + _createNewItem: Task.async(function* () { + let [container, index] = this._getInsertionPointDetails(); + let txn; switch (this._itemType) { case BOOKMARK_FOLDER: txn = this._getCreateNewFolderTransaction(container, index); break; case LIVEMARK_CONTAINER: - txn = this._getCreateNewLivemarkTransaction(container, index); + txn = new PlacesCreateLivemarkTransaction(this._feedURI, this._siteURI, + this._title, container, index); break; default: // BOOKMARK_ITEM txn = this._getCreateNewBookmarkTransaction(container, index); } PlacesUtils.transactionManager.doTransaction(txn); - this._itemId = PlacesUtils.bookmarks.getIdForItemAt(container, index); + // This is a temporary hack until we use PlacesTransactions.jsm + if (txn._promise) { + yield txn._promise; + } + + let folderGuid = yield PlacesUtils.promiseItemGuid(container); + let bm = yield PlacesUtils.bookmarks.fetch({ + parentGuid: folderGuid, + index: PlacesUtils.bookmarks.DEFAULT_INDEX + }); + this._itemId = yield PlacesUtils.promiseItemId(bm.guid); return Object.freeze({ itemId: this._itemId, - get bookmarkGuid() { - throw new Error("Node-like bookmarkGuid getter called even though " + - "async transactions are disabled"); - }, + bookmarkGuid: bm.guid, title: this._title, uri: this._uri ? this._uri.spec : "", type: this._itemType == BOOKMARK_ITEM ? Ci.nsINavHistoryResultNode.RESULT_TYPE_URI : Ci.nsINavHistoryResultNode.RESULT_TYPE_FOLDER }); - }, + }), _promiseNewItem: Task.async(function* () { if (!PlacesUIUtils.useAsyncTransactions) diff --git a/browser/components/places/content/editBookmarkOverlay.js b/browser/components/places/content/editBookmarkOverlay.js index 4509d84a819..75aebdfdfac 100644 --- a/browser/components/places/content/editBookmarkOverlay.js +++ b/browser/components/places/content/editBookmarkOverlay.js @@ -34,6 +34,12 @@ let gEditItemOverlay = { let isItem = itemId != -1; let isFolderShortcut = isItem && node.type == Ci.nsINavHistoryResultNode.RESULT_TYPE_FOLDER_SHORTCUT; + let isTag = node && PlacesUtils.nodeIsTagQuery(node); + if (isTag) { + itemId = PlacesUtils.getConcreteItemId(node); + // For now we don't have access to the item guid synchronously for tags, + // so we'll need to fetch it later. + } let isURI = node && PlacesUtils.nodeIsURI(node); let uri = isURI ? NetUtil.newURI(node.uri) : null; let title = node ? node.title : null; @@ -55,7 +61,7 @@ let gEditItemOverlay = { isURI, uri, title, isBookmark, isFolderShortcut, isParentReadOnly, bulkTagging, uris, - visibleRows, postData }; + visibleRows, postData, isTag }; }, get initialized() { @@ -89,12 +95,13 @@ let gEditItemOverlay = { // This pane is read-only if: // * the panel is not initialized // * the node is a folder shortcut - // * the node is not bookmarked - // * the node is child of a read-only container and is not a bookmarked URI + // * the node is not bookmarked and not a tag container + // * the node is child of a read-only container and is not a bookmarked + // URI nor a tag container return !this.initialized || this._paneInfo.isFolderShortcut || - !this._paneInfo.isItem || - (this._paneInfo.isParentReadOnly && !this._paneInfo.isBookmark); + (!this._paneInfo.isItem && !this._paneInfo.isTag) || + (this._paneInfo.isParentReadOnly && !this._paneInfo.isBookmark && !this._paneInfo.isTag); }, // the first field which was edited after this panel was initialized for @@ -518,7 +525,7 @@ let gEditItemOverlay = { }, onNamePickerChange() { - if (this.readOnly || !this._paneInfo.isItem) + if (this.readOnly || !(this._paneInfo.isItem || this._paneInfo.isTag)) return; // Here we update either the item title or its cached static title @@ -536,9 +543,13 @@ let gEditItemOverlay = { PlacesUtils.transactionManager.doTransaction(txn); return; } - let guid = this._paneInfo.itemGuid; - PlacesTransactions.EditTitle({ guid, title: newTitle }) - .transact().catch(Components.utils.reportError); + Task.spawn(function* () { + let guid = this._paneInfo.isTag + ? (yield PlacesUtils.promiseItemGuid(this._paneInfo.itemId)) + : this._paneInfo.itemGuid; + PlacesTransactions.EditTitle({ guid, title: newTitle }) + .transact().catch(Components.utils.reportError); + }).catch(Cu.reportError); } }, diff --git a/browser/components/places/content/editBookmarkOverlay.xul b/browser/components/places/content/editBookmarkOverlay.xul index 2f6f8e7bc00..140e752c048 100644 --- a/browser/components/places/content/editBookmarkOverlay.xul +++ b/browser/components/places/content/editBookmarkOverlay.xul @@ -24,7 +24,9 @@ - + - + - + - + - + - + - +