| 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 |