Retrieve access token, --help print, and auth_code functionality implemented.
[chromium-blink-merge.git] / remoting / webapp / browser_test / it2me_browser_test.js
blobdc04dfd08d2b95eb93cae528114c8ff269be478b
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.
5 /**
6  * @fileoverview
7  * Browser test for the scenario below:
8  * 1. Generates an access code.
9  * 2. Launches another chromoting app instance.
10  * 3. Connects with the generated access code.
11  * 4. Verifies that the session is connected.
12  */
14 'use strict';
16 /** @constructor */
17 browserTest.ConnectIt2Me = function() {};
19 /**
20  * @param {{pin: string, accessCode: string}} data
21  */
22 browserTest.ConnectIt2Me.prototype.run = function(data) {
23   browserTest.expect(typeof data.accessCode == 'string',
24                      'The access code should be an non-empty string');
25   browserTest.clickOnControl('get-started-it2me');
26   var that = this;
27   browserTest.ConnectIt2Me.clickOnAccessButton().then(function() {
28     return that.enterAccessCode_(data.accessCode);
29   }).then(function() {
30     return browserTest.disconnect();
31   }).then(function() {
32     browserTest.pass();
33   }, function(/** * */reason) {
34     browserTest.fail(/** @type {Error} */(reason));
35   });
38 /** @return {Promise} */
39 browserTest.ConnectIt2Me.clickOnAccessButton = function() {
40   browserTest.clickOnControl('access-mode-button');
41   return browserTest.onUIMode(remoting.AppMode.CLIENT_UNCONNECTED);
44 /**
45  * @param {string} code
46  * @return {Promise}
47  * @private
48  */
49 browserTest.ConnectIt2Me.prototype.enterAccessCode_ = function(code) {
50   document.getElementById('access-code-entry').value = code;
51   browserTest.clickOnControl('connect-button');
52   return browserTest.expectConnected();
55 /** @constructor */
56 browserTest.InvalidAccessCode = function() {};
58 /**
59  * @param {{pin: string, accessCode: string}} data
60  */
61 browserTest.InvalidAccessCode.prototype.run = function(data) {
62   browserTest.expect(typeof data.accessCode == 'string',
63                      'The access code should be an non-empty string');
64   browserTest.ConnectIt2Me.clickOnAccessButton().then(function() {
65     document.getElementById('access-code-entry').value = data.accessCode;
66     browserTest.clickOnControl('connect-button');
67     var ErrorTag = remoting.Error.Tag;
68     return browserTest.expectConnectionError(
69         remoting.DesktopRemoting.Mode.IT2ME,
70         [ErrorTag.INVALID_ACCESS_CODE, ErrorTag.HOST_IS_OFFLINE]);
71   }).then(function() {
72     browserTest.pass();
73   }, function(/** * */reason) {
74     browserTest.fail(/** @type {Error} */(reason));
75   });
78 /** @constructor */
79 browserTest.GetAccessCode = function() {};
81 browserTest.GetAccessCode.prototype.run = function() {
82   browserTest.clickOnControl('get-started-it2me');
84   // Wait for the email address of the local user to become available.  The
85   // email address is required in an It2Me connection for domain policy
86   // enforcement. TODO:(kelvinp) Fix this awkward behavior in the production
87   // code so that this  hack is no longer required.
88   remoting.identity.getUserInfo().then(function(info) {
89     browserTest.clickOnControl('share-button');
90   }).then(function(){
91     return browserTest.onUIMode(remoting.AppMode.HOST_WAITING_FOR_CONNECTION);
92   }).then(function() {
93     var accessCode = document.getElementById('access-code-display').innerText;
94     var numericAccessCode = parseFloat(accessCode);
95     browserTest.expect(accessCode.length === 12,
96                        "The access code should be 12 digits long.");
97     browserTest.expect(
98         Number.isInteger(numericAccessCode) && numericAccessCode > 0,
99         "The access code should be a positive integer.");
100     browserTest.pass();
101   }).catch(function(/** Error */ reason) {
102     browserTest.fail(reason);
103   });
106 /** @constructor */
107 browserTest.CancelShare = function() {};
109 browserTest.CancelShare.prototype.run = function() {
110   browserTest.clickOnControl('cancel-share-button');
111   browserTest.onUIMode(remoting.AppMode.HOST_SHARE_FINISHED).then(function() {
112     browserTest.pass();
113   }).catch(function(/** Error */ reason) {
114     browserTest.fail(reason);
115   });