OLD | NEW |
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 // This test creates a safebrowsing service using test safebrowsing database | 5 // This test creates a safebrowsing service using test safebrowsing database |
6 // and a test protocol manager. It is used to test logics in safebrowsing | 6 // and a test protocol manager. It is used to test logics in safebrowsing |
7 // service. | 7 // service. |
8 | 8 |
9 #include "chrome/browser/safe_browsing/safe_browsing_service.h" | 9 #include "chrome/browser/safe_browsing/safe_browsing_service.h" |
10 | 10 |
(...skipping 19 matching lines...) Expand all Loading... |
30 #include "chrome/browser/browser_process.h" | 30 #include "chrome/browser/browser_process.h" |
31 #include "chrome/browser/chrome_notification_types.h" | 31 #include "chrome/browser/chrome_notification_types.h" |
32 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" | 32 #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
33 #include "chrome/browser/prerender/prerender_manager.h" | 33 #include "chrome/browser/prerender/prerender_manager.h" |
34 #include "chrome/browser/profiles/profile.h" | 34 #include "chrome/browser/profiles/profile.h" |
35 #include "chrome/browser/profiles/profile_manager.h" | 35 #include "chrome/browser/profiles/profile_manager.h" |
36 #include "chrome/browser/safe_browsing/client_side_detection_service.h" | 36 #include "chrome/browser/safe_browsing/client_side_detection_service.h" |
37 #include "chrome/browser/safe_browsing/local_database_manager.h" | 37 #include "chrome/browser/safe_browsing/local_database_manager.h" |
38 #include "chrome/browser/safe_browsing/protocol_manager.h" | 38 #include "chrome/browser/safe_browsing/protocol_manager.h" |
39 #include "chrome/browser/safe_browsing/safe_browsing_database.h" | 39 #include "chrome/browser/safe_browsing/safe_browsing_database.h" |
| 40 #include "chrome/browser/safe_browsing/test_safe_browsing_service.h" |
40 #include "chrome/browser/safe_browsing/ui_manager.h" | 41 #include "chrome/browser/safe_browsing/ui_manager.h" |
41 #include "chrome/browser/ui/browser.h" | 42 #include "chrome/browser/ui/browser.h" |
42 #include "chrome/browser/ui/browser_navigator_params.h" | 43 #include "chrome/browser/ui/browser_navigator_params.h" |
43 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 44 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
44 #include "chrome/common/chrome_paths.h" | 45 #include "chrome/common/chrome_paths.h" |
45 #include "chrome/common/chrome_switches.h" | 46 #include "chrome/common/chrome_switches.h" |
46 #include "chrome/common/pref_names.h" | 47 #include "chrome/common/pref_names.h" |
47 #include "chrome/test/base/in_process_browser_test.h" | 48 #include "chrome/test/base/in_process_browser_test.h" |
48 #include "chrome/test/base/ui_test_utils.h" | 49 #include "chrome/test/base/ui_test_utils.h" |
49 #include "components/bookmarks/browser/startup_task_runner_service.h" | 50 #include "components/bookmarks/browser/startup_task_runner_service.h" |
50 #include "components/content_settings/core/browser/host_content_settings_map.h" | 51 #include "components/content_settings/core/browser/host_content_settings_map.h" |
51 #include "components/prefs/pref_service.h" | 52 #include "components/prefs/pref_service.h" |
52 #include "components/safe_browsing_db/database_manager.h" | 53 #include "components/safe_browsing_db/database_manager.h" |
53 #include "components/safe_browsing_db/metadata.pb.h" | 54 #include "components/safe_browsing_db/metadata.pb.h" |
| 55 #include "components/safe_browsing_db/test_database_manager.h" |
54 #include "components/safe_browsing_db/util.h" | 56 #include "components/safe_browsing_db/util.h" |
55 #include "content/public/browser/interstitial_page.h" | 57 #include "content/public/browser/interstitial_page.h" |
56 #include "content/public/browser/navigation_entry.h" | 58 #include "content/public/browser/navigation_entry.h" |
57 #include "content/public/browser/render_frame_host.h" | 59 #include "content/public/browser/render_frame_host.h" |
58 #include "content/public/browser/web_contents.h" | 60 #include "content/public/browser/web_contents.h" |
59 #include "content/public/test/browser_test_utils.h" | 61 #include "content/public/test/browser_test_utils.h" |
60 #include "net/cookies/cookie_store.h" | 62 #include "net/cookies/cookie_store.h" |
61 #include "net/cookies/cookie_util.h" | 63 #include "net/cookies/cookie_util.h" |
62 #include "net/test/embedded_test_server/embedded_test_server.h" | 64 #include "net/test/embedded_test_server/embedded_test_server.h" |
63 #include "net/test/embedded_test_server/http_request.h" | 65 #include "net/test/embedded_test_server/http_request.h" |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
114 return nullptr; | 116 return nullptr; |
115 return base::WrapUnique(new NeverCompletingHttpResponse()); | 117 return base::WrapUnique(new NeverCompletingHttpResponse()); |
116 } | 118 } |
117 | 119 |
118 void InvokeFullHashCallback( | 120 void InvokeFullHashCallback( |
119 SafeBrowsingProtocolManager::FullHashCallback callback, | 121 SafeBrowsingProtocolManager::FullHashCallback callback, |
120 const std::vector<SBFullHashResult>& result) { | 122 const std::vector<SBFullHashResult>& result) { |
121 callback.Run(result, base::TimeDelta::FromMinutes(45)); | 123 callback.Run(result, base::TimeDelta::FromMinutes(45)); |
122 } | 124 } |
123 | 125 |
124 class FakeSafeBrowsingUIManager : public SafeBrowsingUIManager { | 126 // Helper function to set up protocol config. It is used to redirects safe |
| 127 // browsing queries to embeded test server. It needs to be called before |
| 128 // SafeBrowsingService being created, therefore it is preferred to call this |
| 129 // function before InProcessBrowserTest::SetUp(). |
| 130 void SetProtocolConfigURLPrefix(const std::string& url_prefix, |
| 131 TestSafeBrowsingServiceFactory* factory) { |
| 132 SafeBrowsingProtocolConfig config; |
| 133 config.url_prefix = url_prefix; |
| 134 // Makes sure the auto update is not triggered. The tests will force the |
| 135 // update when needed. |
| 136 config.disable_auto_update = true; |
| 137 config.client_name = "browser_tests"; |
| 138 factory->SetTestProtocolConfig(config); |
| 139 } |
| 140 |
| 141 class FakeSafeBrowsingUIManager : public TestSafeBrowsingUIManager { |
125 public: | 142 public: |
126 explicit FakeSafeBrowsingUIManager(SafeBrowsingService* service) | |
127 : SafeBrowsingUIManager(service) {} | |
128 | |
129 void MaybeReportSafeBrowsingHit( | 143 void MaybeReportSafeBrowsingHit( |
130 const safe_browsing::HitReport& hit_report) override { | 144 const safe_browsing::HitReport& hit_report) override { |
131 EXPECT_FALSE(got_hit_report_); | 145 EXPECT_FALSE(got_hit_report_); |
132 got_hit_report_ = true; | 146 got_hit_report_ = true; |
133 hit_report_ = hit_report; | 147 hit_report_ = hit_report; |
134 SafeBrowsingUIManager::MaybeReportSafeBrowsingHit(hit_report); | 148 SafeBrowsingUIManager::MaybeReportSafeBrowsingHit(hit_report); |
135 } | 149 } |
136 | 150 |
137 bool got_hit_report_ = false; | 151 bool got_hit_report_ = false; |
138 safe_browsing::HitReport hit_report_; | 152 safe_browsing::HitReport hit_report_; |
139 | 153 |
140 private: | 154 private: |
141 ~FakeSafeBrowsingUIManager() override {} | 155 ~FakeSafeBrowsingUIManager() override {} |
142 }; | 156 }; |
143 | 157 |
144 class FakeSafeBrowsingService : public SafeBrowsingService { | |
145 public: | |
146 explicit FakeSafeBrowsingService(const std::string& url_prefix) | |
147 : url_prefix_(url_prefix) {} | |
148 | |
149 SafeBrowsingProtocolConfig GetProtocolConfig() const override { | |
150 SafeBrowsingProtocolConfig config; | |
151 config.url_prefix = url_prefix_; | |
152 // Makes sure the auto update is not triggered. The tests will force the | |
153 // update when needed. | |
154 config.disable_auto_update = true; | |
155 config.client_name = "browser_tests"; | |
156 return config; | |
157 } | |
158 | |
159 protected: | |
160 SafeBrowsingUIManager* CreateUIManager() override { | |
161 return new FakeSafeBrowsingUIManager(this); | |
162 } | |
163 | |
164 private: | |
165 ~FakeSafeBrowsingService() override {} | |
166 | |
167 std::string url_prefix_; | |
168 | |
169 DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingService); | |
170 }; | |
171 | |
172 // Factory that creates FakeSafeBrowsingService instances. | |
173 class TestSafeBrowsingServiceFactory : public SafeBrowsingServiceFactory { | |
174 public: | |
175 explicit TestSafeBrowsingServiceFactory(const std::string& url_prefix) | |
176 : url_prefix_(url_prefix) {} | |
177 | |
178 SafeBrowsingService* CreateSafeBrowsingService() override { | |
179 return new FakeSafeBrowsingService(url_prefix_); | |
180 } | |
181 | |
182 private: | |
183 std::string url_prefix_; | |
184 }; | |
185 | |
186 // A SafeBrowingDatabase class that allows us to inject the malicious URLs. | 158 // A SafeBrowingDatabase class that allows us to inject the malicious URLs. |
187 class TestSafeBrowsingDatabase : public SafeBrowsingDatabase { | 159 class TestSafeBrowsingDatabase : public SafeBrowsingDatabase { |
188 public: | 160 public: |
189 TestSafeBrowsingDatabase() {} | 161 TestSafeBrowsingDatabase() {} |
190 | 162 |
191 ~TestSafeBrowsingDatabase() override {} | 163 ~TestSafeBrowsingDatabase() override {} |
192 | 164 |
193 // Initializes the database with the given filename. | 165 // Initializes the database with the given filename. |
194 void Init(const base::FilePath& filename) override {} | 166 void Init(const base::FilePath& filename) override {} |
195 | 167 |
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 int list_id, | 485 int list_id, |
514 SBFullHashResult* full_hash) { | 486 SBFullHashResult* full_hash) { |
515 std::string host; | 487 std::string host; |
516 std::string path; | 488 std::string path; |
517 CanonicalizeUrl(url, &host, &path, NULL); | 489 CanonicalizeUrl(url, &host, &path, NULL); |
518 full_hash->hash = SBFullHashForString(host + path); | 490 full_hash->hash = SBFullHashForString(host + path); |
519 full_hash->list_id = list_id; | 491 full_hash->list_id = list_id; |
520 } | 492 } |
521 | 493 |
522 void SetUp() override { | 494 void SetUp() override { |
523 // InProcessBrowserTest::SetUp() instantiates SafebrowsingService and | 495 // InProcessBrowserTest::SetUp() instantiates SafebrowsingService. |
524 // RegisterFactory has to be called before SafeBrowsingService is created. | 496 // RegisterFactory and plugging test UI manager / protocol config have to |
525 sb_factory_.reset(new TestSafeBrowsingServiceFactory( | 497 // be called before SafeBrowsingService is created. |
526 "https://definatelynotarealdomain/safebrowsing")); | 498 sb_factory_.reset(new TestSafeBrowsingServiceFactory()); |
| 499 sb_factory_->SetTestUIManager(new FakeSafeBrowsingUIManager()); |
| 500 SetProtocolConfigURLPrefix("https://definatelynotarealdomain/safebrowsing", |
| 501 sb_factory_.get()); |
527 SafeBrowsingService::RegisterFactory(sb_factory_.get()); | 502 SafeBrowsingService::RegisterFactory(sb_factory_.get()); |
528 SafeBrowsingDatabase::RegisterFactory(&db_factory_); | 503 SafeBrowsingDatabase::RegisterFactory(&db_factory_); |
529 SafeBrowsingProtocolManager::RegisterFactory(&pm_factory_); | 504 SafeBrowsingProtocolManager::RegisterFactory(&pm_factory_); |
530 InProcessBrowserTest::SetUp(); | 505 InProcessBrowserTest::SetUp(); |
531 } | 506 } |
532 | 507 |
533 void TearDown() override { | 508 void TearDown() override { |
534 InProcessBrowserTest::TearDown(); | 509 InProcessBrowserTest::TearDown(); |
535 | 510 |
536 // Unregister test factories after InProcessBrowserTest::TearDown | 511 // Unregister test factories after InProcessBrowserTest::TearDown |
(...skipping 1034 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1571 class SafeBrowsingDatabaseManagerCookieTest : public InProcessBrowserTest { | 1546 class SafeBrowsingDatabaseManagerCookieTest : public InProcessBrowserTest { |
1572 public: | 1547 public: |
1573 SafeBrowsingDatabaseManagerCookieTest() {} | 1548 SafeBrowsingDatabaseManagerCookieTest() {} |
1574 | 1549 |
1575 void SetUp() override { | 1550 void SetUp() override { |
1576 // We need to start the test server to get the host&port in the url. | 1551 // We need to start the test server to get the host&port in the url. |
1577 ASSERT_TRUE(embedded_test_server()->Start()); | 1552 ASSERT_TRUE(embedded_test_server()->Start()); |
1578 embedded_test_server()->RegisterRequestHandler( | 1553 embedded_test_server()->RegisterRequestHandler( |
1579 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::HandleRequest)); | 1554 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::HandleRequest)); |
1580 | 1555 |
1581 // Point to the testing server for all SafeBrowsing requests. | 1556 sb_factory_.reset(new TestSafeBrowsingServiceFactory()); |
1582 GURL url_prefix = embedded_test_server()->GetURL("/testpath"); | 1557 SetProtocolConfigURLPrefix( |
1583 sb_factory_.reset(new TestSafeBrowsingServiceFactory(url_prefix.spec())); | 1558 embedded_test_server()->GetURL("/testpath").spec(), sb_factory_.get()); |
1584 SafeBrowsingService::RegisterFactory(sb_factory_.get()); | 1559 SafeBrowsingService::RegisterFactory(sb_factory_.get()); |
1585 | 1560 |
1586 InProcessBrowserTest::SetUp(); | 1561 InProcessBrowserTest::SetUp(); |
1587 } | 1562 } |
1588 | 1563 |
1589 void TearDown() override { | 1564 void TearDown() override { |
1590 InProcessBrowserTest::TearDown(); | 1565 InProcessBrowserTest::TearDown(); |
1591 | 1566 |
1592 SafeBrowsingService::RegisterFactory(NULL); | 1567 SafeBrowsingService::RegisterFactory(NULL); |
1593 } | 1568 } |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1627 return false; | 1602 return false; |
1628 } | 1603 } |
1629 if (!smt.BindString(0, embedded_test_server()->base_url().host())) { | 1604 if (!smt.BindString(0, embedded_test_server()->base_url().host())) { |
1630 EXPECT_TRUE(false); | 1605 EXPECT_TRUE(false); |
1631 return false; | 1606 return false; |
1632 } | 1607 } |
1633 if (!smt.Run()) { | 1608 if (!smt.Run()) { |
1634 EXPECT_TRUE(false); | 1609 EXPECT_TRUE(false); |
1635 return false; | 1610 return false; |
1636 } | 1611 } |
1637 | |
1638 return InProcessBrowserTest::SetUpUserDataDirectory(); | 1612 return InProcessBrowserTest::SetUpUserDataDirectory(); |
1639 } | 1613 } |
1640 | 1614 |
1641 void TearDownInProcessBrowserTestFixture() override { | 1615 void TearDownInProcessBrowserTestFixture() override { |
1642 InProcessBrowserTest::TearDownInProcessBrowserTestFixture(); | 1616 InProcessBrowserTest::TearDownInProcessBrowserTestFixture(); |
1643 | 1617 |
1644 sql::Connection db; | 1618 sql::Connection db; |
1645 base::FilePath cookie_path( | 1619 base::FilePath cookie_path( |
1646 SafeBrowsingService::GetCookieFilePathForTesting()); | 1620 SafeBrowsingService::GetCookieFilePathForTesting()); |
1647 ASSERT_TRUE(db.Open(cookie_path)); | 1621 ASSERT_TRUE(db.Open(cookie_path)); |
1648 | 1622 |
1649 sql::Statement smt( | 1623 sql::Statement smt( |
1650 db.GetUniqueStatement("SELECT name, value FROM cookies ORDER BY name")); | 1624 db.GetUniqueStatement("SELECT name, value FROM cookies ORDER BY name")); |
1651 ASSERT_TRUE(smt.is_valid()); | 1625 ASSERT_TRUE(smt.is_valid()); |
1652 | |
1653 ASSERT_TRUE(smt.Step()); | 1626 ASSERT_TRUE(smt.Step()); |
1654 ASSERT_EQ("a", smt.ColumnString(0)); | 1627 ASSERT_EQ("a", smt.ColumnString(0)); |
1655 ASSERT_EQ("b", smt.ColumnString(1)); | 1628 ASSERT_EQ("b", smt.ColumnString(1)); |
1656 ASSERT_TRUE(smt.Step()); | 1629 ASSERT_TRUE(smt.Step()); |
1657 ASSERT_EQ("c", smt.ColumnString(0)); | 1630 ASSERT_EQ("c", smt.ColumnString(0)); |
1658 ASSERT_EQ("d", smt.ColumnString(1)); | 1631 ASSERT_EQ("d", smt.ColumnString(1)); |
1659 EXPECT_FALSE(smt.Step()); | 1632 EXPECT_FALSE(smt.Step()); |
1660 } | 1633 } |
1661 | 1634 |
1662 void SetUpOnMainThread() override { | 1635 void ForceUpdate() { |
1663 sb_service_ = g_browser_process->safe_browsing_service(); | 1636 sb_factory_->test_safe_browsing_service()->protocol_manager() |
1664 ASSERT_TRUE(sb_service_.get() != NULL); | 1637 ->ForceScheduleNextUpdate(base::TimeDelta::FromSeconds(0)); |
1665 } | 1638 } |
1666 | 1639 |
1667 void TearDownOnMainThread() override { sb_service_ = NULL; } | 1640 std::unique_ptr<TestSafeBrowsingServiceFactory> sb_factory_; |
1668 | 1641 |
1669 void ForceUpdate() { | 1642 protected: |
1670 sb_service_->protocol_manager()->ForceScheduleNextUpdate( | |
1671 base::TimeDelta::FromSeconds(0)); | |
1672 } | |
1673 | |
1674 scoped_refptr<SafeBrowsingService> sb_service_; | |
1675 | |
1676 private: | |
1677 static std::unique_ptr<net::test_server::HttpResponse> HandleRequest( | 1643 static std::unique_ptr<net::test_server::HttpResponse> HandleRequest( |
1678 const net::test_server::HttpRequest& request) { | 1644 const net::test_server::HttpRequest& request) { |
1679 if (!base::StartsWith(request.relative_url, "/testpath/", | 1645 if (!base::StartsWith(request.relative_url, "/testpath/", |
1680 base::CompareCase::SENSITIVE)) { | 1646 base::CompareCase::SENSITIVE)) { |
1681 ADD_FAILURE() << "bad path"; | 1647 ADD_FAILURE() << "bad path"; |
1682 return nullptr; | 1648 return nullptr; |
1683 } | 1649 } |
1684 | 1650 |
1685 auto cookie_it = request.headers.find("Cookie"); | 1651 auto cookie_it = request.headers.find("Cookie"); |
1686 if (cookie_it == request.headers.end()) { | 1652 if (cookie_it == request.headers.end()) { |
(...skipping 17 matching lines...) Expand all Loading... |
1704 | 1670 |
1705 std::unique_ptr<net::test_server::BasicHttpResponse> http_response( | 1671 std::unique_ptr<net::test_server::BasicHttpResponse> http_response( |
1706 new net::test_server::BasicHttpResponse()); | 1672 new net::test_server::BasicHttpResponse()); |
1707 http_response->set_content("foo"); | 1673 http_response->set_content("foo"); |
1708 http_response->set_content_type("text/plain"); | 1674 http_response->set_content_type("text/plain"); |
1709 http_response->AddCustomHeader( | 1675 http_response->AddCustomHeader( |
1710 "Set-Cookie", "c=d; Expires=Fri, 01 Jan 2038 01:01:01 GMT"); | 1676 "Set-Cookie", "c=d; Expires=Fri, 01 Jan 2038 01:01:01 GMT"); |
1711 return std::move(http_response); | 1677 return std::move(http_response); |
1712 } | 1678 } |
1713 | 1679 |
1714 std::unique_ptr<TestSafeBrowsingServiceFactory> sb_factory_; | |
1715 | |
1716 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingDatabaseManagerCookieTest); | 1680 DISALLOW_COPY_AND_ASSIGN(SafeBrowsingDatabaseManagerCookieTest); |
1717 }; | 1681 }; |
1718 | 1682 |
1719 // Test that a Local Safe Browsing database update request both sends cookies | 1683 // Test that a Local Safe Browsing database update request both sends cookies |
1720 // and can save cookies. | 1684 // and can save cookies. |
1721 IN_PROC_BROWSER_TEST_F(SafeBrowsingDatabaseManagerCookieTest, | 1685 IN_PROC_BROWSER_TEST_F(SafeBrowsingDatabaseManagerCookieTest, |
1722 TestSBUpdateCookies) { | 1686 TestSBUpdateCookies) { |
1723 content::WindowedNotificationObserver observer( | 1687 content::WindowedNotificationObserver observer( |
1724 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE, | 1688 chrome::NOTIFICATION_SAFE_BROWSING_UPDATE_COMPLETE, |
1725 content::Source<SafeBrowsingDatabaseManager>( | 1689 content::Source<SafeBrowsingDatabaseManager>( |
1726 sb_service_->database_manager().get())); | 1690 sb_factory_->test_safe_browsing_service()->database_manager().get())); |
1727 BrowserThread::PostTask( | 1691 BrowserThread::PostTask( |
1728 BrowserThread::IO, FROM_HERE, | 1692 BrowserThread::IO, FROM_HERE, |
1729 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::ForceUpdate, this)); | 1693 base::Bind(&SafeBrowsingDatabaseManagerCookieTest::ForceUpdate, this)); |
1730 observer.Wait(); | 1694 observer.Wait(); |
1731 } | 1695 } |
1732 | 1696 |
1733 } // namespace safe_browsing | 1697 } // namespace safe_browsing |
OLD | NEW |