Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(176)

Unified Diff: ui/accessibility/extensions/caretbrowsing/background.js

Issue 593293002: Initial checkin of accessibility extensions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix license issues Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698