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 @@
-
+
-
+
-
+
@@ -76,7 +82,9 @@
-
+
-
+
-
+
-
+