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 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 #include "extensions/common/switches.h" | 86 #include "extensions/common/switches.h" |
87 #include "grit/generated_resources.h" | 87 #include "grit/generated_resources.h" |
88 #include "net/base/escape.h" | 88 #include "net/base/escape.h" |
89 #include "net/cert/x509_certificate.h" | 89 #include "net/cert/x509_certificate.h" |
90 #include "net/dns/mock_host_resolver.h" | 90 #include "net/dns/mock_host_resolver.h" |
91 #include "net/ssl/client_cert_store.h" | 91 #include "net/ssl/client_cert_store.h" |
92 #include "net/ssl/ssl_cert_request_info.h" | 92 #include "net/ssl/ssl_cert_request_info.h" |
93 #include "net/url_request/url_request_context.h" | 93 #include "net/url_request/url_request_context.h" |
94 #include "net/url_request/url_request_context_getter.h" | 94 #include "net/url_request/url_request_context_getter.h" |
95 #include "net/url_request/url_request_filter.h" | 95 #include "net/url_request/url_request_filter.h" |
| 96 #include "net/url_request/url_request_interceptor.h" |
96 #include "net/url_request/url_request_job.h" | 97 #include "net/url_request/url_request_job.h" |
97 #include "ui/base/l10n/l10n_util.h" | 98 #include "ui/base/l10n/l10n_util.h" |
98 #include "url/gurl.h" | 99 #include "url/gurl.h" |
99 | 100 |
100 using content::BrowserThread; | 101 using content::BrowserThread; |
101 using content::DevToolsAgentHost; | 102 using content::DevToolsAgentHost; |
102 using content::DevToolsClientHost; | 103 using content::DevToolsClientHost; |
103 using content::DevToolsManager; | 104 using content::DevToolsManager; |
104 using content::NavigationController; | 105 using content::NavigationController; |
105 using content::OpenURLParams; | 106 using content::OpenURLParams; |
(...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
771 net::NetworkDelegate* network_delegate) | 772 net::NetworkDelegate* network_delegate) |
772 : net::URLRequestJob(request, network_delegate) { | 773 : net::URLRequestJob(request, network_delegate) { |
773 } | 774 } |
774 | 775 |
775 virtual void Start() OVERRIDE {} | 776 virtual void Start() OVERRIDE {} |
776 | 777 |
777 private: | 778 private: |
778 virtual ~HangingURLRequestJob() {} | 779 virtual ~HangingURLRequestJob() {} |
779 }; | 780 }; |
780 | 781 |
781 class HangingFirstRequestProtocolHandler | 782 class HangingFirstRequestInterceptor : public net::URLRequestInterceptor { |
782 : public net::URLRequestJobFactory::ProtocolHandler { | |
783 public: | 783 public: |
784 HangingFirstRequestProtocolHandler(const base::FilePath& file, | 784 HangingFirstRequestInterceptor(const base::FilePath& file, |
785 base::Closure callback) | 785 base::Closure callback) |
786 : file_(file), | 786 : file_(file), |
787 callback_(callback), | 787 callback_(callback), |
788 first_run_(true) { | 788 first_run_(true) { |
789 } | 789 } |
790 virtual ~HangingFirstRequestProtocolHandler() {} | 790 virtual ~HangingFirstRequestInterceptor() {} |
791 | 791 |
792 virtual net::URLRequestJob* MaybeCreateJob( | 792 virtual net::URLRequestJob* MaybeInterceptRequest( |
793 net::URLRequest* request, | 793 net::URLRequest* request, |
794 net::NetworkDelegate* network_delegate) const OVERRIDE { | 794 net::NetworkDelegate* network_delegate) const OVERRIDE { |
795 if (first_run_) { | 795 if (first_run_) { |
796 first_run_ = false; | 796 first_run_ = false; |
797 if (!callback_.is_null()) { | 797 if (!callback_.is_null()) { |
798 BrowserThread::PostTask( | 798 BrowserThread::PostTask( |
799 BrowserThread::UI, FROM_HERE, callback_); | 799 BrowserThread::UI, FROM_HERE, callback_); |
800 } | 800 } |
801 return new HangingURLRequestJob(request, network_delegate); | 801 return new HangingURLRequestJob(request, network_delegate); |
802 } | 802 } |
803 return new content::URLRequestMockHTTPJob(request, network_delegate, file_); | 803 return new content::URLRequestMockHTTPJob(request, network_delegate, file_); |
804 } | 804 } |
805 | 805 |
806 private: | 806 private: |
807 base::FilePath file_; | 807 base::FilePath file_; |
808 base::Closure callback_; | 808 base::Closure callback_; |
809 mutable bool first_run_; | 809 mutable bool first_run_; |
810 }; | 810 }; |
811 | 811 |
812 // Makes |url| never respond on the first load, and then with the contents of | 812 // Makes |url| never respond on the first load, and then with the contents of |
813 // |file| afterwards. When the first load has been scheduled, runs |callback| on | 813 // |file| afterwards. When the first load has been scheduled, runs |callback| on |
814 // the UI thread. | 814 // the UI thread. |
815 void CreateHangingFirstRequestProtocolHandlerOnIO(const GURL& url, | 815 void CreateHangingFirstRequestInterceptorOnIO( |
816 const base::FilePath& file, | 816 const GURL& url, const base::FilePath& file, base::Closure callback) { |
817 base::Closure callback) { | |
818 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 817 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
819 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> never_respond_handler( | 818 scoped_ptr<net::URLRequestInterceptor> never_respond_handler( |
820 new HangingFirstRequestProtocolHandler(file, callback)); | 819 new HangingFirstRequestInterceptor(file, callback)); |
821 net::URLRequestFilter::GetInstance()->AddUrlProtocolHandler( | 820 net::URLRequestFilter::GetInstance()->AddUrlInterceptor( |
822 url, never_respond_handler.Pass()); | 821 url, never_respond_handler.Pass()); |
823 } | 822 } |
824 | 823 |
825 // Wrapper over URLRequestMockHTTPJob that exposes extra callbacks. | 824 // Wrapper over URLRequestMockHTTPJob that exposes extra callbacks. |
826 class MockHTTPJob : public content::URLRequestMockHTTPJob { | 825 class MockHTTPJob : public content::URLRequestMockHTTPJob { |
827 public: | 826 public: |
828 MockHTTPJob(net::URLRequest* request, | 827 MockHTTPJob(net::URLRequest* request, |
829 net::NetworkDelegate* delegate, | 828 net::NetworkDelegate* delegate, |
830 const base::FilePath& file) | 829 const base::FilePath& file) |
831 : content::URLRequestMockHTTPJob(request, delegate, file) { | 830 : content::URLRequestMockHTTPJob(request, delegate, file) { |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
872 | 871 |
873 EXPECT_EQ(expected_count, count_); | 872 EXPECT_EQ(expected_count, count_); |
874 } | 873 } |
875 private: | 874 private: |
876 int count_; | 875 int count_; |
877 int expected_count_; | 876 int expected_count_; |
878 scoped_ptr<base::RunLoop> loop_; | 877 scoped_ptr<base::RunLoop> loop_; |
879 }; | 878 }; |
880 | 879 |
881 // Protocol handler which counts the number of requests that start. | 880 // Protocol handler which counts the number of requests that start. |
882 class CountingProtocolHandler | 881 class CountingInterceptor : public net::URLRequestInterceptor { |
883 : public net::URLRequestJobFactory::ProtocolHandler { | |
884 public: | 882 public: |
885 CountingProtocolHandler(const base::FilePath& file, | 883 CountingInterceptor(const base::FilePath& file, |
886 const base::WeakPtr<RequestCounter>& counter) | 884 const base::WeakPtr<RequestCounter>& counter) |
887 : file_(file), | 885 : file_(file), |
888 counter_(counter), | 886 counter_(counter), |
889 weak_factory_(this) { | 887 weak_factory_(this) { |
890 } | 888 } |
891 virtual ~CountingProtocolHandler() {} | 889 virtual ~CountingInterceptor() {} |
892 | 890 |
893 virtual net::URLRequestJob* MaybeCreateJob( | 891 virtual net::URLRequestJob* MaybeInterceptRequest( |
894 net::URLRequest* request, | 892 net::URLRequest* request, |
895 net::NetworkDelegate* network_delegate) const OVERRIDE { | 893 net::NetworkDelegate* network_delegate) const OVERRIDE { |
896 MockHTTPJob* job = new MockHTTPJob(request, network_delegate, file_); | 894 MockHTTPJob* job = new MockHTTPJob(request, network_delegate, file_); |
897 job->set_start_callback(base::Bind(&CountingProtocolHandler::RequestStarted, | 895 job->set_start_callback(base::Bind(&CountingInterceptor::RequestStarted, |
898 weak_factory_.GetWeakPtr())); | 896 weak_factory_.GetWeakPtr())); |
899 return job; | 897 return job; |
900 } | 898 } |
901 | 899 |
902 void RequestStarted() { | 900 void RequestStarted() { |
903 BrowserThread::PostTask( | 901 BrowserThread::PostTask( |
904 BrowserThread::UI, FROM_HERE, | 902 BrowserThread::UI, FROM_HERE, |
905 base::Bind(&RequestCounter::RequestStarted, counter_)); | 903 base::Bind(&RequestCounter::RequestStarted, counter_)); |
906 } | 904 } |
907 | 905 |
908 private: | 906 private: |
909 base::FilePath file_; | 907 base::FilePath file_; |
910 base::WeakPtr<RequestCounter> counter_; | 908 base::WeakPtr<RequestCounter> counter_; |
911 mutable base::WeakPtrFactory<CountingProtocolHandler> weak_factory_; | 909 mutable base::WeakPtrFactory<CountingInterceptor> weak_factory_; |
912 }; | 910 }; |
913 | 911 |
914 // Makes |url| respond to requests with the contents of |file|, counting the | 912 // Makes |url| respond to requests with the contents of |file|, counting the |
915 // number that start in |counter|. | 913 // number that start in |counter|. |
916 void CreateCountingProtocolHandlerOnIO( | 914 void CreateCountingInterceptorOnIO( |
917 const GURL& url, | 915 const GURL& url, |
918 const base::FilePath& file, | 916 const base::FilePath& file, |
919 const base::WeakPtr<RequestCounter>& counter) { | 917 const base::WeakPtr<RequestCounter>& counter) { |
920 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 918 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
921 scoped_ptr<net::URLRequestJobFactory::ProtocolHandler> protocol_handler( | 919 scoped_ptr<net::URLRequestInterceptor> request_interceptor( |
922 new CountingProtocolHandler(file, counter)); | 920 new CountingInterceptor(file, counter)); |
923 net::URLRequestFilter::GetInstance()->AddUrlProtocolHandler( | 921 net::URLRequestFilter::GetInstance()->AddUrlInterceptor( |
924 url, protocol_handler.Pass()); | 922 url, request_interceptor.Pass()); |
925 } | 923 } |
926 | 924 |
927 // Makes |url| respond to requests with the contents of |file|. | 925 // Makes |url| respond to requests with the contents of |file|. |
928 void CreateMockProtocolHandlerOnIO(const GURL& url, | 926 void CreateMockInterceptorOnIO(const GURL& url, const base::FilePath& file) { |
929 const base::FilePath& file) { | |
930 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 927 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
931 net::URLRequestFilter::GetInstance()->AddUrlProtocolHandler( | 928 net::URLRequestFilter::GetInstance()->AddUrlInterceptor( |
932 url, content::URLRequestMockHTTPJob::CreateProtocolHandlerForSingleFile( | 929 url, |
933 file)); | 930 content::URLRequestMockHTTPJob::CreateInterceptorForSingleFile(file)); |
934 } | 931 } |
935 | 932 |
936 // A ContentBrowserClient that cancels all prerenderers on OpenURL. | 933 // A ContentBrowserClient that cancels all prerenderers on OpenURL. |
937 class TestContentBrowserClient : public chrome::ChromeContentBrowserClient { | 934 class TestContentBrowserClient : public chrome::ChromeContentBrowserClient { |
938 public: | 935 public: |
939 TestContentBrowserClient() {} | 936 TestContentBrowserClient() {} |
940 virtual ~TestContentBrowserClient() {} | 937 virtual ~TestContentBrowserClient() {} |
941 | 938 |
942 // chrome::ChromeContentBrowserClient implementation. | 939 // chrome::ChromeContentBrowserClient implementation. |
943 virtual bool ShouldAllowOpenURL(content::SiteInstance* site_instance, | 940 virtual bool ShouldAllowOpenURL(content::SiteInstance* site_instance, |
(...skipping 946 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1890 // Checks that the prerendering of a page is canceled correctly if we try to | 1887 // Checks that the prerendering of a page is canceled correctly if we try to |
1891 // swap it in before it commits. | 1888 // swap it in before it commits. |
1892 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNoCommitNoSwap) { | 1889 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNoCommitNoSwap) { |
1893 // Navigate to a page that triggers a prerender for a URL that never commits. | 1890 // Navigate to a page that triggers a prerender for a URL that never commits. |
1894 const GURL kNoCommitUrl("http://never-respond.example.com"); | 1891 const GURL kNoCommitUrl("http://never-respond.example.com"); |
1895 base::FilePath file(GetTestPath("prerender_page.html")); | 1892 base::FilePath file(GetTestPath("prerender_page.html")); |
1896 | 1893 |
1897 base::RunLoop prerender_start_loop; | 1894 base::RunLoop prerender_start_loop; |
1898 BrowserThread::PostTask( | 1895 BrowserThread::PostTask( |
1899 BrowserThread::IO, FROM_HERE, | 1896 BrowserThread::IO, FROM_HERE, |
1900 base::Bind(&CreateHangingFirstRequestProtocolHandlerOnIO, | 1897 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, kNoCommitUrl, file, |
1901 kNoCommitUrl, file, prerender_start_loop.QuitClosure())); | 1898 prerender_start_loop.QuitClosure())); |
1902 DisableJavascriptCalls(); | 1899 DisableJavascriptCalls(); |
1903 PrerenderTestURL(kNoCommitUrl, | 1900 PrerenderTestURL(kNoCommitUrl, |
1904 FINAL_STATUS_NAVIGATION_UNCOMMITTED, | 1901 FINAL_STATUS_NAVIGATION_UNCOMMITTED, |
1905 0); | 1902 0); |
1906 // Wait for the hanging request to be scheduled. | 1903 // Wait for the hanging request to be scheduled. |
1907 prerender_start_loop.Run(); | 1904 prerender_start_loop.Run(); |
1908 | 1905 |
1909 // Navigate to the URL, but assume the contents won't be swapped in. | 1906 // Navigate to the URL, but assume the contents won't be swapped in. |
1910 NavigateToDestURLWithDisposition(CURRENT_TAB, false); | 1907 NavigateToDestURLWithDisposition(CURRENT_TAB, false); |
1911 } | 1908 } |
1912 | 1909 |
1913 // Checks that client redirects don't add alias URLs until after they commit. | 1910 // Checks that client redirects don't add alias URLs until after they commit. |
1914 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNoCommitNoSwap2) { | 1911 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderNoCommitNoSwap2) { |
1915 // Navigate to a page that then navigates to a URL that never commits. | 1912 // Navigate to a page that then navigates to a URL that never commits. |
1916 const GURL kNoCommitUrl("http://never-respond.example.com"); | 1913 const GURL kNoCommitUrl("http://never-respond.example.com"); |
1917 base::FilePath file(GetTestPath("prerender_page.html")); | 1914 base::FilePath file(GetTestPath("prerender_page.html")); |
1918 | 1915 |
1919 base::RunLoop prerender_start_loop; | 1916 base::RunLoop prerender_start_loop; |
1920 BrowserThread::PostTask( | 1917 BrowserThread::PostTask( |
1921 BrowserThread::IO, FROM_HERE, | 1918 BrowserThread::IO, FROM_HERE, |
1922 base::Bind(&CreateHangingFirstRequestProtocolHandlerOnIO, | 1919 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, kNoCommitUrl, file, |
1923 kNoCommitUrl, file, prerender_start_loop.QuitClosure())); | 1920 prerender_start_loop.QuitClosure())); |
1924 DisableJavascriptCalls(); | 1921 DisableJavascriptCalls(); |
1925 PrerenderTestURL(CreateClientRedirect(kNoCommitUrl.spec()), | 1922 PrerenderTestURL(CreateClientRedirect(kNoCommitUrl.spec()), |
1926 FINAL_STATUS_APP_TERMINATING, 1); | 1923 FINAL_STATUS_APP_TERMINATING, 1); |
1927 // Wait for the hanging request to be scheduled. | 1924 // Wait for the hanging request to be scheduled. |
1928 prerender_start_loop.Run(); | 1925 prerender_start_loop.Run(); |
1929 | 1926 |
1930 // Navigating to the second URL should not swap. | 1927 // Navigating to the second URL should not swap. |
1931 NavigateToURLWithDisposition(kNoCommitUrl, CURRENT_TAB, false); | 1928 NavigateToURLWithDisposition(kNoCommitUrl, CURRENT_TAB, false); |
1932 } | 1929 } |
1933 | 1930 |
(...skipping 1182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3116 // Checks that when a prerendered page is swapped in to a referring page, the | 3113 // Checks that when a prerendered page is swapped in to a referring page, the |
3117 // unload handlers on the referring page are executed. | 3114 // unload handlers on the referring page are executed. |
3118 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderUnload) { | 3115 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderUnload) { |
3119 // Matches URL in prerender_loader_with_unload.html. | 3116 // Matches URL in prerender_loader_with_unload.html. |
3120 const GURL unload_url("http://unload-url.test"); | 3117 const GURL unload_url("http://unload-url.test"); |
3121 base::FilePath empty_file = ui_test_utils::GetTestFilePath( | 3118 base::FilePath empty_file = ui_test_utils::GetTestFilePath( |
3122 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); | 3119 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); |
3123 RequestCounter unload_counter; | 3120 RequestCounter unload_counter; |
3124 BrowserThread::PostTask( | 3121 BrowserThread::PostTask( |
3125 BrowserThread::IO, FROM_HERE, | 3122 BrowserThread::IO, FROM_HERE, |
3126 base::Bind(&CreateCountingProtocolHandlerOnIO, | 3123 base::Bind(&CreateCountingInterceptorOnIO, |
3127 unload_url, empty_file, unload_counter.AsWeakPtr())); | 3124 unload_url, empty_file, unload_counter.AsWeakPtr())); |
3128 | 3125 |
3129 set_loader_path("files/prerender/prerender_loader_with_unload.html"); | 3126 set_loader_path("files/prerender/prerender_loader_with_unload.html"); |
3130 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 3127 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
3131 NavigateToDestURL(); | 3128 NavigateToDestURL(); |
3132 unload_counter.WaitForCount(1); | 3129 unload_counter.WaitForCount(1); |
3133 } | 3130 } |
3134 | 3131 |
3135 // Checks that a hanging unload on the referring page of a prerender swap does | 3132 // Checks that a hanging unload on the referring page of a prerender swap does |
3136 // not crash the browser on exit. | 3133 // not crash the browser on exit. |
3137 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHangingUnload) { | 3134 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderHangingUnload) { |
3138 // Matches URL in prerender_loader_with_unload.html. | 3135 // Matches URL in prerender_loader_with_unload.html. |
3139 const GURL hang_url("http://unload-url.test"); | 3136 const GURL hang_url("http://unload-url.test"); |
3140 base::FilePath empty_file = ui_test_utils::GetTestFilePath( | 3137 base::FilePath empty_file = ui_test_utils::GetTestFilePath( |
3141 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); | 3138 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); |
3142 BrowserThread::PostTask( | 3139 BrowserThread::PostTask( |
3143 BrowserThread::IO, FROM_HERE, | 3140 BrowserThread::IO, FROM_HERE, |
3144 base::Bind(&CreateHangingFirstRequestProtocolHandlerOnIO, | 3141 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, |
3145 hang_url, empty_file, | 3142 hang_url, empty_file, |
3146 base::Closure())); | 3143 base::Closure())); |
3147 | 3144 |
3148 set_loader_path("files/prerender/prerender_loader_with_unload.html"); | 3145 set_loader_path("files/prerender/prerender_loader_with_unload.html"); |
3149 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 3146 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
3150 NavigateToDestURL(); | 3147 NavigateToDestURL(); |
3151 } | 3148 } |
3152 | 3149 |
3153 | 3150 |
3154 // Checks that when the history is cleared, prerendering is cancelled and | 3151 // Checks that when the history is cleared, prerendering is cancelled and |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3378 MatchCompleteDummyCancelNavigation) { | 3375 MatchCompleteDummyCancelNavigation) { |
3379 UMAHistogramHelper histograms; | 3376 UMAHistogramHelper histograms; |
3380 | 3377 |
3381 // Arrange for a URL to hang. | 3378 // Arrange for a URL to hang. |
3382 const GURL kNoCommitUrl("http://never-respond.example.com"); | 3379 const GURL kNoCommitUrl("http://never-respond.example.com"); |
3383 base::FilePath file(FILE_PATH_LITERAL( | 3380 base::FilePath file(FILE_PATH_LITERAL( |
3384 "chrome/test/data/prerender/prerender_page.html")); | 3381 "chrome/test/data/prerender/prerender_page.html")); |
3385 base::RunLoop hang_loop; | 3382 base::RunLoop hang_loop; |
3386 BrowserThread::PostTask( | 3383 BrowserThread::PostTask( |
3387 BrowserThread::IO, FROM_HERE, | 3384 BrowserThread::IO, FROM_HERE, |
3388 base::Bind(&CreateHangingFirstRequestProtocolHandlerOnIO, | 3385 base::Bind(&CreateHangingFirstRequestInterceptorOnIO, kNoCommitUrl, |
3389 kNoCommitUrl, file, hang_loop.QuitClosure())); | 3386 file, hang_loop.QuitClosure())); |
3390 | 3387 |
3391 // First, fire a prerender that aborts after it completes its load. | 3388 // First, fire a prerender that aborts after it completes its load. |
3392 std::vector<FinalStatus> expected_final_status_queue; | 3389 std::vector<FinalStatus> expected_final_status_queue; |
3393 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); | 3390 expected_final_status_queue.push_back(FINAL_STATUS_INVALID_HTTP_METHOD); |
3394 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); | 3391 expected_final_status_queue.push_back(FINAL_STATUS_WOULD_HAVE_BEEN_USED); |
3395 PrerenderTestURL("files/prerender/prerender_xhr_put.html", | 3392 PrerenderTestURL("files/prerender/prerender_xhr_put.html", |
3396 expected_final_status_queue, 1); | 3393 expected_final_status_queue, 1); |
3397 histograms.Fetch(); | 3394 histograms.Fetch(); |
3398 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); | 3395 histograms.ExpectTotalCount("Prerender.none_PerceivedPLT", 1); |
3399 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); | 3396 histograms.ExpectTotalCount("Prerender.none_PerceivedPLTMatched", 0); |
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3765 // Cross-process navigation logic for renderer-initiated navigations | 3762 // Cross-process navigation logic for renderer-initiated navigations |
3766 // is partially controlled by the renderer, namely | 3763 // is partially controlled by the renderer, namely |
3767 // ChromeContentRendererClient. This test instead relies on the Web | 3764 // ChromeContentRendererClient. This test instead relies on the Web |
3768 // Store triggering such navigations. | 3765 // Store triggering such navigations. |
3769 std::string webstore_url = extension_urls::GetWebstoreLaunchURL(); | 3766 std::string webstore_url = extension_urls::GetWebstoreLaunchURL(); |
3770 | 3767 |
3771 // Mock out requests to the Web Store. | 3768 // Mock out requests to the Web Store. |
3772 base::FilePath file(GetTestPath("prerender_page.html")); | 3769 base::FilePath file(GetTestPath("prerender_page.html")); |
3773 BrowserThread::PostTask( | 3770 BrowserThread::PostTask( |
3774 BrowserThread::IO, FROM_HERE, | 3771 BrowserThread::IO, FROM_HERE, |
3775 base::Bind(&CreateMockProtocolHandlerOnIO, | 3772 base::Bind(&CreateMockInterceptorOnIO, GURL(webstore_url), file)); |
3776 GURL(webstore_url), file)); | |
3777 | 3773 |
3778 PrerenderTestURL(CreateClientRedirect(webstore_url), | 3774 PrerenderTestURL(CreateClientRedirect(webstore_url), |
3779 FINAL_STATUS_OPEN_URL, 1); | 3775 FINAL_STATUS_OPEN_URL, 1); |
3780 } | 3776 } |
3781 | 3777 |
3782 // Checks that canceling a MatchComplete dummy doesn't result in two | 3778 // Checks that canceling a MatchComplete dummy doesn't result in two |
3783 // stop events. | 3779 // stop events. |
3784 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, CancelMatchCompleteDummy) { | 3780 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, CancelMatchCompleteDummy) { |
3785 std::vector<FinalStatus> expected_final_status_queue; | 3781 std::vector<FinalStatus> expected_final_status_queue; |
3786 expected_final_status_queue.push_back(FINAL_STATUS_JAVASCRIPT_ALERT); | 3782 expected_final_status_queue.push_back(FINAL_STATUS_JAVASCRIPT_ALERT); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3938 // Attempt a swap-in in a new tab, verifying that session storage namespace | 3934 // Attempt a swap-in in a new tab, verifying that session storage namespace |
3939 // merging works. | 3935 // merging works. |
3940 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageNewTab) { | 3936 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPageNewTab) { |
3941 // Mock out some URLs and count the number of requests to one of them. Both | 3937 // Mock out some URLs and count the number of requests to one of them. Both |
3942 // prerender_session_storage.html and init_session_storage.html need to be | 3938 // prerender_session_storage.html and init_session_storage.html need to be |
3943 // mocked so they are same-origin. | 3939 // mocked so they are same-origin. |
3944 const GURL kInitURL("http://prerender.test/init_session_storage.html"); | 3940 const GURL kInitURL("http://prerender.test/init_session_storage.html"); |
3945 base::FilePath init_file = GetTestPath("init_session_storage.html"); | 3941 base::FilePath init_file = GetTestPath("init_session_storage.html"); |
3946 BrowserThread::PostTask( | 3942 BrowserThread::PostTask( |
3947 BrowserThread::IO, FROM_HERE, | 3943 BrowserThread::IO, FROM_HERE, |
3948 base::Bind(&CreateMockProtocolHandlerOnIO, kInitURL, init_file)); | 3944 base::Bind(&CreateMockInterceptorOnIO, kInitURL, init_file)); |
3949 | 3945 |
3950 const GURL kTestURL("http://prerender.test/prerender_session_storage.html"); | 3946 const GURL kTestURL("http://prerender.test/prerender_session_storage.html"); |
3951 base::FilePath test_file = GetTestPath("prerender_session_storage.html"); | 3947 base::FilePath test_file = GetTestPath("prerender_session_storage.html"); |
3952 RequestCounter counter; | 3948 RequestCounter counter; |
3953 BrowserThread::PostTask( | 3949 BrowserThread::PostTask( |
3954 BrowserThread::IO, FROM_HERE, | 3950 BrowserThread::IO, FROM_HERE, |
3955 base::Bind(&CreateCountingProtocolHandlerOnIO, | 3951 base::Bind(&CreateCountingInterceptorOnIO, |
3956 kTestURL, test_file, counter.AsWeakPtr())); | 3952 kTestURL, test_file, counter.AsWeakPtr())); |
3957 | 3953 |
3958 PrerenderTestURL(kTestURL, FINAL_STATUS_USED, 1); | 3954 PrerenderTestURL(kTestURL, FINAL_STATUS_USED, 1); |
3959 | 3955 |
3960 // Open a new tab to navigate in. | 3956 // Open a new tab to navigate in. |
3961 ui_test_utils::NavigateToURLWithDisposition( | 3957 ui_test_utils::NavigateToURLWithDisposition( |
3962 current_browser(), kInitURL, NEW_FOREGROUND_TAB, | 3958 current_browser(), kInitURL, NEW_FOREGROUND_TAB, |
3963 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 3959 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
3964 | 3960 |
3965 // Now navigate in the new tab. Set expect_swap_to_succeed to false because | 3961 // Now navigate in the new tab. Set expect_swap_to_succeed to false because |
(...skipping 22 matching lines...) Expand all Loading... |
3988 base::FilePath test_data_dir; | 3984 base::FilePath test_data_dir; |
3989 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)); | 3985 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_data_dir)); |
3990 | 3986 |
3991 // Mock out some URLs and count the number of requests to one of them. Both | 3987 // Mock out some URLs and count the number of requests to one of them. Both |
3992 // prerender_session_storage.html and init_session_storage.html need to be | 3988 // prerender_session_storage.html and init_session_storage.html need to be |
3993 // mocked so they are same-origin. | 3989 // mocked so they are same-origin. |
3994 const GURL kInitURL("http://prerender.test/init_session_storage.html"); | 3990 const GURL kInitURL("http://prerender.test/init_session_storage.html"); |
3995 base::FilePath init_file = GetTestPath("init_session_storage.html"); | 3991 base::FilePath init_file = GetTestPath("init_session_storage.html"); |
3996 BrowserThread::PostTask( | 3992 BrowserThread::PostTask( |
3997 BrowserThread::IO, FROM_HERE, | 3993 BrowserThread::IO, FROM_HERE, |
3998 base::Bind(&CreateMockProtocolHandlerOnIO, kInitURL, init_file)); | 3994 base::Bind(&CreateMockInterceptorOnIO, kInitURL, init_file)); |
3999 | 3995 |
4000 const GURL kTestURL("http://prerender.test/prerender_session_storage.html"); | 3996 const GURL kTestURL("http://prerender.test/prerender_session_storage.html"); |
4001 base::FilePath test_file = GetTestPath("prerender_session_storage.html"); | 3997 base::FilePath test_file = GetTestPath("prerender_session_storage.html"); |
4002 RequestCounter counter; | 3998 RequestCounter counter; |
4003 BrowserThread::PostTask( | 3999 BrowserThread::PostTask( |
4004 BrowserThread::IO, FROM_HERE, | 4000 BrowserThread::IO, FROM_HERE, |
4005 base::Bind(&CreateCountingProtocolHandlerOnIO, | 4001 base::Bind(&CreateCountingInterceptorOnIO, |
4006 kTestURL, test_file, counter.AsWeakPtr())); | 4002 kTestURL, test_file, counter.AsWeakPtr())); |
4007 | 4003 |
4008 PrerenderTestURL(kTestURL, FINAL_STATUS_USED, 1); | 4004 PrerenderTestURL(kTestURL, FINAL_STATUS_USED, 1); |
4009 | 4005 |
4010 // Open a new tab to navigate in. | 4006 // Open a new tab to navigate in. |
4011 ui_test_utils::NavigateToURLWithDisposition( | 4007 ui_test_utils::NavigateToURLWithDisposition( |
4012 current_browser(), kInitURL, NEW_FOREGROUND_TAB, | 4008 current_browser(), kInitURL, NEW_FOREGROUND_TAB, |
4013 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 4009 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
4014 | 4010 |
4015 // Navigate to about:blank so the next navigation is cross-process. | 4011 // Navigate to about:blank so the next navigation is cross-process. |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4162 | 4158 |
4163 // Checks that <a ping> requests are not dropped in prerender. | 4159 // Checks that <a ping> requests are not dropped in prerender. |
4164 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPing) { | 4160 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPing) { |
4165 // Count hits to a certain URL. | 4161 // Count hits to a certain URL. |
4166 const GURL kPingURL("http://prerender.test/ping"); | 4162 const GURL kPingURL("http://prerender.test/ping"); |
4167 base::FilePath empty_file = ui_test_utils::GetTestFilePath( | 4163 base::FilePath empty_file = ui_test_utils::GetTestFilePath( |
4168 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); | 4164 base::FilePath(), base::FilePath(FILE_PATH_LITERAL("empty.html"))); |
4169 RequestCounter ping_counter; | 4165 RequestCounter ping_counter; |
4170 BrowserThread::PostTask( | 4166 BrowserThread::PostTask( |
4171 BrowserThread::IO, FROM_HERE, | 4167 BrowserThread::IO, FROM_HERE, |
4172 base::Bind(&CreateCountingProtocolHandlerOnIO, | 4168 base::Bind(&CreateCountingInterceptorOnIO, |
4173 kPingURL, empty_file, ping_counter.AsWeakPtr())); | 4169 kPingURL, empty_file, ping_counter.AsWeakPtr())); |
4174 | 4170 |
4175 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); | 4171 PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
4176 OpenDestURLViaClickPing(kPingURL); | 4172 OpenDestURLViaClickPing(kPingURL); |
4177 | 4173 |
4178 ping_counter.WaitForCount(1); | 4174 ping_counter.WaitForCount(1); |
4179 } | 4175 } |
4180 | 4176 |
4181 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPPLTNormalNavigation) { | 4177 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderPPLTNormalNavigation) { |
4182 UMAHistogramHelper histograms; | 4178 UMAHistogramHelper histograms; |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4411 | 4407 |
4412 // Navigate to the URL entered. | 4408 // Navigate to the URL entered. |
4413 omnibox_view->model()->AcceptInput(CURRENT_TAB, false); | 4409 omnibox_view->model()->AcceptInput(CURRENT_TAB, false); |
4414 | 4410 |
4415 // Prerender should be running, but abandoned. | 4411 // Prerender should be running, but abandoned. |
4416 EXPECT_TRUE( | 4412 EXPECT_TRUE( |
4417 GetAutocompleteActionPredictor()->IsPrerenderAbandonedForTesting()); | 4413 GetAutocompleteActionPredictor()->IsPrerenderAbandonedForTesting()); |
4418 } | 4414 } |
4419 | 4415 |
4420 } // namespace prerender | 4416 } // namespace prerender |
OLD | NEW |