OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * @fileoverview CryptoToken background page | 6 * @fileoverview CryptoToken background page |
7 */ | 7 */ |
8 | 8 |
9 'use strict'; | 9 'use strict'; |
10 | 10 |
11 // Singleton tracking available devices. | 11 // Singleton tracking available devices. |
12 var gnubbies = new Gnubbies(); | 12 var gnubbies = new Gnubbies(); |
13 HidGnubbyDevice.register(gnubbies); | 13 HidGnubbyDevice.register(gnubbies); |
14 UsbGnubbyDevice.register(gnubbies); | 14 UsbGnubbyDevice.register(gnubbies); |
15 | 15 |
16 var TIMER_FACTORY = new CountdownTimerFactory(); | 16 var TIMER_FACTORY = new CountdownTimerFactory(); |
17 | 17 |
18 var FACTORY_REGISTRY = new FactoryRegistry( | 18 var FACTORY_REGISTRY = new FactoryRegistry( |
19 TIMER_FACTORY, | 19 TIMER_FACTORY, |
20 new GstaticOriginChecker(), | 20 new GstaticOriginChecker(), |
21 new UsbHelper(), | 21 new UsbHelper(), |
22 new XhrTextFetcher()); | 22 new XhrTextFetcher()); |
23 | 23 |
24 var DEVICE_FACTORY_REGISTRY = new DeviceFactoryRegistry( | 24 var DEVICE_FACTORY_REGISTRY = new DeviceFactoryRegistry( |
25 new UsbGnubbyFactory(gnubbies), | 25 new UsbGnubbyFactory(gnubbies), |
26 TIMER_FACTORY); | 26 TIMER_FACTORY, |
27 | 27 new GoogleCorpIndividualAttestation()); |
28 /** | |
29 * @param {Object} request Request object | |
30 * @param {MessageSender} sender Sender frame | |
31 * @param {Function} sendResponse Response callback | |
32 * @return {?Closeable} Optional handler object that should be closed when port | |
33 * closes | |
34 */ | |
35 function handleWebPageRequest(request, sender, sendResponse) { | |
36 switch (request.type) { | |
37 case GnubbyMsgTypes.ENROLL_WEB_REQUEST: | |
38 return handleWebEnrollRequest(sender, request, sendResponse); | |
39 | |
40 case GnubbyMsgTypes.SIGN_WEB_REQUEST: | |
41 return handleWebSignRequest(sender, request, sendResponse); | |
42 | |
43 case MessageTypes.U2F_REGISTER_REQUEST: | |
44 return handleU2fEnrollRequest(sender, request, sendResponse); | |
45 | |
46 case MessageTypes.U2F_SIGN_REQUEST: | |
47 return handleU2fSignRequest(sender, request, sendResponse); | |
48 | |
49 default: | |
50 sendResponse( | |
51 makeU2fErrorResponse(request, ErrorCodes.BAD_REQUEST, undefined, | |
52 MessageTypes.U2F_REGISTER_RESPONSE)); | |
53 return null; | |
54 } | |
55 } | |
56 | 28 |
57 // Listen to individual messages sent from (whitelisted) webpages via | 29 // Listen to individual messages sent from (whitelisted) webpages via |
58 // chrome.runtime.sendMessage | 30 // chrome.runtime.sendMessage |
59 function messageHandlerExternal(request, sender, sendResponse) { | 31 function messageHandlerExternal(request, sender, sendResponse) { |
60 var closeable = handleWebPageRequest(request, sender, function(response) { | 32 var closeable = handleWebPageRequest(request, sender, function(response) { |
61 response['requestId'] = request['requestId']; | 33 response['requestId'] = request['requestId']; |
62 sendResponse(response); | 34 try { |
| 35 sendResponse(response); |
| 36 } catch (e) { |
| 37 console.warn(UTIL_fmt('caught: ' + e.message)); |
| 38 } |
63 }); | 39 }); |
64 } | 40 } |
65 chrome.runtime.onMessageExternal.addListener(messageHandlerExternal); | 41 chrome.runtime.onMessageExternal.addListener(messageHandlerExternal); |
66 | 42 |
67 // Listen to direct connection events, and wire up a message handler on the port | 43 // Listen to direct connection events, and wire up a message handler on the port |
68 chrome.runtime.onConnectExternal.addListener(function(port) { | 44 chrome.runtime.onConnectExternal.addListener(function(port) { |
69 var closeable; | 45 var closeable; |
70 port.onMessage.addListener(function(request) { | 46 port.onMessage.addListener(function(request) { |
71 closeable = handleWebPageRequest(request, port.sender, | 47 closeable = handleWebPageRequest(request, port.sender, |
72 function(response) { | 48 function(response) { |
73 response['requestId'] = request['requestId']; | 49 response['requestId'] = request['requestId']; |
74 port.postMessage(response); | 50 port.postMessage(response); |
75 }); | 51 }); |
76 }); | 52 }); |
77 port.onDisconnect.addListener(function() { | 53 port.onDisconnect.addListener(function() { |
78 if (closeable) { | 54 if (closeable) { |
79 closeable.close(); | 55 closeable.close(); |
80 } | 56 } |
81 }); | 57 }); |
82 }); | 58 }); |
OLD | NEW |