| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 GEN('#include "chrome/browser/ui/webui/options/options_browsertest.h"'); | 5 GEN('#include "chrome/browser/ui/webui/options/options_browsertest.h"'); |
| 6 | 6 |
| 7 /** @const */ var MANAGED_USERS_PREF = 'profile.managed_users'; | 7 /** @const */ var MANAGED_USERS_PREF = 'profile.managed_users'; |
| 8 | 8 |
| 9 /** | 9 /** |
| 10 * Wait for the method specified by |methodName|, on the |object| object, to be | 10 * Wait for the method specified by |methodName|, on the |object| object, to be |
| 11 * called, then execute |afterFunction|. | 11 * called, then execute |afterFunction|. |
| 12 * @param {*} object Object with callable property named |methodName|. |
| 13 * @param {string} methodName The name of the property on |object| to use as a |
| 14 * callback. |
| 15 * @param {!Function} afterFunction A function to call after object.methodName() |
| 16 * is called. |
| 12 */ | 17 */ |
| 13 function waitForResponse(object, methodName, afterFunction) { | 18 function waitForResponse(object, methodName, afterFunction) { |
| 14 var originalCallback = object[methodName]; | 19 var originalCallback = object[methodName]; |
| 15 | 20 |
| 16 // Install a wrapper that temporarily replaces the original function. | 21 // Install a wrapper that temporarily replaces the original function. |
| 17 object[methodName] = function() { | 22 object[methodName] = function() { |
| 18 object[methodName] = originalCallback; | 23 object[methodName] = originalCallback; |
| 19 originalCallback.apply(this, arguments); | 24 originalCallback.apply(this, arguments); |
| 20 afterFunction(); | 25 afterFunction(); |
| 21 }; | 26 }; |
| 22 } | 27 } |
| 23 | 28 |
| 24 /** | 29 /** |
| 25 * Wait for the global window.onpopstate callback to be called (after a tab | 30 * Wait for the global window.onpopstate callback to be called (after a tab |
| 26 * history navigation), then execute |afterFunction|. | 31 * history navigation), then execute |afterFunction|. |
| 32 * @param {!Function} afterFunction A function to call after pop state events. |
| 27 */ | 33 */ |
| 28 function waitForPopstate(afterFunction) { | 34 function waitForPopstate(afterFunction) { |
| 29 waitForResponse(window, 'onpopstate', afterFunction); | 35 waitForResponse(window, 'onpopstate', afterFunction); |
| 30 } | 36 } |
| 31 | 37 |
| 32 /** | 38 /** |
| 33 * TestFixture for OptionsPage WebUI testing. | 39 * TestFixture for OptionsPage WebUI testing. |
| 34 * @extends {testing.Test} | 40 * @extends {testing.Test} |
| 35 * @constructor | 41 * @constructor |
| 36 */ | 42 */ |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 assertNotEquals(defaultZoomFactor, null); | 142 assertNotEquals(defaultZoomFactor, null); |
| 137 | 143 |
| 138 // Verify that the zoom factor element has a reasonable number of choices. | 144 // Verify that the zoom factor element has a reasonable number of choices. |
| 139 expectGE(defaultZoomFactor.options.length, defaultZoomFactorMinimumLength); | 145 expectGE(defaultZoomFactor.options.length, defaultZoomFactorMinimumLength); |
| 140 | 146 |
| 141 // Simulate a change event, selecting the highest zoom value. Verify that | 147 // Simulate a change event, selecting the highest zoom value. Verify that |
| 142 // the javascript handler was invoked once. | 148 // the javascript handler was invoked once. |
| 143 this.mockHandler.expects(once()).defaultZoomFactorAction(NOT_NULL). | 149 this.mockHandler.expects(once()).defaultZoomFactorAction(NOT_NULL). |
| 144 will(callFunction(function() { })); | 150 will(callFunction(function() { })); |
| 145 defaultZoomFactor.selectedIndex = defaultZoomFactor.options.length - 1; | 151 defaultZoomFactor.selectedIndex = defaultZoomFactor.options.length - 1; |
| 146 var event = { target: defaultZoomFactor }; | 152 var event = {target: defaultZoomFactor}; |
| 147 if (defaultZoomFactor.onchange) defaultZoomFactor.onchange(event); | 153 if (defaultZoomFactor.onchange) defaultZoomFactor.onchange(event); |
| 148 testDone(); | 154 testDone(); |
| 149 }); | 155 }); |
| 150 | 156 |
| 151 // If |confirmInterstitial| is true, the OK button of the Do Not Track | 157 /** |
| 152 // interstitial is pressed, otherwise the abort button is pressed. | 158 * If |confirmInterstitial| is true, the OK button of the Do Not Track |
| 159 * interstitial is pressed, otherwise the abort button is pressed. |
| 160 * @param {boolean} confirmInterstitial Whether to confirm the Do Not Track |
| 161 * interstitial. |
| 162 */ |
| 153 OptionsWebUITest.prototype.testDoNotTrackInterstitial = | 163 OptionsWebUITest.prototype.testDoNotTrackInterstitial = |
| 154 function(confirmInterstitial) { | 164 function(confirmInterstitial) { |
| 155 Preferences.prefsFetchedCallback({'enable_do_not_track': {'value': false } }); | 165 Preferences.prefsFetchedCallback({'enable_do_not_track': {'value': false}}); |
| 156 var buttonToClick = confirmInterstitial ? $('do-not-track-confirm-ok') | 166 var buttonToClick = confirmInterstitial ? $('do-not-track-confirm-ok') : |
| 157 : $('do-not-track-confirm-cancel'); | 167 $('do-not-track-confirm-cancel'); |
| 158 var dntCheckbox = $('do-not-track-enabled'); | 168 var dntCheckbox = $('do-not-track-enabled'); |
| 159 var dntOverlay = OptionsPage.registeredOverlayPages['donottrackconfirm']; | 169 var dntOverlay = OptionsPage.registeredOverlayPages['donottrackconfirm']; |
| 160 assertFalse(dntCheckbox.checked); | 170 assertFalse(dntCheckbox.checked); |
| 161 | 171 |
| 162 var visibleChangeCounter = 0; | 172 var visibleChangeCounter = 0; |
| 163 var visibleChangeHandler = function() { | 173 var visibleChangeHandler = function() { |
| 164 ++visibleChangeCounter; | 174 ++visibleChangeCounter; |
| 165 switch (visibleChangeCounter) { | 175 switch (visibleChangeCounter) { |
| 166 case 1: | 176 case 1: |
| 167 window.setTimeout(function() { | 177 window.setTimeout(function() { |
| 168 assertTrue(dntOverlay.visible); | 178 assertTrue(dntOverlay.visible); |
| 169 buttonToClick.click(); | 179 buttonToClick.click(); |
| 170 }, 0); | 180 }, 0); |
| 171 break; | 181 break; |
| 172 case 2: | 182 case 2: |
| 173 window.setTimeout(function() { | 183 window.setTimeout(function() { |
| 174 assertFalse(dntOverlay.visible); | 184 assertFalse(dntOverlay.visible); |
| 175 assertEquals(confirmInterstitial, dntCheckbox.checked); | 185 assertEquals(confirmInterstitial, dntCheckbox.checked); |
| 176 dntOverlay.removeEventListener(visibleChangeHandler); | 186 dntOverlay.removeEventListener(visibleChangeHandler); |
| 177 testDone(); | 187 testDone(); |
| 178 }, 0); | 188 }, 0); |
| 179 break; | 189 break; |
| 180 default: | 190 default: |
| 181 assertTrue(false); | 191 assertTrue(false); |
| 182 } | 192 } |
| 183 } | 193 }; |
| 184 dntOverlay.addEventListener('visibleChange', visibleChangeHandler); | 194 dntOverlay.addEventListener('visibleChange', visibleChangeHandler); |
| 185 | 195 |
| 186 if (confirmInterstitial) { | 196 if (confirmInterstitial) { |
| 187 this.mockHandler.expects(once()).setBooleanPref( | 197 this.mockHandler.expects(once()).setBooleanPref( |
| 188 ['enable_do_not_track', true, 'Options_DoNotTrackCheckbox']); | 198 ['enable_do_not_track', true, 'Options_DoNotTrackCheckbox']); |
| 189 } else { | 199 } else { |
| 190 // The mock handler complains if setBooleanPref is called even though | 200 // The mock handler complains if setBooleanPref is called even though |
| 191 // it should not be. | 201 // it should not be. |
| 192 } | 202 } |
| 193 | 203 |
| 194 dntCheckbox.click(); | 204 dntCheckbox.click(); |
| 195 } | 205 }; |
| 196 | 206 |
| 197 TEST_F('OptionsWebUITest', 'EnableDoNotTrackAndConfirmInterstitial', | 207 TEST_F('OptionsWebUITest', 'EnableDoNotTrackAndConfirmInterstitial', |
| 198 function() { | 208 function() { |
| 199 this.testDoNotTrackInterstitial(true); | 209 this.testDoNotTrackInterstitial(true); |
| 200 }); | 210 }); |
| 201 | 211 |
| 202 TEST_F('OptionsWebUITest', 'EnableDoNotTrackAndCancelInterstitial', | 212 TEST_F('OptionsWebUITest', 'EnableDoNotTrackAndCancelInterstitial', |
| 203 function() { | 213 function() { |
| 204 this.testDoNotTrackInterstitial(false); | 214 this.testDoNotTrackInterstitial(false); |
| 205 }); | 215 }); |
| 206 | 216 |
| 207 // Check that the "Do not Track" preference can be correctly disabled. | 217 // Check that the "Do not Track" preference can be correctly disabled. |
| 208 // In order to do that, we need to enable it first. | 218 // In order to do that, we need to enable it first. |
| 209 TEST_F('OptionsWebUITest', 'EnableAndDisableDoNotTrack', function() { | 219 TEST_F('OptionsWebUITest', 'EnableAndDisableDoNotTrack', function() { |
| 210 Preferences.prefsFetchedCallback({'enable_do_not_track': {'value': false } }); | 220 Preferences.prefsFetchedCallback({'enable_do_not_track': {'value': false}}); |
| 211 var dntCheckbox = $('do-not-track-enabled'); | 221 var dntCheckbox = $('do-not-track-enabled'); |
| 212 var dntOverlay = OptionsPage.registeredOverlayPages['donottrackconfirm']; | 222 var dntOverlay = OptionsPage.registeredOverlayPages.donottrackconfirm; |
| 213 assertFalse(dntCheckbox.checked); | 223 assertFalse(dntCheckbox.checked); |
| 214 | 224 |
| 215 var visibleChangeCounter = 0; | 225 var visibleChangeCounter = 0; |
| 216 var visibleChangeHandler = function() { | 226 var visibleChangeHandler = function() { |
| 217 ++visibleChangeCounter; | 227 ++visibleChangeCounter; |
| 218 switch (visibleChangeCounter) { | 228 switch (visibleChangeCounter) { |
| 219 case 1: | 229 case 1: |
| 220 window.setTimeout(function() { | 230 window.setTimeout(function() { |
| 221 assertTrue(dntOverlay.visible); | 231 assertTrue(dntOverlay.visible); |
| 222 $('do-not-track-confirm-ok').click(); | 232 $('do-not-track-confirm-ok').click(); |
| 223 }, 0); | 233 }, 0); |
| 224 break; | 234 break; |
| 225 case 2: | 235 case 2: |
| 226 window.setTimeout(function() { | 236 window.setTimeout(function() { |
| 227 assertFalse(dntOverlay.visible); | 237 assertFalse(dntOverlay.visible); |
| 228 assertTrue(dntCheckbox.checked); | 238 assertTrue(dntCheckbox.checked); |
| 229 dntOverlay.removeEventListener(visibleChangeHandler); | 239 dntOverlay.removeEventListener(visibleChangeHandler); |
| 230 dntCheckbox.click(); | 240 dntCheckbox.click(); |
| 231 }, 0); | 241 }, 0); |
| 232 break; | 242 break; |
| 233 default: | 243 default: |
| 234 assertNotReached(); | 244 assertNotReached(); |
| 235 } | 245 } |
| 236 } | 246 } |
| 237 dntOverlay.addEventListener('visibleChange', visibleChangeHandler); | 247 dntOverlay.addEventListener('visibleChange', visibleChangeHandler); |
| 238 | 248 |
| 239 this.mockHandler.expects(once()).setBooleanPref( | 249 this.mockHandler.expects(once()).setBooleanPref( |
| 240 eq(["enable_do_not_track", true, 'Options_DoNotTrackCheckbox'])); | 250 eq(['enable_do_not_track', true, 'Options_DoNotTrackCheckbox'])); |
| 241 | 251 |
| 242 var verifyCorrectEndState = function() { | 252 var verifyCorrectEndState = function() { |
| 243 window.setTimeout(function() { | 253 window.setTimeout(function() { |
| 244 assertFalse(dntOverlay.visible); | 254 assertFalse(dntOverlay.visible); |
| 245 assertFalse(dntCheckbox.checked); | 255 assertFalse(dntCheckbox.checked); |
| 246 testDone(); | 256 testDone(); |
| 247 }, 0) | 257 }, 0); |
| 248 } | 258 } |
| 249 this.mockHandler.expects(once()).setBooleanPref( | 259 this.mockHandler.expects(once()).setBooleanPref( |
| 250 eq(["enable_do_not_track", false, 'Options_DoNotTrackCheckbox'])).will( | 260 eq(['enable_do_not_track', false, 'Options_DoNotTrackCheckbox'])).will( |
| 251 callFunction(verifyCorrectEndState)); | 261 callFunction(verifyCorrectEndState)); |
| 252 | 262 |
| 253 dntCheckbox.click(); | 263 dntCheckbox.click(); |
| 254 }); | 264 }); |
| 255 | 265 |
| 256 // Verify that preventDefault() is called on 'Enter' keydown events that trigger | 266 // Verify that preventDefault() is called on 'Enter' keydown events that trigger |
| 257 // the default button. If this doesn't happen, other elements that may get | 267 // the default button. If this doesn't happen, other elements that may get |
| 258 // focus (by the overlay closing for instance), will execute in addition to the | 268 // focus (by the overlay closing for instance), will execute in addition to the |
| 259 // default button. See crbug.com/268336. | 269 // default button. See crbug.com/268336. |
| 260 TEST_F('OptionsWebUITest', 'EnterPreventsDefault', function() { | 270 TEST_F('OptionsWebUITest', 'EnterPreventsDefault', function() { |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 | 335 |
| 326 testGenPreamble: function() { | 336 testGenPreamble: function() { |
| 327 // Start with no supervised users managed by this profile. | 337 // Start with no supervised users managed by this profile. |
| 328 GEN(' ClearPref("' + MANAGED_USERS_PREF + '");'); | 338 GEN(' ClearPref("' + MANAGED_USERS_PREF + '");'); |
| 329 }, | 339 }, |
| 330 | 340 |
| 331 /** @override */ | 341 /** @override */ |
| 332 isAsync: true, | 342 isAsync: true, |
| 333 | 343 |
| 334 /** @override */ | 344 /** @override */ |
| 335 setUp: function () { | 345 setUp: function() { |
| 336 // user-image-stream is a streaming video element used for capturing a | 346 // user-image-stream is a streaming video element used for capturing a |
| 337 // user image during OOBE. | 347 // user image during OOBE. |
| 338 this.accessibilityAuditConfig.ignoreSelectors('videoWithoutCaptions', | 348 this.accessibilityAuditConfig.ignoreSelectors('videoWithoutCaptions', |
| 339 '.user-image-stream'); | 349 '.user-image-stream'); |
| 340 }, | 350 }, |
| 341 | 351 |
| 342 /** | 352 /** |
| 343 * Asserts that two non-nested arrays are equal. The arrays must contain only | 353 * Asserts that two non-nested arrays are equal. The arrays must contain only |
| 344 * plain data types, no nested arrays or other objects. | 354 * plain data types, no nested arrays or other objects. |
| 345 * @param {Array} expected An array of expected values. | 355 * @param {Array} expected An array of expected values. |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 448 prohibitChangesToOverlay_: function(overlay) { | 458 prohibitChangesToOverlay_: function(overlay) { |
| 449 overlay.initializePage = | 459 overlay.initializePage = |
| 450 overlay.didShowPage = | 460 overlay.didShowPage = |
| 451 overlay.didClosePage = function() { | 461 overlay.didClosePage = function() { |
| 452 assertTrue(false, | 462 assertTrue(false, |
| 453 'Overlay was affected when changes were prohibited.'); | 463 'Overlay was affected when changes were prohibited.'); |
| 454 }; | 464 }; |
| 455 }, | 465 }, |
| 456 }; | 466 }; |
| 457 | 467 |
| 458 /* | 468 /** |
| 459 * Set by verifyHistory_ to incorporate a followup callback, then called by the | 469 * Set by verifyHistory_ to incorporate a followup callback, then called by the |
| 460 * C++ fixture with the navigation history to be verified. | 470 * C++ fixture with the navigation history to be verified. |
| 461 * @type {Function} | 471 * @type {Function} |
| 462 */ | 472 */ |
| 463 OptionsWebUIExtendedTest.verifyHistoryCallback = null; | 473 OptionsWebUIExtendedTest.verifyHistoryCallback = null; |
| 464 | 474 |
| 465 // Show the search page with no query string, to fall back to the settings page. | 475 // Show the search page with no query string, to fall back to the settings page. |
| 466 // Test disabled because it's flaky. crbug.com/303841 | 476 // Test disabled because it's flaky. crbug.com/303841 |
| 467 TEST_F('OptionsWebUIExtendedTest', 'DISABLED_ShowSearchPageNoQuery', | 477 TEST_F('OptionsWebUIExtendedTest', 'DISABLED_ShowSearchPageNoQuery', |
| 468 function() { | 478 function() { |
| (...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 749 chrome.send('optionsTestSetPref', [MANAGED_USERS_PREF, {key: 'value'}]); | 759 chrome.send('optionsTestSetPref', [MANAGED_USERS_PREF, {key: 'value'}]); |
| 750 waitForResponse(BrowserOptions, 'updateManagesSupervisedUsers', function() { | 760 waitForResponse(BrowserOptions, 'updateManagesSupervisedUsers', function() { |
| 751 assertFalse($('profiles-supervised-dashboard-tip').hidden); | 761 assertFalse($('profiles-supervised-dashboard-tip').hidden); |
| 752 chrome.send('optionsTestSetPref', [MANAGED_USERS_PREF, {}]); | 762 chrome.send('optionsTestSetPref', [MANAGED_USERS_PREF, {}]); |
| 753 waitForResponse(BrowserOptions, 'updateManagesSupervisedUsers', function() { | 763 waitForResponse(BrowserOptions, 'updateManagesSupervisedUsers', function() { |
| 754 assertTrue($('profiles-supervised-dashboard-tip').hidden); | 764 assertTrue($('profiles-supervised-dashboard-tip').hidden); |
| 755 testDone(); | 765 testDone(); |
| 756 }); | 766 }); |
| 757 }); | 767 }); |
| 758 }); | 768 }); |
| OLD | NEW |