Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(446)

Side by Side Diff: chrome/test/data/webui/history_browsertest.js

Issue 14046016: History UI: Apply the pref that prohibits deleting browsing and download history. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Remove executable flag Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/test/data/webui/history_ui_browsertest.h"');
6
5 /** @const */ var TOTAL_RESULT_COUNT = 160; 7 /** @const */ var TOTAL_RESULT_COUNT = 160;
6 /** @const */ var WAIT_TIMEOUT = 200; 8 /** @const */ var WAIT_TIMEOUT = 200;
7 9
8 /** 10 /**
11 * Test fixture for history WebUI testing.
12 * @constructor
13 * @extends {testing.Test}
14 */
15 function HistoryUIBrowserTest() {}
16
17 /**
9 * Create a fake history result with the given timestamp. 18 * Create a fake history result with the given timestamp.
10 * @param {Number} timestamp Timestamp of the entry, in ms since the epoch. 19 * @param {Number} timestamp Timestamp of the entry, in ms since the epoch.
11 * @param {String} url The URL to set on this entry. 20 * @param {String} url The URL to set on this entry.
12 * @return {Object} An object representing a history entry. 21 * @return {Object} An object representing a history entry.
13 */ 22 */
14 function createHistoryEntry(timestamp, url) { 23 function createHistoryEntry(timestamp, url) {
15 var d = new Date(timestamp); 24 var d = new Date(timestamp);
16 return { 25 return {
17 dateTimeOfDay: d.getHours() + ':' + d.getMinutes(), 26 dateTimeOfDay: d.getHours() + ':' + d.getMinutes(),
18 dateRelativeDay: d.toDateString(), 27 dateRelativeDay: d.toDateString(),
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 function BaseHistoryWebUITest() {} 129 function BaseHistoryWebUITest() {}
121 130
122 BaseHistoryWebUITest.prototype = { 131 BaseHistoryWebUITest.prototype = {
123 __proto__: testing.Test.prototype, 132 __proto__: testing.Test.prototype,
124 133
125 /** 134 /**
126 * Browse to the history page & call our preLoad(). 135 * Browse to the history page & call our preLoad().
127 */ 136 */
128 browsePreload: 'chrome://history-frame', 137 browsePreload: 'chrome://history-frame',
129 138
139 /** @override */
140 typedefCppFixture: 'HistoryUIBrowserTest',
Patrick Dubroy 2013/04/18 14:15:19 Sweeeet! Thanks for figuring out how to do this. T
141
130 isAsync: true, 142 isAsync: true,
131 143
132 /** 144 /**
133 * Register handlers to stub out calls to the history backend. 145 * Register handlers to stub out calls to the history backend.
134 * @override 146 * @override
135 */ 147 */
136 preLoad: function() { 148 preLoad: function() {
137 this.registerMockHandler_( 149 this.registerMockHandler_(
138 'queryHistory', this.queryHistoryStub_.bind(this)); 150 'queryHistory', this.queryHistoryStub_.bind(this));
139 }, 151 },
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
237 * @constructor 249 * @constructor
238 */ 250 */
239 function HistoryWebUITest() {} 251 function HistoryWebUITest() {}
240 252
241 HistoryWebUITest.prototype = { 253 HistoryWebUITest.prototype = {
242 __proto__: BaseHistoryWebUITest.prototype, 254 __proto__: BaseHistoryWebUITest.prototype,
243 255
244 preLoad: function() { 256 preLoad: function() {
245 BaseHistoryWebUITest.prototype.preLoad.call(this); 257 BaseHistoryWebUITest.prototype.preLoad.call(this);
246 258
247 this.registerMockHandler_( 259 this.registerRemoveVisitsStub_();
248 'removeVisits', this.removeVisitsStub_.bind(this));
249 260
250 // Prepare a list of fake history results. The entries will begin at 261 // Prepare a list of fake history results. The entries will begin at
251 // 1:00 AM on Sept 2, 2008, and will be spaced two minutes apart. 262 // 1:00 AM on Sept 2, 2008, and will be spaced two minutes apart.
252 var timestamp = new Date(2008, 9, 2, 1, 0).getTime(); 263 var timestamp = new Date(2008, 9, 2, 1, 0).getTime();
253 this.fakeHistory_ = []; 264 this.fakeHistory_ = [];
254 265
255 for (var i = 0; i < TOTAL_RESULT_COUNT; i++) { 266 for (var i = 0; i < TOTAL_RESULT_COUNT; i++) {
256 this.fakeHistory_.push( 267 this.fakeHistory_.push(
257 createHistoryEntry(timestamp, 'http://google.com/' + timestamp)); 268 createHistoryEntry(timestamp, 'http://google.com/' + timestamp));
258 timestamp -= 2 * 60 * 1000; // Next visit is two minutes earlier. 269 timestamp -= 2 * 60 * 1000; // Next visit is two minutes earlier.
259 } 270 }
260 }, 271 },
261 272
262 /** 273 /**
274 * Register a mock handler for the 'removeVisits' message. This is pulled out
275 * into a separate method so subclasses can override it.
276 */
277 registerRemoveVisitsStub_: function() {
278 this.registerMockHandler_(
279 'removeVisits', this.removeVisitsStub_.bind(this));
280 },
281
282 /**
263 * Stub for the 'queryHistory' message to the history backend. 283 * Stub for the 'queryHistory' message to the history backend.
264 * Simulates a history database using the fake history data that is 284 * Simulates a history database using the fake history data that is
265 * initialized in preLoad(). 285 * initialized in preLoad().
266 * @param {Array} arguments The original arguments to queryHistory. 286 * @param {Array} arguments The original arguments to queryHistory.
267 */ 287 */
268 queryHistoryStub_: function(args) { 288 queryHistoryStub_: function(args) {
269 var searchText = args[0]; 289 var searchText = args[0];
270 var offset = args[1]; 290 var offset = args[1];
271 var range = args[2]; 291 var range = args[2];
272 var endTime = args[3] || Number.MAX_VALUE; 292 var endTime = args[3] || Number.MAX_VALUE;
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 /** 433 /**
414 * Test deletion of history entries. 434 * Test deletion of history entries.
415 */ 435 */
416 TEST_F('HistoryWebUITest', 'deletion', function() { 436 TEST_F('HistoryWebUITest', 'deletion', function() {
417 var checkboxes = document.querySelectorAll( 437 var checkboxes = document.querySelectorAll(
418 '#results-display input[type=checkbox]'); 438 '#results-display input[type=checkbox]');
419 439
420 // Confirm all the things!!! 440 // Confirm all the things!!!
421 window.confirm = function() { return true; }; 441 window.confirm = function() { return true; };
422 442
423 // The "remote" button should be initially selected. 443 // The "remove" button should be initially disabled.
Patrick Dubroy 2013/04/18 14:15:19 Haha, I don't know what happened here. Thanks for
424 var removeButton = $('remove-selected'); 444 var removeButton = $('remove-selected');
425 expectTrue(removeButton.disabled); 445 expectTrue(removeButton.disabled);
426 446
427 checkboxes[0].click(); 447 checkboxes[0].click();
428 expectFalse(removeButton.disabled); 448 expectFalse(removeButton.disabled);
429 449
430 var firstEntry = document.querySelector('.title a').textContent; 450 var firstEntry = document.querySelector('.title a').textContent;
431 removeButton.click(); 451 removeButton.click();
432 452
433 // After deletion, expect the results to be reloaded. 453 // After deletion, expect the results to be reloaded.
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 723
704 waitForCallback('historyResult', function() { 724 waitForCallback('historyResult', function() {
705 // See if the correct number of days is shown. 725 // See if the correct number of days is shown.
706 var resultsDisplay = $('results-display'); 726 var resultsDisplay = $('results-display');
707 assertEquals(0, resultsDisplay.querySelectorAll('.months-results').length); 727 assertEquals(0, resultsDisplay.querySelectorAll('.months-results').length);
708 assertEquals(1, resultsDisplay.querySelectorAll('div').length); 728 assertEquals(1, resultsDisplay.querySelectorAll('div').length);
709 729
710 testDone(); 730 testDone();
711 }); 731 });
712 }); 732 });
733
734 /**
735 * Fixture for History WebUI testing when deletions are prohibited.
736 * @extends {BaseHistoryWebUITest}
737 * @constructor
738 */
739 function HistoryWebUIDeleteProhibitedTest() {}
740
741 HistoryWebUIDeleteProhibitedTest.prototype = {
742 __proto__: HistoryWebUITest.prototype,
743
744 /**
745 * Don't stub out the 'removeVisits' call in this class.
746 * @override
747 */
748 registerRemoveVisitsStub_: function() {},
749
750 /** @override */
751 testGenPreamble: function() {
752 GEN(' SetDeleteAllowed(false);');
753 },
754 };
755
756 // Test UI when removing entries is prohibited.
757 TEST_F('HistoryWebUIDeleteProhibitedTest', 'deleteProhibited', function() {
758 // No checkboxes should be created.
759 var checkboxes = document.querySelectorAll(
760 '#results-display input[type=checkbox]');
761 expectEquals(0, checkboxes.length);
762
763 // The "remove" button should be disabled.
764 var removeButton = $('remove-selected');
765 expectTrue(removeButton.disabled);
766
767 // The "Remove from history" drop-down item should be disabled.
768 var removeVisit = $('remove-visit');
769 expectTrue(removeVisit.disabled);
770
771 // Attempting to remove items anyway should fail.
772 waitForCallback('deleteFailed', testDone);
773 var model = new HistoryModel();
Patrick Dubroy 2013/04/18 14:15:19 Why are you creating a new HistoryModel here? Why
774 model.removeVisitsFromHistory(this.fakeHistory_.slice(0, 2), function () {
775 // The callback is only called on success.
776 throw new Error('Delete succeeded even though it was prohibited.');
777 testDone();
Patrick Dubroy 2013/04/18 14:15:19 Hmmm, won't the test hang on failure then?
Pam (message me for reviews) 2013/04/18 14:41:44 In principle (I thought), if it "succeeds" (which
Patrick Dubroy 2013/04/18 14:55:53 All of these tests are required to call testDone()
778 });
779 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698