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