OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * WallpaperManager constructor. | 6 * WallpaperManager constructor. |
7 * | 7 * |
8 * WallpaperManager objects encapsulate the functionality of the wallpaper | 8 * WallpaperManager objects encapsulate the functionality of the wallpaper |
9 * manager extension. | 9 * manager extension. |
10 * | 10 * |
11 * @constructor | 11 * @constructor |
12 * @param {HTMLElement} dialogDom The DOM node containing the prototypical | 12 * @param {HTMLElement} dialogDom The DOM node containing the prototypical |
13 * extension UI. | 13 * extension UI. |
14 */ | 14 */ |
15 | 15 |
16 function WallpaperManager(dialogDom) { | 16 function WallpaperManager(dialogDom) { |
17 this.dialogDom_ = dialogDom; | 17 this.dialogDom_ = dialogDom; |
18 this.document_ = dialogDom.ownerDocument; | 18 this.document_ = dialogDom.ownerDocument; |
19 this.selectedCategory = null; | 19 this.selectedCategory = null; |
20 this.butterBar_ = new ButterBar(this.dialogDom_); | 20 this.butterBar_ = new ButterBar(this.dialogDom_); |
21 this.customWallpaperData_ = null; | 21 this.customWallpaperData_ = null; |
22 this.currentWallpaper_ = null; | 22 this.currentWallpaper_ = null; |
23 this.wallpaperRequest_ = null; | |
23 this.fetchManifest_(); | 24 this.fetchManifest_(); |
24 this.initDom_(); | |
25 } | 25 } |
26 | 26 |
27 // Anonymous 'namespace'. | 27 // Anonymous 'namespace'. |
28 // TODO(bshe): Get rid of anonymous namespace. | 28 // TODO(bshe): Get rid of anonymous namespace. |
29 (function() { | 29 (function() { |
30 | 30 |
31 /** | 31 /** |
32 * Base URL of the manifest file. | 32 * Base URL of the manifest file. |
33 */ | 33 */ |
34 /** @const */ var ManifestBaseURL = 'https://commondatastorage.googleapis.' + | 34 /** @const */ var ManifestBaseURL = 'https://commondatastorage.googleapis.' + |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
76 this.manifest_ = {}; | 76 this.manifest_ = {}; |
77 } | 77 } |
78 }; | 78 }; |
79 | 79 |
80 /** | 80 /** |
81 * Requests wallpaper manifest file from server. | 81 * Requests wallpaper manifest file from server. |
82 */ | 82 */ |
83 WallpaperManager.prototype.fetchManifest_ = function() { | 83 WallpaperManager.prototype.fetchManifest_ = function() { |
84 var xhr = new XMLHttpRequest(); | 84 var xhr = new XMLHttpRequest(); |
85 var locale = navigator.language; | 85 var locale = navigator.language; |
86 var urls = [ | 86 xhr.open('GET', ManifestBaseURL + locale + '.json', true); |
87 ManifestBaseURL + locale + '.json', | 87 var self = this; |
88 // Fallback url. Use 'en' locale by default. | 88 try { |
89 ManifestBaseURL + 'en.json']; | 89 xhr.send(null); |
90 | 90 xhr.addEventListener('load', function(e) { |
91 for (var i = 0; i < urls.length; i++) { | |
92 xhr.open('GET', urls[i], false); | |
93 try { | |
94 xhr.send(null); | |
95 // TODO(bshe): We should save the downloaded manifest to local disk. | 91 // TODO(bshe): We should save the downloaded manifest to local disk. |
96 // Other components may want to use it (i.e. screen saver). | 92 // Other components may want to use it (i.e. screen saver). |
miket_OOO
2012/11/12 21:39:46
e.g., not i.e.
bshe
2012/11/12 22:24:28
Done.
| |
97 if (xhr.status === 200) { | 93 if (xhr.status === 200) { |
98 this.parseManifest_(xhr.responseText); | 94 self.parseManifest_(xhr.responseText); |
99 return; | 95 self.initDom_(); |
96 } else { | |
97 // Fall back to en locale if current locale is not supported. | |
98 var xhrFallBack = new XMLHttpRequest(); | |
99 xhrFallBack.open('GET', ManifestBaseURL + 'en.json', true); | |
100 try { | |
101 xhrFallBack.send(null); | |
102 xhrFallBack.addEventListener('load', function(e) { | |
103 if (xhrFallBack.status === 200) { | |
104 self.parseManifest_(xhrFallBack.responseText); | |
105 } else { | |
106 self.manifest_ = {}; | |
107 self.butterBar_.showError_(str('connectionFailed')); | |
miket_OOO
2012/11/12 21:39:46
What does the cast do here?
flackr
2012/11/12 22:00:34
str is a function which returns the localized stri
bshe
2012/11/12 22:24:28
you mean str('..')? It gets the localized string f
| |
108 } | |
109 self.initDom_(); | |
110 }); | |
111 } catch (e) { | |
112 this.manifest_ = {}; | |
113 this.butterBar_.showError_(str('connectionFailed')); | |
114 self.initDom_(); | |
115 return; | |
flackr
2012/11/12 22:00:34
Is there a reason for unrolling the for loop into
bshe
2012/11/12 23:53:38
We now use async xmlhttp request. I wrote a sync l
flackr
2012/11/13 02:19:07
Ah of course, this can still be done asynchronousl
bshe
2012/11/13 15:24:46
Agree. I will keep it this way.
On 2012/11/13 02:
| |
116 } | |
100 } | 117 } |
101 } catch (e) { | 118 }); |
119 } catch (e) { | |
102 this.manifest_ = {}; | 120 this.manifest_ = {}; |
103 this.butterBar_.showError_(str('connectionFailed')); | 121 this.butterBar_.showError_(str('connectionFailed')); |
122 self.initDom_(); | |
104 return; | 123 return; |
105 } | |
106 } | 124 } |
107 this.manifest_ = {}; | |
108 this.butterBar_.showError_(str('connectionFailed')); | |
109 | 125 |
110 // TODO(bshe): Fall back to saved manifest if there is a problem fetching | 126 // TODO(bshe): Fall back to saved manifest if there is a problem fetching |
111 // manifest from server. | 127 // manifest from server. |
112 }; | 128 }; |
113 | 129 |
114 /** | 130 /** |
115 * One-time initialization of various DOM nodes. | 131 * One-time initialization of various DOM nodes. |
116 */ | 132 */ |
117 WallpaperManager.prototype.initDom_ = function() { | 133 WallpaperManager.prototype.initDom_ = function() { |
118 i18nTemplate.process(this.document_, loadTimeData); | 134 i18nTemplate.process(this.document_, loadTimeData); |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
402 selectedItem = wallpaperInfo; | 418 selectedItem = wallpaperInfo; |
403 } | 419 } |
404 } | 420 } |
405 } | 421 } |
406 this.wallpaperGrid_.dataModel = wallpapersDataModel; | 422 this.wallpaperGrid_.dataModel = wallpapersDataModel; |
407 this.wallpaperGrid_.selectedItem = selectedItem; | 423 this.wallpaperGrid_.selectedItem = selectedItem; |
408 } | 424 } |
409 }; | 425 }; |
410 | 426 |
411 })(); | 427 })(); |
OLD | NEW |