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 c8696a65fae22dd457c0f7d1137627805defb1e0..2f83969b1cccc244fb259dea04ec0c5c3aa5b4c2 100644 |
--- a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js |
+++ b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js |
@@ -20,8 +20,8 @@ function WallpaperManager(dialogDom) { |
this.butterBar_ = new ButterBar(this.dialogDom_); |
this.customWallpaperData_ = null; |
this.currentWallpaper_ = null; |
+ this.wallpaperRequest_ = null; |
this.fetchManifest_(); |
- this.initDom_(); |
} |
// Anonymous 'namespace'. |
@@ -81,31 +81,56 @@ function WallpaperManager(dialogDom) { |
* Requests wallpaper manifest file from server. |
*/ |
WallpaperManager.prototype.fetchManifest_ = function() { |
- var xhr = new XMLHttpRequest(); |
var locale = navigator.language; |
var urls = [ |
ManifestBaseURL + locale + '.json', |
// Fallback url. Use 'en' locale by default. |
ManifestBaseURL + 'en.json']; |
+ var self = this; |
+ |
+ var asyncFetchManifestFromUrls = function(urls, func, callback) { |
flackr
2012/11/13 16:18:30
To make this a bit easier to read, perhaps you cou
bshe
2012/11/13 19:33:22
Done.
|
+ var index = 0; |
+ var loop = { |
+ next: function() { |
+ if (index < urls.length) { |
+ func(loop, urls[index]); |
+ index++; |
+ } else { |
+ callback(); |
+ } |
+ }, |
- for (var i = 0; i < urls.length; i++) { |
- xhr.open('GET', urls[i], false); |
+ done: function() { |
+ callback(); |
flackr
2012/11/13 16:18:30
It looks like if there are no manifests we will no
bshe
2012/11/13 19:33:22
No. That was a mistake. Fixed it in new patch.
On
|
+ } |
+ }; |
+ loop.next(); |
+ } |
flackr
2012/11/13 16:18:30
Need semicolon at end of line.
bshe
2012/11/13 19:33:22
Done.
|
+ |
+ var fetchManifestAsync = function(loop, url) { |
+ var xhr = new XMLHttpRequest(); |
+ xhr.open('GET', url, true); |
try { |
xhr.send(null); |
- // TODO(bshe): We should save the downloaded manifest to local disk. |
- // Other components may want to use it (i.e. screen saver). |
- if (xhr.status === 200) { |
- this.parseManifest_(xhr.responseText); |
- return; |
- } |
+ xhr.addEventListener('load', function(e) { |
+ // TODO(bshe): We should save the downloaded manifest to local disk. |
+ // Other components may want to use it (e.g. screen saver). |
+ if (xhr.status === 200) { |
+ self.parseManifest_(xhr.responseText); |
+ self.initDom_(); |
+ loop.done(); |
flackr
2012/11/13 16:18:30
As the code is currently, you'll call initDom twic
bshe
2012/11/13 19:33:22
Should be fixed in the new patch.
On 2012/11/13 1
|
+ } else { |
+ loop.next(); |
+ } |
+ }); |
} catch (e) { |
- this.manifest_ = {}; |
- this.butterBar_.showError_(str('connectionFailed')); |
- return; |
+ self.manifest_ = {}; |
+ self.butterBar_.showError_(str('connectionFailed')); |
+ loop.done(); |
} |
} |
flackr
2012/11/13 16:18:30
Semicolon at end of line.
bshe
2012/11/13 19:33:22
Done.
|
- this.manifest_ = {}; |
- this.butterBar_.showError_(str('connectionFailed')); |
+ |
+ asyncFetchManifestFromUrls(urls, fetchManifestAsync, this.initDom_); |
// TODO(bshe): Fall back to saved manifest if there is a problem fetching |
// manifest from server. |