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 <memory> | 5 #include <memory> |
6 #include <utility> | 6 #include <utility> |
7 | 7 |
8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
(...skipping 8819 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8830 EmbeddedTestServer* origin_server() const { return origin_server_.get(); } | 8830 EmbeddedTestServer* origin_server() const { return origin_server_.get(); } |
8831 | 8831 |
8832 private: | 8832 private: |
8833 std::unique_ptr<EmbeddedTestServer> origin_server_; | 8833 std::unique_ptr<EmbeddedTestServer> origin_server_; |
8834 std::unique_ptr<EmbeddedTestServer> destination_server_; | 8834 std::unique_ptr<EmbeddedTestServer> destination_server_; |
8835 }; | 8835 }; |
8836 | 8836 |
8837 TEST_F(URLRequestTestReferrerPolicy, HTTPToSameOriginHTTP) { | 8837 TEST_F(URLRequestTestReferrerPolicy, HTTPToSameOriginHTTP) { |
8838 InstantiateSameOriginServers(net::EmbeddedTestServer::TYPE_HTTP); | 8838 InstantiateSameOriginServers(net::EmbeddedTestServer::TYPE_HTTP); |
8839 | 8839 |
| 8840 GURL referrer = origin_server()->GetURL("/path/to/file.html"); |
8840 VerifyReferrerAfterRedirect( | 8841 VerifyReferrerAfterRedirect( |
8841 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | 8842 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8842 origin_server()->GetURL("/path/to/file.html"), | 8843 referrer, referrer); |
8843 origin_server()->GetURL("/path/to/file.html")); | |
8844 | 8844 |
8845 VerifyReferrerAfterRedirect( | 8845 VerifyReferrerAfterRedirect( |
8846 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, | 8846 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, |
8847 origin_server()->GetURL("/path/to/file.html"), | 8847 referrer, referrer); |
8848 origin_server()->GetURL("/path/to/file.html")); | |
8849 | 8848 |
8850 VerifyReferrerAfterRedirect( | 8849 VerifyReferrerAfterRedirect( |
8851 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, | 8850 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, referrer, referrer); |
8852 origin_server()->GetURL("/path/to/file.html"), | |
8853 origin_server()->GetURL("/path/to/file.html")); | |
8854 | 8851 |
8855 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, | 8852 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, referrer, |
8856 origin_server()->GetURL("/path/to/file.html"), | 8853 referrer); |
8857 origin_server()->GetURL("/path/to/file.html")); | 8854 |
| 8855 VerifyReferrerAfterRedirect(URLRequest::ORIGIN, referrer.GetOrigin(), |
| 8856 referrer.GetOrigin()); |
| 8857 |
| 8858 VerifyReferrerAfterRedirect( |
| 8859 URLRequest::CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN, referrer, |
| 8860 referrer); |
| 8861 |
| 8862 VerifyReferrerAfterRedirect( |
| 8863 URLRequest::ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
| 8864 referrer.GetOrigin(), referrer.GetOrigin()); |
| 8865 |
| 8866 VerifyReferrerAfterRedirect(URLRequest::NO_REFERRER, GURL(), GURL()); |
8858 } | 8867 } |
8859 | 8868 |
8860 TEST_F(URLRequestTestReferrerPolicy, HTTPToCrossOriginHTTP) { | 8869 TEST_F(URLRequestTestReferrerPolicy, HTTPToCrossOriginHTTP) { |
8861 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTP, | 8870 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTP, |
8862 net::EmbeddedTestServer::TYPE_HTTP); | 8871 net::EmbeddedTestServer::TYPE_HTTP); |
| 8872 GURL referrer = origin_server()->GetURL("/path/to/file.html"); |
8863 | 8873 |
8864 VerifyReferrerAfterRedirect( | 8874 VerifyReferrerAfterRedirect( |
8865 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | 8875 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8866 origin_server()->GetURL("/path/to/file.html"), | 8876 referrer, referrer); |
8867 origin_server()->GetURL("/path/to/file.html")); | |
8868 | 8877 |
8869 VerifyReferrerAfterRedirect( | 8878 VerifyReferrerAfterRedirect( |
8870 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, | 8879 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, |
8871 origin_server()->GetURL("/path/to/file.html"), | 8880 referrer, referrer.GetOrigin()); |
8872 origin_server()->GetURL("/")); | |
8873 | 8881 |
8874 VerifyReferrerAfterRedirect( | 8882 VerifyReferrerAfterRedirect( |
8875 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, | 8883 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, referrer, |
8876 origin_server()->GetURL("/path/to/file.html"), | 8884 referrer.GetOrigin()); |
8877 origin_server()->GetURL("/")); | |
8878 | 8885 |
8879 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, | 8886 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, referrer, |
8880 origin_server()->GetURL("/path/to/file.html"), | 8887 referrer); |
8881 origin_server()->GetURL("/path/to/file.html")); | 8888 |
| 8889 VerifyReferrerAfterRedirect(URLRequest::ORIGIN, referrer.GetOrigin(), |
| 8890 referrer.GetOrigin()); |
| 8891 |
| 8892 VerifyReferrerAfterRedirect( |
| 8893 URLRequest::CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN, referrer, GURL()); |
| 8894 |
| 8895 VerifyReferrerAfterRedirect( |
| 8896 URLRequest::ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
| 8897 referrer.GetOrigin(), referrer.GetOrigin()); |
| 8898 |
| 8899 VerifyReferrerAfterRedirect(URLRequest::NO_REFERRER, GURL(), GURL()); |
8882 } | 8900 } |
8883 | 8901 |
8884 TEST_F(URLRequestTestReferrerPolicy, HTTPSToSameOriginHTTPS) { | 8902 TEST_F(URLRequestTestReferrerPolicy, HTTPSToSameOriginHTTPS) { |
8885 InstantiateSameOriginServers(net::EmbeddedTestServer::TYPE_HTTPS); | 8903 InstantiateSameOriginServers(net::EmbeddedTestServer::TYPE_HTTPS); |
| 8904 GURL referrer = origin_server()->GetURL("/path/to/file.html"); |
8886 | 8905 |
8887 VerifyReferrerAfterRedirect( | 8906 VerifyReferrerAfterRedirect( |
8888 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | 8907 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8889 origin_server()->GetURL("/path/to/file.html"), | 8908 referrer, referrer); |
8890 origin_server()->GetURL("/path/to/file.html")); | |
8891 | 8909 |
8892 VerifyReferrerAfterRedirect( | 8910 VerifyReferrerAfterRedirect( |
8893 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, | 8911 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, |
8894 origin_server()->GetURL("/path/to/file.html"), | 8912 referrer, referrer); |
8895 origin_server()->GetURL("/path/to/file.html")); | |
8896 | 8913 |
8897 VerifyReferrerAfterRedirect( | 8914 VerifyReferrerAfterRedirect( |
8898 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, | 8915 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, referrer, referrer); |
8899 origin_server()->GetURL("/path/to/file.html"), | |
8900 origin_server()->GetURL("/path/to/file.html")); | |
8901 | 8916 |
8902 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, | 8917 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, referrer, |
8903 origin_server()->GetURL("/path/to/file.html"), | 8918 referrer); |
8904 origin_server()->GetURL("/path/to/file.html")); | 8919 |
| 8920 VerifyReferrerAfterRedirect(URLRequest::ORIGIN, referrer.GetOrigin(), |
| 8921 referrer.GetOrigin()); |
| 8922 |
| 8923 VerifyReferrerAfterRedirect( |
| 8924 URLRequest::CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN, referrer, |
| 8925 referrer); |
| 8926 |
| 8927 VerifyReferrerAfterRedirect( |
| 8928 URLRequest::ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
| 8929 referrer.GetOrigin(), referrer.GetOrigin()); |
| 8930 |
| 8931 VerifyReferrerAfterRedirect(URLRequest::NO_REFERRER, GURL(), GURL()); |
8905 } | 8932 } |
8906 | 8933 |
8907 TEST_F(URLRequestTestReferrerPolicy, HTTPSToCrossOriginHTTPS) { | 8934 TEST_F(URLRequestTestReferrerPolicy, HTTPSToCrossOriginHTTPS) { |
8908 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTPS, | 8935 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTPS, |
8909 net::EmbeddedTestServer::TYPE_HTTPS); | 8936 net::EmbeddedTestServer::TYPE_HTTPS); |
| 8937 GURL referrer = origin_server()->GetURL("/path/to/file.html"); |
8910 | 8938 |
8911 VerifyReferrerAfterRedirect( | 8939 VerifyReferrerAfterRedirect( |
8912 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | 8940 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8913 origin_server()->GetURL("/path/to/file.html"), | 8941 referrer, referrer); |
8914 origin_server()->GetURL("/path/to/file.html")); | |
8915 | 8942 |
8916 VerifyReferrerAfterRedirect( | 8943 VerifyReferrerAfterRedirect( |
8917 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, | 8944 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, |
8918 origin_server()->GetURL("/path/to/file.html"), | 8945 referrer, origin_server()->GetURL("/")); |
| 8946 |
| 8947 VerifyReferrerAfterRedirect( |
| 8948 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, referrer, |
8919 origin_server()->GetURL("/")); | 8949 origin_server()->GetURL("/")); |
8920 | 8950 |
| 8951 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, referrer, |
| 8952 referrer); |
| 8953 |
| 8954 VerifyReferrerAfterRedirect(URLRequest::ORIGIN, referrer.GetOrigin(), |
| 8955 referrer.GetOrigin()); |
| 8956 |
8921 VerifyReferrerAfterRedirect( | 8957 VerifyReferrerAfterRedirect( |
8922 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, | 8958 URLRequest::CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN, referrer, GURL()); |
8923 origin_server()->GetURL("/path/to/file.html"), | |
8924 origin_server()->GetURL("/")); | |
8925 | 8959 |
8926 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, | 8960 VerifyReferrerAfterRedirect( |
8927 origin_server()->GetURL("/path/to/file.html"), | 8961 URLRequest::ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8928 origin_server()->GetURL("/path/to/file.html")); | 8962 referrer.GetOrigin(), referrer.GetOrigin()); |
| 8963 |
| 8964 VerifyReferrerAfterRedirect(URLRequest::NO_REFERRER, GURL(), GURL()); |
8929 } | 8965 } |
8930 | 8966 |
8931 TEST_F(URLRequestTestReferrerPolicy, HTTPToHTTPS) { | 8967 TEST_F(URLRequestTestReferrerPolicy, HTTPToHTTPS) { |
8932 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTP, | 8968 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTP, |
8933 net::EmbeddedTestServer::TYPE_HTTPS); | 8969 net::EmbeddedTestServer::TYPE_HTTPS); |
| 8970 GURL referrer = origin_server()->GetURL("/path/to/file.html"); |
8934 | 8971 |
8935 VerifyReferrerAfterRedirect( | 8972 VerifyReferrerAfterRedirect( |
8936 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | 8973 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8937 origin_server()->GetURL("/path/to/file.html"), | 8974 referrer, referrer); |
8938 origin_server()->GetURL("/path/to/file.html")); | |
8939 | 8975 |
8940 VerifyReferrerAfterRedirect( | 8976 VerifyReferrerAfterRedirect( |
8941 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, | 8977 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, |
8942 origin_server()->GetURL("/path/to/file.html"), | 8978 referrer, origin_server()->GetURL("/")); |
| 8979 |
| 8980 VerifyReferrerAfterRedirect( |
| 8981 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, referrer, |
8943 origin_server()->GetURL("/")); | 8982 origin_server()->GetURL("/")); |
8944 | 8983 |
| 8984 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, referrer, |
| 8985 referrer); |
| 8986 |
| 8987 VerifyReferrerAfterRedirect(URLRequest::ORIGIN, referrer.GetOrigin(), |
| 8988 referrer.GetOrigin()); |
| 8989 |
8945 VerifyReferrerAfterRedirect( | 8990 VerifyReferrerAfterRedirect( |
8946 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, | 8991 URLRequest::CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN, referrer, GURL()); |
8947 origin_server()->GetURL("/path/to/file.html"), | |
8948 origin_server()->GetURL("/")); | |
8949 | 8992 |
8950 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, | 8993 VerifyReferrerAfterRedirect( |
8951 origin_server()->GetURL("/path/to/file.html"), | 8994 URLRequest::ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8952 origin_server()->GetURL("/path/to/file.html")); | 8995 referrer.GetOrigin(), referrer.GetOrigin()); |
| 8996 |
| 8997 VerifyReferrerAfterRedirect(URLRequest::NO_REFERRER, GURL(), GURL()); |
8953 } | 8998 } |
8954 | 8999 |
8955 TEST_F(URLRequestTestReferrerPolicy, HTTPSToHTTP) { | 9000 TEST_F(URLRequestTestReferrerPolicy, HTTPSToHTTP) { |
8956 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTPS, | 9001 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTPS, |
8957 net::EmbeddedTestServer::TYPE_HTTP); | 9002 net::EmbeddedTestServer::TYPE_HTTP); |
| 9003 GURL referrer = origin_server()->GetURL("/path/to/file.html"); |
8958 | 9004 |
8959 VerifyReferrerAfterRedirect( | 9005 VerifyReferrerAfterRedirect( |
8960 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | 9006 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8961 origin_server()->GetURL("/path/to/file.html"), GURL()); | 9007 referrer, GURL()); |
8962 | 9008 |
8963 VerifyReferrerAfterRedirect( | 9009 VerifyReferrerAfterRedirect( |
8964 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, | 9010 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, |
8965 origin_server()->GetURL("/path/to/file.html"), GURL()); | 9011 referrer, GURL()); |
8966 | 9012 |
8967 VerifyReferrerAfterRedirect( | 9013 VerifyReferrerAfterRedirect( |
8968 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, | 9014 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, referrer, |
8969 origin_server()->GetURL("/path/to/file.html"), | |
8970 origin_server()->GetURL("/")); | 9015 origin_server()->GetURL("/")); |
8971 | 9016 |
8972 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, | 9017 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, referrer, |
8973 origin_server()->GetURL("/path/to/file.html"), | 9018 referrer); |
8974 origin_server()->GetURL("/path/to/file.html")); | 9019 |
| 9020 VerifyReferrerAfterRedirect(URLRequest::ORIGIN, referrer.GetOrigin(), |
| 9021 referrer.GetOrigin()); |
| 9022 |
| 9023 VerifyReferrerAfterRedirect( |
| 9024 URLRequest::CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN, referrer, GURL()); |
| 9025 |
| 9026 VerifyReferrerAfterRedirect( |
| 9027 URLRequest::ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
| 9028 referrer.GetOrigin(), GURL()); |
| 9029 |
| 9030 VerifyReferrerAfterRedirect(URLRequest::NO_REFERRER, GURL(), GURL()); |
8975 } | 9031 } |
8976 | 9032 |
8977 class HTTPSRequestTest : public testing::Test { | 9033 class HTTPSRequestTest : public testing::Test { |
8978 public: | 9034 public: |
8979 HTTPSRequestTest() : default_context_(true) { | 9035 HTTPSRequestTest() : default_context_(true) { |
8980 default_context_.set_network_delegate(&default_network_delegate_); | 9036 default_context_.set_network_delegate(&default_network_delegate_); |
8981 default_context_.Init(); | 9037 default_context_.Init(); |
8982 } | 9038 } |
8983 ~HTTPSRequestTest() override {} | 9039 ~HTTPSRequestTest() override {} |
8984 | 9040 |
(...skipping 2248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
11233 AddTestInterceptor()->set_main_intercept_job(std::move(job)); | 11289 AddTestInterceptor()->set_main_intercept_job(std::move(job)); |
11234 | 11290 |
11235 req->Start(); | 11291 req->Start(); |
11236 req->Cancel(); | 11292 req->Cancel(); |
11237 base::RunLoop().RunUntilIdle(); | 11293 base::RunLoop().RunUntilIdle(); |
11238 EXPECT_EQ(ERR_ABORTED, d.request_status()); | 11294 EXPECT_EQ(ERR_ABORTED, d.request_status()); |
11239 EXPECT_EQ(0, d.received_redirect_count()); | 11295 EXPECT_EQ(0, d.received_redirect_count()); |
11240 } | 11296 } |
11241 | 11297 |
11242 } // namespace net | 11298 } // namespace net |
OLD | NEW |