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 #include <deque> | 5 #include <deque> |
6 #include <vector> | 6 #include <vector> |
7 | 7 |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 using content::NavigationController; | 119 using content::NavigationController; |
120 using content::OpenURLParams; | 120 using content::OpenURLParams; |
121 using content::Referrer; | 121 using content::Referrer; |
122 using content::RenderFrameHost; | 122 using content::RenderFrameHost; |
123 using content::RenderViewHost; | 123 using content::RenderViewHost; |
124 using content::RenderWidgetHost; | 124 using content::RenderWidgetHost; |
125 using content::TestNavigationObserver; | 125 using content::TestNavigationObserver; |
126 using content::WebContents; | 126 using content::WebContents; |
127 using content::WebContentsObserver; | 127 using content::WebContentsObserver; |
128 using net::NetworkChangeNotifier; | 128 using net::NetworkChangeNotifier; |
| 129 using safe_browsing::LocalSafeBrowsingDatabaseManager; |
| 130 using safe_browsing::SafeBrowsingService; |
| 131 using safe_browsing::SBThreatType; |
129 using task_manager::browsertest_util::WaitForTaskManagerRows; | 132 using task_manager::browsertest_util::WaitForTaskManagerRows; |
130 | 133 |
131 // Prerender tests work as follows: | 134 // Prerender tests work as follows: |
132 // | 135 // |
133 // A page with a prefetch link to the test page is loaded. Once prerendered, | 136 // A page with a prefetch link to the test page is loaded. Once prerendered, |
134 // its Javascript function DidPrerenderPass() is called, which returns true if | 137 // its Javascript function DidPrerenderPass() is called, which returns true if |
135 // the page behaves as expected when prerendered. | 138 // the page behaves as expected when prerendered. |
136 // | 139 // |
137 // The prerendered page is then displayed on a tab. The Javascript function | 140 // The prerendered page is then displayed on a tab. The Javascript function |
138 // DidDisplayPass() is called, and returns true if the page behaved as it | 141 // DidDisplayPass() is called, and returns true if the page behaved as it |
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
711 // because FakeSafeBrowsingDatabaseManager does not implement | 714 // because FakeSafeBrowsingDatabaseManager does not implement |
712 // LocalSafeBrowsingDatabaseManager. | 715 // LocalSafeBrowsingDatabaseManager. |
713 #if defined(FULL_SAFE_BROWSING) | 716 #if defined(FULL_SAFE_BROWSING) |
714 // A SafeBrowsingDatabaseManager implementation that returns a fixed result for | 717 // A SafeBrowsingDatabaseManager implementation that returns a fixed result for |
715 // a given URL. | 718 // a given URL. |
716 class FakeSafeBrowsingDatabaseManager | 719 class FakeSafeBrowsingDatabaseManager |
717 : public LocalSafeBrowsingDatabaseManager { | 720 : public LocalSafeBrowsingDatabaseManager { |
718 public: | 721 public: |
719 explicit FakeSafeBrowsingDatabaseManager(SafeBrowsingService* service) | 722 explicit FakeSafeBrowsingDatabaseManager(SafeBrowsingService* service) |
720 : LocalSafeBrowsingDatabaseManager(service), | 723 : LocalSafeBrowsingDatabaseManager(service), |
721 threat_type_(SB_THREAT_TYPE_SAFE) {} | 724 threat_type_(safe_browsing::SB_THREAT_TYPE_SAFE) {} |
722 | 725 |
723 // Called on the IO thread to check if the given url is safe or not. If we | 726 // Called on the IO thread to check if the given url is safe or not. If we |
724 // can synchronously determine that the url is safe, CheckUrl returns true. | 727 // can synchronously determine that the url is safe, CheckUrl returns true. |
725 // Otherwise it returns false, and "client" is called asynchronously with the | 728 // Otherwise it returns false, and "client" is called asynchronously with the |
726 // result when it is ready. | 729 // result when it is ready. |
727 // Returns true, indicating a SAFE result, unless the URL is the fixed URL | 730 // Returns true, indicating a SAFE result, unless the URL is the fixed URL |
728 // specified by the user, and the user-specified result is not SAFE | 731 // specified by the user, and the user-specified result is not SAFE |
729 // (in which that result will be communicated back via a call into the | 732 // (in which that result will be communicated back via a call into the |
730 // client, and false will be returned). | 733 // client, and false will be returned). |
731 // Overrides SafeBrowsingDatabaseManager::CheckBrowseUrl. | 734 // Overrides SafeBrowsingDatabaseManager::CheckBrowseUrl. |
732 bool CheckBrowseUrl(const GURL& gurl, Client* client) override { | 735 bool CheckBrowseUrl(const GURL& gurl, Client* client) override { |
733 if (gurl != url_ || threat_type_ == SB_THREAT_TYPE_SAFE) | 736 if (gurl != url_ || threat_type_ == safe_browsing::SB_THREAT_TYPE_SAFE) |
734 return true; | 737 return true; |
735 | 738 |
736 BrowserThread::PostTask( | 739 BrowserThread::PostTask( |
737 BrowserThread::IO, FROM_HERE, | 740 BrowserThread::IO, FROM_HERE, |
738 base::Bind(&FakeSafeBrowsingDatabaseManager::OnCheckBrowseURLDone, | 741 base::Bind(&FakeSafeBrowsingDatabaseManager::OnCheckBrowseURLDone, |
739 this, gurl, client)); | 742 this, gurl, client)); |
740 return false; | 743 return false; |
741 } | 744 } |
742 | 745 |
743 void SetThreatTypeForUrl(const GURL& url, SBThreatType threat_type) { | 746 void SetThreatTypeForUrl(const GURL& url, SBThreatType threat_type) { |
744 url_ = url; | 747 url_ = url; |
745 threat_type_ = threat_type; | 748 threat_type_ = threat_type; |
746 } | 749 } |
747 | 750 |
748 private: | 751 private: |
749 ~FakeSafeBrowsingDatabaseManager() override {} | 752 ~FakeSafeBrowsingDatabaseManager() override {} |
750 | 753 |
751 void OnCheckBrowseURLDone(const GURL& gurl, Client* client) { | 754 void OnCheckBrowseURLDone(const GURL& gurl, Client* client) { |
752 std::vector<SBThreatType> expected_threats; | 755 std::vector<SBThreatType> expected_threats; |
753 expected_threats.push_back(SB_THREAT_TYPE_URL_MALWARE); | 756 expected_threats.push_back(safe_browsing::SB_THREAT_TYPE_URL_MALWARE); |
754 expected_threats.push_back(SB_THREAT_TYPE_URL_PHISHING); | 757 expected_threats.push_back(safe_browsing::SB_THREAT_TYPE_URL_PHISHING); |
755 // TODO(nparker): Replace SafeBrowsingCheck w/ a call to | 758 // TODO(nparker): Replace SafeBrowsingCheck w/ a call to |
756 // client->OnCheckBrowseUrlResult() | 759 // client->OnCheckBrowseUrlResult() |
757 LocalSafeBrowsingDatabaseManager::SafeBrowsingCheck sb_check( | 760 LocalSafeBrowsingDatabaseManager::SafeBrowsingCheck sb_check( |
758 std::vector<GURL>(1, gurl), | 761 std::vector<GURL>(1, gurl), |
759 std::vector<SBFullHash>(), | 762 std::vector<safe_browsing::SBFullHash>(), |
760 client, | 763 client, |
761 safe_browsing::MALWARE, | 764 safe_browsing::MALWARE, |
762 expected_threats); | 765 expected_threats); |
763 sb_check.url_results[0] = threat_type_; | 766 sb_check.url_results[0] = threat_type_; |
764 sb_check.OnSafeBrowsingResult(); | 767 sb_check.OnSafeBrowsingResult(); |
765 } | 768 } |
766 | 769 |
767 GURL url_; | 770 GURL url_; |
768 SBThreatType threat_type_; | 771 SBThreatType threat_type_; |
769 DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingDatabaseManager); | 772 DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingDatabaseManager); |
770 }; | 773 }; |
771 | 774 |
772 class FakeSafeBrowsingService : public SafeBrowsingService { | 775 class FakeSafeBrowsingService : public SafeBrowsingService { |
773 public: | 776 public: |
774 FakeSafeBrowsingService() { } | 777 FakeSafeBrowsingService() { } |
775 | 778 |
776 // Returned pointer has the same lifespan as the database_manager_ refcounted | 779 // Returned pointer has the same lifespan as the database_manager_ refcounted |
777 // object. | 780 // object. |
778 FakeSafeBrowsingDatabaseManager* fake_database_manager() { | 781 FakeSafeBrowsingDatabaseManager* fake_database_manager() { |
779 return fake_database_manager_; | 782 return fake_database_manager_; |
780 } | 783 } |
781 | 784 |
782 protected: | 785 protected: |
783 ~FakeSafeBrowsingService() override {} | 786 ~FakeSafeBrowsingService() override {} |
784 | 787 |
785 SafeBrowsingDatabaseManager* CreateDatabaseManager() override { | 788 safe_browsing::SafeBrowsingDatabaseManager* CreateDatabaseManager() override { |
786 fake_database_manager_ = new FakeSafeBrowsingDatabaseManager(this); | 789 fake_database_manager_ = new FakeSafeBrowsingDatabaseManager(this); |
787 return fake_database_manager_; | 790 return fake_database_manager_; |
788 } | 791 } |
789 | 792 |
790 private: | 793 private: |
791 FakeSafeBrowsingDatabaseManager* fake_database_manager_; | 794 FakeSafeBrowsingDatabaseManager* fake_database_manager_; |
792 | 795 |
793 DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingService); | 796 DISALLOW_COPY_AND_ASSIGN(FakeSafeBrowsingService); |
794 }; | 797 }; |
795 | 798 |
796 // Factory that creates FakeSafeBrowsingService instances. | 799 // Factory that creates FakeSafeBrowsingService instances. |
797 class TestSafeBrowsingServiceFactory : public SafeBrowsingServiceFactory { | 800 class TestSafeBrowsingServiceFactory |
| 801 : public safe_browsing::SafeBrowsingServiceFactory { |
798 public: | 802 public: |
799 TestSafeBrowsingServiceFactory() : | 803 TestSafeBrowsingServiceFactory() : |
800 most_recent_service_(NULL) { } | 804 most_recent_service_(NULL) { } |
801 ~TestSafeBrowsingServiceFactory() override {} | 805 ~TestSafeBrowsingServiceFactory() override {} |
802 | 806 |
803 SafeBrowsingService* CreateSafeBrowsingService() override { | 807 SafeBrowsingService* CreateSafeBrowsingService() override { |
804 most_recent_service_ = new FakeSafeBrowsingService(); | 808 most_recent_service_ = new FakeSafeBrowsingService(); |
805 return most_recent_service_; | 809 return most_recent_service_; |
806 } | 810 } |
807 | 811 |
(...skipping 2233 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3041 FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, | 3045 FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, |
3042 0); | 3046 0); |
3043 } | 3047 } |
3044 | 3048 |
3045 #if defined(FULL_SAFE_BROWSING) | 3049 #if defined(FULL_SAFE_BROWSING) |
3046 // Ensures that we do not prerender pages with a safe browsing | 3050 // Ensures that we do not prerender pages with a safe browsing |
3047 // interstitial. | 3051 // interstitial. |
3048 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSafeBrowsingTopLevel) { | 3052 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSafeBrowsingTopLevel) { |
3049 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); | 3053 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); |
3050 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( | 3054 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( |
3051 url, SB_THREAT_TYPE_URL_MALWARE); | 3055 url, safe_browsing::SB_THREAT_TYPE_URL_MALWARE); |
3052 PrerenderTestURL("files/prerender/prerender_page.html", | 3056 PrerenderTestURL("files/prerender/prerender_page.html", |
3053 FINAL_STATUS_SAFE_BROWSING, 0); | 3057 FINAL_STATUS_SAFE_BROWSING, 0); |
3054 } | 3058 } |
3055 | 3059 |
3056 // Ensures that server redirects to a malware page will cancel prerenders. | 3060 // Ensures that server redirects to a malware page will cancel prerenders. |
3057 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3061 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
3058 PrerenderSafeBrowsingServerRedirect) { | 3062 PrerenderSafeBrowsingServerRedirect) { |
3059 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); | 3063 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); |
3060 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( | 3064 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( |
3061 url, SB_THREAT_TYPE_URL_MALWARE); | 3065 url, safe_browsing::SB_THREAT_TYPE_URL_MALWARE); |
3062 PrerenderTestURL(CreateServerRedirect("files/prerender/prerender_page.html"), | 3066 PrerenderTestURL(CreateServerRedirect("files/prerender/prerender_page.html"), |
3063 FINAL_STATUS_SAFE_BROWSING, | 3067 FINAL_STATUS_SAFE_BROWSING, |
3064 0); | 3068 0); |
3065 } | 3069 } |
3066 | 3070 |
3067 // Ensures that client redirects to a malware page will cancel prerenders. | 3071 // Ensures that client redirects to a malware page will cancel prerenders. |
3068 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 3072 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
3069 PrerenderSafeBrowsingClientRedirect) { | 3073 PrerenderSafeBrowsingClientRedirect) { |
3070 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); | 3074 GURL url = test_server()->GetURL("files/prerender/prerender_page.html"); |
3071 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( | 3075 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( |
3072 url, SB_THREAT_TYPE_URL_MALWARE); | 3076 url, safe_browsing::SB_THREAT_TYPE_URL_MALWARE); |
3073 PrerenderTestURL(CreateClientRedirect("files/prerender/prerender_page.html"), | 3077 PrerenderTestURL(CreateClientRedirect("files/prerender/prerender_page.html"), |
3074 FINAL_STATUS_SAFE_BROWSING, | 3078 FINAL_STATUS_SAFE_BROWSING, |
3075 1); | 3079 1); |
3076 } | 3080 } |
3077 | 3081 |
3078 // Ensures that we do not prerender pages which have a malware subresource. | 3082 // Ensures that we do not prerender pages which have a malware subresource. |
3079 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSafeBrowsingSubresource) { | 3083 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSafeBrowsingSubresource) { |
3080 GURL image_url = test_server()->GetURL("files/prerender/image.jpeg"); | 3084 GURL image_url = test_server()->GetURL("files/prerender/image.jpeg"); |
3081 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( | 3085 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( |
3082 image_url, SB_THREAT_TYPE_URL_MALWARE); | 3086 image_url, safe_browsing::SB_THREAT_TYPE_URL_MALWARE); |
3083 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 3087 std::vector<net::SpawnedTestServer::StringPair> replacement_text; |
3084 replacement_text.push_back( | 3088 replacement_text.push_back( |
3085 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); | 3089 std::make_pair("REPLACE_WITH_IMAGE_URL", image_url.spec())); |
3086 std::string replacement_path; | 3090 std::string replacement_path; |
3087 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( | 3091 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( |
3088 "files/prerender/prerender_with_image.html", | 3092 "files/prerender/prerender_with_image.html", |
3089 replacement_text, | 3093 replacement_text, |
3090 &replacement_path)); | 3094 &replacement_path)); |
3091 PrerenderTestURL(replacement_path, | 3095 PrerenderTestURL(replacement_path, |
3092 FINAL_STATUS_SAFE_BROWSING, | 3096 FINAL_STATUS_SAFE_BROWSING, |
3093 0); | 3097 0); |
3094 } | 3098 } |
3095 | 3099 |
3096 // Ensures that we do not prerender pages which have a malware iframe. | 3100 // Ensures that we do not prerender pages which have a malware iframe. |
3097 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSafeBrowsingIframe) { | 3101 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSafeBrowsingIframe) { |
3098 GURL iframe_url = test_server()->GetURL( | 3102 GURL iframe_url = test_server()->GetURL( |
3099 "files/prerender/prerender_embedded_content.html"); | 3103 "files/prerender/prerender_embedded_content.html"); |
3100 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( | 3104 GetFakeSafeBrowsingDatabaseManager()->SetThreatTypeForUrl( |
3101 iframe_url, SB_THREAT_TYPE_URL_MALWARE); | 3105 iframe_url, safe_browsing::SB_THREAT_TYPE_URL_MALWARE); |
3102 std::vector<net::SpawnedTestServer::StringPair> replacement_text; | 3106 std::vector<net::SpawnedTestServer::StringPair> replacement_text; |
3103 replacement_text.push_back( | 3107 replacement_text.push_back( |
3104 std::make_pair("REPLACE_WITH_URL", iframe_url.spec())); | 3108 std::make_pair("REPLACE_WITH_URL", iframe_url.spec())); |
3105 std::string replacement_path; | 3109 std::string replacement_path; |
3106 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( | 3110 ASSERT_TRUE(net::SpawnedTestServer::GetFilePathWithReplacements( |
3107 "files/prerender/prerender_with_iframe.html", | 3111 "files/prerender/prerender_with_iframe.html", |
3108 replacement_text, | 3112 replacement_text, |
3109 &replacement_path)); | 3113 &replacement_path)); |
3110 PrerenderTestURL(replacement_path, | 3114 PrerenderTestURL(replacement_path, |
3111 FINAL_STATUS_SAFE_BROWSING, | 3115 FINAL_STATUS_SAFE_BROWSING, |
(...skipping 1051 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4163 | 4167 |
4164 NavigateToDestURL(); | 4168 NavigateToDestURL(); |
4165 EXPECT_EQ(1U, task_manager.tasks().size()); | 4169 EXPECT_EQ(1U, task_manager.tasks().size()); |
4166 } | 4170 } |
4167 | 4171 |
4168 } // namespace | 4172 } // namespace |
4169 | 4173 |
4170 #endif // defined(ENABLE_TASK_MANAGER) | 4174 #endif // defined(ENABLE_TASK_MANAGER) |
4171 | 4175 |
4172 } // namespace prerender | 4176 } // namespace prerender |
OLD | NEW |