// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. /** * @fileoverview * @suppress {checkTypes} * Browser test for the scenario below: * 1. Change the PIN. * 2. Connect with the new PIN. * 3. Verify the connection succeeded. * 4. Disconnect and reconnect with the old PIN. * 5. Verify the connection failed. */ 'use strict'; /** @constructor */ browserTest.Update_PIN = function() {}; /** * @param {{new_pin:string, old_pin:string}} data */ browserTest.Update_PIN.prototype.run = function(data) { var LOGIN_BACKOFF_WAIT = 2000; // Input validation browserTest.expect(typeof data.new_pin == 'string'); browserTest.expect(typeof data.old_pin == 'string'); browserTest.expect(data.new_pin != data.old_pin, 'The new PIN and the old PIN cannot be the same'); this.changePIN_(data.new_pin).then( browserTest.connectMe2Me ).then(function(){ return browserTest.enterPIN(data.old_pin, true /* expectError*/); }).then( // Sleep for two seconds to allow for the login backoff logic to reset. base.Promise.sleep.bind(null, LOGIN_BACKOFF_WAIT) ).then( browserTest.connectMe2Me ).then(function(){ return browserTest.enterPIN(data.new_pin, false /* expectError*/) }).then( // Clean up the test by disconnecting and changing the PIN back browserTest.disconnect ).then( // The PIN must be restored regardless of success or failure. this.changePIN_.bind(this, data.old_pin), this.changePIN_.bind(this, data.old_pin) ).then( // On fulfilled. browserTest.pass, // On rejected. browserTest.fail ); }; /** * @param {string} newPin * @return {Promise} */ browserTest.Update_PIN.prototype.changePIN_ = function(newPin) { var AppMode = remoting.AppMode; var HOST_RESTART_WAIT = 10000; browserTest.clickOnControl('.change-daemon-pin'); return browserTest.setupPIN(newPin); };