[Pkg-mozext-commits] [tabmixplus] 49/107: Add content script to use bookmark name as tab title in about:newtab

David Prévot taffit at moszumanska.debian.org
Tue Dec 29 19:02:49 UTC 2015


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository tabmixplus.

commit 6304babfa7b76550d1ab5a4febf30a178d3cc9cc
Author: onemen <tabmix.onemen at gmail.com>
Date:   Sat Nov 7 16:17:39 2015 +0200

    Add content script to use bookmark name as tab title in about:newtab
---
 chrome.manifest                 |  2 +-
 chrome/content/content.js       | 46 ++++++++++++++++++--
 chrome/content/links/newTab.js  | 35 +++------------
 chrome/content/minit/tablib.js  |  4 +-
 chrome/content/places/places.js |  9 +++-
 modules/AboutNewTab.jsm         | 96 +++++++++++++++++++++++++++++++++++++++++
 modules/Utils.jsm               | 18 +++++++-
 7 files changed, 171 insertions(+), 39 deletions(-)

diff --git a/chrome.manifest b/chrome.manifest
index fb60af1..b783094 100644
--- a/chrome.manifest
+++ b/chrome.manifest
@@ -49,7 +49,7 @@ overlay   chrome://browser/content/preferences/tabs.xul             chrome://tab
 style     chrome://browser/content/preferences/preferences.xul      chrome://tabmixplus/content/preferences/overlay/preferences.css
 
 overlay   chrome://mozapps/content/extensions/extensions.xul        chrome://tabmixplus/content/links/links.xul
-overlay   about:newtab                                              chrome://tabmixplus/content/links/newTab.xul
+overlay   about:newtab                                              chrome://tabmixplus/content/links/newTab.xul appversion<42.0
 overlay   chrome://mozapps/content/downloads/unknownContentType.xul chrome://tabmixplus/content/links/removeBlankTab.xul
 overlay   chrome://mozapps/content/handling/dialog.xul              chrome://tabmixplus/content/links/removeBlankTab.xul
 
diff --git a/chrome/content/content.js b/chrome/content/content.js
index 068a4a9..a52c9f1 100644
--- a/chrome/content/content.js
+++ b/chrome/content/content.js
@@ -25,7 +25,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "ContextMenu",
 XPCOMUtils.defineLazyModuleGetter(this, "TabmixUtils",
   "resource://tabmixplus/Utils.jsm");
 
-var self = this;
+XPCOMUtils.defineLazyModuleGetter(this, "TabmixAboutNewTab",
+  "resource://tabmixplus/AboutNewTab.jsm");
 
 var PROCESS_TYPE_CONTENT = TabmixSvc.version(380) &&
     Services.appinfo.processType == Services.appinfo.PROCESS_TYPE_CONTENT;
