| // 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(); |