Enable 3rd party support for Security Keys.
[chromium-blink-merge.git] / chrome / browser / resources / cryptotoken / cryptotokenbackground.js
blob702023accb986f7ac97f853bf776220051c0126e
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.
5 /**
6  * @fileoverview CryptoToken background page
7  */
9 'use strict';
11 /** @const */
12 var BROWSER_SUPPORTS_TLS_CHANNEL_ID = true;
14 /** @const */
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(),
26     TIMER_FACTORY,
27     new EtldOriginChecker(),
28     new UsbHelper(),
29     new XhrTextFetcher());
31 var DEVICE_FACTORY_REGISTRY = new DeviceFactoryRegistry(
32     new UsbGnubbyFactory(gnubbies),
33     TIMER_FACTORY,
34     new GoogleCorpIndividualAttestation());
36 /**
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
42  * @return {boolean}
43  */
44 function messageHandlerExternal(request, sender, sendResponse) {
45   if (sender.id && sender.id === LOG_SAVER_EXTENSION_ID) {
46     return handleLogSaverMessage(request);
47   }
48   var closeable = handleWebPageRequest(/** @type {Object} */(request),
49       sender, function(response) {
50     response['requestId'] = request['requestId'];
51     try {
52       sendResponse(response);
53     } catch (e) {
54       console.warn(UTIL_fmt('caught: ' + e.message));
55     }
56   });
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) {
63   var closeable;
64   port.onMessage.addListener(function(request) {
65     closeable = handleWebPageRequest(request, port.sender,
66         function(response) {
67           response['requestId'] = request['requestId'];
68           port.postMessage(response);
69         });
70   });
71   port.onDisconnect.addListener(function() {
72     if (closeable) {
73       closeable.close();
74     }
75   });
76 });
78 /**
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
83  */
84 function handleLogSaverMessage(request) {
85   if (request === 'start') {
86     if (originalUtilFmt_) {
87       // We're already sending
88       return false;
89     }
90     originalUtilFmt_ = UTIL_fmt;
91     UTIL_fmt = function(s) {
92       var line = originalUtilFmt_(s);
93       chrome.runtime.sendMessage(LOG_SAVER_EXTENSION_ID, line);
94       return line;
95     };
96   } else if (request === 'stop') {
97     if (originalUtilFmt_) {
98       UTIL_fmt = originalUtilFmt_;
99       originalUtilFmt_ = null;
100     }
101   }
102   return false;
105 /** @private */
106 var originalUtilFmt_ = null;