| OLD | NEW | 
|---|
|  | (Empty) | 
| 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. |  | 
| 4 |  | 
| 5 GEN('#include "chrome/browser/ui/webui/identity_internals_ui_browsertest.h"'); |  | 
| 6 |  | 
| 7 /** |  | 
| 8  * Test C++ fixture for downloads WebUI testing. |  | 
| 9  * @constructor |  | 
| 10  * @extends {testing.Test} |  | 
| 11  */ |  | 
| 12 function IdentityInternalsUIBrowserTest() {} |  | 
| 13 |  | 
| 14 /** |  | 
| 15  * Base fixture for Downloads WebUI testing. |  | 
| 16  * @extends {testing.Test} |  | 
| 17  * @constructor |  | 
| 18  */ |  | 
| 19 function BaseIdentityInternalsWebUITest() {} |  | 
| 20 |  | 
| 21 BaseIdentityInternalsWebUITest.prototype = { |  | 
| 22   __proto__: testing.Test.prototype, |  | 
| 23 |  | 
| 24   /** |  | 
| 25    * Browse to the downloads page & call our preLoad(). |  | 
| 26    */ |  | 
| 27   browsePreload: 'chrome://identity-internals', |  | 
| 28 |  | 
| 29   /** @override */ |  | 
| 30   typedefCppFixture: 'IdentityInternalsUIBrowserTest', |  | 
| 31 |  | 
| 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   }, |  | 
| 39 |  | 
| 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   }, |  | 
| 51 |  | 
| 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   }, |  | 
| 60 |  | 
| 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   }, |  | 
| 69 |  | 
| 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   }, |  | 
| 78 |  | 
| 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   }, |  | 
| 87 |  | 
| 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   }, |  | 
| 96 |  | 
| 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   }, |  | 
| 106 }; |  | 
| 107 |  | 
| 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); |  | 
| 113 }); |  | 
| 114 |  | 
| 115 /** |  | 
| 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() {} |  | 
| 122 |  | 
| 123 IdentityInternalsSingleTokenWebUITest.prototype = { |  | 
| 124   __proto__: BaseIdentityInternalsWebUITest.prototype, |  | 
| 125 |  | 
| 126   /** @override */ |  | 
| 127   testGenPreamble: function() { |  | 
| 128     GEN('  SetupTokenCacheWithStoreApp();'); |  | 
| 129   }, |  | 
| 130 }; |  | 
| 131 |  | 
| 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]); |  | 
| 149 }); |  | 
| 150 |  | 
| 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   } |  | 
| 179 }); |  | 
| 180 |  | 
| 181 /** |  | 
| 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() {} |  | 
| 188 |  | 
| 189 IdentityInternalsMultipleTokensWebUITest.prototype = { |  | 
| 190   __proto__: BaseIdentityInternalsWebUITest.prototype, |  | 
| 191 |  | 
| 192   /** @override */ |  | 
| 193   testGenPreamble: function() { |  | 
| 194     GEN('  SetupTokenCache(2);'); |  | 
| 195   }, |  | 
| 196 }; |  | 
| 197 |  | 
| 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]); |  | 
| 228 }); |  | 
| 229 |  | 
| 230 /** |  | 
| 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() {} |  | 
| 237 |  | 
| 238 IdentityInternalsWebUITestAsync.prototype = { |  | 
| 239   __proto__: IdentityInternalsMultipleTokensWebUITest.prototype, |  | 
| 240 |  | 
| 241   /** @override */ |  | 
| 242   isAsync: true, |  | 
| 243 }; |  | 
| 244 |  | 
| 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(); |  | 
| 259 }); |  | 
| 260 |  | 
| OLD | NEW | 
|---|