Bug 528430: Add a directory provider so we can customize the cache folder at runtime [r=blassey]
authorMark Finkle <mfinkle@mozilla.com>
Sat, 14 Nov 2009 00:18:25 -0500
changeset 65798 ac864de0b42f1ffeb41331e3f214b02e105a3fbe
parent 65797 3a12470f78a3d90a815f9a81eff76da73d529647
child 65799 bb203e516f6cc45deb97c12ea8d8a33b9c28e58e
push id1
push userroot
push dateTue, 26 Apr 2011 22:38:44 +0000
treeherdermozilla-beta@bfdb6e623a36 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersblassey
bugs528430
Bug 528430: Add a directory provider so we can customize the cache folder at runtime [r=blassey]
mobile/app/mobile.js
mobile/chrome/content/BrowserView.js
mobile/components/AlertsService.js
mobile/components/DirectoryProvider.js
mobile/components/DownloadManagerUI.js
mobile/components/GeolocationPrompt.js
mobile/components/HelperAppDialog.js
mobile/components/Makefile.in
mobile/components/PromptService.js
mobile/components/XPIDialogService.js
mobile/components/alertsService.js
mobile/components/downloadManagerUI.js
mobile/components/geolocationPrompt.js
mobile/components/helperAppDialog.js
mobile/components/promptService.js
mobile/components/xpiDialogService.js
--- a/mobile/app/mobile.js
+++ b/mobile/app/mobile.js
@@ -56,17 +56,16 @@ pref("ui.use_native_popup_windows", true
 
 pref("javascript.options.showInConsole", false);
 pref("browser.dom.window.dump.enabled", false);
 
 /* cache prefs */
 #ifdef MOZ_PLATFORM_HILDON
 pref("browser.cache.disk.enable", true);
 pref("browser.cache.disk.capacity", 10240); // kilobytes
-pref("browser.cache.disk.parent_directory", "/media/mmc2/.mozilla/@APP_NAME@");
 #elifdef WINCE
 pref("browser.cache.disk.enable", false);
 pref("browser.cache.disk.capacity", 0); // kilobytes
 #endif
 pref("browser.cache.memory.enable", true);
 pref("browser.cache.memory.capacity", 1024); // kilobytes
 
 /* tile cache prefs */
@@ -85,19 +84,16 @@ pref("tile.cache.size", 30); // tiles
 pref("image.cache.size", 1048576); // bytes
 
 /* offline cache prefs */
 pref("browser.offline-apps.notify", true);
 pref("browser.cache.offline.enable", true);
 pref("browser.cache.offline.capacity", 5120); // kilobytes
 pref("offline-apps.quota.max", 2048); // kilobytes
 pref("offline-apps.quota.warn", 1024); // kilobytes
-#ifdef MOZ_PLATFORM_HILDON
-pref("browser.cache.offline.parent_directory", "/media/mmc2/.mozilla/@APP_NAME@");
-#endif
 
 /* http prefs */
 pref("network.http.pipelining", true);
 pref("network.http.pipelining.ssl", true);
 pref("network.http.proxy.pipelining", true);
 pref("network.http.pipelining.maxrequests" , 6);
 pref("network.http.keep-alive.timeout", 600);
 pref("network.http.max-connections", 6);
--- a/mobile/chrome/content/BrowserView.js
+++ b/mobile/chrome/content/BrowserView.js
@@ -248,18 +248,18 @@ BrowserView.prototype = {
     if (cacheSize == -1) {
       let sysInfo = Cc["@mozilla.org/system-info;1"].getService(Ci.nsIPropertyBag2);
       let device = sysInfo.get("device");
       switch (device) {
 #ifdef MOZ_PLATFORM_HILDON
         case "Nokia N900":
           cacheSize = 26;
           break;
-        case "Nokia N8XX":
-          // N8XX has half the memory of N900 and crashes with higher numbers
+        case "Nokia N8xx":
+          // N8xx has half the memory of N900 and crashes with higher numbers
           cacheSize = 10;
           break;
 #endif
         default:
           // Use a minimum number of tiles sice we don't know the device
           cacheSize = 6;
       }
     }
rename from mobile/components/alertsService.js
rename to mobile/components/AlertsService.js
new file mode 100644
--- /dev/null
+++ b/mobile/components/DirectoryProvider.js
@@ -0,0 +1,93 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ * http://www.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is XPI Dialog Service.
+ *
+ * The Initial Developer of the Original Code is Mozilla Foundation.
+ * Portions created by the Initial Developer are Copyright (C) 2009
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Mark Finkle <mfinkle@mozilla.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+
+Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+
+// -----------------------------------------------------------------------
+// Directory Provider for special browser folders and files
+// -----------------------------------------------------------------------
+
+const NS_APP_CACHE_PARENT_DIR = "cachePDir";
+
+function DirectoryProvider() {}
+
+DirectoryProvider.prototype = {
+  classDescription: "Directory Provider for special browser folders and files",
+  contractID: "@mozilla.org/browser/directory-provider;1",
+  classID: Components.ID("{ef0f7a87-c1ee-45a8-8d67-26f586e46a4b}"),
+  
+  QueryInterface: XPCOMUtils.generateQI([Ci.nsIDirectoryServiceProvider, Ci.nsIDirectoryServiceProvider2]),
+
+  _xpcom_categories: [
+    { category: "xpcom-directory-providers", entry: "browser-directory-provider" }
+  ],
+
+  getFile: function(prop, persistent) {
+    if (prop == NS_APP_CACHE_PARENT_DIR) {
+      let dirsvc = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties);
+      let profile = dirsvc.get("ProfD", Ci.nsIFile);
+
+      let sysInfo = Cc["@mozilla.org/system-info;1"].getService(Ci.nsIPropertyBag2);
+      let device = sysInfo.get("device");
+      switch (device) {
+#ifdef MOZ_PLATFORM_HILDON
+        case "Nokia N900":
+          return profile;
+        
+        case "Nokia N8xx":
+          let folder = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
+          folder.initWithPath("/media/mmc2/.mozilla/fennec");
+          return folder;
+#endif
+        default:
+          return profile;
+      }
+    }
+    return Components.results.NS_ERROR_FAILURE;
+  },
+
+  getFiles: function(prop, persistent) {
+    return Components.results.NS_ERROR_FAILURE;
+  }
+};
+
+function NSGetModule(aCompMgr, aFileSpec) {
+  return XPCOMUtils.generateModule([DirectoryProvider]);
+}
+
rename from mobile/components/downloadManagerUI.js
rename to mobile/components/DownloadManagerUI.js
rename from mobile/components/geolocationPrompt.js
rename to mobile/components/GeolocationPrompt.js
rename from mobile/components/helperAppDialog.js
rename to mobile/components/HelperAppDialog.js
--- a/mobile/components/Makefile.in
+++ b/mobile/components/Makefile.in
@@ -41,25 +41,28 @@ topsrcdir  = @top_srcdir@
 srcdir     = @srcdir@
 VPATH      = @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 MODULE = browsercomps
 XPIDL_MODULE = browsercompsbase
 
-EXTRA_PP_COMPONENTS = AboutRedirector.js
+EXTRA_PP_COMPONENTS = \
+        AboutRedirector.js \
+        DirectoryProvider.js\
+        $(NULL)
 
 EXTRA_COMPONENTS = \
         BrowserStartup.js \
-	geolocationPrompt.js \
-	alertsService.js \
-	xpiDialogService.js \
-	downloadManagerUI.js \
-        helperAppDialog.js \
-        promptService.js \
+        GeolocationPrompt.js \
+        AlertsService.js \
+        XPIDialogService.js \
+        DownloadManagerUI.js \
+        HelperAppDialog.js \
+        PromptService.js \
 	$(NULL)
 
 DIRS = protocols \
-       phone \
-       $(NULL)
+        phone \
+        $(NULL)
 
 include $(topsrcdir)/config/rules.mk
rename from mobile/components/promptService.js
rename to mobile/components/PromptService.js
rename from mobile/components/xpiDialogService.js
rename to mobile/components/XPIDialogService.js