Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2482)

Unified Diff: chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js

Issue 2944703004: Run clang-format on .js files in c/b/r/chromeos (Closed)
Patch Set: Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_images_grid.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js
diff --git a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js
index 0d194f3c36332ed76d00fd8459c9fb3a73eb2197..53f078c5c7eb615e718bee62a25fa864369a2391 100644
--- a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js
+++ b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js
@@ -31,1120 +31,1107 @@ function WallpaperManager(dialogDom) {
// TODO(bshe): Get rid of anonymous namespace.
(function() {
- /**
- * URL of the learn more page for wallpaper picker.
- */
- /** @const */ var LearnMoreURL =
- 'https://support.google.com/chromebook/?p=wallpaper_fileerror&hl=' +
- navigator.language;
-
- /**
- * Index of the All category. It is the first category in wallpaper picker.
- */
- /** @const */ var AllCategoryIndex = 0;
-
- /**
- * Index offset of categories parsed from manifest. The All category is added
- * before them. So the offset is 1.
- */
- /** @const */ var OnlineCategoriesOffset = 1;
-
- /**
- * Returns a translated string.
- *
- * Wrapper function to make dealing with translated strings more concise.
- *
- * @param {string} id The id of the string to return.
- * @return {string} The translated string.
- */
- function str(id) {
- return loadTimeData.getString(id);
- }
+/**
+ * URL of the learn more page for wallpaper picker.
+ */
+/** @const */ var LearnMoreURL =
+ 'https://support.google.com/chromebook/?p=wallpaper_fileerror&hl=' +
+ navigator.language;
- /**
- * Returns the base name for |file_path|.
- * @param {string} file_path The path of the file.
- * @return {string} The base name of the file.
- */
- function getBaseName(file_path) {
- return file_path.substring(file_path.lastIndexOf('/') + 1);
- }
+/**
+ * Index of the All category. It is the first category in wallpaper picker.
+ */
+/** @const */ var AllCategoryIndex = 0;
- /**
- * Retruns the current selected layout.
- * @return {string} The selected layout.
- */
- function getSelectedLayout() {
- var setWallpaperLayout = $('set-wallpaper-layout');
- return setWallpaperLayout.options[setWallpaperLayout.selectedIndex].value;
- }
+/**
+ * Index offset of categories parsed from manifest. The All category is added
+ * before them. So the offset is 1.
+ */
+/** @const */ var OnlineCategoriesOffset = 1;
- /**
- * Loads translated strings.
- */
- WallpaperManager.initStrings = function(callback) {
- chrome.wallpaperPrivate.getStrings(function(strings) {
- loadTimeData.data = strings;
- if (callback)
- callback();
- });
- };
+/**
+ * Returns a translated string.
+ *
+ * Wrapper function to make dealing with translated strings more concise.
+ *
+ * @param {string} id The id of the string to return.
+ * @return {string} The translated string.
+ */
+function str(id) {
+ return loadTimeData.getString(id);
+}
- /**
- * Requests wallpaper manifest file from server.
- */
- WallpaperManager.prototype.fetchManifest_ = function() {
- var locale = navigator.language;
- if (!this.enableOnlineWallpaper_) {
- this.postManifestDomInit_();
- return;
- }
+/**
+ * Returns the base name for |file_path|.
+ * @param {string} file_path The path of the file.
+ * @return {string} The base name of the file.
+ */
+function getBaseName(file_path) {
+ return file_path.substring(file_path.lastIndexOf('/') + 1);
+}
- var urls = [
- str('manifestBaseURL') + locale + '.json',
- // Fallback url. Use 'en' locale by default.
- str('manifestBaseURL') + 'en.json'];
-
- var asyncFetchManifestFromUrls = function(urls, func, successCallback,
- failureCallback) {
- var index = 0;
- var loop = {
- next: function() {
- if (index < urls.length) {
- func(loop, urls[index]);
- index++;
- } else {
- failureCallback();
- }
- },
+/**
+ * Retruns the current selected layout.
+ * @return {string} The selected layout.
+ */
+function getSelectedLayout() {
+ var setWallpaperLayout = $('set-wallpaper-layout');
+ return setWallpaperLayout.options[setWallpaperLayout.selectedIndex].value;
+}
+
+/**
+ * Loads translated strings.
+ */
+WallpaperManager.initStrings = function(callback) {
+ chrome.wallpaperPrivate.getStrings(function(strings) {
+ loadTimeData.data = strings;
+ if (callback)
+ callback();
+ });
+};
- success: function(response) {
- successCallback(response);
- },
+/**
+ * Requests wallpaper manifest file from server.
+ */
+WallpaperManager.prototype.fetchManifest_ = function() {
+ var locale = navigator.language;
+ if (!this.enableOnlineWallpaper_) {
+ this.postManifestDomInit_();
+ return;
+ }
- failure: function() {
+ var urls = [
+ str('manifestBaseURL') + locale + '.json',
+ // Fallback url. Use 'en' locale by default.
+ str('manifestBaseURL') + 'en.json'
+ ];
+
+ var asyncFetchManifestFromUrls = function(
+ urls, func, successCallback, failureCallback) {
+ var index = 0;
+ var loop = {
+ next: function() {
+ if (index < urls.length) {
+ func(loop, urls[index]);
+ index++;
+ } else {
failureCallback();
}
- };
- loop.next();
- };
+ },
- var fetchManifestAsync = function(loop, url) {
- var xhr = new XMLHttpRequest();
- try {
- xhr.addEventListener('loadend', function(e) {
- if (this.status == 200 && this.responseText != null) {
- try {
- var manifest = JSON.parse(this.responseText);
- loop.success(manifest);
- } catch (e) {
- loop.failure();
- }
- } else {
- loop.next();
- }
- });
- xhr.open('GET', url, true);
- xhr.send(null);
- } catch (e) {
- loop.failure();
+ success: function(response) {
+ successCallback(response);
+ },
+
+ failure: function() {
+ failureCallback();
}
};
+ loop.next();
+ };
- if (navigator.onLine) {
- asyncFetchManifestFromUrls(urls, fetchManifestAsync,
- this.onLoadManifestSuccess_.bind(this),
- this.onLoadManifestFailed_.bind(this));
- } else {
- // If device is offline, fetches manifest from local storage.
- // TODO(bshe): Always loading the offline manifest first and replacing
- // with the online one when available.
- this.onLoadManifestFailed_();
+ var fetchManifestAsync = function(loop, url) {
+ var xhr = new XMLHttpRequest();
+ try {
+ xhr.addEventListener('loadend', function(e) {
+ if (this.status == 200 && this.responseText != null) {
+ try {
+ var manifest = JSON.parse(this.responseText);
+ loop.success(manifest);
+ } catch (e) {
+ loop.failure();
+ }
+ } else {
+ loop.next();
+ }
+ });
+ xhr.open('GET', url, true);
+ xhr.send(null);
+ } catch (e) {
+ loop.failure();
}
};
- /**
- * Shows error message in a centered dialog.
- * @private
- * @param {string} errroMessage The string to show in the error dialog.
- */
- WallpaperManager.prototype.showError_ = function(errorMessage) {
- document.querySelector('.error-message').textContent = errorMessage;
- $('error-container').hidden = false;
- };
+ if (navigator.onLine) {
+ asyncFetchManifestFromUrls(
+ urls, fetchManifestAsync, this.onLoadManifestSuccess_.bind(this),
+ this.onLoadManifestFailed_.bind(this));
+ } else {
+ // If device is offline, fetches manifest from local storage.
+ // TODO(bshe): Always loading the offline manifest first and replacing
+ // with the online one when available.
+ this.onLoadManifestFailed_();
+ }
+};
- /**
- * Sets manifest loaded from server. Called after manifest is successfully
- * loaded.
- * @param {object} manifest The parsed manifest file.
- */
- WallpaperManager.prototype.onLoadManifestSuccess_ = function(manifest) {
- this.manifest_ = manifest;
- WallpaperUtil.saveToLocalStorage(Constants.AccessLocalManifestKey,
- manifest);
- this.postManifestDomInit_();
- };
+/**
+ * Shows error message in a centered dialog.
+ * @private
+ * @param {string} errroMessage The string to show in the error dialog.
+ */
+WallpaperManager.prototype.showError_ = function(errorMessage) {
+ document.querySelector('.error-message').textContent = errorMessage;
+ $('error-container').hidden = false;
+};
- // Sets manifest to previously saved object if any and shows connection error.
- // Called after manifest failed to load.
- WallpaperManager.prototype.onLoadManifestFailed_ = function() {
- var accessManifestKey = Constants.AccessLocalManifestKey;
- var self = this;
- Constants.WallpaperLocalStorage.get(accessManifestKey, function(items) {
- self.manifest_ = items[accessManifestKey] ?
- items[accessManifestKey] : null;
- self.showError_(str('connectionFailed'));
- self.postManifestDomInit_();
- $('wallpaper-grid').classList.add('image-picker-offline');
- });
- };
+/**
+ * Sets manifest loaded from server. Called after manifest is successfully
+ * loaded.
+ * @param {object} manifest The parsed manifest file.
+ */
+WallpaperManager.prototype.onLoadManifestSuccess_ = function(manifest) {
+ this.manifest_ = manifest;
+ WallpaperUtil.saveToLocalStorage(Constants.AccessLocalManifestKey, manifest);
+ this.postManifestDomInit_();
+};
+
+// Sets manifest to previously saved object if any and shows connection error.
+// Called after manifest failed to load.
+WallpaperManager.prototype.onLoadManifestFailed_ = function() {
+ var accessManifestKey = Constants.AccessLocalManifestKey;
+ var self = this;
+ Constants.WallpaperLocalStorage.get(accessManifestKey, function(items) {
+ self.manifest_ = items[accessManifestKey] ? items[accessManifestKey] : null;
+ self.showError_(str('connectionFailed'));
+ self.postManifestDomInit_();
+ $('wallpaper-grid').classList.add('image-picker-offline');
+ });
+};
- /**
- * Toggle surprise me feature of wallpaper picker. It fires an storage
- * onChanged event. Event handler for that event is in event_page.js.
- * @private
- */
- WallpaperManager.prototype.toggleSurpriseMe_ = function() {
- var self = this;
- var checkbox = $('surprise-me').querySelector('#checkbox');
- var shouldEnable = !checkbox.classList.contains('checked');
- var onSuccess = function() {
- if (chrome.runtime.lastError == null) {
- if (shouldEnable) {
- self.document_.body.removeAttribute('surprise-me-disabled');
- checkbox.classList.add('checked');
- // Hides the wallpaper set by message if there is any.
- $('wallpaper-set-by-message').textContent = '';
- } else {
- // Unchecking the "Surprise me" checkbox falls back to the previous
- // wallpaper before "Surprise me" was turned on.
- if (self.wallpaperGrid_.activeItem) {
- self.setSelectedWallpaper_(self.wallpaperGrid_.activeItem);
- self.onWallpaperChanged_(self.wallpaperGrid_.activeItem,
- self.currentWallpaper_);
- }
- checkbox.classList.remove('checked');
- self.document_.body.setAttribute('surprise-me-disabled', '');
- }
- $('categories-list').disabled = shouldEnable;
- $('wallpaper-grid').disabled = shouldEnable;
+/**
+ * Toggle surprise me feature of wallpaper picker. It fires an storage
+ * onChanged event. Event handler for that event is in event_page.js.
+ * @private
+ */
+WallpaperManager.prototype.toggleSurpriseMe_ = function() {
+ var self = this;
+ var checkbox = $('surprise-me').querySelector('#checkbox');
+ var shouldEnable = !checkbox.classList.contains('checked');
+ var onSuccess = function() {
+ if (chrome.runtime.lastError == null) {
+ if (shouldEnable) {
+ self.document_.body.removeAttribute('surprise-me-disabled');
+ checkbox.classList.add('checked');
+ // Hides the wallpaper set by message if there is any.
+ $('wallpaper-set-by-message').textContent = '';
} else {
- // TODO(bshe): show error message to user.
- console.error('Failed to save surprise me option to chrome storage.');
+ // Unchecking the "Surprise me" checkbox falls back to the previous
+ // wallpaper before "Surprise me" was turned on.
+ if (self.wallpaperGrid_.activeItem) {
+ self.setSelectedWallpaper_(self.wallpaperGrid_.activeItem);
+ self.onWallpaperChanged_(
+ self.wallpaperGrid_.activeItem, self.currentWallpaper_);
+ }
+ checkbox.classList.remove('checked');
+ self.document_.body.setAttribute('surprise-me-disabled', '');
}
- };
-
- // To prevent the onChanged event being fired twice, we only save the value
- // to sync storage if the sync theme is enabled, otherwise save it to local
- // storage.
- WallpaperUtil.enabledSyncThemesCallback(function(syncEnabled) {
- if (syncEnabled)
- WallpaperUtil.saveToSyncStorage(
- Constants.AccessSyncSurpriseMeEnabledKey, shouldEnable, onSuccess);
- else
- WallpaperUtil.saveToLocalStorage(
- Constants.AccessLocalSurpriseMeEnabledKey, shouldEnable, onSuccess);
- });
+ $('categories-list').disabled = shouldEnable;
+ $('wallpaper-grid').disabled = shouldEnable;
+ } else {
+ // TODO(bshe): show error message to user.
+ console.error('Failed to save surprise me option to chrome storage.');
+ }
};
- /**
- * One-time initialization of various DOM nodes. Fetching manifest may take a
- * long time due to slow connection. Dom nodes that do not depend on manifest
- * should be initialized here to unblock from manifest fetching.
- */
- WallpaperManager.prototype.preManifestDomInit_ = function() {
- $('window-close-button').addEventListener('click', function() {
- window.close();
- });
- this.document_.defaultView.addEventListener(
- 'resize', this.onResize_.bind(this));
- this.document_.defaultView.addEventListener(
- 'keydown', this.onKeyDown_.bind(this));
- $('learn-more').href = LearnMoreURL;
- $('close-error').addEventListener('click', function() {
- $('error-container').hidden = true;
- });
- $('close-wallpaper-selection').addEventListener('click', function() {
- $('wallpaper-selection-container').hidden = true;
- $('set-wallpaper-layout').disabled = true;
- });
+ // To prevent the onChanged event being fired twice, we only save the value
+ // to sync storage if the sync theme is enabled, otherwise save it to local
+ // storage.
+ WallpaperUtil.enabledSyncThemesCallback(function(syncEnabled) {
+ if (syncEnabled)
+ WallpaperUtil.saveToSyncStorage(
+ Constants.AccessSyncSurpriseMeEnabledKey, shouldEnable, onSuccess);
+ else
+ WallpaperUtil.saveToLocalStorage(
+ Constants.AccessLocalSurpriseMeEnabledKey, shouldEnable, onSuccess);
+ });
+};
+
+/**
+ * One-time initialization of various DOM nodes. Fetching manifest may take a
+ * long time due to slow connection. Dom nodes that do not depend on manifest
+ * should be initialized here to unblock from manifest fetching.
+ */
+WallpaperManager.prototype.preManifestDomInit_ = function() {
+ $('window-close-button').addEventListener('click', function() {
+ window.close();
+ });
+ this.document_.defaultView.addEventListener(
+ 'resize', this.onResize_.bind(this));
+ this.document_.defaultView.addEventListener(
+ 'keydown', this.onKeyDown_.bind(this));
+ $('learn-more').href = LearnMoreURL;
+ $('close-error').addEventListener('click', function() {
+ $('error-container').hidden = true;
+ });
+ $('close-wallpaper-selection').addEventListener('click', function() {
+ $('wallpaper-selection-container').hidden = true;
+ $('set-wallpaper-layout').disabled = true;
+ });
+};
+
+/**
+ * One-time initialization of various DOM nodes. Dom nodes that do depend on
+ * manifest should be initialized here.
+ */
+WallpaperManager.prototype.postManifestDomInit_ = function() {
+ i18nTemplate.process(this.document_, loadTimeData);
+ this.initCategoriesList_();
+ this.initThumbnailsGrid_();
+ this.presetCategory_();
+
+ $('file-selector')
+ .addEventListener('change', this.onFileSelectorChanged_.bind(this));
+ $('set-wallpaper-layout')
+ .addEventListener('change', this.onWallpaperLayoutChanged_.bind(this));
+
+ // Always prefer the value from local filesystem to avoid the time window
+ // of setting the third party app name and the third party wallpaper.
+ var getThirdPartyAppName = function(callback) {
+ Constants.WallpaperLocalStorage.get(
+ Constants.AccessLocalWallpaperInfoKey, function(items) {
+ var localInfo = items[Constants.AccessLocalWallpaperInfoKey];
+ if (localInfo && localInfo.hasOwnProperty('appName'))
+ callback(localInfo.appName);
+ else if (loadTimeData.valueExists('wallpaperAppName'))
+ callback(str('wallpaperAppName'));
+ else
+ callback('');
+ });
};
- /**
- * One-time initialization of various DOM nodes. Dom nodes that do depend on
- * manifest should be initialized here.
- */
- WallpaperManager.prototype.postManifestDomInit_ = function() {
- i18nTemplate.process(this.document_, loadTimeData);
- this.initCategoriesList_();
- this.initThumbnailsGrid_();
- this.presetCategory_();
-
- $('file-selector').addEventListener(
- 'change', this.onFileSelectorChanged_.bind(this));
- $('set-wallpaper-layout').addEventListener(
- 'change', this.onWallpaperLayoutChanged_.bind(this));
-
- // Always prefer the value from local filesystem to avoid the time window
- // of setting the third party app name and the third party wallpaper.
- var getThirdPartyAppName = function(callback) {
- Constants.WallpaperLocalStorage.get(
- Constants.AccessLocalWallpaperInfoKey, function(items) {
- var localInfo = items[Constants.AccessLocalWallpaperInfoKey];
- if (localInfo && localInfo.hasOwnProperty('appName'))
- callback(localInfo.appName);
- else if (loadTimeData.valueExists('wallpaperAppName'))
- callback(str('wallpaperAppName'));
- else
- callback('');
- });
+ getThirdPartyAppName(function(appName) {
+ if (!!appName) {
+ $('wallpaper-set-by-message').textContent =
+ loadTimeData.getStringF('currentWallpaperSetByMessage', appName);
+ $('wallpaper-grid').classList.add('small');
+ } else {
+ $('wallpaper-grid').classList.remove('small');
+ }
+ });
+
+ if (this.enableOnlineWallpaper_) {
+ var self = this;
+ self.document_.body.setAttribute('surprise-me-disabled', '');
+ $('surprise-me').hidden = false;
+ $('surprise-me')
+ .addEventListener('click', this.toggleSurpriseMe_.bind(this));
+ var onSurpriseMeEnabled = function() {
+ $('surprise-me').querySelector('#checkbox').classList.add('checked');
+ $('categories-list').disabled = true;
+ $('wallpaper-grid').disabled = true;
+ self.document_.body.removeAttribute('surprise-me-disabled');
};
- getThirdPartyAppName(function(appName) {
- if (!!appName) {
- $('wallpaper-set-by-message').textContent = loadTimeData.getStringF(
- 'currentWallpaperSetByMessage', appName);
- $('wallpaper-grid').classList.add('small');
+ WallpaperUtil.enabledSyncThemesCallback(function(syncEnabled) {
+ // Surprise me has been moved from local to sync storage, prefer
+ // values from sync, but if unset check local and update synced pref
+ // if applicable.
+ if (syncEnabled) {
+ Constants.WallpaperSyncStorage.get(
+ Constants.AccessSyncSurpriseMeEnabledKey, function(items) {
+ if (items.hasOwnProperty(
+ Constants.AccessSyncSurpriseMeEnabledKey)) {
+ if (items[Constants.AccessSyncSurpriseMeEnabledKey]) {
+ onSurpriseMeEnabled();
+ }
+ } else {
+ Constants.WallpaperLocalStorage.get(
+ Constants.AccessLocalSurpriseMeEnabledKey, function(items) {
+ if (items.hasOwnProperty(
+ Constants.AccessLocalSurpriseMeEnabledKey)) {
+ WallpaperUtil.saveToSyncStorage(
+ Constants.AccessSyncSurpriseMeEnabledKey,
+ items[Constants.AccessLocalSurpriseMeEnabledKey]);
+ if (items[Constants.AccessLocalSurpriseMeEnabledKey]) {
+ onSurpriseMeEnabled();
+ }
+ }
+ });
+ }
+ });
} else {
- $('wallpaper-grid').classList.remove('small');
+ Constants.WallpaperLocalStorage.get(
+ Constants.AccessLocalSurpriseMeEnabledKey, function(items) {
+ if (items.hasOwnProperty(
+ Constants.AccessLocalSurpriseMeEnabledKey)) {
+ if (items[Constants.AccessLocalSurpriseMeEnabledKey]) {
+ onSurpriseMeEnabled();
+ }
+ }
+ });
}
});
- if (this.enableOnlineWallpaper_) {
- var self = this;
- self.document_.body.setAttribute('surprise-me-disabled', '');
- $('surprise-me').hidden = false;
- $('surprise-me').addEventListener('click',
- this.toggleSurpriseMe_.bind(this));
- var onSurpriseMeEnabled = function() {
- $('surprise-me').querySelector('#checkbox').classList.add('checked');
- $('categories-list').disabled = true;
- $('wallpaper-grid').disabled = true;
- self.document_.body.removeAttribute('surprise-me-disabled');
- };
-
- WallpaperUtil.enabledSyncThemesCallback(function(syncEnabled) {
- // Surprise me has been moved from local to sync storage, prefer
- // values from sync, but if unset check local and update synced pref
- // if applicable.
- if (syncEnabled) {
- Constants.WallpaperSyncStorage.get(
- Constants.AccessSyncSurpriseMeEnabledKey, function(items) {
- if (items.hasOwnProperty(
- Constants.AccessSyncSurpriseMeEnabledKey)) {
- if (items[Constants.AccessSyncSurpriseMeEnabledKey]) {
- onSurpriseMeEnabled();
- }
- } else {
- Constants.WallpaperLocalStorage.get(
- Constants.AccessLocalSurpriseMeEnabledKey, function(items) {
- if (items.hasOwnProperty(
- Constants.AccessLocalSurpriseMeEnabledKey)) {
- WallpaperUtil.saveToSyncStorage(
- Constants.AccessSyncSurpriseMeEnabledKey,
- items[Constants.AccessLocalSurpriseMeEnabledKey]);
- if (items[Constants.AccessLocalSurpriseMeEnabledKey]) {
- onSurpriseMeEnabled();
- }
- }
- });
- }
- });
- } else {
- Constants.WallpaperLocalStorage.get(
- Constants.AccessLocalSurpriseMeEnabledKey, function(items) {
- if (items.hasOwnProperty(
- Constants.AccessLocalSurpriseMeEnabledKey)) {
- if (items[Constants.AccessLocalSurpriseMeEnabledKey]) {
- onSurpriseMeEnabled();
- }
- }
- });
+ window.addEventListener('offline', function() {
+ chrome.wallpaperPrivate.getOfflineWallpaperList(function(lists) {
+ if (!self.downloadedListMap_)
+ self.downloadedListMap_ = {};
+ for (var i = 0; i < lists.length; i++) {
+ self.downloadedListMap_[lists[i]] = true;
}
- });
-
- window.addEventListener('offline', function() {
- chrome.wallpaperPrivate.getOfflineWallpaperList(function(lists) {
- if (!self.downloadedListMap_)
- self.downloadedListMap_ = {};
- for (var i = 0; i < lists.length; i++) {
- self.downloadedListMap_[lists[i]] = true;
- }
- var thumbnails = self.document_.querySelectorAll('.thumbnail');
- for (var i = 0; i < thumbnails.length; i++) {
- var thumbnail = thumbnails[i];
- var url = self.wallpaperGrid_.dataModel.item(i).baseURL;
- var fileName = getBaseName(url) + Constants.HighResolutionSuffix;
- if (self.downloadedListMap_ &&
- self.downloadedListMap_.hasOwnProperty(encodeURI(fileName))) {
- thumbnail.offline = true;
- }
+ var thumbnails = self.document_.querySelectorAll('.thumbnail');
+ for (var i = 0; i < thumbnails.length; i++) {
+ var thumbnail = thumbnails[i];
+ var url = self.wallpaperGrid_.dataModel.item(i).baseURL;
+ var fileName = getBaseName(url) + Constants.HighResolutionSuffix;
+ if (self.downloadedListMap_ &&
+ self.downloadedListMap_.hasOwnProperty(encodeURI(fileName))) {
+ thumbnail.offline = true;
}
- });
- $('wallpaper-grid').classList.add('image-picker-offline');
- });
- window.addEventListener('online', function() {
- self.downloadedListMap_ = null;
- $('wallpaper-grid').classList.remove('image-picker-offline');
+ }
});
- }
+ $('wallpaper-grid').classList.add('image-picker-offline');
+ });
+ window.addEventListener('online', function() {
+ self.downloadedListMap_ = null;
+ $('wallpaper-grid').classList.remove('image-picker-offline');
+ });
+ }
- this.onResize_();
- this.initContextMenuAndCommand_();
- WallpaperUtil.testSendMessage('launched');
- };
+ this.onResize_();
+ this.initContextMenuAndCommand_();
+ WallpaperUtil.testSendMessage('launched');
+};
- /**
- * One-time initialization of context menu and command.
- */
- WallpaperManager.prototype.initContextMenuAndCommand_ = function() {
- this.wallpaperContextMenu_ = $('wallpaper-context-menu');
- cr.ui.Menu.decorate(this.wallpaperContextMenu_);
- cr.ui.contextMenuHandler.setContextMenu(this.wallpaperGrid_,
- this.wallpaperContextMenu_);
- var commands = this.dialogDom_.querySelectorAll('command');
- for (var i = 0; i < commands.length; i++)
- cr.ui.Command.decorate(commands[i]);
-
- var doc = this.document_;
- doc.addEventListener('command', this.onCommand_.bind(this));
- doc.addEventListener('canExecute', this.onCommandCanExecute_.bind(this));
- };
+/**
+ * One-time initialization of context menu and command.
+ */
+WallpaperManager.prototype.initContextMenuAndCommand_ = function() {
+ this.wallpaperContextMenu_ = $('wallpaper-context-menu');
+ cr.ui.Menu.decorate(this.wallpaperContextMenu_);
+ cr.ui.contextMenuHandler.setContextMenu(
+ this.wallpaperGrid_, this.wallpaperContextMenu_);
+ var commands = this.dialogDom_.querySelectorAll('command');
+ for (var i = 0; i < commands.length; i++)
+ cr.ui.Command.decorate(commands[i]);
+
+ var doc = this.document_;
+ doc.addEventListener('command', this.onCommand_.bind(this));
+ doc.addEventListener('canExecute', this.onCommandCanExecute_.bind(this));
+};
+
+/**
+ * Handles a command being executed.
+ * @param {Event} event A command event.
+ */
+WallpaperManager.prototype.onCommand_ = function(event) {
+ if (event.command.id == 'delete') {
+ var wallpaperGrid = this.wallpaperGrid_;
+ var selectedIndex = wallpaperGrid.selectionModel.selectedIndex;
+ var item = wallpaperGrid.dataModel.item(selectedIndex);
+ if (!item || item.source != Constants.WallpaperSourceEnum.Custom)
+ return;
+ this.removeCustomWallpaper(item.baseURL);
+ wallpaperGrid.dataModel.splice(selectedIndex, 1);
+ // Calculate the number of remaining custom wallpapers. The add new button
+ // in data model needs to be excluded.
+ var customWallpaperCount = wallpaperGrid.dataModel.length - 1;
+ if (customWallpaperCount == 0) {
+ // Active custom wallpaper is also copied in chronos data dir. It needs
+ // to be deleted.
+ chrome.wallpaperPrivate.resetWallpaper();
+ this.onWallpaperChanged_(null, null);
+ } else {
+ selectedIndex = Math.min(selectedIndex, customWallpaperCount - 1);
+ wallpaperGrid.selectionModel.selectedIndex = selectedIndex;
+ }
+ event.cancelBubble = true;
+ }
+};
- /**
- * Handles a command being executed.
- * @param {Event} event A command event.
- */
- WallpaperManager.prototype.onCommand_ = function(event) {
- if (event.command.id == 'delete') {
+/**
+ * Decides if a command can be executed on current target.
+ * @param {Event} event A command event.
+ */
+WallpaperManager.prototype.onCommandCanExecute_ = function(event) {
+ switch (event.command.id) {
+ case 'delete':
var wallpaperGrid = this.wallpaperGrid_;
var selectedIndex = wallpaperGrid.selectionModel.selectedIndex;
var item = wallpaperGrid.dataModel.item(selectedIndex);
- if (!item || item.source != Constants.WallpaperSourceEnum.Custom)
- return;
- this.removeCustomWallpaper(item.baseURL);
- wallpaperGrid.dataModel.splice(selectedIndex, 1);
- // Calculate the number of remaining custom wallpapers. The add new button
- // in data model needs to be excluded.
- var customWallpaperCount = wallpaperGrid.dataModel.length - 1;
- if (customWallpaperCount == 0) {
- // Active custom wallpaper is also copied in chronos data dir. It needs
- // to be deleted.
- chrome.wallpaperPrivate.resetWallpaper();
- this.onWallpaperChanged_(null, null);
- } else {
- selectedIndex = Math.min(selectedIndex, customWallpaperCount - 1);
- wallpaperGrid.selectionModel.selectedIndex = selectedIndex;
+ if (selectedIndex != this.wallpaperGrid_.dataModel.length - 1 && item &&
+ item.source == Constants.WallpaperSourceEnum.Custom) {
+ event.canExecute = true;
+ break;
}
- event.cancelBubble = true;
- }
- };
+ default:
+ event.canExecute = false;
+ }
+};
- /**
- * Decides if a command can be executed on current target.
- * @param {Event} event A command event.
- */
- WallpaperManager.prototype.onCommandCanExecute_ = function(event) {
- switch (event.command.id) {
- case 'delete':
- var wallpaperGrid = this.wallpaperGrid_;
- var selectedIndex = wallpaperGrid.selectionModel.selectedIndex;
- var item = wallpaperGrid.dataModel.item(selectedIndex);
- if (selectedIndex != this.wallpaperGrid_.dataModel.length - 1 &&
- item && item.source == Constants.WallpaperSourceEnum.Custom) {
- event.canExecute = true;
+/**
+ * Preset to the category which contains current wallpaper.
+ */
+WallpaperManager.prototype.presetCategory_ = function() {
+ this.currentWallpaper_ = str('currentWallpaper');
+ // The currentWallpaper_ is either a url contains HightResolutionSuffix or a
+ // custom wallpaper file name converted from an integer value represent
+ // time (e.g., 13006377367586070).
+ if (!this.enableOnlineWallpaper_ ||
+ (this.currentWallpaper_ &&
+ this.currentWallpaper_.indexOf(Constants.HighResolutionSuffix) == -1)) {
+ // Custom is the last one in the categories list.
+ this.categoriesList_.selectionModel.selectedIndex =
+ this.categoriesList_.dataModel.length - 1;
+ return;
+ }
+ var self = this;
+ var presetCategoryInner = function() {
+ // Selects the first category in the categories list of current
+ // wallpaper as the default selected category when showing wallpaper
+ // picker UI.
+ var presetCategory = AllCategoryIndex;
+ if (self.currentWallpaper_) {
+ for (var key in self.manifest_.wallpaper_list) {
+ var url = self.manifest_.wallpaper_list[key].base_url +
+ Constants.HighResolutionSuffix;
+ if (url.indexOf(self.currentWallpaper_) != -1 &&
+ self.manifest_.wallpaper_list[key].categories.length > 0) {
+ presetCategory = self.manifest_.wallpaper_list[key].categories[0] +
+ OnlineCategoriesOffset;
break;
}
- default:
- event.canExecute = false;
- }
- };
-
- /**
- * Preset to the category which contains current wallpaper.
- */
- WallpaperManager.prototype.presetCategory_ = function() {
- this.currentWallpaper_ = str('currentWallpaper');
- // The currentWallpaper_ is either a url contains HightResolutionSuffix or a
- // custom wallpaper file name converted from an integer value represent
- // time (e.g., 13006377367586070).
- if (!this.enableOnlineWallpaper_ || (this.currentWallpaper_ &&
- this.currentWallpaper_.indexOf(Constants.HighResolutionSuffix) == -1)) {
- // Custom is the last one in the categories list.
- this.categoriesList_.selectionModel.selectedIndex =
- this.categoriesList_.dataModel.length - 1;
- return;
- }
- var self = this;
- var presetCategoryInner = function() {
- // Selects the first category in the categories list of current
- // wallpaper as the default selected category when showing wallpaper
- // picker UI.
- var presetCategory = AllCategoryIndex;
- if (self.currentWallpaper_) {
- for (var key in self.manifest_.wallpaper_list) {
- var url = self.manifest_.wallpaper_list[key].base_url +
- Constants.HighResolutionSuffix;
- if (url.indexOf(self.currentWallpaper_) != -1 &&
- self.manifest_.wallpaper_list[key].categories.length > 0) {
- presetCategory = self.manifest_.wallpaper_list[key].categories[0] +
- OnlineCategoriesOffset;
- break;
- }
- }
}
- self.categoriesList_.selectionModel.selectedIndex = presetCategory;
- };
- if (navigator.onLine) {
- presetCategoryInner();
- } else {
- // If device is offline, gets the available offline wallpaper list first.
- // Wallpapers which are not in the list will display a grayscaled
- // thumbnail.
- chrome.wallpaperPrivate.getOfflineWallpaperList(function(lists) {
- if (!self.downloadedListMap_)
- self.downloadedListMap_ = {};
- for (var i = 0; i < lists.length; i++)
- self.downloadedListMap_[lists[i]] = true;
- presetCategoryInner();
- });
}
+ self.categoriesList_.selectionModel.selectedIndex = presetCategory;
};
+ if (navigator.onLine) {
+ presetCategoryInner();
+ } else {
+ // If device is offline, gets the available offline wallpaper list first.
+ // Wallpapers which are not in the list will display a grayscaled
+ // thumbnail.
+ chrome.wallpaperPrivate.getOfflineWallpaperList(function(lists) {
+ if (!self.downloadedListMap_)
+ self.downloadedListMap_ = {};
+ for (var i = 0; i < lists.length; i++)
+ self.downloadedListMap_[lists[i]] = true;
+ presetCategoryInner();
+ });
+ }
+};
- /**
- * Constructs the thumbnails grid.
- */
- WallpaperManager.prototype.initThumbnailsGrid_ = function() {
- this.wallpaperGrid_ = $('wallpaper-grid');
- wallpapers.WallpaperThumbnailsGrid.decorate(this.wallpaperGrid_);
+/**
+ * Constructs the thumbnails grid.
+ */
+WallpaperManager.prototype.initThumbnailsGrid_ = function() {
+ this.wallpaperGrid_ = $('wallpaper-grid');
+ wallpapers.WallpaperThumbnailsGrid.decorate(this.wallpaperGrid_);
- this.wallpaperGrid_.addEventListener('change', this.onChange_.bind(this));
- this.wallpaperGrid_.addEventListener('dblclick', this.onClose_.bind(this));
- };
+ this.wallpaperGrid_.addEventListener('change', this.onChange_.bind(this));
+ this.wallpaperGrid_.addEventListener('dblclick', this.onClose_.bind(this));
+};
- /**
- * Handles change event dispatched by wallpaper grid.
- */
- WallpaperManager.prototype.onChange_ = function() {
- // splice may dispatch a change event because the position of selected
- // element changing. But the actual selected element may not change after
- // splice. Check if the new selected element equals to the previous selected
- // element before continuing. Otherwise, wallpaper may reset to previous one
- // as described in http://crbug.com/229036.
- if (this.selectedItem_ == this.wallpaperGrid_.selectedItem)
- return;
- this.selectedItem_ = this.wallpaperGrid_.selectedItem;
- this.onSelectedItemChanged_();
- };
+/**
+ * Handles change event dispatched by wallpaper grid.
+ */
+WallpaperManager.prototype.onChange_ = function() {
+ // splice may dispatch a change event because the position of selected
+ // element changing. But the actual selected element may not change after
+ // splice. Check if the new selected element equals to the previous selected
+ // element before continuing. Otherwise, wallpaper may reset to previous one
+ // as described in http://crbug.com/229036.
+ if (this.selectedItem_ == this.wallpaperGrid_.selectedItem)
+ return;
+ this.selectedItem_ = this.wallpaperGrid_.selectedItem;
+ this.onSelectedItemChanged_();
+};
- /**
- * Closes window if no pending wallpaper request.
- */
- WallpaperManager.prototype.onClose_ = function() {
- if (this.wallpaperRequest_) {
- this.wallpaperRequest_.addEventListener('loadend', function() {
- // Close window on wallpaper loading finished.
- window.close();
- });
- } else {
+/**
+ * Closes window if no pending wallpaper request.
+ */
+WallpaperManager.prototype.onClose_ = function() {
+ if (this.wallpaperRequest_) {
+ this.wallpaperRequest_.addEventListener('loadend', function() {
+ // Close window on wallpaper loading finished.
window.close();
- }
- };
-
- /**
- * Moves the check mark to |activeItem| and hides the wallpaper set by third
- * party message if any. And saves the wallpaper's information to local & sync
- * storage. Called when wallpaper changed successfully.
- * @param {?Object} activeItem The active item in WallpaperThumbnailsGrid's
- * data model.
- * @param {?string} currentWallpaperURL The URL or filename of current
- * wallpaper.
- */
- WallpaperManager.prototype.onWallpaperChanged_ = function(
- activeItem, currentWallpaperURL) {
- this.wallpaperGrid_.activeItem = activeItem;
- this.currentWallpaper_ = currentWallpaperURL;
- // Hides the wallpaper set by message.
- $('wallpaper-set-by-message').textContent = '';
- $('wallpaper-grid').classList.remove('small');
-
- if (activeItem) {
- WallpaperUtil.saveWallpaperInfo(
- currentWallpaperURL, activeItem.layout, activeItem.source, '');
- } else {
- WallpaperUtil.saveWallpaperInfo(
- '', '', Constants.WallpaperSourceEnum.Default, '');
- }
- };
+ });
+ } else {
+ window.close();
+ }
+};
- /**
- * Sets wallpaper to the corresponding wallpaper of selected thumbnail.
- * @param {{baseURL: string, layout: string, source: string,
- * availableOffline: boolean, opt_dynamicURL: string,
- * opt_author: string, opt_authorWebsite: string}}
- * selectedItem the selected item in WallpaperThumbnailsGrid's data
- * model.
- */
- WallpaperManager.prototype.setSelectedWallpaper_ = function(selectedItem) {
- var self = this;
- switch (selectedItem.source) {
- case Constants.WallpaperSourceEnum.Custom:
- var errorHandler = this.onFileSystemError_.bind(this);
- var success = function(dirEntry) {
- dirEntry.getFile(selectedItem.baseURL, {create: false},
- function(fileEntry) {
- fileEntry.file(function(file) {
- var reader = new FileReader();
- reader.readAsArrayBuffer(file);
- reader.addEventListener('error', errorHandler);
- reader.addEventListener('load', function(e) {
- self.setCustomWallpaper(e.target.result, selectedItem.layout,
- false, selectedItem.baseURL,
- function(thumbnailData) {
- self.onWallpaperChanged_(selectedItem,
- selectedItem.baseURL);
- WallpaperUtil.storeWallpaperToSyncFS(
- selectedItem.baseURL, e.target.result);
- WallpaperUtil.storeWallpaperToSyncFS(
- selectedItem.baseURL +
- Constants.CustomWallpaperThumbnailSuffix,
- thumbnailData);
- },
- errorHandler);
- });
- }, errorHandler);
- }, errorHandler);
- };
- this.wallpaperDirs_.getDirectory(
- Constants.WallpaperDirNameEnum.ORIGINAL, success, errorHandler);
- break;
- case Constants.WallpaperSourceEnum.OEM:
- // Resets back to default wallpaper.
- chrome.wallpaperPrivate.resetWallpaper();
- this.onWallpaperChanged_(selectedItem, selectedItem.baseURL);
- break;
- case Constants.WallpaperSourceEnum.Online:
- var wallpaperURL = selectedItem.baseURL +
- Constants.HighResolutionSuffix;
- var selectedGridItem = this.wallpaperGrid_.getListItem(selectedItem);
-
- chrome.wallpaperPrivate.setWallpaperIfExists(wallpaperURL,
- selectedItem.layout,
- function(exists) {
- if (exists) {
- self.onWallpaperChanged_(selectedItem, wallpaperURL);
- return;
- }
+/**
+ * Moves the check mark to |activeItem| and hides the wallpaper set by third
+ * party message if any. And saves the wallpaper's information to local & sync
+ * storage. Called when wallpaper changed successfully.
+ * @param {?Object} activeItem The active item in WallpaperThumbnailsGrid's
+ * data model.
+ * @param {?string} currentWallpaperURL The URL or filename of current
+ * wallpaper.
+ */
+WallpaperManager.prototype.onWallpaperChanged_ = function(
+ activeItem, currentWallpaperURL) {
+ this.wallpaperGrid_.activeItem = activeItem;
+ this.currentWallpaper_ = currentWallpaperURL;
+ // Hides the wallpaper set by message.
+ $('wallpaper-set-by-message').textContent = '';
+ $('wallpaper-grid').classList.remove('small');
+
+ if (activeItem) {
+ WallpaperUtil.saveWallpaperInfo(
+ currentWallpaperURL, activeItem.layout, activeItem.source, '');
+ } else {
+ WallpaperUtil.saveWallpaperInfo(
+ '', '', Constants.WallpaperSourceEnum.Default, '');
+ }
+};
- // Falls back to request wallpaper from server.
- if (self.wallpaperRequest_)
- self.wallpaperRequest_.abort();
-
- self.wallpaperRequest_ = new XMLHttpRequest();
- self.progressManager_.reset(self.wallpaperRequest_, selectedGridItem);
-
- var onSuccess = function(xhr) {
- var image = xhr.response;
- chrome.wallpaperPrivate.setWallpaper(image, selectedItem.layout,
- wallpaperURL,
- function() {
- self.progressManager_.hideProgressBar(selectedGridItem);
-
- if (chrome.runtime.lastError != undefined &&
- chrome.runtime.lastError.message !=
- str('canceledWallpaper')) {
- self.showError_(chrome.runtime.lastError.message);
- } else {
- self.onWallpaperChanged_(selectedItem, wallpaperURL);
- }
+/**
+ * Sets wallpaper to the corresponding wallpaper of selected thumbnail.
+ * @param {{baseURL: string, layout: string, source: string,
+ * availableOffline: boolean, opt_dynamicURL: string,
+ * opt_author: string, opt_authorWebsite: string}}
+ * selectedItem the selected item in WallpaperThumbnailsGrid's data
+ * model.
+ */
+WallpaperManager.prototype.setSelectedWallpaper_ = function(selectedItem) {
+ var self = this;
+ switch (selectedItem.source) {
+ case Constants.WallpaperSourceEnum.Custom:
+ var errorHandler = this.onFileSystemError_.bind(this);
+ var success = function(dirEntry) {
+ dirEntry.getFile(
+ selectedItem.baseURL, {create: false}, function(fileEntry) {
+ fileEntry.file(function(file) {
+ var reader = new FileReader();
+ reader.readAsArrayBuffer(file);
+ reader.addEventListener('error', errorHandler);
+ reader.addEventListener('load', function(e) {
+ self.setCustomWallpaper(
+ e.target.result, selectedItem.layout, false,
+ selectedItem.baseURL, function(thumbnailData) {
+ self.onWallpaperChanged_(
+ selectedItem, selectedItem.baseURL);
+ WallpaperUtil.storeWallpaperToSyncFS(
+ selectedItem.baseURL, e.target.result);
+ WallpaperUtil.storeWallpaperToSyncFS(
+ selectedItem.baseURL +
+ Constants.CustomWallpaperThumbnailSuffix,
+ thumbnailData);
+ }, errorHandler);
});
- self.wallpaperRequest_ = null;
- };
- var onFailure = function(status) {
- self.progressManager_.hideProgressBar(selectedGridItem);
- self.showError_(str('downloadFailed'));
- self.wallpaperRequest_ = null;
- };
- WallpaperUtil.fetchURL(wallpaperURL, 'arraybuffer', onSuccess,
- onFailure, self.wallpaperRequest_);
- });
- break;
- case Constants.WallpaperSourceEnum.Daily:
- case Constants.WallpaperSourceEnum.ThirdParty:
- default:
- console.error('Unsupported wallpaper source.');
- }
- };
+ }, errorHandler);
+ }, errorHandler);
+ };
+ this.wallpaperDirs_.getDirectory(
+ Constants.WallpaperDirNameEnum.ORIGINAL, success, errorHandler);
+ break;
+ case Constants.WallpaperSourceEnum.OEM:
+ // Resets back to default wallpaper.
+ chrome.wallpaperPrivate.resetWallpaper();
+ this.onWallpaperChanged_(selectedItem, selectedItem.baseURL);
+ break;
+ case Constants.WallpaperSourceEnum.Online:
+ var wallpaperURL = selectedItem.baseURL + Constants.HighResolutionSuffix;
+ var selectedGridItem = this.wallpaperGrid_.getListItem(selectedItem);
+
+ chrome.wallpaperPrivate.setWallpaperIfExists(
+ wallpaperURL, selectedItem.layout, function(exists) {
+ if (exists) {
+ self.onWallpaperChanged_(selectedItem, wallpaperURL);
+ return;
+ }
- /*
- * Removes the oldest custom wallpaper. If the oldest one is set as current
- * wallpaper, removes the second oldest one to free some space. This should
- * only be called when exceeding wallpaper quota.
- */
- WallpaperManager.prototype.removeOldestWallpaper_ = function() {
- // Custom wallpapers should already sorted when put to the data model. The
- // last element is the add new button, need to exclude it as well.
- var oldestIndex = this.wallpaperGrid_.dataModel.length - 2;
- var item = this.wallpaperGrid_.dataModel.item(oldestIndex);
- if (!item || item.source != Constants.WallpaperSourceEnum.Custom)
- return;
- if (item.baseURL == this.currentWallpaper_)
- item = this.wallpaperGrid_.dataModel.item(--oldestIndex);
- if (item) {
- this.removeCustomWallpaper(item.baseURL);
- this.wallpaperGrid_.dataModel.splice(oldestIndex, 1);
- }
- };
+ // Falls back to request wallpaper from server.
+ if (self.wallpaperRequest_)
+ self.wallpaperRequest_.abort();
+
+ self.wallpaperRequest_ = new XMLHttpRequest();
+ self.progressManager_.reset(
+ self.wallpaperRequest_, selectedGridItem);
+
+ var onSuccess = function(xhr) {
+ var image = xhr.response;
+ chrome.wallpaperPrivate.setWallpaper(
+ image, selectedItem.layout, wallpaperURL, function() {
+ self.progressManager_.hideProgressBar(selectedGridItem);
+
+ if (chrome.runtime.lastError != undefined &&
+ chrome.runtime.lastError.message !=
+ str('canceledWallpaper')) {
+ self.showError_(chrome.runtime.lastError.message);
+ } else {
+ self.onWallpaperChanged_(selectedItem, wallpaperURL);
+ }
+ });
+ self.wallpaperRequest_ = null;
+ };
+ var onFailure = function(status) {
+ self.progressManager_.hideProgressBar(selectedGridItem);
+ self.showError_(str('downloadFailed'));
+ self.wallpaperRequest_ = null;
+ };
+ WallpaperUtil.fetchURL(
+ wallpaperURL, 'arraybuffer', onSuccess, onFailure,
+ self.wallpaperRequest_);
+ });
+ break;
+ case Constants.WallpaperSourceEnum.Daily:
+ case Constants.WallpaperSourceEnum.ThirdParty:
+ default:
+ console.error('Unsupported wallpaper source.');
+ }
+};
- /*
- * Shows an error message to user and log the failed reason in console.
- */
- WallpaperManager.prototype.onFileSystemError_ = function(e) {
- var msg = '';
- switch (e.code) {
- case FileError.QUOTA_EXCEEDED_ERR:
- msg = 'QUOTA_EXCEEDED_ERR';
- // Instead of simply remove oldest wallpaper, we should consider a
- // better way to handle this situation. See crbug.com/180890.
- this.removeOldestWallpaper_();
- break;
- case FileError.NOT_FOUND_ERR:
- msg = 'NOT_FOUND_ERR';
- break;
- case FileError.SECURITY_ERR:
- msg = 'SECURITY_ERR';
- break;
- case FileError.INVALID_MODIFICATION_ERR:
- msg = 'INVALID_MODIFICATION_ERR';
- break;
- case FileError.INVALID_STATE_ERR:
- msg = 'INVALID_STATE_ERR';
- break;
- default:
- msg = 'Unknown Error';
- break;
- }
- console.error('Error: ' + msg);
- this.showError_(str('accessFileFailure'));
- };
+/*
+ * Removes the oldest custom wallpaper. If the oldest one is set as current
+ * wallpaper, removes the second oldest one to free some space. This should
+ * only be called when exceeding wallpaper quota.
+ */
+WallpaperManager.prototype.removeOldestWallpaper_ = function() {
+ // Custom wallpapers should already sorted when put to the data model. The
+ // last element is the add new button, need to exclude it as well.
+ var oldestIndex = this.wallpaperGrid_.dataModel.length - 2;
+ var item = this.wallpaperGrid_.dataModel.item(oldestIndex);
+ if (!item || item.source != Constants.WallpaperSourceEnum.Custom)
+ return;
+ if (item.baseURL == this.currentWallpaper_)
+ item = this.wallpaperGrid_.dataModel.item(--oldestIndex);
+ if (item) {
+ this.removeCustomWallpaper(item.baseURL);
+ this.wallpaperGrid_.dataModel.splice(oldestIndex, 1);
+ }
+};
- /**
- * Handles changing of selectedItem in wallpaper manager.
- */
- WallpaperManager.prototype.onSelectedItemChanged_ = function() {
- this.setWallpaperAttribution_(this.selectedItem_);
+/*
+ * Shows an error message to user and log the failed reason in console.
+ */
+WallpaperManager.prototype.onFileSystemError_ = function(e) {
+ var msg = '';
+ switch (e.code) {
+ case FileError.QUOTA_EXCEEDED_ERR:
+ msg = 'QUOTA_EXCEEDED_ERR';
+ // Instead of simply remove oldest wallpaper, we should consider a
+ // better way to handle this situation. See crbug.com/180890.
+ this.removeOldestWallpaper_();
+ break;
+ case FileError.NOT_FOUND_ERR:
+ msg = 'NOT_FOUND_ERR';
+ break;
+ case FileError.SECURITY_ERR:
+ msg = 'SECURITY_ERR';
+ break;
+ case FileError.INVALID_MODIFICATION_ERR:
+ msg = 'INVALID_MODIFICATION_ERR';
+ break;
+ case FileError.INVALID_STATE_ERR:
+ msg = 'INVALID_STATE_ERR';
+ break;
+ default:
+ msg = 'Unknown Error';
+ break;
+ }
+ console.error('Error: ' + msg);
+ this.showError_(str('accessFileFailure'));
+};
- if (!this.selectedItem_ || this.selectedItem_.source == 'ADDNEW')
- return;
+/**
+ * Handles changing of selectedItem in wallpaper manager.
+ */
+WallpaperManager.prototype.onSelectedItemChanged_ = function() {
+ this.setWallpaperAttribution_(this.selectedItem_);
- if (this.selectedItem_.baseURL && !this.wallpaperGrid_.inProgramSelection) {
- if (this.selectedItem_.source == Constants.WallpaperSourceEnum.Custom) {
- var items = {};
- var key = this.selectedItem_.baseURL;
- var self = this;
- Constants.WallpaperLocalStorage.get(key, function(items) {
- self.selectedItem_.layout =
- items[key] ? items[key] : 'CENTER_CROPPED';
- self.setSelectedWallpaper_(self.selectedItem_);
- });
- } else {
- this.setSelectedWallpaper_(this.selectedItem_);
- }
- }
- };
+ if (!this.selectedItem_ || this.selectedItem_.source == 'ADDNEW')
+ return;
- /**
- * Set attributions of wallpaper with given URL. If URL is not valid, clear
- * the attributions.
- * @param {{baseURL: string, dynamicURL: string, layout: string,
- * author: string, authorWebsite: string, availableOffline: boolean}}
- * selectedItem selected wallpaper item in grid.
- * @private
- */
- WallpaperManager.prototype.setWallpaperAttribution_ = function(selectedItem) {
- // Only online wallpapers have author and website attributes. All other type
- // of wallpapers should not show attributions.
- if (selectedItem &&
- selectedItem.source == Constants.WallpaperSourceEnum.Online) {
- $('author-name').textContent = selectedItem.author;
- $('author-website').textContent = $('author-website').href =
- selectedItem.authorWebsite;
- chrome.wallpaperPrivate.getThumbnail(selectedItem.baseURL,
- selectedItem.source,
- function(data) {
- var img = $('attribute-image');
- if (data) {
- var blob = new Blob([new Int8Array(data)], {'type' : 'image\/png'});
- img.src = window.URL.createObjectURL(blob);
- img.addEventListener('load', function(e) {
- window.URL.revokeObjectURL(this.src);
- });
- } else {
- img.src = '';
- }
+ if (this.selectedItem_.baseURL && !this.wallpaperGrid_.inProgramSelection) {
+ if (this.selectedItem_.source == Constants.WallpaperSourceEnum.Custom) {
+ var items = {};
+ var key = this.selectedItem_.baseURL;
+ var self = this;
+ Constants.WallpaperLocalStorage.get(key, function(items) {
+ self.selectedItem_.layout = items[key] ? items[key] : 'CENTER_CROPPED';
+ self.setSelectedWallpaper_(self.selectedItem_);
});
- $('wallpaper-attribute').hidden = false;
- $('attribute-image').hidden = false;
- return;
+ } else {
+ this.setSelectedWallpaper_(this.selectedItem_);
}
- $('wallpaper-attribute').hidden = true;
- $('attribute-image').hidden = true;
- $('author-name').textContent = '';
- $('author-website').textContent = $('author-website').href = '';
- $('attribute-image').src = '';
- };
+ }
+};
- /**
- * Resize thumbnails grid and categories list to fit the new window size.
- */
- WallpaperManager.prototype.onResize_ = function() {
- this.wallpaperGrid_.redraw();
- this.categoriesList_.redraw();
- };
+/**
+ * Set attributions of wallpaper with given URL. If URL is not valid, clear
+ * the attributions.
+ * @param {{baseURL: string, dynamicURL: string, layout: string,
+ * author: string, authorWebsite: string, availableOffline: boolean}}
+ * selectedItem selected wallpaper item in grid.
+ * @private
+ */
+WallpaperManager.prototype.setWallpaperAttribution_ = function(selectedItem) {
+ // Only online wallpapers have author and website attributes. All other type
+ // of wallpapers should not show attributions.
+ if (selectedItem &&
+ selectedItem.source == Constants.WallpaperSourceEnum.Online) {
+ $('author-name').textContent = selectedItem.author;
+ $('author-website').textContent = $('author-website').href =
+ selectedItem.authorWebsite;
+ chrome.wallpaperPrivate.getThumbnail(
+ selectedItem.baseURL, selectedItem.source, function(data) {
+ var img = $('attribute-image');
+ if (data) {
+ var blob = new Blob([new Int8Array(data)], {'type': 'image\/png'});
+ img.src = window.URL.createObjectURL(blob);
+ img.addEventListener('load', function(e) {
+ window.URL.revokeObjectURL(this.src);
+ });
+ } else {
+ img.src = '';
+ }
+ });
+ $('wallpaper-attribute').hidden = false;
+ $('attribute-image').hidden = false;
+ return;
+ }
+ $('wallpaper-attribute').hidden = true;
+ $('attribute-image').hidden = true;
+ $('author-name').textContent = '';
+ $('author-website').textContent = $('author-website').href = '';
+ $('attribute-image').src = '';
+};
- /**
- * Close the last opened overlay or app window on pressing the Escape key.
- * @param {Event} event A keydown event.
- */
- WallpaperManager.prototype.onKeyDown_ = function(event) {
- if (event.keyCode == 27) {
- // The last opened overlay coincides with the first match of querySelector
- // because the Error Container is declared in the DOM before the Wallpaper
- // Selection Container.
- // TODO(bshe): Make the overlay selection not dependent on the DOM.
- var closeButtonSelector = '.overlay-container:not([hidden]) .close';
- var closeButton = this.document_.querySelector(closeButtonSelector);
- if (closeButton) {
- closeButton.click();
- event.preventDefault();
- } else {
- this.onClose_();
- }
- }
- };
+/**
+ * Resize thumbnails grid and categories list to fit the new window size.
+ */
+WallpaperManager.prototype.onResize_ = function() {
+ this.wallpaperGrid_.redraw();
+ this.categoriesList_.redraw();
+};
- /**
- * Constructs the categories list.
- */
- WallpaperManager.prototype.initCategoriesList_ = function() {
- this.categoriesList_ = $('categories-list');
- wallpapers.WallpaperCategoriesList.decorate(this.categoriesList_);
-
- this.categoriesList_.selectionModel.addEventListener(
- 'change', this.onCategoriesChange_.bind(this));
-
- if (this.enableOnlineWallpaper_ && this.manifest_) {
- // Adds all category as first category.
- this.categoriesList_.dataModel.push(str('allCategoryLabel'));
- for (var key in this.manifest_.categories) {
- this.categoriesList_.dataModel.push(this.manifest_.categories[key]);
- }
+/**
+ * Close the last opened overlay or app window on pressing the Escape key.
+ * @param {Event} event A keydown event.
+ */
+WallpaperManager.prototype.onKeyDown_ = function(event) {
+ if (event.keyCode == 27) {
+ // The last opened overlay coincides with the first match of querySelector
+ // because the Error Container is declared in the DOM before the Wallpaper
+ // Selection Container.
+ // TODO(bshe): Make the overlay selection not dependent on the DOM.
+ var closeButtonSelector = '.overlay-container:not([hidden]) .close';
+ var closeButton = this.document_.querySelector(closeButtonSelector);
+ if (closeButton) {
+ closeButton.click();
+ event.preventDefault();
+ } else {
+ this.onClose_();
}
- // Adds custom category as last category.
- this.categoriesList_.dataModel.push(str('customCategoryLabel'));
- };
+ }
+};
- /**
- * Handles the custom wallpaper which user selected from file manager. Called
- * when users select a file.
- */
- WallpaperManager.prototype.onFileSelectorChanged_ = function() {
- var files = $('file-selector').files;
- if (files.length != 1)
- console.error('More than one files are selected or no file selected');
- if (!files[0].type.match('image/jpeg') &&
- !files[0].type.match('image/png')) {
- this.showError_(str('invalidWallpaper'));
- return;
+/**
+ * Constructs the categories list.
+ */
+WallpaperManager.prototype.initCategoriesList_ = function() {
+ this.categoriesList_ = $('categories-list');
+ wallpapers.WallpaperCategoriesList.decorate(this.categoriesList_);
+
+ this.categoriesList_.selectionModel.addEventListener(
+ 'change', this.onCategoriesChange_.bind(this));
+
+ if (this.enableOnlineWallpaper_ && this.manifest_) {
+ // Adds all category as first category.
+ this.categoriesList_.dataModel.push(str('allCategoryLabel'));
+ for (var key in this.manifest_.categories) {
+ this.categoriesList_.dataModel.push(this.manifest_.categories[key]);
}
- var layout = getSelectedLayout();
- var self = this;
- var errorHandler = this.onFileSystemError_.bind(this);
- var setSelectedFile = function(file, layout, fileName) {
- var saveThumbnail = function(thumbnail) {
- var success = function(dirEntry) {
- dirEntry.getFile(fileName, {create: true}, function(fileEntry) {
- fileEntry.createWriter(function(fileWriter) {
- fileWriter.onwriteend = function(e) {
- $('set-wallpaper-layout').disabled = false;
- var wallpaperInfo = {
- baseURL: fileName,
- layout: layout,
- source: Constants.WallpaperSourceEnum.Custom,
- availableOffline: true
- };
- self.wallpaperGrid_.dataModel.splice(0, 0, wallpaperInfo);
- self.wallpaperGrid_.selectedItem = wallpaperInfo;
- self.onWallpaperChanged_(wallpaperInfo, fileName);
- WallpaperUtil.saveToLocalStorage(self.currentWallpaper_,
- layout);
- };
-
- fileWriter.onerror = errorHandler;
+ }
+ // Adds custom category as last category.
+ this.categoriesList_.dataModel.push(str('customCategoryLabel'));
+};
- var blob = new Blob([new Int8Array(thumbnail)],
- {'type' : 'image\/jpeg'});
- fileWriter.write(blob);
- }, errorHandler);
- }, errorHandler);
- };
- self.wallpaperDirs_.getDirectory(
- Constants.WallpaperDirNameEnum.THUMBNAIL, success, errorHandler);
- };
- var onCustomWallpaperSuccess = function(thumbnailData, wallpaperData) {
- WallpaperUtil.storeWallpaperToSyncFS(fileName, wallpaperData);
- WallpaperUtil.storeWallpaperToSyncFS(
- fileName + Constants.CustomWallpaperThumbnailSuffix,
- thumbnailData);
- saveThumbnail(thumbnailData);
- };
+/**
+ * Handles the custom wallpaper which user selected from file manager. Called
+ * when users select a file.
+ */
+WallpaperManager.prototype.onFileSelectorChanged_ = function() {
+ var files = $('file-selector').files;
+ if (files.length != 1)
+ console.error('More than one files are selected or no file selected');
+ if (!files[0].type.match('image/jpeg') && !files[0].type.match('image/png')) {
+ this.showError_(str('invalidWallpaper'));
+ return;
+ }
+ var layout = getSelectedLayout();
+ var self = this;
+ var errorHandler = this.onFileSystemError_.bind(this);
+ var setSelectedFile = function(file, layout, fileName) {
+ var saveThumbnail = function(thumbnail) {
var success = function(dirEntry) {
dirEntry.getFile(fileName, {create: true}, function(fileEntry) {
fileEntry.createWriter(function(fileWriter) {
- fileWriter.addEventListener('writeend', function(e) {
- var reader = new FileReader();
- reader.readAsArrayBuffer(file);
- reader.addEventListener('error', errorHandler);
- reader.addEventListener('load', function(e) {
- self.setCustomWallpaper(e.target.result, layout, true, fileName,
- function(thumbnail) {
- onCustomWallpaperSuccess(thumbnail, e.target.result);
- },
- function() {
- self.removeCustomWallpaper(fileName);
- errorHandler();
- });
- });
- });
- fileWriter.addEventListener('error', errorHandler);
- fileWriter.write(file);
+ fileWriter.onwriteend = function(e) {
+ $('set-wallpaper-layout').disabled = false;
+ var wallpaperInfo = {
+ baseURL: fileName,
+ layout: layout,
+ source: Constants.WallpaperSourceEnum.Custom,
+ availableOffline: true
+ };
+ self.wallpaperGrid_.dataModel.splice(0, 0, wallpaperInfo);
+ self.wallpaperGrid_.selectedItem = wallpaperInfo;
+ self.onWallpaperChanged_(wallpaperInfo, fileName);
+ WallpaperUtil.saveToLocalStorage(self.currentWallpaper_, layout);
+ };
+
+ fileWriter.onerror = errorHandler;
+
+ var blob =
+ new Blob([new Int8Array(thumbnail)], {'type': 'image\/jpeg'});
+ fileWriter.write(blob);
}, errorHandler);
}, errorHandler);
};
- self.wallpaperDirs_.getDirectory(Constants.WallpaperDirNameEnum.ORIGINAL,
- success,
- errorHandler);
+ self.wallpaperDirs_.getDirectory(
+ Constants.WallpaperDirNameEnum.THUMBNAIL, success, errorHandler);
};
- setSelectedFile(files[0], layout, new Date().getTime().toString());
- };
-
- /**
- * Removes wallpaper and thumbnail with fileName from FileSystem.
- * @param {string} fileName The file name of wallpaper and thumbnail to be
- * removed.
- */
- WallpaperManager.prototype.removeCustomWallpaper = function(fileName) {
- var errorHandler = this.onFileSystemError_.bind(this);
- var self = this;
- var removeFile = function(fileName) {
- var success = function(dirEntry) {
- dirEntry.getFile(fileName, {create: false}, function(fileEntry) {
- fileEntry.remove(function() {
- WallpaperUtil.deleteWallpaperFromSyncFS(fileName);
- }, errorHandler);
+ var onCustomWallpaperSuccess = function(thumbnailData, wallpaperData) {
+ WallpaperUtil.storeWallpaperToSyncFS(fileName, wallpaperData);
+ WallpaperUtil.storeWallpaperToSyncFS(
+ fileName + Constants.CustomWallpaperThumbnailSuffix, thumbnailData);
+ saveThumbnail(thumbnailData);
+ };
+ var success = function(dirEntry) {
+ dirEntry.getFile(fileName, {create: true}, function(fileEntry) {
+ fileEntry.createWriter(function(fileWriter) {
+ fileWriter.addEventListener('writeend', function(e) {
+ var reader = new FileReader();
+ reader.readAsArrayBuffer(file);
+ reader.addEventListener('error', errorHandler);
+ reader.addEventListener('load', function(e) {
+ self.setCustomWallpaper(
+ e.target.result, layout, true, fileName,
+ function(thumbnail) {
+ onCustomWallpaperSuccess(thumbnail, e.target.result);
+ },
+ function() {
+ self.removeCustomWallpaper(fileName);
+ errorHandler();
+ });
+ });
+ });
+ fileWriter.addEventListener('error', errorHandler);
+ fileWriter.write(file);
}, errorHandler);
- };
-
- // Removes copy of original.
- self.wallpaperDirs_.getDirectory(Constants.WallpaperDirNameEnum.ORIGINAL,
- success,
- errorHandler);
-
- // Removes generated thumbnail.
- self.wallpaperDirs_.getDirectory(Constants.WallpaperDirNameEnum.THUMBNAIL,
- success,
- errorHandler);
+ }, errorHandler);
};
- removeFile(fileName);
+ self.wallpaperDirs_.getDirectory(
+ Constants.WallpaperDirNameEnum.ORIGINAL, success, errorHandler);
};
+ setSelectedFile(files[0], layout, new Date().getTime().toString());
+};
- /**
- * Sets current wallpaper and generate thumbnail if generateThumbnail is true.
- * @param {ArrayBuffer} wallpaper The binary representation of wallpaper.
- * @param {string} layout The user selected wallpaper layout.
- * @param {boolean} generateThumbnail True if need to generate thumbnail.
- * @param {string} fileName The unique file name of wallpaper.
- * @param {function(thumbnail):void} success Success callback. If
- * generateThumbnail is true, the callback parameter should have the
- * generated thumbnail.
- * @param {function(e):void} failure Failure callback. Called when there is an
- * error from FileSystem.
- */
- WallpaperManager.prototype.setCustomWallpaper = function(wallpaper,
- layout,
- generateThumbnail,
- fileName,
- success,
- failure) {
- var self = this;
- var onFinished = function(opt_thumbnail) {
- if (chrome.runtime.lastError != undefined &&
- chrome.runtime.lastError.message != str('canceledWallpaper')) {
- self.showError_(chrome.runtime.lastError.message);
- $('set-wallpaper-layout').disabled = true;
- failure();
- } else {
- success(opt_thumbnail);
- }
+/**
+ * Removes wallpaper and thumbnail with fileName from FileSystem.
+ * @param {string} fileName The file name of wallpaper and thumbnail to be
+ * removed.
+ */
+WallpaperManager.prototype.removeCustomWallpaper = function(fileName) {
+ var errorHandler = this.onFileSystemError_.bind(this);
+ var self = this;
+ var removeFile = function(fileName) {
+ var success = function(dirEntry) {
+ dirEntry.getFile(fileName, {create: false}, function(fileEntry) {
+ fileEntry.remove(function() {
+ WallpaperUtil.deleteWallpaperFromSyncFS(fileName);
+ }, errorHandler);
+ }, errorHandler);
};
- chrome.wallpaperPrivate.setCustomWallpaper(wallpaper, layout,
- generateThumbnail,
- fileName, onFinished);
+ // Removes copy of original.
+ self.wallpaperDirs_.getDirectory(
+ Constants.WallpaperDirNameEnum.ORIGINAL, success, errorHandler);
+
+ // Removes generated thumbnail.
+ self.wallpaperDirs_.getDirectory(
+ Constants.WallpaperDirNameEnum.THUMBNAIL, success, errorHandler);
};
+ removeFile(fileName);
+};
- /**
- * Handles the layout setting change of custom wallpaper.
- */
- WallpaperManager.prototype.onWallpaperLayoutChanged_ = function() {
- var layout = getSelectedLayout();
- var self = this;
- chrome.wallpaperPrivate.setCustomWallpaperLayout(layout, function() {
- if (chrome.runtime.lastError != undefined &&
- chrome.runtime.lastError.message != str('canceledWallpaper')) {
- self.showError_(chrome.runtime.lastError.message);
- self.removeCustomWallpaper(fileName);
- $('set-wallpaper-layout').disabled = true;
- } else {
- WallpaperUtil.saveToLocalStorage(self.currentWallpaper_, layout);
- self.onWallpaperChanged_(self.wallpaperGrid_.activeItem,
- self.currentWallpaper_);
- }
- });
+/**
+ * Sets current wallpaper and generate thumbnail if generateThumbnail is true.
+ * @param {ArrayBuffer} wallpaper The binary representation of wallpaper.
+ * @param {string} layout The user selected wallpaper layout.
+ * @param {boolean} generateThumbnail True if need to generate thumbnail.
+ * @param {string} fileName The unique file name of wallpaper.
+ * @param {function(thumbnail):void} success Success callback. If
+ * generateThumbnail is true, the callback parameter should have the
+ * generated thumbnail.
+ * @param {function(e):void} failure Failure callback. Called when there is an
+ * error from FileSystem.
+ */
+WallpaperManager.prototype.setCustomWallpaper = function(
+ wallpaper, layout, generateThumbnail, fileName, success, failure) {
+ var self = this;
+ var onFinished = function(opt_thumbnail) {
+ if (chrome.runtime.lastError != undefined &&
+ chrome.runtime.lastError.message != str('canceledWallpaper')) {
+ self.showError_(chrome.runtime.lastError.message);
+ $('set-wallpaper-layout').disabled = true;
+ failure();
+ } else {
+ success(opt_thumbnail);
+ }
};
- /**
- * Handles user clicking on a different category.
- */
- WallpaperManager.prototype.onCategoriesChange_ = function() {
- var categoriesList = this.categoriesList_;
- var selectedIndex = categoriesList.selectionModel.selectedIndex;
- if (selectedIndex == -1)
- return;
- var selectedListItem = categoriesList.getListItemByIndex(selectedIndex);
- var bar = $('bar');
- bar.style.left = selectedListItem.offsetLeft + 'px';
- bar.style.width = selectedListItem.offsetWidth + 'px';
-
- var wallpapersDataModel = new cr.ui.ArrayDataModel([]);
- var selectedItem = null;
- if (selectedListItem.custom) {
- this.document_.body.setAttribute('custom', '');
- var errorHandler = this.onFileSystemError_.bind(this);
- var toArray = function(list) {
- return Array.prototype.slice.call(list || [], 0);
- };
+ chrome.wallpaperPrivate.setCustomWallpaper(
+ wallpaper, layout, generateThumbnail, fileName, onFinished);
+};
- var self = this;
- var processResults = function(entries) {
- for (var i = 0; i < entries.length; i++) {
- var entry = entries[i];
- var wallpaperInfo = {
- // Set wallpaperId to null to avoid duplicate thumbnail images,
- // see crbug.com/506135 for details.
- wallpaperId: null,
- baseURL: entry.name,
- // The layout will be replaced by the actual value saved in
- // local storage when requested later. Layout is not important
- // for constructing thumbnails grid, we use CENTER_CROPPED here
- // to speed up the process of constructing. So we do not need to
- // wait for fetching correct layout.
- layout: 'CENTER_CROPPED',
- source: Constants.WallpaperSourceEnum.Custom,
- availableOffline: true
- };
- wallpapersDataModel.push(wallpaperInfo);
- }
- if (loadTimeData.getBoolean('isOEMDefaultWallpaper')) {
- var oemDefaultWallpaperElement = {
- wallpaperId: null,
- baseURL: 'OemDefaultWallpaper',
- layout: 'CENTER_CROPPED',
- source: Constants.WallpaperSourceEnum.OEM,
- availableOffline: true
- };
- wallpapersDataModel.push(oemDefaultWallpaperElement);
- }
- for (var i = 0; i < wallpapersDataModel.length; i++) {
- // For custom wallpapers, the file name of |currentWallpaper_|
- // includes the first directory level (corresponding to user id hash).
- if (getBaseName(self.currentWallpaper_) ==
- wallpapersDataModel.item(i).baseURL) {
- selectedItem = wallpapersDataModel.item(i);
- }
- }
- var lastElement = {
- baseURL: '',
- layout: '',
- source: Constants.WallpaperSourceEnum.AddNew,
- availableOffline: true
+/**
+ * Handles the layout setting change of custom wallpaper.
+ */
+WallpaperManager.prototype.onWallpaperLayoutChanged_ = function() {
+ var layout = getSelectedLayout();
+ var self = this;
+ chrome.wallpaperPrivate.setCustomWallpaperLayout(layout, function() {
+ if (chrome.runtime.lastError != undefined &&
+ chrome.runtime.lastError.message != str('canceledWallpaper')) {
+ self.showError_(chrome.runtime.lastError.message);
+ self.removeCustomWallpaper(fileName);
+ $('set-wallpaper-layout').disabled = true;
+ } else {
+ WallpaperUtil.saveToLocalStorage(self.currentWallpaper_, layout);
+ self.onWallpaperChanged_(
+ self.wallpaperGrid_.activeItem, self.currentWallpaper_);
+ }
+ });
+};
+
+/**
+ * Handles user clicking on a different category.
+ */
+WallpaperManager.prototype.onCategoriesChange_ = function() {
+ var categoriesList = this.categoriesList_;
+ var selectedIndex = categoriesList.selectionModel.selectedIndex;
+ if (selectedIndex == -1)
+ return;
+ var selectedListItem = categoriesList.getListItemByIndex(selectedIndex);
+ var bar = $('bar');
+ bar.style.left = selectedListItem.offsetLeft + 'px';
+ bar.style.width = selectedListItem.offsetWidth + 'px';
+
+ var wallpapersDataModel = new cr.ui.ArrayDataModel([]);
+ var selectedItem = null;
+ if (selectedListItem.custom) {
+ this.document_.body.setAttribute('custom', '');
+ var errorHandler = this.onFileSystemError_.bind(this);
+ var toArray = function(list) {
+ return Array.prototype.slice.call(list || [], 0);
+ };
+
+ var self = this;
+ var processResults = function(entries) {
+ for (var i = 0; i < entries.length; i++) {
+ var entry = entries[i];
+ var wallpaperInfo = {
+ // Set wallpaperId to null to avoid duplicate thumbnail images,
+ // see crbug.com/506135 for details.
+ wallpaperId: null,
+ baseURL: entry.name,
+ // The layout will be replaced by the actual value saved in
+ // local storage when requested later. Layout is not important
+ // for constructing thumbnails grid, we use CENTER_CROPPED here
+ // to speed up the process of constructing. So we do not need to
+ // wait for fetching correct layout.
+ layout: 'CENTER_CROPPED',
+ source: Constants.WallpaperSourceEnum.Custom,
+ availableOffline: true
+ };
+ wallpapersDataModel.push(wallpaperInfo);
+ }
+ if (loadTimeData.getBoolean('isOEMDefaultWallpaper')) {
+ var oemDefaultWallpaperElement = {
+ wallpaperId: null,
+ baseURL: 'OemDefaultWallpaper',
+ layout: 'CENTER_CROPPED',
+ source: Constants.WallpaperSourceEnum.OEM,
+ availableOffline: true
};
- wallpapersDataModel.push(lastElement);
- self.wallpaperGrid_.dataModel = wallpapersDataModel;
- if (selectedItem) {
- self.wallpaperGrid_.selectedItem = selectedItem;
- self.wallpaperGrid_.activeItem = selectedItem;
+ wallpapersDataModel.push(oemDefaultWallpaperElement);
+ }
+ for (var i = 0; i < wallpapersDataModel.length; i++) {
+ // For custom wallpapers, the file name of |currentWallpaper_|
+ // includes the first directory level (corresponding to user id hash).
+ if (getBaseName(self.currentWallpaper_) ==
+ wallpapersDataModel.item(i).baseURL) {
+ selectedItem = wallpapersDataModel.item(i);
}
+ }
+ var lastElement = {
+ baseURL: '',
+ layout: '',
+ source: Constants.WallpaperSourceEnum.AddNew,
+ availableOffline: true
};
+ wallpapersDataModel.push(lastElement);
+ self.wallpaperGrid_.dataModel = wallpapersDataModel;
+ if (selectedItem) {
+ self.wallpaperGrid_.selectedItem = selectedItem;
+ self.wallpaperGrid_.activeItem = selectedItem;
+ }
+ };
- var success = function(dirEntry) {
- var dirReader = dirEntry.createReader();
- var entries = [];
- // All of a directory's entries are not guaranteed to return in a single
- // call.
- var readEntries = function() {
- dirReader.readEntries(function(results) {
- if (!results.length) {
- processResults(entries.sort());
- } else {
- entries = entries.concat(toArray(results));
- readEntries();
- }
- }, errorHandler);
- };
- readEntries(); // Start reading dirs.
- };
- this.wallpaperDirs_.getDirectory(Constants.WallpaperDirNameEnum.ORIGINAL,
- success, errorHandler);
- } else {
- this.document_.body.removeAttribute('custom');
- // Need this check for test purpose.
- var numOnlineWallpaper = (this.enableOnlineWallpaper_ && this.manifest_) ?
- this.manifest_.wallpaper_list.length : 0;
- for (var i = 0; i < numOnlineWallpaper; i++) {
- if (selectedIndex == AllCategoryIndex ||
- this.manifest_.wallpaper_list[i].categories.indexOf(
- selectedIndex - OnlineCategoriesOffset) != -1) {
- var wallpaperInfo = {
- wallpaperId: i,
- baseURL: this.manifest_.wallpaper_list[i].base_url,
- layout: this.manifest_.wallpaper_list[i].default_layout,
- source: Constants.WallpaperSourceEnum.Online,
- availableOffline: false,
- author: this.manifest_.wallpaper_list[i].author,
- authorWebsite: this.manifest_.wallpaper_list[i].author_website,
- dynamicURL: this.manifest_.wallpaper_list[i].dynamic_url
- };
- var fileName = getBaseName(wallpaperInfo.baseURL) +
- Constants.HighResolutionSuffix;
- if (this.downloadedListMap_ &&
- this.downloadedListMap_.hasOwnProperty(encodeURI(fileName))) {
- wallpaperInfo.availableOffline = true;
- }
- wallpapersDataModel.push(wallpaperInfo);
- var url = this.manifest_.wallpaper_list[i].base_url +
- Constants.HighResolutionSuffix;
- if (url == this.currentWallpaper_) {
- selectedItem = wallpaperInfo;
+ var success = function(dirEntry) {
+ var dirReader = dirEntry.createReader();
+ var entries = [];
+ // All of a directory's entries are not guaranteed to return in a single
+ // call.
+ var readEntries = function() {
+ dirReader.readEntries(function(results) {
+ if (!results.length) {
+ processResults(entries.sort());
+ } else {
+ entries = entries.concat(toArray(results));
+ readEntries();
}
+ }, errorHandler);
+ };
+ readEntries(); // Start reading dirs.
+ };
+ this.wallpaperDirs_.getDirectory(
+ Constants.WallpaperDirNameEnum.ORIGINAL, success, errorHandler);
+ } else {
+ this.document_.body.removeAttribute('custom');
+ // Need this check for test purpose.
+ var numOnlineWallpaper = (this.enableOnlineWallpaper_ && this.manifest_) ?
+ this.manifest_.wallpaper_list.length :
+ 0;
+ for (var i = 0; i < numOnlineWallpaper; i++) {
+ if (selectedIndex == AllCategoryIndex ||
+ this.manifest_.wallpaper_list[i].categories.indexOf(
+ selectedIndex - OnlineCategoriesOffset) != -1) {
+ var wallpaperInfo = {
+ wallpaperId: i,
+ baseURL: this.manifest_.wallpaper_list[i].base_url,
+ layout: this.manifest_.wallpaper_list[i].default_layout,
+ source: Constants.WallpaperSourceEnum.Online,
+ availableOffline: false,
+ author: this.manifest_.wallpaper_list[i].author,
+ authorWebsite: this.manifest_.wallpaper_list[i].author_website,
+ dynamicURL: this.manifest_.wallpaper_list[i].dynamic_url
+ };
+ var fileName =
+ getBaseName(wallpaperInfo.baseURL) + Constants.HighResolutionSuffix;
+ if (this.downloadedListMap_ &&
+ this.downloadedListMap_.hasOwnProperty(encodeURI(fileName))) {
+ wallpaperInfo.availableOffline = true;
+ }
+ wallpapersDataModel.push(wallpaperInfo);
+ var url = this.manifest_.wallpaper_list[i].base_url +
+ Constants.HighResolutionSuffix;
+ if (url == this.currentWallpaper_) {
+ selectedItem = wallpaperInfo;
}
- }
- this.wallpaperGrid_.dataModel = wallpapersDataModel;
- if (selectedItem) {
- this.wallpaperGrid_.selectedItem = selectedItem;
- this.wallpaperGrid_.activeItem = selectedItem;
}
}
- };
+ this.wallpaperGrid_.dataModel = wallpapersDataModel;
+ if (selectedItem) {
+ this.wallpaperGrid_.selectedItem = selectedItem;
+ this.wallpaperGrid_.activeItem = selectedItem;
+ }
+ }
+};
})();
« no previous file with comments | « chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_images_grid.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698