Index: chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_directories.js |
diff --git a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_directories.js b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_directories.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..6e018eb5840684cd529c6fcdd787457ed4cebcc7 |
--- /dev/null |
+++ b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_directories.js |
@@ -0,0 +1,93 @@ |
+// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+/** |
+ * Wallpaper file system quota. |
+ */ |
+/** #const */ var WallpaperQuota = 1024 * 1024 * 100; |
+ |
+/** |
+ * Wallpaper directories enum. |
+ */ |
+/** #const */ var WallpaperDirNameEnum = { |
+ ORIGINAL: 'original', |
+ THUMBNAIL: 'thumbnail' |
+ }; |
+ |
+var wallpaperDirectories = null; |
+ |
+/** |
+ * Manages custom wallpaper related directories in wallpaper's sandboxed |
+ * FileSystem. |
+ * @constructor |
+ */ |
+function WallpaperDirectories() { |
+ this.wallpaperDirs_ = {}; |
+ this.wallpaperDirs_[WallpaperDirNameEnum.ORIGINAL] = null; |
+ this.wallpaperDirs_[WallpaperDirNameEnum.THUMBNAIL] = null; |
+} |
+ |
+/** |
+ * Gets WallpaperDirectories instance. In case is hasn't been initialized, a new |
+ * instance is created. |
+ * @return {WallpaperDirectories} A WallpaperDirectories instance. |
+ */ |
+WallpaperDirectories.getInstance = function() { |
+ if (wallpaperDirectories === null) |
+ wallpaperDirectories = new WallpaperDirectories(); |
+ return wallpaperDirectories; |
+}; |
+ |
+WallpaperDirectories.prototype = { |
+ /** |
+ * Returns all custom wallpaper related directory entries. |
+ */ |
+ get wallpaperDirs() { |
+ return this.wallpaperDirs_; |
+ }, |
+ |
+ /** |
+ * If dirName is not requested, gets the directory entry of dirName and cache |
+ * the result. Calls success callback if success. |
+ * @param {string} dirName The directory name of requested directory entry. |
+ * @param {function(DirectoryEntry):void} success Call success with requested |
+ * DirectoryEntry. |
+ * @param {function(e):void} failure Call failure when failed to get the |
+ * requested directory. |
+ */ |
+ requestDir: function(dirName, success, failure) { |
+ if (dirName != WallpaperDirNameEnum.ORIGINAL && |
+ dirName != WallpaperDirNameEnum.THUMBNAIL) { |
+ console.error('Error: Unknow directory name.'); |
+ var e = new Error(); |
+ e.code = FileError.NOT_FOUND_ERR; |
+ failure(e); |
+ return; |
+ } |
+ var self = this; |
+ window.webkitRequestFileSystem(window.PERSISTENT, WallpaperQuota, |
+ function(fs) { |
+ fs.root.getDirectory(dirName, {create: true}, function(dirEntry) { |
+ self.wallpaperDirs_[dirName] = dirEntry; |
+ success(dirEntry); |
+ }, failure); |
+ }, failure); |
+ }, |
+ |
+ /** |
+ * Gets DirectoryEntry associated with dirName from cache. If not in cache try |
+ * to request it from FileSystem. |
+ * @param {string} dirName The directory name of requested directory entry. |
+ * @param {function(DirectoryEntry):void} success Call success with requested |
+ * DirectoryEntry. |
+ * @param {function(e):void} failure Call failure when failed to get the |
+ * requested directory. |
+ */ |
+ getDirectory: function(dirName, success, failure) { |
+ if (this.wallpaperDirs[dirName]) |
+ success(this.wallpaperDirs[dirName]); |
+ else |
+ this.requestDir(dirName, success, failure); |
+ } |
+}; |