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