Index: chrome/browser/resources/chromeos/backloader/scripts/background.js |
diff --git a/chrome/browser/resources/chromeos/backloader/scripts/background.js b/chrome/browser/resources/chromeos/backloader/scripts/background.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2253cc3d1369254708d58f2f162e229d4288d4d6 |
--- /dev/null |
+++ b/chrome/browser/resources/chromeos/backloader/scripts/background.js |
@@ -0,0 +1,101 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+function Loader(pages) { |
+ this.pages_ = pages; |
+ this.pages_loaded_ = false; |
+ this.loaded_count_ = false; |
+} |
+ |
+// Global instance. |
+Loader.instance_ = null; |
+ |
+// static. |
+Loader.getInstance = function() { |
+ if (!Loader.instance_) { |
+ if (!g_pages) |
+ console.log('Warning: Undefined g_pages.'); |
+ Loader.instance_ = new Loader(g_pages); |
+ } |
+ |
+ return Loader.instance_; |
+}; |
+ |
+Loader.prototype = { |
+ // Alarm name. |
+ ALARM_NAME: 'CrOSBkgLoaderAlarm', |
+ // Initial delay. |
+ DELAY_IN_MINUTES: 1, |
+ // Periodic wakeup delay. |
+ PERIOD_IN_MINUTES: 60, |
+ // Delayed closing of the background page once when all iframes are loaded. |
+ UNLOAD_DELAY_IN_MS: 10000, |
+ |
+ // Loader start up. Kicks off alarm initialization if needed. |
+ initialize: function() { |
+ if (!g_pages || !g_pages.length) { |
+ window.close(); |
+ return; |
+ } |
+ |
+ chrome.alarms.onAlarm.addListener(this.onAlarm_.bind(this)); |
+ // Check if this alarm already exists, if not then create it. |
+ chrome.alarms.get(this.ALARM_NAME, function(alarm) { |
+ if (!alarm) { |
+ chrome.alarms.create(this.ALARM_NAME, |
+ {delayInMinutes: this.DELAY_IN_MINUTES, |
+ periodInMinutes: this.PERIOD_IN_MINUTES}); |
+ window.close(); |
+ return; |
+ } |
+ }.bind(this)); |
+ }, |
+ |
+ onAlarm_: function(alarm) { |
+ this.loadSubPages_(); |
+ }, |
+ |
+ onMessage_: function(event) { |
+ var msg = event.data; |
+ if (msg.method == 'validate') { |
+ var reply_msg = { |
+ method: 'validationResults', |
+ os: 'ChromeOS' |
+ }; |
+ event.source.postMessage(reply_msg, event.origin); |
+ } else { |
+ console.log('#### Loader.onMessage_: unknown message'); |
+ } |
+ }, |
+ |
+ loadSubPages_: function() { |
+ if (this.pages_loaded_) |
+ return; |
+ |
+ window.addEventListener('message', this.onMessage_.bind(this), false); |
+ for (i = 0; i < this.pages_.length; i++) { |
+ this.loadPage_(i, this.pages_[i]); |
+ } |
+ this.pages_loaded_ = true; |
+ }, |
+ |
+ loadPage_: function(index, pageUrl) { |
+ var iframe = document.createElement('iframe'); |
+ iframe.onload = function() { |
+ this.loaded_count_++; |
+ if (this.loaded_count_ < this.pages_.length) |
+ return; |
+ |
+ // Delay closing. |
+ setInterval(function() { |
+ window.close(); |
+ }.bind(this), this.UNLOAD_DELAY_IN_MS); |
+ }.bind(this); |
+ iframe.src = pageUrl; |
+ iframe.name = 'frame_' + index; |
+ document.body.appendChild(iframe); |
+ } |
+}; |
+ |
+Loader.getInstance().initialize(); |