15c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Copyright 2014 The Chromium Authors. All rights reserved. 25c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// Use of this source code is governed by a BSD-style license that can be 35c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu// found in the LICENSE file. 45c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 55c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu/** 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @fileoverview Contains a simple factory for creating and opening Gnubby 75c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * instances. 85c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu */ 95c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu'use strict'; 105c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 115c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu/** 12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) * @param {Gnubbies} gnubbies Gnubbies singleton instance 135c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @constructor 145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @implements {GnubbyFactory} 155c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu */ 165c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liufunction UsbGnubbyFactory(gnubbies) { 175c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu /** @private {Gnubbies} */ 185c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu this.gnubbies_ = gnubbies; 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) Gnubby.setGnubbies(gnubbies); 205c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu} 215c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 225c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu/** 235c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * Creates a new gnubby object, and opens the gnubby with the given index. 246e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @param {GnubbyDeviceId} which The device to open. 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @param {boolean} forEnroll Whether this gnubby is being opened for enrolling. 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @param {FactoryOpenCallback} cb Called with result of opening the gnubby. 275c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @param {string=} logMsgUrl the url to post log messages to 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * @override 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu */ 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuUsbGnubbyFactory.prototype.openGnubby = 315c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu function(which, forEnroll, cb, logMsgUrl) { 326e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) var gnubby = new Gnubby(); 335c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu gnubby.open(which, function(rc) { 346e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if (rc) { 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cb(rc, gnubby); 366e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return; 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) } 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) gnubby.sync(function(rc) { 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cb(rc, gnubby); 406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) }); 415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu }); 425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 435c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu 445c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu/** 455c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu * Enumerates gnubbies. 466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @param {function(number, Array.<GnubbyDeviceId>)} cb Enumerate callback 475c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu */ 485c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo LiuUsbGnubbyFactory.prototype.enumerate = function(cb) { 495c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu this.gnubbies_.enumerate(cb); 505c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu}; 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)/** 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * No-op prerequisite check. 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @param {Gnubby} gnubby The not-enrolled gnubby. 556e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @param {string} appIdHash The base64-encoded hash of the app id for which 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * the gnubby being enrolled. 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * @param {FactoryOpenCallback} cb Called with the result of the prerequisite 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) * check. (A non-zero status indicates failure.) 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) */ 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)UsbGnubbyFactory.prototype.notEnrolledPrerequisiteCheck = 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) function(gnubby, appIdHash, cb) { 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) cb(DeviceStatusCodes.OK_STATUS, gnubby); 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)}; 64