Output debug log to the browser console also

This commit is contained in:
YUKI Hiroshi 2016-02-10 19:10:46 +09:00
parent 120dc6b522
commit e531d8cd93
11 changed files with 197 additions and 178 deletions

View File

@ -8,9 +8,11 @@ XPCOMUtils.defineLazyModuleGetter(this,
let { ReferenceCounter } = Components.utils.import('resource://treestyletab-modules/ReferenceCounter.js', {});
let { inherit } = Components.utils.import('resource://treestyletab-modules/lib/inherit.jsm', {});
function mydump(aString) {
if (TreeStyleTabUtils.isDebugging('bookmark'))
dump(aString);
function log(...aArgs) {
TreeStyleTabUtils.log.apply(utils, ['bookmark'].concat(aArgs));
}
function logWithStackTrace(...aArgs) {
TreeStyleTabUtils.logWithStackTrace.apply(utils, ['bookmark'].concat(aArgs));
}
var TreeStyleTabBookmarksServiceEditable = inherit(TreeStyleTabBookmarksUIService, {
@ -84,7 +86,7 @@ var TreeStyleTabBookmarksServiceEditable = inherit(TreeStyleTabBookmarksUIServic
TreeStyleTabBookmarksServiceEditable.saveParentFor(gEditItemOverlay.itemId, true);
}
catch(e) {
mydump(e+'\n');
log(e);
}
return this.__treestyletab__onDialogAccept.apply(this, aArgs);
};
@ -92,7 +94,7 @@ var TreeStyleTabBookmarksServiceEditable = inherit(TreeStyleTabBookmarksUIServic
BookmarkPropertiesPanel.__treestyletab__endBatch = BookmarkPropertiesPanel._endBatch;
BookmarkPropertiesPanel._endBatch = function(...aArgs) {
var id = this.__treestyletab__itemId || gEditItemOverlay.itemId;
mydump('BookmarkPropertiesPanel._endBatch for '+id+'\n');
log('BookmarkPropertiesPanel._endBatch for '+id);
var batching = this._batching;
var result = this.__treestyletab__endBatch.apply(this, aArgs);
if (id >= 0 && !batching && !this._batching) {
@ -101,7 +103,7 @@ var TreeStyleTabBookmarksServiceEditable = inherit(TreeStyleTabBookmarksUIServic
TreeStyleTabBookmarksServiceEditable.saveParentFor(id, true);
}
catch(e) {
mydump(e+'\n');
log(e);
}
finally {
this._batching = false;

View File

@ -57,6 +57,12 @@ XPCOMUtils.defineLazyGetter(this, 'prefs', function() {
return window['piro.sakura.ne.jp'].prefs;
});
function log(...aArgs) {
utils.log.apply(utils, ['autoHide'].concat(aArgs));
}
function logWithStackTrace(...aArgs) {
utils.logWithStackTrace.apply(utils, ['autoHide'].concat(aArgs));
}
var AutoHideConstants = Object.freeze(inherit(TreeStyleTabConstants, {
kMODE : 'treestyletab-tabbar-autohide-mode',
@ -570,11 +576,10 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
extraInfo.push('expanded-by-unknown');
if (this.lastMouseDownTarget)
extraInfo.push('mousedown');
dump('showHideOnMouseMove: ' +
log('showHideOnMouseMove: ' +
'('+aCoordinates.screenX + ', ' + aCoordinates.screenY + ') => ' +
humanReadablePosition.join(', ') +
(extraInfo.length ? ('[' + extraInfo.join(', ') + ']') : '') +
'\n');
(extraInfo.length ? ('[' + extraInfo.join(', ') + ']') : ''));
}
if (sv.isPopupShown() ||
@ -905,10 +910,9 @@ AutoHideBrowser.prototype = inherit(AutoHideBase.prototype, {
let givenReason = this._getHumanReadableReason(aReason);
let unifiedReason = this._getHumanReadableReason(this.showHideReason);
if (this.expanded)
dump('autoHide: show by ' + aReason + '(' + givenReason + ' / ' + unifiedReason + ')\n');
logWithStackTrace('autoHide: show by ' + aReason + '(' + givenReason + ' / ' + unifiedReason + ')');
else
dump('autoHide: hide by ' + aReason + '(' + givenReason + ' / ' + unifiedReason + ')\n');
dump((new Error()).stack.replace(/^/gm, ' ').replace(/\s+$/, '') + '\n');
logWithStackTrace('autoHide: hide by ' + aReason + '(' + givenReason + ' / ' + unifiedReason + ')');
}
this.fireStateChangingEvent();

View File

@ -82,6 +82,13 @@ else {
this.AeroPeek = null;
}
function log(...aArgs) {
utils.log.apply(utils, ['base'].concat(aArgs));
}
function logWithStackTrace(...aArgs) {
utils.logWithStackTrace.apply(utils, ['base'].concat(aArgs));
}
var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
tabsHash : null,
@ -148,8 +155,7 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
this.overrideExtensions();
}
catch(e) {
if (utils.isDebugging('base'))
dump(e+'\n');
log(e);
}
},
_initialized : false,
@ -505,8 +511,7 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
var message = 'ERROR: accessed after destruction!';
var error = new Error(message);
if (utils.isDebugging('base'))
dump(message+'\n'+error.stack.replace(/^/gm, ' ')+'\n');
logWithStackTrace(message);
throw error;
},
@ -877,10 +882,7 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
{
var strip = this.tabStrip;
if (!strip) {
if (utils.isDebugging('base')) {
dump('FAILED TO SET TABSTRIP ATTRIBUTE ' + aAttr + '=' + aValue + '\n');
dump((new Error()).stack.replace(/^/gm, ' ') + '\n');
}
logWithStackTrace('FAILED TO SET TABSTRIP ATTRIBUTE ' + aAttr + '=' + aValue);
return;
}
var isFeatureAttribute = aAttr.indexOf('treestyletab-') == 0;
@ -1419,9 +1421,7 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
refId = aInsertBefore.getAttribute(this.kID);
}
if (utils.isDebugging('base'))
dump('Tree Style Tab: new child tab is requested.\n'+
new Error().stack.replace(/^/gm, ' ')+'\n');
logWithStackTrace('new child tab is requested.');
ownerBrowser.treeStyleTab.readiedToAttachNewTab = true;
ownerBrowser.treeStyleTab.readiedToAttachMultiple = aMultiple || false ;
@ -1460,9 +1460,7 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
var ownerBrowser = this.getTabBrowserFromChild(browser);
if (utils.isDebugging('base'))
dump('Tree Style Tab: new orphan tab is requested.\n'+
new Error().stack.replace(/^/gm, ' ')+'\n');
logWithStackTrace('new orphan tab is requested.');
ownerBrowser.treeStyleTab.readiedToAttachNewTab = false;
@ -1595,9 +1593,8 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
var ownerBrowser = this.getTabBrowserFromChild(browser);
if (ownerBrowser.treeStyleTab.readiedToAttachNewTab && utils.isDebugging('base'))
dump('Tree Style Tab: new child tab is canceled.\n'+
new Error().stack.replace(/^/gm, ' ')+'\n');
if (ownerBrowser.treeStyleTab.readiedToAttachNewTab)
logWithStackTrace('new child tab is canceled.');
delete ownerBrowser.treeStyleTab.readiedToAttachNewTab;
delete ownerBrowser.treeStyleTab.readiedToAttachNewTabGroup;
@ -1790,8 +1787,7 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
aTab.label+'\n '+
aTab.getAttribute(this.kID);
}, this).join('\n');
if (utils.isDebugging('base'))
dump(message+'\n');
log(message);
break;
}
@ -1803,8 +1799,7 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
aTab.label+'\n '+
aTab.getAttribute(this.kID);
}, this).join('\n');
if (utils.isDebugging('base'))
dump(message+'\n');
log(message);
}
tabs.push(parentTab);
@ -1951,8 +1946,7 @@ var TreeStyleTabBase = inherit(TreeStyleTabConstants, {
aTab.label+'\n '+
aTab.getAttribute(this.kID);
}, this).join('\n');
if (utils.isDebugging('base'))
dump(message+'\n');
log(message);
continue;
}
tabs.push(tab);

View File

@ -49,9 +49,11 @@ Cu.import('resource://treestyletab-modules/constants.js');
XPCOMUtils.defineLazyModuleGetter(this, 'utils', 'resource://treestyletab-modules/utils.js', 'TreeStyleTabUtils');
function mydump(aString) {
if (utils.isDebugging('bookmark'))
dump(aString);
function log(...aArgs) {
utils.log.apply(utils, ['bookmark'].concat(aArgs));
}
function logWithStackTrace(...aArgs) {
utils.logWithStackTrace.apply(utils, ['bookmark'].concat(aArgs));
}
var TreeStyleTabBookmarksService = inherit(TreeStyleTabConstants, {
@ -296,18 +298,18 @@ var TreeStyleTabBookmarksService = inherit(TreeStyleTabConstants, {
result.behavior = TST.openGroupBookmarkBehavior();
if (result.behavior & this.kGROUP_BOOKMARK_SUBTREE) {
mydump('TSTBMService_handleTabsOpenProcess: open as a group\n');
log('handleTabsOpenProcess: open as a group');
let treeStructure = result.behavior & this.kGROUP_BOOKMARK_DONT_RESTORE_TREE_STRUCTURE ?
null :
this.getTreeStructureFromItems(aIDs) ;
mydump(' treeStructure => '+JSON.stringify(treeStructure)+'\n');
log(' treeStructure => '+JSON.stringify(treeStructure));
if (treeStructure) {
let parentTabs = treeStructure.filter(function(aParent) {
return aParent < 0;
});
let haveMultipleTrees = parentTabs.length != treeStructure.length;
if (result.behavior & this.kGROUP_BOOKMARK_USE_DUMMY) {
mydump(' trying to use dummy group tab\n');
log(' trying to use dummy group tab');
let parentCount = 0;
let childCount = 0;
for (let i in treeStructure) {
@ -316,8 +318,8 @@ var TreeStyleTabBookmarksService = inherit(TreeStyleTabConstants, {
else
childCount++;
}
mydump(' parentCount: '+parentCount+'\n');
mydump(' childCount: '+childCount+'\n');
log(' parentCount: '+parentCount);
log(' childCount: '+childCount);
if (
parentCount > 1 &&
(
@ -338,7 +340,7 @@ var TreeStyleTabBookmarksService = inherit(TreeStyleTabConstants, {
title: aFolderTitle,
uri: uri
})
mydump(' updated treeStructure => '+JSON.stringify(treeStructure)+'\n');
log(' updated treeStructure => '+JSON.stringify(treeStructure));
}
}
else if (!haveMultipleTrees) {
@ -388,7 +390,7 @@ var TreeStyleTabBookmarksService = inherit(TreeStyleTabConstants, {
PlacesUIUtils.__treestyletab__openTabset = PlacesUIUtils._openTabset;
PlacesUIUtils._openTabset = function(aItemsToOpen, aEvent, aWindow, ...aArgs) {
mydump('TSTBookmarks_openTabset\n');
log('TSTBookmarks_openTabset');
var uris = [];
var ids = [];
@ -400,12 +402,12 @@ PlacesUIUtils._openTabset = function(aItemsToOpen, aEvent, aWindow, ...aArgs) {
if (!id && aIndex in nodes)
id = nodes[aIndex].itemId;
ids.push(id);
mydump(' '+aIndex+': '+id+' / '+aItem.uri+'\n');
log(' '+aIndex+': '+id+' / '+aItem.uri);
return true;
}
return false;
});
mydump(' items => '+aItemsToOpen.length+'\n');
log(' items => '+aItemsToOpen.length);
var allArgs = [aItemsToOpen, aEvent, aWindow].concat(aArgs);
if (aItemsToOpen.length <= 0)
@ -418,17 +420,17 @@ PlacesUIUtils._openTabset = function(aItemsToOpen, aEvent, aWindow, ...aArgs) {
var BS = TreeStyleTabBookmarksService;
var where = w && w.whereToOpenLink(aEvent, false, true) || 'window';
mydump(' where: '+where+'\n');
log(' where: '+where);
if (where === 'window')
return this.__treestyletab__openTabset.apply(this, allArgs);
var result = BS.handleTabsOpenProcess(where, aEvent, w, ids, uris, aItemsToOpen, this.__treestyletab__folderName);
mydump(' result: '+JSON.stringify(result)+'\n');
log(' result: '+JSON.stringify(result));
var tabs = TST.doAndGetNewTabs((function() {
this.__treestyletab__openTabset.apply(this, allArgs);
}).bind(this), w.gBrowser);
mydump(' tabs: '+tabs.length+'\n');
log(' tabs: '+tabs.length);
if (!result.treeStructure)
tabs = [];

View File

@ -75,9 +75,11 @@ function wait(aMilliSeconds) {
});
}
function mydump(aString) {
if (utils.isDebugging('browser'))
dump(aString);
function log(...aArgs) {
utils.log.apply(utils, ['browser'].concat(aArgs));
}
function logWithStackTrace(...aArgs) {
utils.logWithStackTrace.apply(utils, ['browser'].concat(aArgs));
}
Cu.import('resource://treestyletab-modules/window.js');
@ -1974,7 +1976,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
(aReason & this.kTABBAR_UPDATE_BY_AUTOHIDE ? 'autohide ' : '' ) +
(aReason & this.kTABBAR_UPDATE_BY_INITIALIZE ? 'initialize ' : '' ) +
(aReason & this.kTABBAR_UPDATE_BY_TOGGLE_SIDEBAR ? 'toggle-sidebar ' : '' );
mydump('TSTBrowser_updateFloatingTabbarInternal: ' + humanReadableReason + '\n');
log('updateFloatingTabbarInternal: ' + humanReadableReason);
}
var d = this.document;
@ -3168,20 +3170,20 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
var pareintIndexInTree = hasStructure ? this.treeStructure.shift() : 0 ;
var lastRelatedTab = b._lastRelatedTab;
mydump('TSTBrowser_onTabOpen\n ' + [
log('onTabOpen\n ' + [
'readiedToAttachNewTab: '+this.readiedToAttachNewTab,
'parentTab: '+this.parentTab + ' (' + this.getTabById(this.parentTab) + ')',
'insertBefore: '+this.insertBefore,
'treeStructure: '+this.treeStructure
].join('\n ') + '\n');
].join('\n '));
if (typeof this.readiedToAttachNewTab !== 'boolean') {
this.window.setTimeout((function() {
if (!tab.owner)
return;
mydump('TSTBrowser_onTabOpen: new child tab opened by browser.tabs.insertRelatedAfterCurrent=true\n');
log('onTabOpen: new child tab opened by browser.tabs.insertRelatedAfterCurrent=true');
var nextTab = this.findNextTabForNewChild(tab, tab.owner);
mydump(' next tab: '+(nextTab && nextTab._tPos)+'\n');
log(' next tab: '+(nextTab && nextTab._tPos));
this.attachTabTo(tab, tab.owner, {
insertBefore: nextTab
});
@ -3403,7 +3405,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
var closeParentBehavior = this.getCloseParentBehaviorForTab(tab);
var backupAttributes = this._collectBackupAttributes(tab);
mydump('onTabClose: backupAttributes = '+JSON.stringify(backupAttributes)+'\n');
log('onTabClose: backupAttributes = '+JSON.stringify(backupAttributes));
if (closeParentBehavior == this.kCLOSE_PARENT_BEHAVIOR_CLOSE_ALL_CHILDREN ||
this.isSubtreeCollapsed(tab))
@ -3631,7 +3633,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
var prevPosition = aEvent.detail;
if (tab.__treestyletab__isOpening && !this.isTabInternallyMoving(tab)) {
mydump('onTabMove for new child tab: move back '+tab._tPos+' => '+prevPosition+'\n');
log('onTabMove for new child tab: move back '+tab._tPos+' => '+prevPosition);
tab.__treestyletab__internallyTabMovingCount++;
b.moveTabTo(tab, prevPosition);
tab.__treestyletab__internallyTabMovingCount--;
@ -3639,8 +3641,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
}
tab.__treestyletab__previousPosition = prevPosition;
mydump('onTabMove '+prevPosition+' => '+tab._tPos+' (internal moving count='+tab.__treestyletab__internallyTabMovingCount+', owner='+String(tab.owner)+')\n');
mydump((new Error()).stack.replace(/^/gm, ' ')+'\n');
logWithStackTrace('onTabMove '+prevPosition+' => '+tab._tPos+' (internal moving count='+tab.__treestyletab__internallyTabMovingCount+', owner='+String(tab.owner)+')');
// When the tab was moved before TabOpen event is fired, we have to update manually.
var newlyOpened = !this.isTabInitialized(tab) && this.onTabOpen(null, tab);
@ -3663,11 +3664,11 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
if (storedId && tab.getAttribute(this.kID) != storedId)
restored = this.onTabRestoring(aEvent);
}
mydump(' newlyOpened: '+newlyOpened+'\n');
mydump(' restored: '+restored+'\n');
log(' newlyOpened: '+newlyOpened);
log(' restored: '+restored);
if (this.hasChildTabs(tab) && !this.subTreeMovingCount) {
mydump(' => move sub tree\n');
log(' => move sub tree');
this.moveTabSubtreeTo(tab, tab._tPos);
}
@ -3703,7 +3704,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
if (!this.subTreeChildrenMovingCount)
this.updateChildrenArray(parentTab);
}
mydump(' tabsToBeUpdated: '+tabsToBeUpdated.map(function(aTab) { return aTab._tPos; })+'\n');
log(' tabsToBeUpdated: '+tabsToBeUpdated.map(function(aTab) { return aTab._tPos; }));
var updatedTabs = new WeakMap();
tabsToBeUpdated.forEach(function(aTab) {
@ -3736,7 +3737,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
attachTabFromPosition : function TSTBrowser_attachTabFromPosition(aTab, aOldPosition)
{
mydump('attachTabFromPosition '+aOldPosition+' => '+aTab._tPos+'\n');
log('attachTabFromPosition '+aOldPosition+' => '+aTab._tPos);
var parent = this.getParentTab(aTab);
if (aOldPosition === void(0))
@ -3747,7 +3748,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
var oldPos = this.getChildIndex(oldPositionTab, parent);
var delta;
if (oldPositionTab == aTab && pos == oldPos) { // no move?
mydump(' => no move\n');
log(' => no move');
return;
}
else if (pos < 0 || oldPos < 0) {
@ -3757,7 +3758,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
delta = Math.abs(pos - oldPos);
}
mydump((new Error()).stack.replace(/^/gm, ' ')+'\n');
logWithStackTrace(' moving');
var prevTab = this.getPreviousVisibleTab(aTab);
var nextTab = this.getNextVisibleTab(aTab);
@ -3766,45 +3767,45 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
if (tabs.length) {
nextTab = this.getNextTab(tabs[tabs.length-1]);
}
mydump(' prevTab: '+(prevTab&&(prevTab._tPos+'('+prevTab.linkedBrowser.currentURI.spec+')'))+'\n');
mydump(' nextTab: '+(nextTab&&(nextTab._tPos+'('+nextTab.linkedBrowser.currentURI.spec+')'))+'\n');
log(' prevTab: '+(prevTab&&(prevTab._tPos+'('+prevTab.linkedBrowser.currentURI.spec+')')));
log(' nextTab: '+(nextTab&&(nextTab._tPos+'('+nextTab.linkedBrowser.currentURI.spec+')')));
var prevParent = this.getParentTab(prevTab);
var nextParent = this.getParentTab(nextTab);
var prevLevel = prevTab ? Number(prevTab.getAttribute(this.kNEST)) : -1 ;
var nextLevel = nextTab ? Number(nextTab.getAttribute(this.kNEST)) : -1 ;
mydump(' prevLevel: '+prevLevel+'\n');
mydump(' nextLevel: '+nextLevel+'\n');
log(' prevLevel: '+prevLevel);
log(' nextLevel: '+nextLevel);
var newParent;
if (!prevTab) {
mydump(' => moved to topmost position\n');
log(' => moved to topmost position');
newParent = null;
}
else if (!nextTab) {
mydump(' => movedmoved to last position\n');
log(' => movedmoved to last position');
newParent = (delta > 1) ? prevParent : parent ;
}
else if (prevParent == nextParent) {
mydump(' => moved into existing tree\n');
log(' => moved into existing tree');
newParent = prevParent;
}
else if (prevLevel > nextLevel) {
mydump(' => moved to end of existing tree\n');
log(' => moved to end of existing tree');
if (this.mTabBrowser.selectedTab != aTab) {
mydump(' => maybe newly opened tab\n');
log(' => maybe newly opened tab');
newParent = prevParent;
}
else {
mydump(' => maybe drag and drop\n');
log(' => maybe drag and drop');
var realDelta = Math.abs(aTab._tPos - aOldPosition);
newParent = realDelta < 2 ? prevParent : (parent || nextParent) ;
}
}
else if (prevLevel < nextLevel) {
mydump(' => moved to first child position of existing tree\n');
log(' => moved to first child position of existing tree');
newParent = prevTab || parent || nextParent;
}
@ -4119,7 +4120,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
handleRestoredTab : function TSTBrowser_handleRestoredTab(aTab)
{
if (aTab.__treestyletab__restoreState === undefined) {
mydump('handleRestoredTab: ' + aTab._tPos + ' is already restored!\n');
log('handleRestoredTab: ' + aTab._tPos + ' is already restored!');
return false;
}
@ -4347,7 +4348,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
var restoringMultipleTabs = this.windowService.restoringTree;
var position = this._prepareInsertionPosition(aTab, aMayBeDuplicated);
var parent = position.parent;
mydump('handleRestoredTab: found parent = ' + parent+'\n');
log('handleRestoredTab: found parent = ' + parent);
if (parent) {
aTab.removeAttribute(this.kPARENT);
parent = this.getTabById(parent);
@ -4393,7 +4394,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
}
var ancestors = (this.getTabValue(aTab, this.kANCESTORS) || this.getTabValue(aTab, this.kPARENT)).split('|');
mydump('handleRestoredTab: ancestors = ' + ancestors+'\n');
log('handleRestoredTab: ancestors = ' + ancestors);
var parent = null;
for (let i in ancestors)
{
@ -4415,7 +4416,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
*/
if (!parent) {
parent = aTab.getAttribute(this.kPARENT);
mydump('handleRestoredTab: parent = ' + parent+'\n');
log('handleRestoredTab: parent = ' + parent);
if (parent && !next)
next = this.getNextSiblingTab(aTab);
}
@ -5171,9 +5172,9 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
}
if (isContentResize || isChromeResize) {
mydump('TSTBrowser_onResize\n');
mydump(' isContentResize = '+isContentResize+'\n');
mydump(' isChromeResize = '+isChromeResize+'\n');
log('TSTBrowser_onResize');
log(' isContentResize = '+isContentResize);
log(' isChromeResize = '+isChromeResize);
this.updateFloatingTabbar(this.kTABBAR_UPDATE_BY_WINDOW_RESIZE);
this.updateInvertedTabContentsOrder(true);
this.mTabBrowser.mTabContainer.adjustTabstrip();
@ -5335,10 +5336,10 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
onBeforeFullScreenToggle : function TSTBrowser_onBeforeFullScreenToggle(aEnterFS)
{
mydump('onBeforeFullScreenToggle / ' + this.position + '\n');
log('onBeforeFullScreenToggle / ' + this.position);
if (this.position != 'top') {
mydump(' this.document.mozFullScreen => ' + this.document.mozFullScreen + '\n');
mydump(' aEnterFS => ' + aEnterFS + '\n');
log(' this.document.mozFullScreen => ' + this.document.mozFullScreen);
log(' aEnterFS => ' + aEnterFS);
// ignore entering to the DOM-fullscreen (ex. YouTube Player)
if (!this.document.mozFullScreen) {
if (aEnterFS)
@ -7116,9 +7117,9 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
Components.utils.reportError(new Error('There is no property named "_browserEpochs"!!'));
}
mydump('TSTBrowser::restoreTree\n');
mydump(' level = '+level+'\n');
mydump(' tabsToRestore = '+tabsToRestore+'\n');
log('TSTBrowser::restoreTree');
log(' level = '+level);
log(' tabsToRestore = '+tabsToRestore);
if (
level <= this.kRESTORE_TREE_LEVEL_NONE ||
@ -7141,7 +7142,7 @@ TreeStyleTabBrowser.prototype = inherit(TreeStyleTabWindow.prototype, {
);
});
mydump(' restoring member tabs = '+tabs.length+' ('+tabs.map(function(aTab) { return aTab._tPos; })+')\n');
log(' restoring member tabs = '+tabs.length+' ('+tabs.map(function(aTab) { return aTab._tPos; })+')');
if (tabs.length <= 1)
return;

View File

@ -42,6 +42,13 @@ Components.utils.import('resource://treestyletab-modules/constants.js');
XPCOMUtils.defineLazyModuleGetter(this, 'utils', 'resource://treestyletab-modules/utils.js', 'TreeStyleTabUtils');
function log(...aArgs) {
utils.log.apply(utils, ['browserUIShowHideObserver'].concat(aArgs));
}
function logWithStackTrace(...aArgs) {
utils.logWithStackTrace.apply(utils, ['browserUIShowHideObserver'].concat(aArgs));
}
function BrowserUIShowHideObserver(aOwner, aBox, aOptions) {
this.owner = aOwner;
this.box = aBox;
@ -91,7 +98,7 @@ BrowserUIShowHideObserver.prototype = {
{
case 'childList':
if (aMutation.target == this.box) {
this.dumpMutation(aMutation, 'BrowserUIShowHideObserver_onMutation/childList');
this.logMutation(aMutation, 'BrowserUIShowHideObserver_onMutation/childList');
this.owner.browser.treeStyleTab.updateFloatingTabbar(TreeStyleTabConstants.kTABBAR_UPDATE_BY_WINDOW_RESIZE);
}
return;
@ -102,7 +109,7 @@ BrowserUIShowHideObserver.prototype = {
}
}
catch(error) {
this.dumpMutation(aMutation, 'BrowserUIShowHideObserver_onMutation(error)');
this.logMutation(aMutation, 'BrowserUIShowHideObserver_onMutation(error)');
Components.utils.reportError(error);
}
}, this);
@ -118,7 +125,7 @@ BrowserUIShowHideObserver.prototype = {
delete this.owner;
},
dumpMutation : function BrowserUIShowHideObserver_dumpMutation(aMutation, aDescription)
logMutation : function BrowserUIShowHideObserver_logMutation(aMutation, aDescription)
{
if (!utils.isDebugging('browserUIShowHideObserver'))
return;
@ -132,10 +139,10 @@ BrowserUIShowHideObserver.prototype = {
aMutation.attributeName + ', ' +
aMutation.oldValue + ' => ' +
target.getAttribute(aMutation.attributeName);
dump(aDescription + ' ' +
log(aDescription + ' ' +
ownerInformation + ' / ' +
targetInformation +
attributeInformation + '\n');
attributeInformation);
},
onAttributeModified : function BrowserUIShowHideObserver_onAttributeModified(aMutation, aObserver)
@ -220,7 +227,7 @@ BrowserUIShowHideObserver.prototype = {
)
return;
this.dumpMutation(aMutation, 'BrowserUIShowHideObserver_onAttributeModified');
this.logMutation(aMutation, 'BrowserUIShowHideObserver_onAttributeModified');
this.handlingAttrChange = true;

View File

@ -46,6 +46,13 @@ Cu.import('resource://gre/modules/Promise.jsm');
XPCOMUtils.defineLazyModuleGetter(this, 'utils', 'resource://treestyletab-modules/utils.js', 'TreeStyleTabUtils');
function log(...aArgs) {
utils.log.apply(utils, ['contentBridge'].concat(aArgs));
}
function logWithStackTrace(...aArgs) {
utils.logWithStackTrace.apply(utils, ['contentBridge'].concat(aArgs));
}
function ContentBridge(aTab, aTabBrowser)
{
this.init(aTab, aTabBrowser);
@ -107,11 +114,9 @@ ContentBridge.prototype = inherit(TreeStyleTabConstants, {
},
handleMessage : function CB_handleMessage(aMessage)
{
if (utils.isDebugging('contentBridge')) {
dump('*********************handleMessage*******************\n');
dump('TARGET IS: '+aMessage.target.localName+'\n');
dump(JSON.stringify(aMessage.json)+'\n');
}
log('*********************handleMessage*******************');
log('TARGET IS: '+aMessage.target.localName);
log(JSON.stringify(aMessage.json));
if (aMessage.target != this.mTab.linkedBrowser)
return;

View File

@ -39,9 +39,11 @@ Components.utils.import('resource://treestyletab-modules/constants.js');
Components.utils.import('resource://treestyletab-modules/utils.js');
function mydump(aString) {
if (TreeStyleTabUtils.isDebugging('fullscreenObserver'))
dump(aString);
function log(...aArgs) {
TreeStyleTabUtils.log.apply(utils, ['fullscreenObserver'].concat(aArgs));
}
function logWithStackTrace(...aArgs) {
TreeStyleTabUtils.logWithStackTrace.apply(utils, ['fullscreenObserver'].concat(aArgs));
}
function FullscreenObserver(aWindow) {
@ -95,7 +97,7 @@ FullscreenObserver.prototype = {
onSizeModeChange : function FullscreenObserver_onSizeModeChange()
{
mydump('onSizeModeChange: '+this.window.document.documentElement.getAttribute('sizemode')+'\n');
log('onSizeModeChange: '+this.window.document.documentElement.getAttribute('sizemode'));
this.updateToolboxPosition();
if (!this.window.gBrowser.treeStyleTab.notifyingRenderedEvent)
this.window.gBrowser.treeStyleTab.updateFloatingTabbar(TreeStyleTabConstants.kTABBAR_UPDATE_BY_WINDOW_RESIZE);

View File

@ -63,6 +63,13 @@ const SSS = Cc['@mozilla.org/content/style-sheet-service;1']
const SecMan = Cc['@mozilla.org/scriptsecuritymanager;1']
.getService(Ci.nsIScriptSecurityManager);
function log(...aArgs) {
utils.log.apply(utils, ['tabbarDNDObserver'].concat(aArgs));
}
function logWithStackTrace(...aArgs) {
utils.logWithStackTrace.apply(utils, ['tabbarDNDObserver'].concat(aArgs));
}
function TabbarDNDObserver(aTabBrowser)
{
this.init(aTabBrowser);
@ -187,8 +194,7 @@ try{
return info.canDrop;
}
catch(e) {
if (utils.isDebugging('tabbarDNDObserver'))
dump('TabbarDND::canDrop\n'+e+'\n');
log('canDrop', e);
return false;
}
},
@ -262,8 +268,7 @@ catch(e) {
getDropActionInternal : function TabbarDND_getDropActionInternal(aEvent, aSourceTab)
{
if (utils.isDebugging('tabbarDNDObserver'))
dump('getDropActionInternal: start\n');
log('getDropActionInternal: start');
var sv = this.treeStyleTab;
var b = this.browser;
var d = this.document;
@ -304,21 +309,18 @@ catch(e) {
var isNewTabAction = !aSourceTab || aSourceTab.ownerDocument != d;
if (!tab || tab.localName != 'tab') {
if (utils.isDebugging('tabbarDNDObserver'))
dump(' not on a tab\n');
log(' not on a tab');
let action = isTabMoveFromOtherWindow ? sv.kACTION_STAY : (sv.kACTION_MOVE | sv.kACTION_PART) ;
if (isNewTabAction) action |= sv.kACTION_NEWTAB;
if (aEvent[sv.screenPositionProp] < sv.getTabActualScreenPosition(firstTab)) {
if (utils.isDebugging('tabbarDNDObserver'))
dump(' above the first tab\n');
log(' above the first tab');
info.target = info.parent = info.insertBefore = firstTab;
info.position = isInverted ? sv.kDROP_AFTER : sv.kDROP_BEFORE ;
info.action = action;
return info;
}
else if (aEvent[sv.screenPositionProp] > sv.getTabActualScreenPosition(tabs[lastTabIndex]) + tabs[lastTabIndex].boxObject[sv.sizeProp]) {
if (utils.isDebugging('tabbarDNDObserver'))
dump(' below the last tab\n');
log(' below the last tab');
info.target = info.parent = tabs[lastTabIndex];
info.position = isInverted ? sv.kDROP_BEFORE : sv.kDROP_AFTER ;
info.action = action;
@ -328,30 +330,25 @@ catch(e) {
let index = b.getNewIndex ?
b.getNewIndex(aEvent) :
b.tabContainer._getDropIndex(aEvent) ;
if (utils.isDebugging('tabbarDNDObserver'))
dump(' on the tab '+index+'\n');
log(' on the tab '+index);
index = Math.min(index, lastTabIndex);
info.target = tab = tabs[index];
if (index == tabs[lastTabIndex]._tPos) {
if (index > 0)
info.target = tab = tabs[index - 1];
info.position = sv.kDROP_AFTER;
if (utils.isDebugging('tabbarDNDObserver'))
dump(' => after the last tab\n');
log(' => after the last tab');
} else if (index == firstTab._tPos) {
if (index < lastTabIndex - 1)
info.target = tab = tabs[index + 1];
info.position = sv.kDROP_BEFORE;
if (utils.isDebugging('tabbarDNDObserver'))
dump(' => before the first tab\n');
log(' => before the first tab');
}
if (utils.isDebugging('tabbarDNDObserver'))
dump(' info.target = ' + info.target._tPos + '\n');
log(' info.target = ' + info.target._tPos);
}
}
else {
if (utils.isDebugging('tabbarDNDObserver'))
dump(' on the tab '+tab._tPos+'\n');
log(' on the tab '+tab._tPos);
sv.ensureTabInitialized(tab);
info.target = tab;
}
@ -387,21 +384,19 @@ catch(e) {
switch (info.position)
{
case sv.kDROP_ON:
if (utils.isDebugging('tabbarDNDObserver'))
dump(' position = on the tab\n');
log(' position = on the tab');
var visible = sv.getNextVisibleTab(tab);
info.action = sv.kACTION_STAY | sv.kACTION_ATTACH;
info.parent = tab;
info.insertBefore = utils.getTreePref('insertNewChildAt') == sv.kINSERT_FISRT ?
(sv.getFirstChildTab(tab) || visible) :
(sv.getNextSiblingTab(tab) || sv.getNextTab(sv.getLastDescendantTab(tab) || tab));
if (utils.isDebugging('tabbarDNDObserver') && info.insertBefore)
dump(' insertBefore = '+info.insertBefore._tPos+'\n');
if (info.insertBefore)
log(' insertBefore = '+info.insertBefore._tPos);
break;
case sv.kDROP_BEFORE:
if (utils.isDebugging('tabbarDNDObserver'))
dump(' position = before the tab\n');
log(' position = before the tab');
/*
<= detach from parent, and move
[TARGET ]
@ -437,13 +432,12 @@ catch(e) {
info.action = sv.kACTION_MOVE | (info.parent ? sv.kACTION_ATTACH : sv.kACTION_PART );
info.insertBefore = tab;
}
if (utils.isDebugging('tabbarDNDObserver') && info.insertBefore)
dump(' insertBefore = '+info.insertBefore._tPos+'\n');
if (info.insertBefore)
log(' insertBefore = '+info.insertBefore._tPos);
break;
case sv.kDROP_AFTER:
if (utils.isDebugging('tabbarDNDObserver'))
dump(' position = after the tab\n');
log(' position = after the tab');
/*
[TARGET ]
<= if the target has a parent, attach to it and and move
@ -487,8 +481,8 @@ catch(e) {
}
}
}
if (utils.isDebugging('tabbarDNDObserver') && info.insertBefore)
dump(' insertBefore = '+info.insertBefore._tPos+'\n');
if (info.insertBefore)
log(' insertBefore = '+info.insertBefore._tPos);
break;
}
@ -499,16 +493,14 @@ catch(e) {
performDrop : function TabbarDND_performDrop(aInfo, aDraggedTab)
{
if (utils.isDebugging('tabbarDNDObserver'))
dump('performDrop: start\n');
log('performDrop: start');
var sv = this.treeStyleTab;
var b = this.browser;
var w = this.window;
var tabsInfo = this.getDraggedTabsInfoFromOneTab(aDraggedTab, aInfo);
if (!tabsInfo.draggedTab) {
if (utils.isDebugging('tabbarDNDObserver'))
dump(' => no dragged tab\n');
log(' => no dragged tab');
return false;
}
@ -565,8 +557,7 @@ catch(e) {
sourceBrowser == targetBrowser &&
sourceService.getNextVisibleTab(draggedTabs[draggedTabs.length-1]) == aInfo.insertBefore
) {
if (utils.isDebugging('tabbarDNDObserver'))
dump(' => no change\n');
log(' => no change');
// then, do nothing
return true;
}
@ -1053,8 +1044,7 @@ try{
return (info.position == sv.kDROP_ON || sv.position != 'top')
}
catch(e) {
if (utils.isDebugging('tabbarDNDObserver'))
dump('TabbarDND::onDragOver\n'+e+'\n');
log('onDragOver', e);
}
},
@ -1100,10 +1090,9 @@ catch(e) {
var draggedTab = dt.mozGetDataAt(TAB_DROP_TYPE, 0);
if (utils.isDebugging('tabbarDNDObserver'))
dump('TabbarDND::onDrop\n' +
' dt.dropEffect: ' + dt.dropEffect + '\n' +
' draggedTab: ' + draggedTab + '\n');
log('TabbarDND::onDrop',
' dt.dropEffect: ' + dt.dropEffect,
' draggedTab: ' + draggedTab);
if (dt.dropEffect != 'link' &&
dt.dropEffect != 'move' &&
@ -1173,9 +1162,8 @@ catch(e) {
if (aURI.indexOf(this.BOOKMARK_FOLDER) == 0) {
let newTabs = sv.getNewTabsWithOperation(function() {
var data = aURI.replace(self.BOOKMARK_FOLDER, '');
if (utils.isDebugging('tabbarDNDObserver'))
dump('TabbarDND::handleLinksOrBookmarks\n' +
' bookmark folder data: ' + data + '\n');
log('TabbarDND::handleLinksOrBookmarks' +
' bookmark folder data: ' + data);
data = JSON.parse(data);
w.PlacesUIUtils._openTabset(data.children, { type : 'drop' }, w, data.title);
}, b);

View File

@ -63,6 +63,8 @@ XPCOMUtils.defineLazyModuleGetter(this, 'Task',
'resource://gre/modules/Task.jsm');
XPCOMUtils.defineLazyModuleGetter(this, 'Promise',
'resource://gre/modules/Promise.jsm');
XPCOMUtils.defineLazyModuleGetter(this, 'Services',
'resource://gre/modules/Services.jsm');
XPCOMUtils.defineLazyModuleGetter(this, 'TreeStyleTabConstants',
'resource://treestyletab-modules/constants.js', 'TreeStyleTabConstants');
@ -250,6 +252,21 @@ var TreeStyleTabUtils = {
return this.getTreePref('debug.' + aModule) || this.getTreePref('debug.all');
},
log : function utils_log(aModule, ...aArgs)
{
if (!this.isDebugging(aModule))
return;
var logString = '[treestyletab:' + aModule+'] '+ aArgs.join(', ');
Serivces.console.logStringMessage(logString);
dump(logString+'\n');
},
logWithStackTrace : function utils_logWithStackTrace(aModule, ...aArgs)
{
var stack = (new Error()).stack.replace(/^/gm, ' '));
return this.log.apply(this, [aModule].concat(aArgs).concat([stack]));
},
/* string bundle */
get treeBundle () {
return stringBundle.get('chrome://treestyletab/locale/treestyletab.properties');

View File

@ -71,6 +71,13 @@ XPCOMUtils.defineLazyModuleGetter(this, 'ContentBridge', 'resource://treestyleta
XPCOMUtils.defineLazyServiceGetter(this, 'SessionStore',
'@mozilla.org/browser/sessionstore;1', 'nsISessionStore');
function log(...aArgs) {
utils.log.apply(utils, ['window'].concat(aArgs));
}
function logWithStackTrace(...aArgs) {
utils.logWithStackTrace.apply(utils, ['window'].concat(aArgs));
}
function TreeStyleTabWindow(aWindow)
{
this.window = aWindow;
@ -1336,8 +1343,7 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
if (!aTab)
return;
if (utils.isDebugging('window'))
dump('TSTWindow_onBeforeOpenLinkWithTab '+[aTab, JSON.stringify(aParams), this.checkToOpenChildTab(aTab)]+'\n');
log('onBeforeOpenLinkWithTab '+[aTab, JSON.stringify(aParams), this.checkToOpenChildTab(aTab)]);
if (!this.checkToOpenChildTab(aTab)) {
if (!aParams.fromChrome)
@ -1349,8 +1355,7 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
onBeforeOpenNewTabByThirdParty : function TSTWindow_onBeforeOpenNewTabByThirdParty(aOwner)
{
if (utils.isDebugging('window'))
dump('TSTWindow_onBeforeOpenNewTabByThirdParty '+[aOwner, this.checkToOpenChildTab(aTab)]+'\n');
log('onBeforeOpenNewTabByThirdParty '+[aOwner, this.checkToOpenChildTab(aTab)]);
if (!this.checkToOpenChildTab(aOwner)) {
this.handleNewTabFromCurrent(aOwner);
@ -1363,17 +1368,14 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
var opener = null;
if (aOpener) {
if (aOpener instanceof Ci.nsIDOMWindow) {
if (utils.isDebugging('window'))
dump('TSTWindow_onBeforeBrowserAccessOpenURI: opener is DOMWindow\n');
log('onBeforeBrowserAccessOpenURI: opener is DOMWindow');
opener = aOpener;
hasOwnerTab = this.getTabFromFrame(opener.top);
if (utils.isDebugging('window'))
dump(' opener =>'+[opener,hasOwnerTab]+'\n');
log(' opener =>'+[opener,hasOwnerTab]);
}
else if (Ci.nsIOpenURIInFrameParams &&
aOpener instanceof Ci.nsIOpenURIInFrameParams) {
if (utils.isDebugging('window'))
dump('TSTWindow_onBeforeBrowserAccessOpenURI: opener is nsIOpenURIInFrameParams\n');
log('TSTWindow_onBeforeBrowserAccessOpenURI: opener is nsIOpenURIInFrameParams');
// from remote contents, we have to detect its opener from the URI.
let referrer = aOpener.referrer;
if (referrer) {
@ -1388,8 +1390,7 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
break;
}
}
if (utils.isDebugging('window'))
dump(' opener =>'+[opener,hasOwnerTab]+'\n');
log(' opener =>'+[opener,hasOwnerTab]);
}
}
if (aOpener &&
@ -1404,8 +1405,7 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
{
var where = String(this.window.whereToOpenLink(aEvent, false, true));
if (utils.isDebugging('window'))
dump('TSTWindow_onBeforeViewMedia '+[aEvent, aOwner, where]+'\n');
log('onBeforeViewMedia '+[aEvent, aOwner, where]);
if (where.indexOf('tab') == 0)
this.handleNewTabFromCurrent(aOwner);
@ -1415,8 +1415,7 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
onBeforeBrowserSearch : function TSTWindow_onBeforeBrowserSearch(aTerm, aForceNewTab)
{
if (utils.isDebugging('window'))
dump('TSTWindow_onBeforeBrowserSearch '+[aTerm, aForceNewTab, this.shouldOpenSearchResultAsChild(aTerm)]+'\n');
log('onBeforeBrowserSearch '+[aTerm, aForceNewTab, this.shouldOpenSearchResultAsChild(aTerm)]);
if ((arguments.length == 1 || aForceNewTab) &&
this.shouldOpenSearchResultAsChild(aTerm))
@ -1609,10 +1608,9 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
createSubtree : function TSTWindow_createSubtree(aTabs)
{
if (utils.isDebugging('window'))
dump('TSTWindow_createSubtree\n'+aTabs.map(function(aTab) {
log('TSTWindow_createSubtree\n'+aTabs.map(function(aTab) {
return ' '+aTab._tPos+': '+aTab.linkedBrowser.currentURI.spec;
}).join('\n')+'\n');
}).join('\n'));
var rootTabs = this.getRootTabs(aTabs);
@ -1633,8 +1631,7 @@ TreeStyleTabWindow.prototype = inherit(TreeStyleTabBase, {
var parentInTargets = aTabs.indexOf(this.getParentTab(aDescendantTab)) > -1;
if (inTargets || (inTargets == parentInTargets))
return;
if (utils.isDebugging('window'))
dump(' detaching unselected descendant: '+aDescendantTab._tPos+': '+aDescendantTab.linkedBrowser.currentURI.spec+'\n');
log(' detaching unselected descendant: '+aDescendantTab._tPos+': '+aDescendantTab.linkedBrowser.currentURI.spec);
if (parentTab)
b.treeStyleTab.attachTabTo(aDescendantTab, parentTab, {
dontExpand : true,