1// Copyright (c) 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5function injectContentScripts() { 6 chrome.windows.getAll({'populate': true}, function(windows) { 7 for (var i = 0; i < windows.length; i++) { 8 var tabs = windows[i].tabs; 9 for (var j = 0; j < tabs.length; j++) { 10 var url = tabs[j].url; 11 if (url.indexOf('chrome') == 0 || url.indexOf('about') == 0) { 12 continue; 13 } 14 chrome.tabs.insertCSS( 15 tabs[j].id, 16 {file: 'highcontrast.css', allFrames: true}); 17 chrome.tabs.executeScript( 18 tabs[j].id, 19 {file: 'highcontrast.js', allFrames: true}); 20 } 21 } 22 }); 23} 24 25function updateTabs() { 26 var msg = { 27 'enabled': getEnabled() 28 }; 29 chrome.windows.getAll({'populate': true}, function(windows) { 30 for (var i = 0; i < windows.length; i++) { 31 var tabs = windows[i].tabs; 32 for (var j = 0; j < tabs.length; j++) { 33 var url = tabs[j].url; 34 if (isDisallowedUrl(url)) { 35 continue; 36 } 37 var msg = { 38 'enabled': getEnabled(), 39 'scheme': getSiteScheme(siteFromUrl(url)) 40 }; 41 chrome.tabs.sendRequest(tabs[j].id, msg); 42 } 43 } 44 }); 45} 46 47function toggleEnabled() { 48 setEnabled(!getEnabled()); 49 updateTabs(); 50} 51 52function toggleSite(url) { 53 var site = siteFromUrl(url); 54 var scheme = getSiteScheme(site); 55 if (scheme > 0) { 56 scheme = 0; 57 } else if (getDefaultScheme() > 0) { 58 scheme = getDefaultScheme(); 59 } else { 60 scheme = DEFAULT_SCHEME; 61 } 62 setSiteScheme(site, scheme); 63 updateTabs(); 64} 65 66function init() { 67 injectContentScripts(); 68 updateTabs(); 69 70 chrome.extension.onRequest.addListener( 71 function(request, sender, sendResponse) { 72 if (request['toggle_global']) { 73 toggleEnabled(); 74 } 75 if (request['toggle_site']) { 76 toggleSite(sender.tab ? sender.tab.url : 'www.example.com'); 77 } 78 if (request['init']) { 79 var scheme = getDefaultScheme(); 80 if (sender.tab) { 81 scheme = getSiteScheme(siteFromUrl(sender.tab.url)); 82 } 83 var msg = { 84 'enabled': getEnabled(), 85 'scheme': scheme 86 }; 87 sendResponse(msg); 88 } 89 }); 90 91 document.addEventListener('storage', function(evt) { 92 updateTabs(); 93 }, false); 94 95 if (navigator.appVersion.indexOf('Mac') != -1) { 96 chrome.browserAction.setTitle({'title': 'High Contrast (Cmd+Shift+F11)'}); 97 } 98} 99 100init(); 101