1731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Use of this source code is governed by a BSD-style license that can be 3731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// found in the LICENSE file. 4731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 5731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include <vector> 6731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "base/message_loop.h" 8731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/history/history.h" 9731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/browser/prefs/pref_service.h" 1021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/profiles/profile.h" 114a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/browser/ui/browser.h" 12731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/common/pref_names.h" 13731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/test/in_process_browser_test.h" 14731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "chrome/test/ui_test_utils.h" 15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/browser_thread.h" 16731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick#include "googleurl/src/gurl.h" 17731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 18731df977c0511bca2206b5f333555b1205ff1f43Iain Merricknamespace { 19731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 2072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Helper to debug intermittent test hangs/timeouts. 2172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// TODO(phajdan.jr): remove when http://crbug.com/57994 is fixed. 2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid Checkpoint(const char* message, const base::TimeTicks& start_time) { 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen LOG(INFO) << message << " : " 2472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen << (base::TimeTicks::Now() - start_time).InMilliseconds() 2572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen << " ms" << std::flush; 2672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 2772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 28731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Note: WaitableEvent is not used for synchronization between the main thread 29731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// and history backend thread because the history subsystem posts tasks back 30731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// to the main thread. Had we tried to Signal an event in such a task 31731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// and Wait for it on the main thread, the task would not run at all because 32731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// the main thread would be blocked on the Wait call, resulting in a deadlock. 33731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 34731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// A task to be scheduled on the history backend thread. 35731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Notifies the main thread after all history backend thread tasks have run. 36731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass WaitForHistoryTask : public HistoryDBTask { 37731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick public: 38731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick WaitForHistoryTask() { 39731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 40731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 41731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual bool RunOnDBThread(history::HistoryBackend* backend, 42731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick history::HistoryDatabase* db) { 43731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return true; 44731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 45731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 46731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual void DoneRunOnMainThread() { 47731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick MessageLoop::current()->Quit(); 48731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 49731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 50731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick private: 51731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DISALLOW_COPY_AND_ASSIGN(WaitForHistoryTask); 52731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}; 53731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 54731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Enumerates all history contents on the backend thread. 55731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass HistoryEnumerator : public HistoryService::URLEnumerator { 56731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick public: 57731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick explicit HistoryEnumerator(HistoryService* history) { 58731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_TRUE(history); 59731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick if (!history) 60731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return; 61731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 62731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask( 63731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::UI, 64731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick FROM_HERE, 65731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NewRunnableMethod(history, &HistoryService::IterateURLs, this)); 66731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_test_utils::RunMessageLoop(); 67731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 68731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 69731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual void OnURL(const GURL& url) { 70731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick urls_.push_back(url); 71731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 72731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 73731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick virtual void OnComplete(bool success) { 74731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask( 75731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::UI, 76731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick FROM_HERE, 77731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick new MessageLoop::QuitTask()); 78731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 79731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 80731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::vector<GURL>& urls() { return urls_; } 81731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 82731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick private: 83731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::vector<GURL> urls_; 84731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 85731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick DISALLOW_COPY_AND_ASSIGN(HistoryEnumerator); 86731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}; 87731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 88731df977c0511bca2206b5f333555b1205ff1f43Iain Merrickclass HistoryBrowserTest : public InProcessBrowserTest { 89731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick protected: 90731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick PrefService* GetPrefs() { 91731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return GetProfile()->GetPrefs(); 92731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 93731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 94731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick Profile* GetProfile() { 95731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return browser()->GetProfile(); 96731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 97731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 98731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick HistoryService* GetHistoryService() { 99731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return GetProfile()->GetHistoryService(Profile::EXPLICIT_ACCESS); 100731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 101731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 102731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::vector<GURL> GetHistoryContents() { 103731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick HistoryEnumerator enumerator(GetHistoryService()); 104731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return enumerator.urls(); 105731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 106731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 107731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GURL GetTestUrl() { 108731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick return ui_test_utils::GetTestUrl( 109731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick FilePath(FilePath::kCurrentDirectory), 110731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick FilePath(FILE_PATH_LITERAL("title2.html"))); 111731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 112731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 113731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void WaitForHistoryBackendToRun() { 114731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick CancelableRequestConsumerTSimple<int> request_consumer; 115731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick scoped_refptr<HistoryDBTask> task(new WaitForHistoryTask()); 116731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick HistoryService* history = GetHistoryService(); 117731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick BrowserThread::PostTask(BrowserThread::UI, 118731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick FROM_HERE, 119731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick NewRunnableMethod(history, 120731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &HistoryService::ScheduleDBTask, 12121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen task, 122731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick &request_consumer)); 123731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_test_utils::RunMessageLoop(); 124731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 125731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 126731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick void ExpectEmptyHistory() { 127731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::vector<GURL> urls(GetHistoryContents()); 128731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_EQ(0U, urls.size()); 129731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 130731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick}; 131731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 132731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Test that the browser history is saved (default setting). 133731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickIN_PROC_BROWSER_TEST_F(HistoryBrowserTest, SavingHistoryEnabled) { 134731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_FALSE(GetPrefs()->GetBoolean(prefs::kSavingBrowserHistoryDisabled)); 135731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 136731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_TRUE(GetProfile()->GetHistoryService(Profile::EXPLICIT_ACCESS)); 137731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_TRUE(GetProfile()->GetHistoryService(Profile::IMPLICIT_ACCESS)); 138731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 139731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_test_utils::WaitForHistoryToLoad(browser()); 140731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectEmptyHistory(); 141731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 142731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_test_utils::NavigateToURL(browser(), GetTestUrl()); 143731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick WaitForHistoryBackendToRun(); 144731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 145731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick { 146731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::vector<GURL> urls(GetHistoryContents()); 147731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_EQ(1U, urls.size()); 148731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_EQ(GetTestUrl().spec(), urls[0].spec()); 149731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 150731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 151731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 152731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Test that disabling saving browser history really works. 15372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// TODO(phajdan.jr): remove debug code when http://crbug.com/57994 is fixed. 15472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(HistoryBrowserTest, SavingHistoryDisabled) { 15572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::TimeTicks start_time = base::TimeTicks::Now(); 15672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 157731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GetPrefs()->SetBoolean(prefs::kSavingBrowserHistoryDisabled, true); 158731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 159731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_TRUE(GetProfile()->GetHistoryService(Profile::EXPLICIT_ACCESS)); 160731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_FALSE(GetProfile()->GetHistoryService(Profile::IMPLICIT_ACCESS)); 161731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 16272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Checkpoint("Before waiting for history to load", start_time); 163731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_test_utils::WaitForHistoryToLoad(browser()); 16472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Checkpoint("After waiting for history to load", start_time); 165731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectEmptyHistory(); 16672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Checkpoint("After checking history", start_time); 167731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 168731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_test_utils::NavigateToURL(browser(), GetTestUrl()); 16972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Checkpoint("After NavigateToURL", start_time); 170731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick WaitForHistoryBackendToRun(); 17172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Checkpoint("After waiting for history backend to run", start_time); 172731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectEmptyHistory(); 17372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Checkpoint("After second check", start_time); 174731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 175731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 176731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Test that changing the pref takes effect immediately 177731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// when the browser is running. 17872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// TODO(phajdan.jr): remove debug code when http://crbug.com/57994 is fixed. 17972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenIN_PROC_BROWSER_TEST_F(HistoryBrowserTest, SavingHistoryEnabledThenDisabled) { 18072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen base::TimeTicks start_time = base::TimeTicks::Now(); 18172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 182731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_FALSE(GetPrefs()->GetBoolean(prefs::kSavingBrowserHistoryDisabled)); 183731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 18472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Checkpoint("Before waiting for history to load", start_time); 185731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_test_utils::WaitForHistoryToLoad(browser()); 18672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Checkpoint("After waiting for history to load", start_time); 187731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 188731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_test_utils::NavigateToURL(browser(), GetTestUrl()); 18972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Checkpoint("After first NavigateToURL", start_time); 190731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick WaitForHistoryBackendToRun(); 19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Checkpoint("After waiting for history backend to run", start_time); 192731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 193731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick { 194731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::vector<GURL> urls(GetHistoryContents()); 19572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Checkpoint("After first GetHistoryContents", start_time); 196731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_EQ(1U, urls.size()); 197731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_EQ(GetTestUrl().spec(), urls[0].spec()); 198731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 199731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 200731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GetPrefs()->SetBoolean(prefs::kSavingBrowserHistoryDisabled, true); 201731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 202731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_test_utils::NavigateToURL(browser(), GetTestUrl()); 20372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Checkpoint("After second NavigateToURL", start_time); 204731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick WaitForHistoryBackendToRun(); 20572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Checkpoint("After waiting for history backend to run (2nd time)", start_time); 206731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 207731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick { 208731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick // No additional entries should be present in the history. 209731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::vector<GURL> urls(GetHistoryContents()); 21072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Checkpoint("After second GetHistoryContents", start_time); 211731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_EQ(1U, urls.size()); 212731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_EQ(GetTestUrl().spec(), urls[0].spec()); 213731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 214731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 215731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 216731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// Test that changing the pref takes effect immediately 217731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick// when the browser is running. 218731df977c0511bca2206b5f333555b1205ff1f43Iain MerrickIN_PROC_BROWSER_TEST_F(HistoryBrowserTest, SavingHistoryDisabledThenEnabled) { 219731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GetPrefs()->SetBoolean(prefs::kSavingBrowserHistoryDisabled, true); 220731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 221731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_test_utils::WaitForHistoryToLoad(browser()); 222731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectEmptyHistory(); 223731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 224731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_test_utils::NavigateToURL(browser(), GetTestUrl()); 225731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick WaitForHistoryBackendToRun(); 226731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ExpectEmptyHistory(); 227731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 228731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick GetPrefs()->SetBoolean(prefs::kSavingBrowserHistoryDisabled, false); 229731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 230731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ui_test_utils::NavigateToURL(browser(), GetTestUrl()); 231731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick WaitForHistoryBackendToRun(); 232731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 233731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick { 234731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick std::vector<GURL> urls(GetHistoryContents()); 235731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick ASSERT_EQ(1U, urls.size()); 236731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick EXPECT_EQ(GetTestUrl().spec(), urls[0].spec()); 237731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick } 238731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} 239731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick 240731df977c0511bca2206b5f333555b1205ff1f43Iain Merrick} // namespace 241