@@ -170,9 +171,9 @@ var TabmixContentHandler = {
 };
 
 var TabmixClickEventHandler = {
-  init: function init() {
+  init: function init(global) {
     if (PROCESS_TYPE_CONTENT) {
-      self.addEventListener("click", this, true);
+      global.addEventListener("click", this, true);
     }
   },
 
@@ -329,5 +330,42 @@ var TabmixClickEventHandler = {
   }
 };
 
+var AboutNewTabHandler = {
+  init: function(global) {
+    if (!TabmixSvc.version(420)) {
+      return;
+    }
+
+    addMessageListener("Tabmix:updateTitlefrombookmark", this);
+
+    let contentLoaded = false;
+    global.addEventListener("pageshow", event => {
+      if (event.target != content.document) {
+        return;
+      }
+      let doc = content.document;
+      // we don't need to update titles on first show if the pref is off
+      if (doc.documentURI.toLowerCase() == "about:newtab" &&
+          (contentLoaded || TabmixSvc.prefBranch.getBoolPref("titlefrombookmark"))) {
+        contentLoaded = true;
+        this.updateTitles();
+      }
+    });
+  },
+
+  receiveMessage: function({name}) {
+    if (name == "Tabmix:updateTitlefrombookmark") {
+      this.updateTitles();
+    }
+  },
+
+  updateTitles: function() {
+    if (content && content.gGrid) {
+      TabmixAboutNewTab.updateTitles(content.gGrid.cells);
+    }
+  }
+};
+
 TabmixContentHandler.init();
-TabmixClickEventHandler.init();
+TabmixClickEventHandler.init(this);
+AboutNewTabHandler.init(this);
diff --git a/chrome/content/links/newTab.js b/chrome/content/links/newTab.js
index 0246651..9225506 100644
--- a/chrome/content/links/newTab.js
+++ b/chrome/content/links/newTab.js
@@ -1,34 +1,13 @@
 "use strict";
 
+// This file is in use for all versions before Firefox 42.0
 (function Tabmix_newTab() {
-  function updateTitle() {
-    if (!gGrid.cells)
-      return;
-    let win = Tabmix.getTopWin();
-    if (win)
-      win.TMP_Places._titlefrombookmark = Tabmix.prefs.getBoolPref("titlefrombookmark");
-    gGrid.cells.forEach(function(cell) {
-      let site = cell.site;
-      if (!site)
-        return;
-      let url = site.url;
-      let title = site.title || url;
-      title = win.TMP_Places.getTitleFromBookmark(url, title);
-      let tooltip = (title == url ? title : title + "\n" + url);
-      let link = site._querySelector(".newtab-link");
-      link.setAttribute("title", tooltip);
-      site._querySelector(".newtab-title").textContent = title;
-    });
-  }
-
-  let win = Tabmix.getTopWin();
-  if (win && win.Tabmix && win.Tabmix.initialization.onWindowOpen.initialized) {
-    Services.prefs.addObserver("extensions.tabmix.titlefrombookmark", updateTitle, false);
-    window.addEventListener("unload", function TMP_removeObserver(aEvent) {
-      aEvent.currentTarget.removeEventListener("unload", TMP_removeObserver, false);
-      Services.prefs.removeObserver("extensions.tabmix.titlefrombookmark", updateTitle);
+  let PREF = "extensions.tabmix.titlefrombookmark";
+  if (Services.prefs.getBoolPref(PREF)) {
+    window.addEventListener("load", function loadGrid() {
+      window.removeEventListener("load", loadGrid, false);
+      let {updateTitles} = Cu.import("resource://tabmixplus/AboutNewTab.jsm", {}).TabmixAboutNewTab;
+      updateTitles(gGrid.cells);
     }, false);
-    if (Tabmix.prefs.getBoolPref("titlefrombookmark"))
-      updateTitle();
   }
 }());
diff --git a/chrome/content/minit/tablib.js b/chrome/content/minit/tablib.js
index cb9c48b..cd192e1 100644
--- a/chrome/content/minit/tablib.js
+++ b/chrome/content/minit/tablib.js
@@ -1763,10 +1763,10 @@ var tablib = { // eslint-disable-line
       let width = aTab.boxObject.width;
       aTab.removeAttribute("width");
       if (width != aTab.boxObject.width)
-        TMP_Places.afterTabTitleChanged(true);
+        TMP_Places.afterTabTitleChanged(false);
     }
     else if (aTab.hasAttribute("fadein"))
-      TMP_Places.afterTabTitleChanged(true);
+      TMP_Places.afterTabTitleChanged(false);
     // don't keep unnecessary reference to current tab
     if (!TMP_Places.inUpdateBatch)
       TMP_Places.currentTab = null;
diff --git a/chrome/content/places/places.js b/chrome/content/places/places.js
index 1e80707..62f9b9b 100644
--- a/chrome/content/places/places.js
+++ b/chrome/content/places/places.js
@@ -26,6 +26,7 @@ var TMP_Places = {
 
   init: function TMP_PC_init() {
     Tabmix.lazy_import(this, "PlacesUtils", "Places", "TabmixPlacesUtils");
+    Tabmix.lazy_import(this, "AboutNewTab", "AboutNewTab", "TabmixAboutNewTab");
 
     this.contextMenu.toggleEventListener(true);
 
@@ -344,8 +345,12 @@ var TMP_Places = {
     return false;
   },
 
-  afterTabTitleChanged: function TMP_PC_afterTabTitleChanged(aChanged) {
-    if (!aChanged && !this._tabTitleChanged)
+  afterTabTitleChanged: function(bookmarkChanged = true) {
+    if (bookmarkChanged && !this.inUpdateBatch) {
+      this.AboutNewTab.updateAllBrowsers(window);
+    }
+
+    if (bookmarkChanged && !this._tabTitleChanged)
       return;
     if (this.inUpdateBatch) {
       this._tabTitleChanged = true;
diff --git a/modules/AboutNewTab.jsm b/modules/AboutNewTab.jsm
new file mode 100644
index 0000000..f548cf1
--- /dev/null
+++ b/modules/AboutNewTab.jsm
@@ -0,0 +1,96 @@
+"use strict";
+
+this.EXPORTED_SYMBOLS = ["TabmixAboutNewTab"];
+
+const Cu = Components.utils;
+
+Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+
+XPCOMUtils.defineLazyModuleGetter(this, "DirectoryLinksProvider",
+  "resource:///modules/DirectoryLinksProvider.jsm");
+
+XPCOMUtils.defineLazyGetter(this, "gAllPages", function() {
+  let tmp = {};
+  Cu.import("resource://gre/modules/NewTabUtils.jsm", tmp);
+  return tmp.NewTabUtils.allPages;
+});
+
+XPCOMUtils.defineLazyModuleGetter(this, "TabmixSvc",
+  "resource://tabmixplus/Services.jsm");
+
+XPCOMUtils.defineLazyModuleGetter(this, "TabmixPlacesUtils",
+  "resource://tabmixplus/Places.jsm");
+
+this.TabmixAboutNewTab = Object.freeze({
+  updateAllBrowsers: function(window) {
+    AboutNewTabInternal.updateAllBrowsers(window);
+  },
+
+  updateBrowser: function(browser) {
+    AboutNewTabInternal.updateBrowser(browser);
+  },
+
+  updateTitles: function(cells) {
+    AboutNewTabInternal.updateTitles(cells);
+  },
+});
+
+var AboutNewTabInternal = {
+  // update all opened about:newtab browsers in a window including preloaded
+  // browser if exist
+  updateAllBrowsers: function(window) {
+    let tabBrowser = window.gBrowser;
+    let tabPanels = tabBrowser.mPanelContainer.childNodes;
+    let browsers = Array.map(tabPanels, tabPanel => tabBrowser.getBrowserForTabPanel(tabPanel))
+                        .filter(browser => browser.currentURI.spec == "about:newtab");
+    browsers.forEach(browser => this.updateBrowser(browser));
+  },
+
+  updateBrowser: function(browser) {
+    if (TabmixSvc.version(420)) {
+      browser.messageManager.sendAsyncMessage("Tabmix:updateTitlefrombookmark");
+    } else {
+      try {
+        let doc = browser.contentDocument || browser.contentDocumentAsCPOW;
+        this.updateTitles(doc.defaultView.gGrid.cells);
+      } catch (ex) {
+        TabmixSvc.console.reportError(ex);
+      }
+    }
+  },
+
+  updateTitles: function(cells = []) {
+    cells.forEach(cell => {
+      let site = cell.site;
+      if (!site) {
+        return;
+      }
+
+      let enhancedTitle;
+      if (TabmixSvc.version(340)) {
+        let enhanced = gAllPages.enhanced &&
+            DirectoryLinksProvider.getEnhancedLink(site.link);
+        enhancedTitle = enhanced && enhanced.title;
+      }
+
+      let url = site.url;
+      let title, tooltip;
+      if (TabmixSvc.version(400)) {
+        let tabmixTitle = TabmixPlacesUtils.getTitleFromBookmark(url, site.title);
+        title = enhancedTitle ? enhancedTitle :
+                site.link.type == "history" ? site.link.baseDomain :
+                tabmixTitle;
+        tooltip = (tabmixTitle == url ? tabmixTitle : tabmixTitle + "\n" + url);
+      } else {
+        title = enhancedTitle ||
+                TabmixPlacesUtils.getTitleFromBookmark(url, site.title || url);
+        tooltip = (title == url ? title : title + "\n" + url);
+      }
+
+      let link = site._querySelector(".newtab-link");
+      link.setAttribute("title", tooltip);
+      site._querySelector(".newtab-title").textContent = title;
+      site.refreshThumbnail();
+    });
+  },
+};
diff --git a/modules/Utils.jsm b/modules/Utils.jsm
index f7a0811..ad2e4b6 100644
--- a/modules/Utils.jsm
+++ b/modules/Utils.jsm
@@ -16,8 +16,8 @@ const FMM_MESSAGES = [
 
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
-XPCOMUtils.defineLazyModuleGetter(this, "Services",
-  "resource://gre/modules/Services.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils",
+  "resource://gre/modules/PrivateBrowsingUtils.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "TabmixSvc",
   "resource://tabmixplus/Services.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "DocShellCapabilities",
@@ -26,6 +26,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "AutoReload",
   "resource://tabmixplus/AutoReload.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "MergeWindows",
   "resource://tabmixplus/MergeWindows.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "TabmixAboutNewTab",
+  "resource://tabmixplus/AboutNewTab.jsm");
 
 this.TabmixUtils = {
   initMessageManager: function(window) {
@@ -34,6 +36,18 @@ this.TabmixUtils = {
 
     // Load the frame script after registering listeners.
     mm.loadFrameScript("chrome://tabmixplus/content/content.js", true);
+
+    // call TabmixAboutNewTab.updateBrowser for gBrowser._preloadedBrowser,
+    // if it already exist before we loaded our frame script
+    if (TabmixSvc.version(420)) {
+      let {gBrowser, BROWSER_NEW_TAB_URL} = window;
+      if (TabmixSvc.prefBranch.getBoolPref("titlefrombookmark") &&
+          BROWSER_NEW_TAB_URL == "about:newtab" &&
+          gBrowser._preloadedBrowser && gBrowser._isPreloadingEnabled() &&
+          !PrivateBrowsingUtils.isWindowPrivate(window)) {
+        TabmixAboutNewTab.updateBrowser(gBrowser._preloadedBrowser);
+      }
+    }
   },
 
   deinit: function(window) {

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-mozext/tabmixplus.git



More information about the Pkg-mozext-commits mailing list