| 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 |