11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright (c) 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction injectContentScripts() { 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.windows.getAll({'populate': true}, function(windows) { 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (var i = 0; i < windows.length; i++) { 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var tabs = windows[i].tabs; 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (var j = 0; j < tabs.length; j++) { 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var url = tabs[j].url; 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (url.indexOf('chrome') == 0 || url.indexOf('about') == 0) { 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci continue; 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.tabs.insertCSS( 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tabs[j].id, 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci {file: 'highcontrast.css', allFrames: true}); 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.tabs.executeScript( 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci tabs[j].id, 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci {file: 'highcontrast.js', allFrames: true}); 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }); 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction updateTabs() { 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var msg = { 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'enabled': getEnabled() 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.windows.getAll({'populate': true}, function(windows) { 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (var i = 0; i < windows.length; i++) { 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var tabs = windows[i].tabs; 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci for (var j = 0; j < tabs.length; j++) { 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var url = tabs[j].url; 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (isDisallowedUrl(url)) { 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci continue; 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var msg = { 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'enabled': getEnabled(), 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'scheme': getSiteScheme(siteFromUrl(url)) 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.tabs.sendRequest(tabs[j].id, msg); 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }); 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction toggleEnabled() { 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci setEnabled(!getEnabled()); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updateTabs(); 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction toggleSite(url) { 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var site = siteFromUrl(url); 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var scheme = getSiteScheme(site); 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (scheme > 0) { 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scheme = 0; 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else if (getDefaultScheme() > 0) { 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scheme = getDefaultScheme(); 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else { 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scheme = DEFAULT_SCHEME; 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci setSiteScheme(site, scheme); 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updateTabs(); 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifunction init() { 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci injectContentScripts(); 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updateTabs(); 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.extension.onRequest.addListener( 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci function(request, sender, sendResponse) { 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (request['toggle_global']) { 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci toggleEnabled(); 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (request['toggle_site']) { 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci toggleSite(sender.tab ? sender.tab.url : 'www.example.com'); 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (request['init']) { 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var scheme = getDefaultScheme(); 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (sender.tab) { 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scheme = getSiteScheme(siteFromUrl(sender.tab.url)); 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci var msg = { 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'enabled': getEnabled(), 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 'scheme': scheme 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci sendResponse(msg); 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }); 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci document.addEventListener('storage', function(evt) { 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci updateTabs(); 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }, false); 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (navigator.appVersion.indexOf('Mac') != -1) { 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chrome.browserAction.setTitle({'title': 'High Contrast (Cmd+Shift+F11)'}); 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciinit(); 101