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

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

Issue 597503007: Sync current wallpaper (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
Index: chrome/browser/resources/chromeos/wallpaper_manager/js/util.js
diff --git a/chrome/browser/resources/chromeos/wallpaper_manager/js/util.js b/chrome/browser/resources/chromeos/wallpaper_manager/js/util.js
index 397f1805e4acdc668b9bae7da94c74ff51d98b38..a4537080e49997a1ddcd41ceedb4c80cab0010b5 100644
--- a/chrome/browser/resources/chromeos/wallpaper_manager/js/util.js
+++ b/chrome/browser/resources/chromeos/wallpaper_manager/js/util.js
@@ -2,7 +2,175 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-var WallpaperUtil = {};
+var WallpaperUtil = {
+ strings: null, // Object that contains all the flags
+ syncFs: null // syncFileSystem handler
+};
+
+/**
+ * Run experimental features.
+ * @param {function} callback The callback will be executed if 'isExperimental'
+ * flag is set to true.
+ */
+WallpaperUtil.enabledExperimentalFeatureCallback = function(callback) {
+ if (WallpaperUtil.strings) {
+ if (WallpaperUtil.strings.isExperimental)
+ callback();
+ } else {
+ chrome.wallpaperPrivate.getStrings(function(strings) {
+ WallpaperUtil.strings = strings;
+ if (WallpaperUtil.strings.isExperimental)
+ callback();
+ });
+ }
+};
+
+/**
+ * Request a syncFileSystem handle and run callback on it.
+ * @param {function} callback The callback to execute after syncFileSystem
+ * handler is available.
+ */
+WallpaperUtil.requestSyncFs = function(callback) {
+ if (WallpaperUtil.syncFs) {
+ callback(WallpaperUtil.syncFs);
+ } else {
+ chrome.syncFileSystem.requestFileSystem(function(fs) {
+ WallpaperUtil.syncFs = fs;
+ callback(WallpaperUtil.syncFs);
+ });
+ }
+};
+
+/**
+ * Print error to console.error.
+ * @param {Event} e The error will be printed to console.error.
+ */
+// TODO(ranj): Handle different errors differently.
+WallpaperUtil.onFileSystemError = function(e) {
+ console.error(e);
+};
+
+/**
+ * Write jpeg/png file data into file entry.
+ * @param {FileEntry} fileEntry The file entry that going to be writen.
+ * @param {ArrayBuffer} wallpaperData Data for image file.
+ * @param {function=} writeCallback The callback that will be executed after
+ * writing data.
+ */
+WallpaperUtil.writeFile = function(fileEntry, wallpaperData, writeCallback) {
+ var uint8arr = new Uint8Array(wallpaperData);
+ fileEntry.createWriter(function(fileWriter) {
+ var blob = new Blob([new Int8Array(wallpaperData)]);
+ fileWriter.write(blob);
+ if (writeCallback)
+ writeCallback();
+ }, WallpaperUtil.onFileSystemError);
+};
+
+/**
+ * Write jpeg/png file data into syncFileSystem.
+ * @param {string} wallpaperFilename The filename that going to be writen.
+ * @param {ArrayBuffer} wallpaperData Data for image file.
+ * @param {function} onSuccess The callback that will be executed after.
+ * writing data
+ */
+WallpaperUtil.storePictureToSyncFileSystem = function(
+ wallpaperFilename, wallpaperData, onSuccess) {
+ var callback = function(fs) {
+ fs.root.getFile(wallpaperFilename,
+ {create: false},
+ function() { onSuccess();}, // already exists
+ function(e) { // not exists, create
+ fs.root.getFile(wallpaperFilename, {create: true},
+ function(fe) {
+ WallpaperUtil.writeFile(
+ fe, wallpaperData, onSuccess);
+ },
+ WallpaperUtil.onFileSystemError);
+ });
+ };
+ WallpaperUtil.requestSyncFs(callback);
+};
+
+/**
+ * Stores jpeg/png wallpaper into |localDir| in local file system.
+ * @param {string} wallpaperFilename File name of wallpaper image.
+ * @param {ArrayBuffer} wallpaperData The wallpaper data.
+ * @param {string} saveDir The path to store wallpaper in local file system.
+ */
+WallpaperUtil.storePictureToLocal = function(wallpaperFilename, wallpaperData,
+ saveDir) {
+ if (!wallpaperData) {
+ console.error('wallpaperData is null');
+ return;
+ }
+ var getDirSuccess = function(dirEntry) {
+ dirEntry.getFile(wallpaperFilename,
+ {create: false},
+ function() {}, // already exists
+ function(e) { // not exists, create
+ dirEntry.getFile(wallpaperFilename, {create: true},
+ function(fe) {
+ WallpaperUtil.writeFile(fe,
+ wallpaperData);
+ },
+ WallpaperUtil.onFileSystemError);
+ });
+ };
+ window.webkitRequestFileSystem(window.PERSISTENT, 1024 * 1024 * 100,
+ function(fs) {
+ fs.root.getDirectory(
+ saveDir, {create: true}, getDirSuccess,
+ WallpaperUtil.onFileSystemError);
+ },
+ WallpaperUtil.onFileSystemError);
+};
+
+/**
+ * Sets wallpaper from synced file system.
+ * @param {string} wallpaperFilename File name used to set wallpaper.
+ * @param {string} wallpaperLayout Layout used to set wallpaper.
+ * @param {function=} onSuccess Callback if set successfully.
+ */
+WallpaperUtil.setSyncCustomWallpaper = function(
+ wallpaperFilename, wallpaperLayout, onSuccess) {
+ var setWallpaperFromSyncCallback = function(fs) {
+ if (!wallpaperFilename) {
+ console.error('wallpaperFilename is not provided.');
+ return;
+ }
+ if (!wallpaperLayout)
+ wallpaperLayout = 'CENTER_CROPPED';
+ fs.root.getFile(wallpaperFilename, {create: false}, function(fileEntry) {
+ fileEntry.file(function(file) {
+ var reader = new FileReader();
+ reader.onloadend = function() {
+ chrome.wallpaperPrivate.setCustomWallpaper(
+ reader.result,
+ wallpaperLayout,
+ true,
+ wallpaperFilename,
+ function(thumbnailData) {
+ // TODO(ranj): Ignore 'canceledWallpaper' error.
+ if (chrome.runtime.lastError) {
+ console.error(chrome.runtime.lastError.message);
+ return;
+ }
+ WallpaperUtil.storePictureToLocal(wallpaperFilename,
+ reader.result, 'original');
+ WallpaperUtil.storePictureToLocal(wallpaperFilename,
+ reader.result, 'thumbnail');
+ if (onSuccess)
+ onSuccess();
+ });
+ };
+ reader.readAsArrayBuffer(file);
+ }, WallpaperUtil.onFileSystemError);
+ }, function(e) {} // fail to read file, expected due to download delay
+ );
+ };
+ WallpaperUtil.requestSyncFs(setWallpaperFromSyncCallback);
+};
/**
* Saves value to local storage that associates with key.

Powered by Google App Engine
This is Rietveld 408576698