Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5689)

Unified Diff: chrome/browser/resources/cryptotoken/gnubby.js

Issue 308173002: Fix race and remove unused features in cryptotoken extension (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix type annotation Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/cryptotoken/gnubby.js
diff --git a/chrome/browser/resources/cryptotoken/gnubby.js b/chrome/browser/resources/cryptotoken/gnubby.js
index 27f8c86aa8352996699b1f0ffe954d0700128525..dd013fb69e806d5671353c8d6b7d4c87a1315109 100644
--- a/chrome/browser/resources/cryptotoken/gnubby.js
+++ b/chrome/browser/resources/cryptotoken/gnubby.js
@@ -44,7 +44,7 @@ usbGnubby.setGnubbies = function(gnubbies) {
usbGnubby.prototype.enumerate = function(cb) {
if (!cb) cb = usbGnubby.defaultCallback;
if (this.closed) {
- cb(-llGnubby.GONE);
+ cb(-llGnubby.NODEVICE);
return;
}
if (!usbGnubby.gnubbies_) {
@@ -58,14 +58,15 @@ usbGnubby.prototype.enumerate = function(cb) {
/**
* Opens the gnubby with the given index, or the first found gnubby if no
* index is specified.
- * @param {llGnubbyDeviceId|undefined} opt_which The device to open.
+ * @param {llGnubbyDeviceId} which The device to open. If null, the first
+ * gnubby found is opened.
* @param {function(number)|undefined} opt_cb Called with result of opening the
* gnubby.
*/
-usbGnubby.prototype.open = function(opt_which, opt_cb) {
+usbGnubby.prototype.open = function(which, opt_cb) {
var cb = opt_cb ? opt_cb : usbGnubby.defaultCallback;
if (this.closed) {
- cb(-llGnubby.GONE);
+ cb(-llGnubby.NODEVICE);
return;
}
this.closingWhenIdle = false;
@@ -78,30 +79,42 @@ usbGnubby.prototype.open = function(opt_which, opt_cb) {
}
var self = this;
- function addSelfAsClient(which) {
+
+ function setCid(which) {
self.cid &= 0x00ffffff;
self.cid |= ((which.device + 1) << 24); // For debugging.
+ }
+ var enumerateRetriesRemaining = 3;
+ function enumerated(rc, devs) {
+ if (!devs.length)
+ rc = -llGnubby.NODEVICE;
+ if (rc) {
+ cb(rc);
+ return;
+ }
+ which = devs[0];
+ setCid(which);
usbGnubby.gnubbies_.addClient(which, self, function(rc, device) {
+ if (rc == -llGnubby.NODEVICE && enumerateRetriesRemaining-- > 0) {
+ // We were trying to open the first device, but now it's not there?
+ // Do over.
+ usbGnubby.gnubbies_.enumerate(enumerated);
+ return;
+ }
self.dev = device;
cb(rc);
});
}
- if (!usbGnubby.gnubbies_) {
- cb(-llGnubby.NODEVICE);
- return;
- }
- if (opt_which) {
- addSelfAsClient(opt_which);
- } else {
- usbGnubby.gnubbies_.enumerate(function(rc, devs) {
- if (rc || !devs.length) {
- cb(-llGnubby.NODEVICE);
- return;
- }
- addSelfAsClient(devs[0]);
+ if (which) {
+ setCid(which);
+ usbGnubby.gnubbies_.addClient(which, self, function(rc, device) {
+ self.dev = device;
+ cb(rc);
});
+ } else {
+ usbGnubby.gnubbies_.enumerate(enumerated);
}
};
@@ -217,7 +230,7 @@ usbGnubby.prototype.readFrame_ = function() {
*/
usbGnubby.prototype.read_ = function(cmd, timeout, cb) {
if (this.closed) { cb(-llGnubby.GONE); return; }
- if (!this.dev) { cb(-llGnubby.NODEVICE); return; }
+ if (!this.dev) { cb(-llGnubby.GONE); return; }
var tid = null; // timeout timer id.
var callback = cb;
@@ -436,7 +449,7 @@ usbGnubby.prototype.exchange_ = function(cmd, data, timeout, cb) {
/** Default callback for commands. Simply logs to console.
* @param {number} rc Result status code
- * @param {*} data Result data
+ * @param {(ArrayBuffer|Uint8Array|Array.<number>|null)} data Result data
*/
usbGnubby.defaultCallback = function(rc, data) {
var msg = 'defaultCallback(' + rc;
« no previous file with comments | « chrome/browser/resources/cryptotoken/gnubbies.js ('k') | chrome/browser/resources/cryptotoken/gnubby-u2f.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698