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

Side by Side Diff: chrome/browser/autocomplete/in_memory_url_index_unittest.cc

Issue 1186103002: Abstract //content-level dependencies out of InMemoryURLIndex (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 6 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
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 #include <algorithm> 5 #include <algorithm>
6 #include <fstream> 6 #include <fstream>
7 7
8 #include "base/auto_reset.h" 8 #include "base/auto_reset.h"
9 #include "base/files/file_path.h" 9 #include "base/files/file_path.h"
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
11 #include "base/files/scoped_temp_dir.h" 11 #include "base/files/scoped_temp_dir.h"
12 #include "base/i18n/case_conversion.h" 12 #include "base/i18n/case_conversion.h"
13 #include "base/path_service.h" 13 #include "base/path_service.h"
14 #include "base/run_loop.h" 14 #include "base/run_loop.h"
15 #include "base/strings/string16.h" 15 #include "base/strings/string16.h"
16 #include "base/strings/string_util.h" 16 #include "base/strings/string_util.h"
17 #include "base/strings/stringprintf.h"
17 #include "base/strings/utf_string_conversions.h" 18 #include "base/strings/utf_string_conversions.h"
18 #include "chrome/browser/autocomplete/in_memory_url_index.h" 19 #include "chrome/browser/autocomplete/in_memory_url_index.h"
19 #include "chrome/browser/autocomplete/url_index_private_data.h" 20 #include "chrome/browser/autocomplete/url_index_private_data.h"
20 #include "chrome/browser/bookmarks/bookmark_model_factory.h" 21 #include "chrome/browser/bookmarks/bookmark_model_factory.h"
21 #include "chrome/browser/history/history_service_factory.h" 22 #include "chrome/browser/history/history_service_factory.h"
22 #include "chrome/common/chrome_paths.h" 23 #include "chrome/common/chrome_paths.h"
23 #include "chrome/test/base/history_index_restore_observer.h" 24 #include "chrome/test/base/history_index_restore_observer.h"
24 #include "chrome/test/base/testing_profile.h" 25 #include "chrome/test/base/testing_profile.h"
25 #include "components/bookmarks/test/bookmark_test_helpers.h" 26 #include "components/bookmarks/test/bookmark_test_helpers.h"
26 #include "components/history/core/browser/history_backend.h" 27 #include "components/history/core/browser/history_backend.h"
27 #include "components/history/core/browser/history_database.h" 28 #include "components/history/core/browser/history_database.h"
28 #include "components/history/core/browser/history_service.h" 29 #include "components/history/core/browser/history_service.h"
29 #include "components/omnibox/in_memory_url_index_types.h" 30 #include "components/omnibox/in_memory_url_index_types.h"
31 #include "content/public/browser/browser_thread.h"
30 #include "content/public/test/test_browser_thread_bundle.h" 32 #include "content/public/test/test_browser_thread_bundle.h"
31 #include "sql/transaction.h" 33 #include "sql/transaction.h"
32 #include "testing/gtest/include/gtest/gtest.h" 34 #include "testing/gtest/include/gtest/gtest.h"
33 35
34 using base::ASCIIToUTF16; 36 using base::ASCIIToUTF16;
35 37
36 // The test version of the history url database table ('url') is contained in 38 // The test version of the history url database table ('url') is contained in
37 // a database file created from a text file('url_history_provider_test.db.txt'). 39 // a database file created from a text file('url_history_provider_test.db.txt').
38 // The only difference between this table and a live 'urls' table from a 40 // The only difference between this table and a live 'urls' table from a
39 // profile is that the last_visit_time column in the test table contains a 41 // profile is that the last_visit_time column in the test table contains a
40 // number specifying the number of days relative to 'today' to which the 42 // number specifying the number of days relative to 'today' to which the
41 // absolute time should be set during the test setup stage. 43 // absolute time should be set during the test setup stage.
42 // 44 //
43 // The format of the test database text file is of a SQLite .dump file. 45 // The format of the test database text file is of a SQLite .dump file.
44 // Note that only lines whose first character is an upper-case letter are 46 // Note that only lines whose first character is an upper-case letter are
45 // processed when creating the test database. 47 // processed when creating the test database.
46 48
47 namespace { 49 namespace {
48 const size_t kInvalid = base::string16::npos; 50 const size_t kInvalid = base::string16::npos;
49 const size_t kMaxMatches = 3; 51 const size_t kMaxMatches = 3;
50 const char kTestLanguages[] = "en,ja,hi,zh"; 52 const char kTestLanguages[] = "en,ja,hi,zh";
53 const char kClientWhitelistedScheme[] = "xyz";
51 54
52 // Helper function to set lower case |lower_string| and |lower_terms| (words 55 // Helper function to set lower case |lower_string| and |lower_terms| (words
53 // list) based on supplied |search_string| and |cursor_position|. If 56 // list) based on supplied |search_string| and |cursor_position|. If
54 // |cursor_position| is set and useful (not at either end of the string), allow 57 // |cursor_position| is set and useful (not at either end of the string), allow
55 // the |search_string| to be broken at |cursor_position|. We do this by 58 // the |search_string| to be broken at |cursor_position|. We do this by
56 // pretending there's a space where the cursor is. |lower_terms| are obtained by 59 // pretending there's a space where the cursor is. |lower_terms| are obtained by
57 // splitting the |lower_string| on whitespace into tokens. 60 // splitting the |lower_string| on whitespace into tokens.
58 void StringToTerms(const char* search_string, 61 void StringToTerms(const char* search_string,
59 size_t cursor_position, 62 size_t cursor_position,
60 base::string16* lower_string, 63 base::string16* lower_string,
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 sql::Connection& GetDB(); 132 sql::Connection& GetDB();
130 133
131 // Pass-through functions to simplify our friendship with InMemoryURLIndex. 134 // Pass-through functions to simplify our friendship with InMemoryURLIndex.
132 URLIndexPrivateData* GetPrivateData() const; 135 URLIndexPrivateData* GetPrivateData() const;
133 base::CancelableTaskTracker* GetPrivateDataTracker() const; 136 base::CancelableTaskTracker* GetPrivateDataTracker() const;
134 void ClearPrivateData(); 137 void ClearPrivateData();
135 void set_history_dir(const base::FilePath& dir_path); 138 void set_history_dir(const base::FilePath& dir_path);
136 bool GetCacheFilePath(base::FilePath* file_path) const; 139 bool GetCacheFilePath(base::FilePath* file_path) const;
137 void PostRestoreFromCacheFileTask(); 140 void PostRestoreFromCacheFileTask();
138 void PostSaveToCacheFileTask(); 141 void PostSaveToCacheFileTask();
139 const std::set<std::string>& scheme_whitelist(); 142 const SchemeSet& scheme_whitelist();
140 143
141 144
142 // Pass-through functions to simplify our friendship with URLIndexPrivateData. 145 // Pass-through functions to simplify our friendship with URLIndexPrivateData.
143 bool UpdateURL(const history::URLRow& row); 146 bool UpdateURL(const history::URLRow& row);
144 bool DeleteURL(const GURL& url); 147 bool DeleteURL(const GURL& url);
145 148
146 // Data verification helper functions. 149 // Data verification helper functions.
147 void ExpectPrivateDataNotEmpty(const URLIndexPrivateData& data); 150 void ExpectPrivateDataNotEmpty(const URLIndexPrivateData& data);
148 void ExpectPrivateDataEmpty(const URLIndexPrivateData& data); 151 void ExpectPrivateDataEmpty(const URLIndexPrivateData& data);
149 void ExpectPrivateDataEqual(const URLIndexPrivateData& expected, 152 void ExpectPrivateDataEqual(const URLIndexPrivateData& expected,
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 } 192 }
190 193
191 void InMemoryURLIndexTest::PostRestoreFromCacheFileTask() { 194 void InMemoryURLIndexTest::PostRestoreFromCacheFileTask() {
192 url_index_->PostRestoreFromCacheFileTask(); 195 url_index_->PostRestoreFromCacheFileTask();
193 } 196 }
194 197
195 void InMemoryURLIndexTest::PostSaveToCacheFileTask() { 198 void InMemoryURLIndexTest::PostSaveToCacheFileTask() {
196 url_index_->PostSaveToCacheFileTask(); 199 url_index_->PostSaveToCacheFileTask();
197 } 200 }
198 201
199 const std::set<std::string>& InMemoryURLIndexTest::scheme_whitelist() { 202 const SchemeSet& InMemoryURLIndexTest::scheme_whitelist() {
200 return url_index_->scheme_whitelist(); 203 return url_index_->scheme_whitelist();
201 } 204 }
202 205
203 bool InMemoryURLIndexTest::UpdateURL(const history::URLRow& row) { 206 bool InMemoryURLIndexTest::UpdateURL(const history::URLRow& row) {
204 return GetPrivateData()->UpdateURL(history_service_, 207 return GetPrivateData()->UpdateURL(history_service_,
205 row, 208 row,
206 url_index_->languages_, 209 url_index_->languages_,
207 url_index_->scheme_whitelist_, 210 url_index_->scheme_whitelist_,
208 GetPrivateDataTracker()); 211 GetPrivateDataTracker());
209 } 212 }
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 base::FilePath::StringType InMemoryURLIndexTest::TestDBName() const { 317 base::FilePath::StringType InMemoryURLIndexTest::TestDBName() const {
315 return FILE_PATH_LITERAL("url_history_provider_test.db.txt"); 318 return FILE_PATH_LITERAL("url_history_provider_test.db.txt");
316 } 319 }
317 320
318 bool InMemoryURLIndexTest::InitializeInMemoryURLIndexInSetUp() const { 321 bool InMemoryURLIndexTest::InitializeInMemoryURLIndexInSetUp() const {
319 return true; 322 return true;
320 } 323 }
321 324
322 void InMemoryURLIndexTest::InitializeInMemoryURLIndex() { 325 void InMemoryURLIndexTest::InitializeInMemoryURLIndex() {
323 DCHECK(!url_index_); 326 DCHECK(!url_index_);
324 url_index_.reset(new InMemoryURLIndex(nullptr, history_service_, 327
325 base::FilePath(), kTestLanguages)); 328 SchemeSet client_schemes_to_whitelist;
329 client_schemes_to_whitelist.insert(kClientWhitelistedScheme);
330 url_index_.reset(new InMemoryURLIndex(
331 nullptr, history_service_, content::BrowserThread::GetBlockingPool(),
332 base::FilePath(), kTestLanguages, client_schemes_to_whitelist));
326 url_index_->Init(); 333 url_index_->Init();
327 url_index_->RebuildFromHistory(history_database_); 334 url_index_->RebuildFromHistory(history_database_);
328 } 335 }
329 336
330 void InMemoryURLIndexTest::CheckTerm( 337 void InMemoryURLIndexTest::CheckTerm(
331 const URLIndexPrivateData::SearchTermCacheMap& cache, 338 const URLIndexPrivateData::SearchTermCacheMap& cache,
332 base::string16 term) const { 339 base::string16 term) const {
333 URLIndexPrivateData::SearchTermCacheMap::const_iterator cache_iter( 340 URLIndexPrivateData::SearchTermCacheMap::const_iterator cache_iter(
334 cache.find(term)); 341 cache.find(term));
335 ASSERT_TRUE(cache.end() != cache_iter) 342 ASSERT_TRUE(cache.end() != cache_iter)
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after
935 history::URLRows deleted_rows; 942 history::URLRows deleted_rows;
936 deleted_rows.push_back(matches[0].url_info); 943 deleted_rows.push_back(matches[0].url_info);
937 url_index_->OnURLsDeleted(nullptr, false, false, deleted_rows, 944 url_index_->OnURLsDeleted(nullptr, false, false, deleted_rows,
938 std::set<GURL>()); 945 std::set<GURL>());
939 EXPECT_TRUE(url_index_->HistoryItemsForTerms(ASCIIToUTF16("DrudgeReport"), 946 EXPECT_TRUE(url_index_->HistoryItemsForTerms(ASCIIToUTF16("DrudgeReport"),
940 base::string16::npos, 947 base::string16::npos,
941 kMaxMatches).empty()); 948 kMaxMatches).empty());
942 } 949 }
943 950
944 TEST_F(InMemoryURLIndexTest, WhitelistedURLs) { 951 TEST_F(InMemoryURLIndexTest, WhitelistedURLs) {
952 std::string client_whitelisted_url =
953 base::StringPrintf("%s://foo", kClientWhitelistedScheme);
945 struct TestData { 954 struct TestData {
946 const std::string url_spec; 955 const std::string url_spec;
947 const bool expected_is_whitelisted; 956 const bool expected_is_whitelisted;
948 } data[] = { 957 } data[] = {
949 // URLs with whitelisted schemes. 958 // URLs with whitelisted schemes.
950 { "about:histograms", true }, 959 { "about:histograms", true },
951 { "chrome://settings", true },
952 { "file://localhost/Users/joeschmoe/sekrets", true }, 960 { "file://localhost/Users/joeschmoe/sekrets", true },
953 { "ftp://public.mycompany.com/myfile.txt", true }, 961 { "ftp://public.mycompany.com/myfile.txt", true },
954 { "http://www.google.com/translate", true }, 962 { "http://www.google.com/translate", true },
955 { "https://www.gmail.com/", true }, 963 { "https://www.gmail.com/", true },
956 { "mailto:support@google.com", true }, 964 { "mailto:support@google.com", true },
965 { client_whitelisted_url, true },
957 // URLs with unacceptable schemes. 966 // URLs with unacceptable schemes.
958 { "aaa://www.dummyhost.com;frammy", false }, 967 { "aaa://www.dummyhost.com;frammy", false },
959 { "aaas://www.dummyhost.com;frammy", false }, 968 { "aaas://www.dummyhost.com;frammy", false },
960 { "acap://suzie@somebody.com", false }, 969 { "acap://suzie@somebody.com", false },
961 { "cap://cal.example.com/Company/Holidays", false }, 970 { "cap://cal.example.com/Company/Holidays", false },
962 { "cid:foo4*foo1@bar.net", false }, 971 { "cid:foo4*foo1@bar.net", false },
963 { "crid://example.com/foobar", false }, 972 { "crid://example.com/foobar", false },
964 { "data:image/png;base64,iVBORw0KGgoAAAANSUhE=", false }, 973 { "data:image/png;base64,iVBORw0KGgoAAAANSUhE=", false },
965 { "dict://dict.org/d:shortcake:", false }, 974 { "dict://dict.org/d:shortcake:", false },
966 { "dns://192.168.1.1/ftp.example.org?type=A", false }, 975 { "dns://192.168.1.1/ftp.example.org?type=A", false },
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1008 { "tftp://example.com/mystartupfile", false }, 1017 { "tftp://example.com/mystartupfile", false },
1009 { "tip://123.123.123.123/?urn:xopen:xid", false }, 1018 { "tip://123.123.123.123/?urn:xopen:xid", false },
1010 { "tv:nbc.com", false }, 1019 { "tv:nbc.com", false },
1011 { "urn:foo:A123,456", false }, 1020 { "urn:foo:A123,456", false },
1012 { "vemmi://zeus.mctel.fr/demo", false }, 1021 { "vemmi://zeus.mctel.fr/demo", false },
1013 { "wais://www.mydomain.net:8765/mydatabase", false }, 1022 { "wais://www.mydomain.net:8765/mydatabase", false },
1014 { "xmpp:node@example.com", false }, 1023 { "xmpp:node@example.com", false },
1015 { "xmpp://guest@example.com", false }, 1024 { "xmpp://guest@example.com", false },
1016 }; 1025 };
1017 1026
1018 const std::set<std::string>& whitelist(scheme_whitelist()); 1027 const SchemeSet& whitelist(scheme_whitelist());
1019 for (size_t i = 0; i < arraysize(data); ++i) { 1028 for (size_t i = 0; i < arraysize(data); ++i) {
1020 GURL url(data[i].url_spec); 1029 GURL url(data[i].url_spec);
1021 EXPECT_EQ(data[i].expected_is_whitelisted, 1030 EXPECT_EQ(data[i].expected_is_whitelisted,
1022 URLIndexPrivateData::URLSchemeIsWhitelisted(url, whitelist)); 1031 URLIndexPrivateData::URLSchemeIsWhitelisted(url, whitelist));
1023 } 1032 }
1024 } 1033 }
1025 1034
1026 TEST_F(InMemoryURLIndexTest, ReadVisitsFromHistory) { 1035 TEST_F(InMemoryURLIndexTest, ReadVisitsFromHistory) {
1027 const HistoryInfoMap& history_info_map = GetPrivateData()->history_info_map_; 1036 const HistoryInfoMap& history_info_map = GetPrivateData()->history_info_map_;
1028 1037
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
1307 bool GetCacheFilePath(base::FilePath* file_path) const; 1316 bool GetCacheFilePath(base::FilePath* file_path) const;
1308 1317
1309 content::TestBrowserThreadBundle thread_bundle_; 1318 content::TestBrowserThreadBundle thread_bundle_;
1310 base::ScopedTempDir temp_dir_; 1319 base::ScopedTempDir temp_dir_;
1311 scoped_ptr<InMemoryURLIndex> url_index_; 1320 scoped_ptr<InMemoryURLIndex> url_index_;
1312 }; 1321 };
1313 1322
1314 void InMemoryURLIndexCacheTest::SetUp() { 1323 void InMemoryURLIndexCacheTest::SetUp() {
1315 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 1324 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
1316 base::FilePath path(temp_dir_.path()); 1325 base::FilePath path(temp_dir_.path());
1317 url_index_.reset( 1326 url_index_.reset(new InMemoryURLIndex(
1318 new InMemoryURLIndex(nullptr, nullptr, path, kTestLanguages)); 1327 nullptr, nullptr, content::BrowserThread::GetBlockingPool(), path,
1328 kTestLanguages, SchemeSet()));
1319 } 1329 }
1320 1330
1321 void InMemoryURLIndexCacheTest::TearDown() { 1331 void InMemoryURLIndexCacheTest::TearDown() {
1322 if (url_index_) 1332 if (url_index_)
1323 url_index_->Shutdown(); 1333 url_index_->Shutdown();
1324 } 1334 }
1325 1335
1326 void InMemoryURLIndexCacheTest::set_history_dir( 1336 void InMemoryURLIndexCacheTest::set_history_dir(
1327 const base::FilePath& dir_path) { 1337 const base::FilePath& dir_path) {
1328 return url_index_->set_history_dir(dir_path); 1338 return url_index_->set_history_dir(dir_path);
(...skipping 14 matching lines...) Expand all
1343 ASSERT_TRUE(GetCacheFilePath(&full_file_path)); 1353 ASSERT_TRUE(GetCacheFilePath(&full_file_path));
1344 std::vector<base::FilePath::StringType> actual_parts; 1354 std::vector<base::FilePath::StringType> actual_parts;
1345 full_file_path.GetComponents(&actual_parts); 1355 full_file_path.GetComponents(&actual_parts);
1346 ASSERT_EQ(expected_parts.size(), actual_parts.size()); 1356 ASSERT_EQ(expected_parts.size(), actual_parts.size());
1347 size_t count = expected_parts.size(); 1357 size_t count = expected_parts.size();
1348 for (size_t i = 0; i < count; ++i) 1358 for (size_t i = 0; i < count; ++i)
1349 EXPECT_EQ(expected_parts[i], actual_parts[i]); 1359 EXPECT_EQ(expected_parts[i], actual_parts[i]);
1350 // Must clear the history_dir_ to satisfy the dtor's DCHECK. 1360 // Must clear the history_dir_ to satisfy the dtor's DCHECK.
1351 set_history_dir(base::FilePath()); 1361 set_history_dir(base::FilePath());
1352 } 1362 }
OLDNEW
« no previous file with comments | « chrome/browser/autocomplete/in_memory_url_index_factory.cc ('k') | chrome/test/base/testing_profile.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698