1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)var WallpaperUtil = {}; 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Saves value to local storage that associates with key. 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {string} key The key that associates with value. 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {string} value The value to save to local storage. 11a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) * @param {boolen} sync True if the value is saved to sync storage. 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {function=} opt_callback The callback on success, or on failure. 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 14a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)WallpaperUtil.saveToStorage = function(key, value, sync, opt_callback) { 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var items = {}; 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) items[key] = value; 17a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) if (sync) 18a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Constants.WallpaperSyncStorage.set(items, opt_callback); 19a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) else 20a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Constants.WallpaperLocalStorage.set(items, opt_callback); 21a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)}; 22a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) 23a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)/** 24a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) * Saves user's wallpaper infomation to local and sync storage. Note that local 25a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) * value should be saved first. 26a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) * @param {string} url The url address of wallpaper. For custom wallpaper, it is 27a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) * the file name. 28a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) * @param {string} layout The wallpaper layout. 29a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) * @param {string} source The wallpaper source. 30a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) */ 31a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles)WallpaperUtil.saveWallpaperInfo = function(url, layout, source) { 32a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) var wallpaperInfo = { 33a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) url: url, 34a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) layout: layout, 35a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) source: source 36a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) }; 37a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) WallpaperUtil.saveToStorage(Constants.AccessLocalWallpaperInfoKey, 38a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) wallpaperInfo, false, function() { 39a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) WallpaperUtil.saveToStorage(Constants.AccessSyncWallpaperInfoKey, 40a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) wallpaperInfo, true); 41a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) }); 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Downloads resources from url. Calls onSuccess and opt_onFailure accordingly. 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {string} url The url address where we should fetch resources. 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {string} type The response type of XMLHttprequest. 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {function} onSuccess The success callback. It must be called with 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * current XMLHttprequest object. 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {function} onFailure The failure callback. 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {XMLHttpRequest=} opt_xhr The XMLHttpRequest object. 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WallpaperUtil.fetchURL = function(url, type, onSuccess, onFailure, opt_xhr) { 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var xhr; 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (opt_xhr) 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) xhr = opt_xhr; 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) else 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) xhr = new XMLHttpRequest(); 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) try { 6158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Do not use loadend here to handle both success and failure case. It gets 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // complicated with abortion. Unexpected error message may show up. See 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // http://crbug.com/242581. 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) xhr.addEventListener('load', function(e) { 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (this.status == 200) { 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onSuccess(this); 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onFailure(); 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }); 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) xhr.addEventListener('error', onFailure); 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) xhr.open('GET', url, true); 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) xhr.responseType = type; 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) xhr.send(null); 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } catch (e) { 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onFailure(); 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/** 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Sets wallpaper to online wallpaper specified by url and layout 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {string} url The url address where we should fetch resources. 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {string} layout The layout of online wallpaper. 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {function} onSuccess The success callback. 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * @param {function} onFailure The failure callback. 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)WallpaperUtil.setOnlineWallpaper = function(url, layout, onSuccess, onFailure) { 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) var self = this; 898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) chrome.wallpaperPrivate.setWallpaperIfExists(url, layout, function(exists) { 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (exists) { 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onSuccess(); 92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.fetchURL(url, 'arraybuffer', function(xhr) { 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (xhr.response != null) { 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome.wallpaperPrivate.setWallpaper(xhr.response, layout, url, 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onSuccess); 99a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) self.saveWallpaperInfo(url, layout, 100a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) Constants.WallpaperSourceEnum.Online); 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } else { 102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) onFailure(); 103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }, onFailure); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) }); 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci/** 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * Runs chrome.test.sendMessage in test environment. Does nothing if running 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * in production environment. 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci * @param {string} message Test message to send. 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci */ 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciWallpaperUtil.testSendMessage = function(message) { 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var test = chrome.test || window.top.chrome.test; 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (test) 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci test.sendMessage(message); 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 119