| Index: chrome/browser/autocomplete/history_quick_provider_unittest.cc
|
| diff --git a/chrome/browser/autocomplete/history_quick_provider_unittest.cc b/chrome/browser/autocomplete/history_quick_provider_unittest.cc
|
| index acdf836e35d93e6c5097483edaa52beef07b16d1..dd9d84023771c35c93ad23bcc16e8c8211d5f941 100644
|
| --- a/chrome/browser/autocomplete/history_quick_provider_unittest.cc
|
| +++ b/chrome/browser/autocomplete/history_quick_provider_unittest.cc
|
| @@ -51,6 +51,8 @@ using base::TimeDelta;
|
|
|
| using content::BrowserThread;
|
|
|
| +namespace {
|
| +
|
| struct TestURLInfo {
|
| std::string url;
|
| std::string title;
|
| @@ -150,6 +152,36 @@ void WaitForURLsDeletedNotification(history::HistoryService* history_service) {
|
| runner.Run();
|
| }
|
|
|
| +// Post history_backend->GetURL() to the history thread and stop the originating
|
| +// thread's message loop when done.
|
| +class GetURLTask : public history::HistoryDBTask {
|
| + public:
|
| + GetURLTask(const GURL& url, bool* result_storage)
|
| + : result_storage_(result_storage),
|
| + url_(url) {
|
| + }
|
| +
|
| + bool RunOnDBThread(history::HistoryBackend* backend,
|
| + history::HistoryDatabase* db) override {
|
| + *result_storage_ = backend->GetURL(url_, NULL);
|
| + return true;
|
| + }
|
| +
|
| + void DoneRunOnMainThread() override {
|
| + base::MessageLoop::current()->Quit();
|
| + }
|
| +
|
| + private:
|
| + ~GetURLTask() override {}
|
| +
|
| + bool* result_storage_;
|
| + const GURL url_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(GetURLTask);
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| class HistoryQuickProviderTest : public testing::Test {
|
| public:
|
| HistoryQuickProviderTest()
|
| @@ -208,10 +240,19 @@ class HistoryQuickProviderTest : public testing::Test {
|
| base::string16 expected_fill_into_edit,
|
| base::string16 autocompletion);
|
|
|
| + // TODO(shess): From history_service.h in reference to history_backend:
|
| + // > This class has most of the implementation and runs on the 'thread_'.
|
| + // > You MUST communicate with this class ONLY through the thread_'s
|
| + // > message_loop().
|
| + // Direct use of this object in tests is almost certainly not thread-safe.
|
| history::HistoryBackend* history_backend() {
|
| return history_service_->history_backend_.get();
|
| }
|
|
|
| + // Call history_backend()->GetURL(url, NULL) on the history thread, returning
|
| + // the result.
|
| + bool GetURLProxy(const GURL& url);
|
| +
|
| base::MessageLoopForUI message_loop_;
|
| content::TestBrowserThread ui_thread_;
|
| content::TestBrowserThread file_thread_;
|
| @@ -394,6 +435,18 @@ void HistoryQuickProviderTest::RunTestWithCursor(
|
| EXPECT_EQ(expected_fill_into_edit, ac_matches_[0].fill_into_edit);
|
| }
|
|
|
| +bool HistoryQuickProviderTest::GetURLProxy(const GURL& url) {
|
| + base::CancelableTaskTracker task_tracker;
|
| + bool result = false;
|
| + history_service_->ScheduleDBTask(
|
| + scoped_ptr<history::HistoryDBTask>(new GetURLTask(url, &result)),
|
| + &task_tracker);
|
| + // Run the message loop until GetURLTask::DoneRunOnMainThread stops it. If
|
| + // the test hangs, DoneRunOnMainThread isn't being invoked correctly.
|
| + base::MessageLoop::current()->Run();
|
| + return result;
|
| +}
|
| +
|
| TEST_F(HistoryQuickProviderTest, SimpleSingleMatch) {
|
| std::vector<std::string> expected_urls;
|
| expected_urls.push_back("http://slashdot.org/favorite_page.html");
|
| @@ -616,7 +669,7 @@ TEST_F(HistoryQuickProviderTest, DeleteMatch) {
|
| ASCIIToUTF16("slashdot.org/favorite_page.html"),
|
| ASCIIToUTF16(".org/favorite_page.html"));
|
| EXPECT_EQ(1U, ac_matches_.size());
|
| - EXPECT_TRUE(history_backend()->GetURL(test_url, NULL));
|
| + EXPECT_TRUE(GetURLProxy(test_url));
|
| provider_->DeleteMatch(ac_matches_[0]);
|
|
|
| // Check that the underlying URL is deleted from the history DB (this implies
|
| @@ -626,7 +679,7 @@ TEST_F(HistoryQuickProviderTest, DeleteMatch) {
|
| // To ensure that the deletion has been propagated everywhere before we start
|
| // verifying post-deletion states, first wait until we see the notification.
|
| WaitForURLsDeletedNotification(history_service_);
|
| - EXPECT_FALSE(history_backend()->GetURL(test_url, NULL));
|
| + EXPECT_FALSE(GetURLProxy(test_url));
|
|
|
| // Just to be on the safe side, explicitly verify that we have deleted enough
|
| // data so that we will not be serving the same result again.
|
|
|