favicon_set: fix for xulrunner 18
authorJohn Foerch <jjfoerch@earthlink.net>
Wed, 5 Dec 2012 00:59:11 +0000 (4 19:59 -0500)
committerJohn Foerch <jjfoerch@earthlink.net>
Wed, 5 Dec 2012 02:23:50 +0000 (4 21:23 -0500)
The call form of favicon_service.setAndLoadFaviconForPage changed in
xulrunner 18.

get_mozilla_version, version_compare: new utils

modules/env.js
modules/favicon.js
modules/string.js

index 073ca7c..9a39c06 100644 (file)
@@ -23,6 +23,17 @@ const POSIX = !WINDOWS;
 
 
 /**
+ * get_xulrunner_version returns the version string of the running
+ * platform.
+ */
+function get_mozilla_version () {
+    return Cc['@mozilla.org/xre/app-info;1']
+        .getService(Ci.nsIXULAppInfo)
+        .platformVersion;
+}
+
+
+/**
  * getenv returns the value of a named environment variable or null if
  * the environment variable does not exist.
  */
index 83b281b..abbe60b 100644 (file)
@@ -17,10 +17,23 @@ define_variable("favicon_image_max_size", 1024,
     "is considered for use as a favicon.");
 
 
-function favicon_set (buffer, icon_url) {
-    favicon_service.setAndLoadFaviconForPage(buffer.current_uri,
-                                             icon_url, false);
-    buffer.icon = icon_url.spec;
+let (favicon_set_internal) {
+    if (version_compare(get_mozilla_version(), "18.0") >= 0) {
+        favicon_set_internal = function (buffer, icon_url) {
+            favicon_service.setAndLoadFaviconForPage(
+                buffer.current_uri, icon_url, false,
+                favicon_service.FAVICON_LOAD_NON_PRIVATE);
+        };
+    } else {
+        favicon_set_internal = function (buffer, icon_url) {
+            favicon_service.setAndLoadFaviconForPage(
+                buffer.current_uri, icon_url, false);
+        };
+    }
+    function favicon_set (buffer, icon_url) {
+        favicon_set_internal(buffer, icon_url);
+        buffer.icon = icon_url.spec;
+    }
 }
 
 
index 4331c5a..87d0f59 100644 (file)
@@ -196,4 +196,15 @@ function position_in_strings (strings, pos) {
 }
 
 
+/**
+ * version_compare: compare two version strings with nsIVersionComparator.
+ * If a == b, returns 0; if a < b, returns <0; if a > b, returns >0.
+ */
+function version_compare (a, b) {
+    var vc = Cc["@mozilla.org/xpcom/version-comparator;1"]  
+        .getService(Ci.nsIVersionComparator);  
+    return vc.compare(a, b);
+}
+
+
 provide("string");