Chromium Code Reviews| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <deque> | 6 #include <deque> |
| 7 #include <set> | 7 #include <set> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <unordered_map> | 9 #include <unordered_map> |
| 10 #include <utility> | 10 #include <utility> |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 99 #include "content/public/test/browser_test_utils.h" | 99 #include "content/public/test/browser_test_utils.h" |
| 100 #include "content/public/test/ppapi_test_utils.h" | 100 #include "content/public/test/ppapi_test_utils.h" |
| 101 #include "content/public/test/test_navigation_observer.h" | 101 #include "content/public/test/test_navigation_observer.h" |
| 102 #include "content/public/test/test_utils.h" | 102 #include "content/public/test/test_utils.h" |
| 103 #include "extensions/common/constants.h" | 103 #include "extensions/common/constants.h" |
| 104 #include "extensions/common/extension_urls.h" | 104 #include "extensions/common/extension_urls.h" |
| 105 #include "extensions/common/manifest_handlers/mime_types_handler.h" | 105 #include "extensions/common/manifest_handlers/mime_types_handler.h" |
| 106 #include "extensions/common/switches.h" | 106 #include "extensions/common/switches.h" |
| 107 #include "extensions/test/result_catcher.h" | 107 #include "extensions/test/result_catcher.h" |
| 108 #include "net/base/escape.h" | 108 #include "net/base/escape.h" |
| 109 #include "net/base/test_data_directory.h" | |
| 109 #include "net/cert/x509_certificate.h" | 110 #include "net/cert/x509_certificate.h" |
| 110 #include "net/dns/mock_host_resolver.h" | 111 #include "net/dns/mock_host_resolver.h" |
| 111 #include "net/ssl/client_cert_store.h" | 112 #include "net/ssl/client_cert_store.h" |
| 112 #include "net/ssl/ssl_cert_request_info.h" | 113 #include "net/ssl/ssl_cert_request_info.h" |
| 113 #include "net/ssl/ssl_server_config.h" | 114 #include "net/ssl/ssl_server_config.h" |
| 115 #include "net/test/cert_test_util.h" | |
| 114 #include "net/test/embedded_test_server/embedded_test_server.h" | 116 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 115 #include "net/test/embedded_test_server/request_handler_util.h" | 117 #include "net/test/embedded_test_server/request_handler_util.h" |
| 116 #include "net/test/url_request/url_request_mock_http_job.h" | 118 #include "net/test/url_request/url_request_mock_http_job.h" |
| 117 #include "net/url_request/url_request_context.h" | 119 #include "net/url_request/url_request_context.h" |
| 118 #include "net/url_request/url_request_context_getter.h" | 120 #include "net/url_request/url_request_context_getter.h" |
| 119 #include "net/url_request/url_request_filter.h" | 121 #include "net/url_request/url_request_filter.h" |
| 120 #include "net/url_request/url_request_interceptor.h" | 122 #include "net/url_request/url_request_interceptor.h" |
| 121 #include "net/url_request/url_request_job.h" | 123 #include "net/url_request/url_request_job.h" |
| 122 #include "ppapi/shared_impl/ppapi_switches.h" | 124 #include "ppapi/shared_impl/ppapi_switches.h" |
| 123 #include "ui/base/l10n/l10n_util.h" | 125 #include "ui/base/l10n/l10n_util.h" |
| (...skipping 2710 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2834 FINAL_STATUS_NON_EMPTY_BROWSING_INSTANCE, 1); | 2836 FINAL_STATUS_NON_EMPTY_BROWSING_INSTANCE, 1); |
| 2835 OpenURLViaWindowOpen(GURL(url::kAboutBlankURL)); | 2837 OpenURLViaWindowOpen(GURL(url::kAboutBlankURL)); |
| 2836 | 2838 |
| 2837 // Switch back to the current tab and attempt to swap it in. | 2839 // Switch back to the current tab and attempt to swap it in. |
| 2838 current_browser()->tab_strip_model()->ActivateTabAt(0, true); | 2840 current_browser()->tab_strip_model()->ActivateTabAt(0, true); |
| 2839 NavigateToDestURLWithDisposition(CURRENT_TAB, false); | 2841 NavigateToDestURLWithDisposition(CURRENT_TAB, false); |
| 2840 } | 2842 } |
| 2841 | 2843 |
| 2842 class TestClientCertStore : public net::ClientCertStore { | 2844 class TestClientCertStore : public net::ClientCertStore { |
| 2843 public: | 2845 public: |
| 2844 TestClientCertStore() {} | 2846 explicit TestClientCertStore(const net::CertificateList& certs) |
| 2847 : certs_(certs) {} | |
|
Nico
2016/06/22 14:12:11
hm, copying a bag of raw pointers smells a bit fun
Ryan Sleevi
2016/06/22 15:22:26
It's copying scoped_refptr<>s
| |
| 2845 ~TestClientCertStore() override {} | 2848 ~TestClientCertStore() override {} |
| 2846 | 2849 |
| 2847 // net::ClientCertStore: | 2850 // net::ClientCertStore: |
| 2848 void GetClientCerts(const net::SSLCertRequestInfo& cert_request_info, | 2851 void GetClientCerts(const net::SSLCertRequestInfo& cert_request_info, |
| 2849 net::CertificateList* selected_certs, | 2852 net::CertificateList* selected_certs, |
| 2850 const base::Closure& callback) override { | 2853 const base::Closure& callback) override { |
| 2851 *selected_certs = net::CertificateList( | 2854 *selected_certs = certs_; |
| 2852 1, scoped_refptr<net::X509Certificate>( | |
| 2853 new net::X509Certificate("test", "test", base::Time(), base::Time()))); | |
| 2854 callback.Run(); | 2855 callback.Run(); |
| 2855 } | 2856 } |
| 2857 | |
| 2858 private: | |
| 2859 net::CertificateList certs_; | |
| 2856 }; | 2860 }; |
| 2857 | 2861 |
| 2858 std::unique_ptr<net::ClientCertStore> CreateCertStore() { | 2862 std::unique_ptr<net::ClientCertStore> CreateCertStore( |
| 2859 return std::unique_ptr<net::ClientCertStore>(new TestClientCertStore); | 2863 scoped_refptr<net::X509Certificate> available_cert) { |
| 2864 return std::unique_ptr<net::ClientCertStore>( | |
| 2865 new TestClientCertStore(net::CertificateList(1, available_cert))); | |
| 2860 } | 2866 } |
| 2861 | 2867 |
| 2862 // Checks that a top-level page which would normally request an SSL client | 2868 // Checks that a top-level page which would normally request an SSL client |
| 2863 // certificate will never be seen since it's an https top-level resource. | 2869 // certificate will never be seen since it's an https top-level resource. |
| 2864 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2870 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2865 PrerenderSSLClientCertTopLevel) { | 2871 PrerenderSSLClientCertTopLevel) { |
| 2866 ProfileIOData::FromResourceContext( | 2872 ProfileIOData::FromResourceContext( |
| 2867 current_browser()->profile()->GetResourceContext())-> | 2873 current_browser()->profile()->GetResourceContext()) |
| 2868 set_client_cert_store_factory_for_testing( | 2874 ->set_client_cert_store_factory_for_testing(base::Bind( |
| 2869 base::Bind(&CreateCertStore)); | 2875 &CreateCertStore, net::ImportCertFromFile( |
| 2876 net::GetTestCertsDirectory(), "ok_cert.pem"))); | |
| 2870 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); | 2877 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
| 2871 net::SSLServerConfig ssl_config; | 2878 net::SSLServerConfig ssl_config; |
| 2872 ssl_config.client_cert_type = | 2879 ssl_config.client_cert_type = |
| 2873 net::SSLServerConfig::ClientCertType::REQUIRE_CLIENT_CERT; | 2880 net::SSLServerConfig::ClientCertType::REQUIRE_CLIENT_CERT; |
| 2874 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_OK, ssl_config); | 2881 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_OK, ssl_config); |
| 2875 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); | 2882 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); |
| 2876 ASSERT_TRUE(https_server.Start()); | 2883 ASSERT_TRUE(https_server.Start()); |
| 2877 GURL https_url = https_server.GetURL("/prerender/prerender_page.html"); | 2884 GURL https_url = https_server.GetURL("/prerender/prerender_page.html"); |
| 2878 PrerenderTestURL(https_url, FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, 0); | 2885 PrerenderTestURL(https_url, FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, 0); |
| 2879 } | 2886 } |
| 2880 | 2887 |
| 2881 // Checks that an SSL Client Certificate request that originates from a | 2888 // Checks that an SSL Client Certificate request that originates from a |
| 2882 // subresource will cancel the prerendered page. | 2889 // subresource will cancel the prerendered page. |
| 2883 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, | 2890 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, |
| 2884 PrerenderSSLClientCertSubresource) { | 2891 PrerenderSSLClientCertSubresource) { |
| 2885 ProfileIOData::FromResourceContext( | 2892 ProfileIOData::FromResourceContext( |
| 2886 current_browser()->profile()->GetResourceContext())-> | 2893 current_browser()->profile()->GetResourceContext()) |
| 2887 set_client_cert_store_factory_for_testing( | 2894 ->set_client_cert_store_factory_for_testing(base::Bind( |
| 2888 base::Bind(&CreateCertStore)); | 2895 &CreateCertStore, net::ImportCertFromFile( |
| 2896 net::GetTestCertsDirectory(), "ok_cert.pem"))); | |
| 2889 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); | 2897 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
| 2890 net::SSLServerConfig ssl_config; | 2898 net::SSLServerConfig ssl_config; |
| 2891 ssl_config.client_cert_type = | 2899 ssl_config.client_cert_type = |
| 2892 net::SSLServerConfig::ClientCertType::REQUIRE_CLIENT_CERT; | 2900 net::SSLServerConfig::ClientCertType::REQUIRE_CLIENT_CERT; |
| 2893 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_OK, ssl_config); | 2901 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_OK, ssl_config); |
| 2894 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); | 2902 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); |
| 2895 ASSERT_TRUE(https_server.Start()); | 2903 ASSERT_TRUE(https_server.Start()); |
| 2896 GURL https_url = https_server.GetURL("/prerender/image.jpeg"); | 2904 GURL https_url = https_server.GetURL("/prerender/image.jpeg"); |
| 2897 base::StringPairs replacement_text; | 2905 base::StringPairs replacement_text; |
| 2898 replacement_text.push_back( | 2906 replacement_text.push_back( |
| 2899 std::make_pair("REPLACE_WITH_IMAGE_URL", https_url.spec())); | 2907 std::make_pair("REPLACE_WITH_IMAGE_URL", https_url.spec())); |
| 2900 std::string replacement_path; | 2908 std::string replacement_path; |
| 2901 net::test_server::GetFilePathWithReplacements( | 2909 net::test_server::GetFilePathWithReplacements( |
| 2902 "/prerender/prerender_with_image.html", replacement_text, | 2910 "/prerender/prerender_with_image.html", replacement_text, |
| 2903 &replacement_path); | 2911 &replacement_path); |
| 2904 PrerenderTestURL(replacement_path, | 2912 PrerenderTestURL(replacement_path, |
| 2905 FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, | 2913 FINAL_STATUS_SSL_CLIENT_CERTIFICATE_REQUESTED, |
| 2906 0); | 2914 0); |
| 2907 } | 2915 } |
| 2908 | 2916 |
| 2909 // Checks that an SSL Client Certificate request that originates from an | 2917 // Checks that an SSL Client Certificate request that originates from an |
| 2910 // iframe will cancel the prerendered page. | 2918 // iframe will cancel the prerendered page. |
| 2911 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLClientCertIframe) { | 2919 IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderSSLClientCertIframe) { |
| 2912 ProfileIOData::FromResourceContext( | 2920 ProfileIOData::FromResourceContext( |
| 2913 current_browser()->profile()->GetResourceContext())-> | 2921 current_browser()->profile()->GetResourceContext()) |
| 2914 set_client_cert_store_factory_for_testing( | 2922 ->set_client_cert_store_factory_for_testing(base::Bind( |
| 2915 base::Bind(&CreateCertStore)); | 2923 &CreateCertStore, net::ImportCertFromFile( |
| 2924 net::GetTestCertsDirectory(), "ok_cert.pem"))); | |
| 2916 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); | 2925 net::EmbeddedTestServer https_server(net::EmbeddedTestServer::TYPE_HTTPS); |
| 2917 net::SSLServerConfig ssl_config; | 2926 net::SSLServerConfig ssl_config; |
| 2918 ssl_config.client_cert_type = | 2927 ssl_config.client_cert_type = |
| 2919 net::SSLServerConfig::ClientCertType::REQUIRE_CLIENT_CERT; | 2928 net::SSLServerConfig::ClientCertType::REQUIRE_CLIENT_CERT; |
| 2920 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_OK, ssl_config); | 2929 https_server.SetSSLConfig(net::EmbeddedTestServer::CERT_OK, ssl_config); |
| 2921 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); | 2930 https_server.ServeFilesFromSourceDirectory("chrome/test/data"); |
| 2922 ASSERT_TRUE(https_server.Start()); | 2931 ASSERT_TRUE(https_server.Start()); |
| 2923 GURL https_url = | 2932 GURL https_url = |
| 2924 https_server.GetURL("/prerender/prerender_embedded_content.html"); | 2933 https_server.GetURL("/prerender/prerender_embedded_content.html"); |
| 2925 base::StringPairs replacement_text; | 2934 base::StringPairs replacement_text; |
| (...skipping 1000 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3926 browser()->tab_strip_model()->GetActiveWebContents(); | 3935 browser()->tab_strip_model()->GetActiveWebContents(); |
| 3927 bool display_test_result = false; | 3936 bool display_test_result = false; |
| 3928 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(web_contents, | 3937 ASSERT_TRUE(content::ExecuteScriptAndExtractBool(web_contents, |
| 3929 "DidDisplayReallyPass()", | 3938 "DidDisplayReallyPass()", |
| 3930 &display_test_result)); | 3939 &display_test_result)); |
| 3931 ASSERT_TRUE(display_test_result); | 3940 ASSERT_TRUE(display_test_result); |
| 3932 } | 3941 } |
| 3933 #endif // !defined(DISABLE_NACL) | 3942 #endif // !defined(DISABLE_NACL) |
| 3934 | 3943 |
| 3935 } // namespace prerender | 3944 } // namespace prerender |
| OLD | NEW |