[Extensions] Cleanup Extension Uninstall Dialog logic
[chromium-blink-merge.git] / chrome / browser / ui / webui / identity_internals_ui_browsertest.js
blobf71a7608c9de51272f20c3f294060769cc588de4
1 // Copyright 2013 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 GEN('#include "chrome/browser/ui/webui/identity_internals_ui_browsertest.h"');
7 /**
8  * Test C++ fixture for downloads WebUI testing.
9  * @constructor
10  * @extends {testing.Test}
11  */
12 function IdentityInternalsUIBrowserTest() {}
14 /**
15  * Base fixture for Downloads WebUI testing.
16  * @extends {testing.Test}
17  * @constructor
18  */
19 function BaseIdentityInternalsWebUITest() {}
21 BaseIdentityInternalsWebUITest.prototype = {
22   __proto__: testing.Test.prototype,
24   /**
25    * Browse to the downloads page & call our preLoad().
26    */
27   browsePreload: 'chrome://identity-internals',
29   /** @override */
30   typedefCppFixture: 'IdentityInternalsUIBrowserTest',
32   /**
33    * Gets all of the token entries on the page.
34    * @return {!NodeList} Elements displaying token information.
35    */
36   getTokens: function() {
37     return document.querySelectorAll('#token-list > div');
38   },
40   /**
41    * Gets the expiration time displayed on the page for a given entry.
42    * @param {Element} tokenEntry Display element holding token information.
43    * @return {Date} Expiration date of the token.
44    */
45   getExpirationTime: function(tokenEntry) {
46     // Full-date format has 'at' between date and time in en-US, but
47     // ECMAScript's Date.parse cannot grok it.
48     return Date.parse(tokenEntry.querySelector('.expiration-time')
49         .innerText.replace(' at ', ' '));
50   },
52   /**
53    * Gets the extension id displayed on the page for a given entry.
54    * @param {Element} tokenEntry Display element holding token information.
55    * @return {string} Extension Id of the token.
56    */
57   getExtensionId: function(tokenEntry) {
58     return tokenEntry.querySelector('.extension-id').innerText;
59   },
61   /**
62    * Gets the extension name displayed on the page for a given entry.
63    * @param {Element} tokenEntry Display element holding token information.
64    * @return {string} Extension Name of the token.
65    */
66   getExtensionName: function(tokenEntry) {
67     return tokenEntry.querySelector('.extension-name').innerText;
68   },
70   /**
71    * Gets the revoke button of the token entry.
72    * @param {Element} tokenEntry Diplsy element holding token information.
73    * @return {HTMLButtonElement} Revoke button belonging related to the token.
74    */
75   getRevokeButton: function(tokenEntry) {
76     return tokenEntry.querySelector('.revoke-button');
77   },
79   /**
80    * Gets the token ID displayed on the page for a given entry.
81    * @param {Element} tokenEntry Display element holding token information.
82    * @return {string} Token ID of the token.
83    */
84   getAccessToken: function(tokenEntry) {
85     return tokenEntry.querySelector('.access-token').innerText;
86   },
88   /**
89    * Gets the token status displayed on the page for a given entry.
90    * @param {Element} tokenEntry Display element holding token information.
91    * @return {string} Token status of the token.
92    */
93   getTokenStatus: function(tokenEntry) {
94     return tokenEntry.querySelector('.token-status').innerText;
95   },
97   /**
98    * Gets the token scopes displayed on the page for a given entry.
99    * @param {Element} tokenEntry Display element holding token information.
100    * @return {string[]} Token scopes of the token.
101    */
102   getScopes: function(tokenEntry) {
103     return tokenEntry.querySelector('.scope-list')
104         .innerHTML.split('<br>');
105   },
108 // Test verifying chrome://identity-internals Web UI when the token cache is
109 // empty.
110 TEST_F('BaseIdentityInternalsWebUITest', 'emptyTokenCache', function() {
111   var tokenListEntries = this.getTokens();
112   expectEquals(0, tokenListEntries.length);
116  * Fixture for Identity Internals Web UI testing with a single token in the
117  * Identity API token cache.
118  * @extends {BaseIdentityInternalsWebUITest}
119  * @constructor
120  */
121 function IdentityInternalsSingleTokenWebUITest() {}
123 IdentityInternalsSingleTokenWebUITest.prototype = {
124   __proto__: BaseIdentityInternalsWebUITest.prototype,
126   /** @override */
127   testGenPreamble: function() {
128     GEN('  SetupTokenCacheWithStoreApp();');
129   },
132 // Test for listing a token cache with a single token. It uses a known extension
133 // - the Chrome Web Store, in order to check the extension name.
134 TEST_F('IdentityInternalsSingleTokenWebUITest', 'getAllTokens', function() {
135   var tokenListEntries = this.getTokens();
136   expectEquals(1, tokenListEntries.length);
137   expectEquals('Web Store', this.getExtensionName(tokenListEntries[0]));
138   expectEquals('ahfgeienlihckogmohjhadlkjgocpleb',
139                this.getExtensionId(tokenListEntries[0]));
140   expectEquals('store_token', this.getAccessToken(tokenListEntries[0]));
141   expectEquals('Token Present', this.getTokenStatus(tokenListEntries[0]));
142   expectLT(this.getExpirationTime(tokenListEntries[0]) - new Date(),
143            3600 * 1000);
144   var scopes = this.getScopes(tokenListEntries[0]);
145   expectEquals(3, scopes.length);
146   expectEquals('store_scope1', scopes[0]);
147   expectEquals('store_scope2', scopes[1]);
148   expectEquals('', scopes[2]);
151 // Test ensuring the getters on the BaseIdentityInternalsWebUITest work
152 // correctly. They are implemented on the child class, because the parent does
153 // not have any tokens to display.
154 TEST_F('IdentityInternalsSingleTokenWebUITest', 'verifyGetters', function() {
155   var tokenListEntries = document.querySelectorAll('#token-list > div');
156   var actualTokens = this.getTokens();
157   expectEquals(tokenListEntries.length, actualTokens.length);
158   expectEquals(tokenListEntries[0], actualTokens[0]);
159   expectEquals(this.getExtensionName(tokenListEntries[0]),
160       tokenListEntries[0].querySelector('.extension-name').innerText);
161   expectEquals(this.getExtensionId(tokenListEntries[0]),
162       tokenListEntries[0].querySelector('.extension-id').innerText);
163   expectEquals(this.getAccessToken(tokenListEntries[0]),
164       tokenListEntries[0].querySelector('.access-token').innerText);
165   expectEquals(this.getTokenStatus(tokenListEntries[0]),
166       tokenListEntries[0].querySelector('.token-status').innerText);
167   // Full-date format has 'at' between date and time in en-US, but
168   // ECMAScript's Date.parse cannot grok it.
169   expectEquals(this.getExpirationTime(tokenListEntries[0]),
170       Date.parse(tokenListEntries[0].querySelector('.expiration-time')
171           .innerText.replace(' at ', ' ')));
172   var scopes = tokenListEntries[0].querySelector('.scope-list')
173       .innerHTML.split('<br>');
174   var actualScopes = this.getScopes(tokenListEntries[0]);
175   expectEquals(scopes.length, actualScopes.length);
176   for (var i = 0; i < scopes.length; i++) {
177     expectEquals(scopes[i], actualScopes[i]);
178   }
182  * Fixture for Identity Internals Web UI testing with multiple tokens in the
183  * Identity API token cache.
184  * @extends {BaseIdentityInternalsWebUITest}
185  * @constructor
186  */
187 function IdentityInternalsMultipleTokensWebUITest() {}
189 IdentityInternalsMultipleTokensWebUITest.prototype = {
190   __proto__: BaseIdentityInternalsWebUITest.prototype,
192   /** @override */
193   testGenPreamble: function() {
194     GEN('  SetupTokenCache(2);');
195   },
198 // Test for listing a token cache with multiple tokens. Names of the extensions
199 // are empty, because extensions are faked, and not present in the extension
200 // service.
201 TEST_F('IdentityInternalsMultipleTokensWebUITest', 'getAllTokens', function() {
202   var tokenListEntries = this.getTokens();
203   expectEquals(2, tokenListEntries.length);
204   expectEquals('', this.getExtensionName(tokenListEntries[0]));
205   expectEquals('extension0',
206                this.getExtensionId(tokenListEntries[0]));
207   expectEquals('token0', this.getAccessToken(tokenListEntries[0]));
208   expectEquals('Token Present', this.getTokenStatus(tokenListEntries[0]));
209   expectLT(this.getExpirationTime(tokenListEntries[0]) - new Date(),
210            3600 * 1000);
211   var scopes = this.getScopes(tokenListEntries[0]);
212   expectEquals(3, scopes.length);
213   expectEquals('scope_1_0', scopes[0]);
214   expectEquals('scope_2_0', scopes[1]);
215   expectEquals('', scopes[2]);
216   expectEquals('', this.getExtensionName(tokenListEntries[1]));
217   expectEquals('extension1',
218                this.getExtensionId(tokenListEntries[1]));
219   expectEquals('token1', this.getAccessToken(tokenListEntries[1]));
220   expectEquals('Token Present', this.getTokenStatus(tokenListEntries[1]));
221   expectLT(this.getExpirationTime(tokenListEntries[1]) - new Date(),
222            3600 * 1000);
223   var scopes = this.getScopes(tokenListEntries[1]);
224   expectEquals(3, scopes.length);
225   expectEquals('scope_1_1', scopes[0]);
226   expectEquals('scope_2_1', scopes[1]);
227   expectEquals('', scopes[2]);
231  * Fixture for asynchronous testing of Identity Internals Web UI with multiple
232  * tokens in Identity API token cache.
233  * @extends {IdentityInternalsMultipleTokensWebUITest}
234  * @constructor
235  */
236 function IdentityInternalsWebUITestAsync() {}
238 IdentityInternalsWebUITestAsync.prototype = {
239   __proto__: IdentityInternalsMultipleTokensWebUITest.prototype,
241   /** @override */
242   isAsync: true,
245 TEST_F('IdentityInternalsWebUITestAsync', 'revokeToken', function() {
246   var tokenListBefore = this.getTokens();
247   expectEquals(2, tokenListBefore.length);
248   var tokenRevokeDone = identity_internals.tokenRevokeDone;
249   identity_internals.tokenRevokeDone = this.continueTest(
250       WhenTestDone.ALWAYS, function(accessTokens) {
251         tokenRevokeDone.call(identity_internals, accessTokens);
252         identity_internals.tokenRevokeDone = tokenRevokeDone;
253         var tokenListAfter = this.getTokens();
254         expectEquals(1, tokenListAfter.length);
255         expectEquals(this.getAccessToken(tokenListBefore[0]),
256                      this.getAccessToken(tokenListAfter[0]));
257       }.bind(this));
258   this.getRevokeButton(tokenListBefore[1]).click();