blob: 0973cc1d6341ce732edc453fd4b7f5da00d53fd9 [file] [log] [blame]
// Copyright 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 CryptoToken background page
*/
'use strict';
/** @const */
var BROWSER_SUPPORTS_TLS_CHANNEL_ID = true;
/** @const */
var LOG_SAVER_EXTENSION_ID = 'fjajfjhkeibgmiggdfehjplbhmfkialk';
// Singleton tracking available devices.
var gnubbies = new Gnubbies();
HidGnubbyDevice.register(gnubbies);
UsbGnubbyDevice.register(gnubbies);
var TIMER_FACTORY = new CountdownTimerFactory();
var FACTORY_REGISTRY = new FactoryRegistry(
new GoogleApprovedOrigins(),
TIMER_FACTORY,
new GstaticOriginChecker(),
new UsbHelper(),
new XhrTextFetcher());
var DEVICE_FACTORY_REGISTRY = new DeviceFactoryRegistry(
new UsbGnubbyFactory(gnubbies),
TIMER_FACTORY,
new GoogleCorpIndividualAttestation());
/**
* Listen to individual messages sent from (whitelisted) webpages via
* chrome.runtime.sendMessage
* @param {*} request The received request
* @param {!MessageSender} sender The message sender
* @param {function(*): void} sendResponse A callback that delivers a response
* @return {boolean}
*/
function messageHandlerExternal(request, sender, sendResponse) {
if (sender.id && sender.id === LOG_SAVER_EXTENSION_ID) {
return handleLogSaverMessage(request);
}
var closeable = handleWebPageRequest(/** @type {Object} */(request),
sender, function(response) {
response['requestId'] = request['requestId'];
try {
sendResponse(response);
} catch (e) {
console.warn(UTIL_fmt('caught: ' + e.message));
}
});
return true; // Tell Chrome not to destroy sendResponse yet
}
chrome.runtime.onMessageExternal.addListener(messageHandlerExternal);
// Listen to direct connection events, and wire up a message handler on the port
chrome.runtime.onConnectExternal.addListener(function(port) {
var closeable;
port.onMessage.addListener(function(request) {
closeable = handleWebPageRequest(request, port.sender,
function(response) {
response['requestId'] = request['requestId'];
port.postMessage(response);
});
});
port.onDisconnect.addListener(function() {
if (closeable) {
closeable.close();
}
});
});
/**
* Handles messages from the log-saver app. Temporarily replaces UTIL_fmt with
* a wrapper that also sends formatted messages to the app.
* @param {*} request The message received from the app
* @return {boolean} Used as chrome.runtime.onMessage handler return value
*/
function handleLogSaverMessage(request) {
if (request === 'start') {
if (originalUtilFmt_) {
// We're already sending
return false;
}
originalUtilFmt_ = UTIL_fmt;
UTIL_fmt = function(s) {
var line = originalUtilFmt_(s);
chrome.runtime.sendMessage(LOG_SAVER_EXTENSION_ID, line);
return line;
};
} else if (request === 'stop') {
if (originalUtilFmt_) {
UTIL_fmt = originalUtilFmt_;
originalUtilFmt_ = null;
}
}
return false;
}
/** @private */
var originalUtilFmt_ = null;