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..27f3489ebcef8176a1686a3e627b7ec314c5e34a |
--- /dev/null |
+++ b/chrome/browser/resources/chromeos/backloader/scripts/background.js |
@@ -0,0 +1,85 @@ |
+// 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; |
+// Alarm name. |
+Loader.ALARM_NAME = 'BkgLoaderAlarm'; |
+// Initial delay. |
+Loader.DELAY_IN_MINUTES = 1; |
+// Periodic wakeup delay. |
+Loader.PERIOD_IN_MINUTES = 60; |
+// Delayed closing of the background page once when all iframes are loaded. |
+Loader.UNLOAD_DELAY_IN_MS = 10000; |
+ |
+// static. |
+Loader.getInstance = function() { |
+ if (!Loader.instance_) |
+ Loader.instance_ = new Loader(g_pages); |
+ |
+ return Loader.instance_; |
+}; |
+ |
+// Alarm event handler. |
+Loader.onAlarm = function(alarm) { |
+ Loader.getInstance().onAlarm_(alarm); |
+}; |
+ |
+// Loader start up. Kicks off alarm initialization if needed. |
+Loader.prototype.start = function() { |
+ console.log('Starting background loader'); |
+ chrome.alarms.onAlarm.addListener(Loader.onAlarm); |
+ // Check if this alarm already exists, if not then create it. |
+ chrome.alarms.get(Loader.ALARM_NAME, function(alarm) { |
+ if (!alarm) { |
+ console.log('Creating alarm!'); |
+ chrome.alarms.create(Loader.ALARM_NAME, |
+ {delayInMinutes: Loader.DELAY_IN_MINUTES, |
+ periodInMinutes: Loader.PERIOD_IN_MINUTES}); |
+ window.close(); |
+ return; |
+ } |
+ console.log('Has alarm already!'); |
+ }.bind(this)); |
+}; |
+ |
+Loader.prototype.onAlarm_ = function(alarm) { |
+ console.log('Got alarm ' + alarm.name); |
+ if (this.pages_loaded_) { |
+ console.log('Pages already loaded!'); |
+ return; |
+ } |
+ for (i = 0; i < this.pages_.length; i++) { |
+ this.loadPage_(i, this.pages_[i]); |
+ } |
+ this.pages_loaded_ = true; |
+}; |
+ |
+Loader.prototype.loadPage_ = function(index, pageUrl) { |
+ var iframe = document.createElement('iframe'); |
+ iframe.onload = function() { |
+ this.loaded_count_++; |
+ console.log('Total ' + this.loaded_count_ + ' pages loaded.'); |
+ if (this.loaded_count_ < this.pages_.length) |
+ return; |
+ |
+ console.log('All pages loaded!'); |
+ // Delay closing. |
+ setInterval(function() { |
+ console.log('Closing background page.'); |
+ window.close(); |
+ }.bind(this), Loader.UNLOAD_DELAY_IN_MS); |
+ }.bind(this); |
+ iframe.src = pageUrl; |
+ iframe.name = 'frame' + index; |
+ document.body.appendChild(iframe); |
+}; |
+ |
+Loader.getInstance().start(); |