gBrowser.treeStyleTab.dumpTreeInformation() exports the result as an object, so you can see the result like:
JSON.stringify(gBrowser.treeStyleTab.dumpTreeInformation())
via the browser console.
TreeStyleTabBrowser#init() fails to set the attribute for the tabbar internal box,
so resizing of the element is unexpectedly tracked by BrowserUIShowHideObserver
even if it is triggered by the "auto hide" feature. It causes the bug #942.
When the mouse cursor moves onth the shrunken tab bar, autohide service expands
the width of the tab bar by setting width/height attribuets. Such a "resizing"
must be ignored by BrowserUIShowHideObserver because only unexpected resizing
caused by other addons triggers "update size of the floating tab bar".
This should fix#887 partially. However, when I click the star button twice, there still be another error like:
~~~
treestyletab: doPatching: gEditItemOverlay._showHideRows is missing! utils.js:319:0
treestyletab: Failed to patch to gEditItemOverlay.initPanel: function initPanel(aInfo) {
if (typeof(aInfo) != "object" || aInfo === null)
throw new Error("aInfo must be an object.");
// For sanity ensure that the implementer has uninited the panel before
// trying to init it again, or we could end up leaking due to observers.
if (this.initialized)
this.uninitPanel(false);
let { itemId, itemGuid, isItem,
isURI, uri, title,
isBookmark, bulkTagging, uris,
visibleRows } = this._setPaneInfo(aInfo);
let showOrCollapse =
(rowId, isAppropriateForInput, nameInHiddenRows = null) => {
let visible = isAppropriateForInput;
if (visible && "hiddenRows" in aInfo && nameInHiddenRows)
visible &= aInfo.hiddenRows.indexOf(nameInHiddenRows) == -1;
if (visible)
visibleRows.add(rowId);
return !(this._element(rowId).collapsed = !visible);
};
if (showOrCollapse("nameRow", !bulkTagging, "name")) {
this._initNamePicker();
this._namePicker.readOnly = this.readOnly;
}
// In some cases we want to hide the location field, since it's not
// human-readable, but we still want to initialize it.
showOrCollapse("locationRow", isURI, "location");
if (isURI) {
this._initLocationField();
this._locationField.readOnly = this.readOnly;
}
// hide the description field for
if (showOrCollapse("descriptionRow", isItem && !this.readOnly,
"description")) {
this._initDescriptionField();
this._descriptionField.readOnly = this.readOnly;
}
if (showOrCollapse("keywordRow", isBookmark, "keyword")) {
this._initKeywordField();
this._keywordField.readOnly = this.readOnly;
}
// Collapse the tag selector if the item does not accept tags.
if (showOrCollapse("tagsRow", isURI || bulkTagging, "tags"))
this._initTagsField().catch(Components.utils.reportError);
else if (!this._element("tagsSelectorRow").collapsed)
this.toggleTagsSelector().catch(Components.utils.reportError);
// Load in sidebar.
if (showOrCollapse("loadInSidebarCheckbox", isBookmark, "loadInSidebar")) {
this._initLoadInSidebar();
}
// Folder picker.
// Technically we should check that the item is not moveable, but that's
// not cheap (we don't always have the parent), and there's no use case for
// this (it's only the Star UI that shows the folderPicker)
if (showOrCollapse("folderRow", isItem, "folderPicker")) {
let containerId = PlacesUtils.bookmarks.getFolderIdForItem(itemId);
this._initFolderMenuList(containerId);
}
// Selection count.
if (showOrCollapse("selectionCount", bulkTagging)) {
this._element("itemsCountText").value =
PlacesUIUtils.getPluralString("detailsPane.itemsCountLabel",
uris.length,
[uris.length]);
}
// Observe changes.
if (!this._observersAdded) {
PlacesUtils.bookmarks.addObserver(this, false);
window.addEventListener("unload", this, false);
this._observersAdded = true;
}
}
~~~