Index: chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_images_grid.js |
diff --git a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_images_grid.js b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_images_grid.js |
index cce2adaada45ce2a7c0d2a28421b6712e380ec48..35a0d99103cf1f581303f646577c46265264ef19 100644 |
--- a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_images_grid.js |
+++ b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_images_grid.js |
@@ -11,11 +11,21 @@ cr.define('wallpapers', function() { |
/** @const */ var ThumbnailSuffix = '_thumbnail.png'; |
/** |
+ * Wallpaper sources enum. |
+ */ |
+ /** #const */ var WallpaperSourceEnum = { |
+ Online: 'ONLINE', |
+ Custom: 'CUSTOM', |
+ AddNew: 'ADDNEW' |
+ }; |
+ |
+ /** |
* Creates a new wallpaper thumbnails grid item. |
- * @param {{baseURL: string, dynamicURL: string, layout: string, |
- * author: string, authorWebsite: string, availableOffline: boolean}} |
- * wallpaperInfo Wallpaper baseURL, dynamicURL, layout, author and |
- * author website. |
+ * @param {{baseURL: string, layout: string, source: string, |
+ * availableOffline: boolean, opt_dynamicURL: string, |
+ * opt_author: string, opt_authorWebsite: string}} |
+ * wallpaperInfo Wallpaper data item in WallpaperThumbnailsGrid's data |
+ * model. |
* @constructor |
* @extends {cr.ui.GridItem} |
*/ |
@@ -38,37 +48,77 @@ cr.define('wallpapers', function() { |
cr.defineProperty(imageEl, 'offline', cr.PropertyKind.BOOL_ATTR); |
imageEl.offline = this.dataItem.availableOffline; |
this.appendChild(imageEl); |
- |
var self = this; |
- chrome.wallpaperPrivate.getThumbnail(this.dataItem.baseURL, 'ONLINE', |
- function(data) { |
- if (data) { |
- var blob = new Blob([new Int8Array(data)], {'type' : 'image\/png'}); |
- imageEl.src = window.URL.createObjectURL(blob); |
- imageEl.addEventListener('load', function(e) { |
- window.URL.revokeObjectURL(this.src); |
+ |
+ switch (this.dataItem.source) { |
+ case WallpaperSourceEnum.AddNew: |
+ this.id = 'add-new'; |
+ this.addEventListener('click', function(e) { |
+ $('wallpaper-selection-container').hidden = false; |
}); |
- } else { |
- var xhr = new XMLHttpRequest(); |
- xhr.open('GET', self.dataItem.baseURL + ThumbnailSuffix, true); |
- xhr.responseType = 'arraybuffer'; |
- xhr.send(null); |
- xhr.addEventListener('load', function(e) { |
- if (xhr.status === 200) { |
- chrome.wallpaperPrivate.saveThumbnail(self.dataItem.baseURL, |
- xhr.response); |
- var blob = new Blob([new Int8Array(xhr.response)], |
- {'type' : 'image\/png'}); |
+ break; |
+ case WallpaperSourceEnum.Custom: |
+ var errorHandler = function(e) { |
+ console.error('Can not access file system.'); |
+ }; |
+ var wallpaperDirectories = WallpaperDirectories.getInstance(); |
+ var getThumbnail = function(fileName) { |
+ var setURL = function(fileEntry) { |
+ imageEl.src = fileEntry.toURL(); |
+ }; |
+ var fallback = function() { |
+ wallpaperDirectories.getDirectory(WallpaperDirNameEnum.ORIGINAL, |
+ function(dirEntry) { |
+ dirEntry.getFile(fileName, {create: false}, setURL, |
+ errorHandler); |
+ }, errorHandler); |
+ }; |
+ var success = function(dirEntry) { |
+ dirEntry.getFile(fileName, {create: false}, setURL, fallback); |
+ }; |
+ wallpaperDirectories.getDirectory(WallpaperDirNameEnum.THUMBNAIL, |
+ success, |
+ errorHandler); |
+ } |
+ getThumbnail(self.dataItem.baseURL); |
+ break; |
+ case WallpaperSourceEnum.Online: |
+ chrome.wallpaperPrivate.getThumbnail(this.dataItem.baseURL, |
+ this.dataItem.source, |
+ function(data) { |
+ if (data) { |
+ var blob = new Blob([new Int8Array(data)], |
+ {'type': 'image\/png'}); |
imageEl.src = window.URL.createObjectURL(blob); |
- // TODO(bshe): We currently use empty div to reserve space for |
- // thumbnail. Use a placeholder like "loading" image may better. |
imageEl.addEventListener('load', function(e) { |
window.URL.revokeObjectURL(this.src); |
}); |
+ } else if (self.dataItem.source == WallpaperSourceEnum.Online) { |
+ var xhr = new XMLHttpRequest(); |
+ xhr.open('GET', self.dataItem.baseURL + ThumbnailSuffix, true); |
+ xhr.responseType = 'arraybuffer'; |
+ xhr.send(null); |
+ xhr.addEventListener('load', function(e) { |
+ if (xhr.status === 200) { |
+ chrome.wallpaperPrivate.saveThumbnail(self.dataItem.baseURL, |
+ xhr.response); |
+ var blob = new Blob([new Int8Array(xhr.response)], |
+ {'type' : 'image\/png'}); |
+ imageEl.src = window.URL.createObjectURL(blob); |
+ // TODO(bshe): We currently use empty div to reserve space for |
+ // thumbnail. Use a placeholder like "loading" image may |
+ // better. |
+ imageEl.addEventListener('load', function(e) { |
+ window.URL.revokeObjectURL(this.src); |
+ }); |
+ } |
+ }); |
} |
}); |
- } |
- }); |
+ break; |
+ default: |
+ console.error('Unsupported image source.'); |
+ } |
}, |
}; |
@@ -240,6 +290,7 @@ cr.define('wallpapers', function() { |
}; |
return { |
+ WallpaperSourceEnum: WallpaperSourceEnum, |
WallpaperThumbnailsGrid: WallpaperThumbnailsGrid |
}; |
}); |