Index: ui/accessibility/extensions/caretbrowsing/background.js |
diff --git a/ui/accessibility/extensions/caretbrowsing/background.js b/ui/accessibility/extensions/caretbrowsing/background.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..18c722a2fc64fb00ae4b146fc05ca43096f123cf |
--- /dev/null |
+++ b/ui/accessibility/extensions/caretbrowsing/background.js |
@@ -0,0 +1,108 @@ |
+// Copyright (c) 2014 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. |
+ |
+/** |
+ * @fileoverview Script that runs on the background page. |
+ */ |
+ |
+CONTENT_SCRIPTS = [ |
+ 'accessibility_utils.js', |
+ 'traverse_util.js', |
+ 'caret_browsing.js' |
+]; |
+ |
+/** |
+ * The class handling the Caret Browsing background page, which keeps |
+ * track of the current state, handles the browser action button, and |
+ * initializes the content script in all running tabs when the extension |
+ * is first loaded. |
+ * @constructor |
+ */ |
+var CaretBkgnd = function() {}; |
+ |
+/** |
+ * Flag indicating whether caret browsing is enabled. Global, applies to |
+ * all tabs simultaneously. |
+ * @type {boolean} |
+ */ |
+CaretBkgnd.isEnabled; |
+ |
+/** |
+ * Change the browser action icon and tooltip based on the enabled state. |
+ */ |
+CaretBkgnd.setIcon = function() { |
+ chrome.browserAction.setIcon( |
+ {'path': CaretBkgnd.isEnabled ? |
+ '../caret_19_on.png' : |
+ '../caret_19.png'}); |
+ chrome.browserAction.setTitle( |
+ {'title': CaretBkgnd.isEnabled ? |
+ 'Turn Off Caret Browsing (F7)' : |
+ 'Turn On Caret Browsing (F7)' }); |
+}; |
+ |
+/** |
+ * This is called when the extension is first loaded, so that it can be |
+ * immediately used in all already-open tabs. It's not needed for any |
+ * new tabs that open after that, the content script will be automatically |
+ * injected into any new tab. |
+ */ |
+CaretBkgnd.injectContentScripts = function() { |
+ chrome.windows.getAll({'populate': true}, function(windows) { |
+ for (var i = 0; i < windows.length; i++) { |
+ var tabs = windows[i].tabs; |
+ for (var j = 0; j < tabs.length; j++) { |
+ for (var k = 0; k < CONTENT_SCRIPTS.length; k++) { |
+ chrome.tabs.executeScript( |
+ tabs[j].id, |
+ {file: CONTENT_SCRIPTS[k], allFrames: true}, |
+ function(result) { |
+ // Ignore. |
+ chrome.runtime.lastError; |
+ }); |
+ } |
+ } |
+ } |
+ }); |
+}; |
+ |
+/** |
+ * Toggle caret browsing on or off, and update the browser action icon and |
+ * all open tabs. |
+ */ |
+CaretBkgnd.toggle = function() { |
+ CaretBkgnd.isEnabled = !CaretBkgnd.isEnabled; |
+ var obj = {}; |
+ obj['enabled'] = CaretBkgnd.isEnabled; |
+ chrome.storage.sync.set(obj); |
+ CaretBkgnd.setIcon(); |
+}; |
+ |
+/** |
+ * Initialize the background script. Set the initial value of the flag |
+ * based on the saved preference in localStorage, update the browser action, |
+ * inject into running tabs, and then set up communication with content |
+ * scripts in tabs. Also check for prefs updates (from the options page) |
+ * and send them to content scripts. |
+ */ |
+CaretBkgnd.init = function() { |
+ chrome.storage.sync.get('enabled', function(result) { |
+ CaretBkgnd.isEnabled = result['enabled']; |
+ CaretBkgnd.setIcon(); |
+ CaretBkgnd.injectContentScripts(); |
+ |
+ chrome.browserAction.onClicked.addListener(function(tab) { |
+ CaretBkgnd.toggle(); |
+ }); |
+ }); |
+ |
+ chrome.storage.onChanged.addListener(function() { |
+ chrome.storage.sync.get('enabled', function(result) { |
+ CaretBkgnd.isEnabled = result['enabled']; |
+ CaretBkgnd.setIcon(); |
+ }); |
+ }); |
+}; |
+ |
+CaretBkgnd.init(); |