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 U2F gnubbyd background page
11 // Singleton tracking available devices.
12 var gnubbies
= new Gnubbies();
13 llUsbGnubby
.register(gnubbies
);
14 // Only include HID support if it's available in this browser.
16 llHidGnubby
.register(gnubbies
);
19 var GNUBBY_FACTORY
= new UsbGnubbyFactory(gnubbies
);
20 var SIGN_HELPER_FACTORY
= new UsbSignHelperFactory(GNUBBY_FACTORY
);
21 var ENROLL_HELPER_FACTORY
= new UsbEnrollHelperFactory(GNUBBY_FACTORY
);
24 * @param {boolean} toleratesMultipleResponses Whether the web page can handle
25 * multiple responses given to its sendResponse callback.
26 * @param {Object} request Request object
27 * @param {MessageSender} sender Sender frame
28 * @param {Function} sendResponse Response callback
29 * @return {?Closeable} Optional handler object that should be closed when port
32 function handleWebPageRequest(toleratesMultipleResponses
, request
, sender
,
34 var enforceAppIdValid
= true;
35 switch (request
.type
) {
36 case GnubbyMsgTypes
.ENROLL_WEB_REQUEST
:
37 return handleEnrollRequest(ENROLL_HELPER_FACTORY
, sender
, request
,
38 enforceAppIdValid
, sendResponse
, toleratesMultipleResponses
);
40 case GnubbyMsgTypes
.SIGN_WEB_REQUEST
:
41 return handleSignRequest(SIGN_HELPER_FACTORY
, sender
, request
,
42 enforceAppIdValid
, sendResponse
, toleratesMultipleResponses
);
45 var response
= formatWebPageResponse(
46 GnubbyMsgTypes
.ENROLL_WEB_REPLY
, GnubbyCodeTypes
.BAD_REQUEST
);
47 sendResponse(response
);
52 // Message handler for requests coming from web pages.
53 function messageHandler(toleratesMultipleResponses
, request
, sender
,
55 console
.log(UTIL_fmt('onMessageExternal listener: ' + request
.type
));
56 console
.log(UTIL_fmt('request'));
58 console
.log(UTIL_fmt('sender'));
61 handleWebPageRequest(toleratesMultipleResponses
, request
, sender
,
66 // Listen to web pages.
67 chrome
.runtime
.onMessageExternal
.addListener(messageHandler
.bind(null, false));
69 // List to connection events, and wire up a message handler on the port.
70 chrome
.runtime
.onConnectExternal
.addListener(function(port
) {
72 port
.onMessage
.addListener(function(request
) {
73 var toleratesMultipleResponses
= true;
74 closeable
= handleWebPageRequest(toleratesMultipleResponses
, request
,
77 response
['requestId'] = request
['requestId'];
78 port
.postMessage(response
);
81 port
.onDisconnect
.addListener(function() {