1 // Copyright 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.
6 * @fileoverview CryptoToken background page
12 var BROWSER_SUPPORTS_TLS_CHANNEL_ID = true;
15 var LOG_SAVER_EXTENSION_ID = 'fjajfjhkeibgmiggdfehjplbhmfkialk';
17 // Singleton tracking available devices.
18 var gnubbies = new Gnubbies();
19 HidGnubbyDevice.register(gnubbies);
20 UsbGnubbyDevice.register(gnubbies);
22 var TIMER_FACTORY = new CountdownTimerFactory();
24 var FACTORY_REGISTRY = new FactoryRegistry(
25 new CryptoTokenApprovedOrigin(),
27 new EtldOriginChecker(),
29 new XhrTextFetcher());
31 var DEVICE_FACTORY_REGISTRY = new DeviceFactoryRegistry(
32 new UsbGnubbyFactory(gnubbies),
34 new GoogleCorpIndividualAttestation());
37 * Listen to individual messages sent from (whitelisted) webpages via
38 * chrome.runtime.sendMessage
39 * @param {*} request The received request
40 * @param {!MessageSender} sender The message sender
41 * @param {function(*): void} sendResponse A callback that delivers a response
44 function messageHandlerExternal(request, sender, sendResponse) {
45 if (sender.id && sender.id === LOG_SAVER_EXTENSION_ID) {
46 return handleLogSaverMessage(request);
48 var closeable = handleWebPageRequest(/** @type {Object} */(request),
49 sender, function(response) {
50 response['requestId'] = request['requestId'];
52 sendResponse(response);
54 console.warn(UTIL_fmt('caught: ' + e.message));
57 return true; // Tell Chrome not to destroy sendResponse yet
59 chrome.runtime.onMessageExternal.addListener(messageHandlerExternal);
61 // Listen to direct connection events, and wire up a message handler on the port
62 chrome.runtime.onConnectExternal.addListener(function(port) {
64 port.onMessage.addListener(function(request) {
65 closeable = handleWebPageRequest(request, port.sender,
67 response['requestId'] = request['requestId'];
68 port.postMessage(response);
71 port.onDisconnect.addListener(function() {
79 * Handles messages from the log-saver app. Temporarily replaces UTIL_fmt with
80 * a wrapper that also sends formatted messages to the app.
81 * @param {*} request The message received from the app
82 * @return {boolean} Used as chrome.runtime.onMessage handler return value
84 function handleLogSaverMessage(request) {
85 if (request === 'start') {
86 if (originalUtilFmt_) {
87 // We're already sending
90 originalUtilFmt_ = UTIL_fmt;
91 UTIL_fmt = function(s) {
92 var line = originalUtilFmt_(s);
93 chrome.runtime.sendMessage(LOG_SAVER_EXTENSION_ID, line);
96 } else if (request === 'stop') {
97 if (originalUtilFmt_) {
98 UTIL_fmt = originalUtilFmt_;
99 originalUtilFmt_ = null;
106 var originalUtilFmt_ = null;