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 8835 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8846 EmbeddedTestServer* origin_server() const { return origin_server_.get(); } | 8846 EmbeddedTestServer* origin_server() const { return origin_server_.get(); } |
8847 | 8847 |
8848 private: | 8848 private: |
8849 std::unique_ptr<EmbeddedTestServer> origin_server_; | 8849 std::unique_ptr<EmbeddedTestServer> origin_server_; |
8850 std::unique_ptr<EmbeddedTestServer> destination_server_; | 8850 std::unique_ptr<EmbeddedTestServer> destination_server_; |
8851 }; | 8851 }; |
8852 | 8852 |
8853 TEST_F(URLRequestTestReferrerPolicy, HTTPToSameOriginHTTP) { | 8853 TEST_F(URLRequestTestReferrerPolicy, HTTPToSameOriginHTTP) { |
8854 InstantiateSameOriginServers(net::EmbeddedTestServer::TYPE_HTTP); | 8854 InstantiateSameOriginServers(net::EmbeddedTestServer::TYPE_HTTP); |
8855 | 8855 |
8856 GURL referrer = origin_server()->GetURL("/path/to/file.html"); | |
8856 VerifyReferrerAfterRedirect( | 8857 VerifyReferrerAfterRedirect( |
8857 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | 8858 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8858 origin_server()->GetURL("/path/to/file.html"), | 8859 referrer, referrer); |
8859 origin_server()->GetURL("/path/to/file.html")); | |
8860 | 8860 |
8861 VerifyReferrerAfterRedirect( | 8861 VerifyReferrerAfterRedirect( |
8862 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, | 8862 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, |
8863 origin_server()->GetURL("/path/to/file.html"), | 8863 referrer, referrer); |
8864 origin_server()->GetURL("/path/to/file.html")); | |
8865 | 8864 |
8866 VerifyReferrerAfterRedirect( | 8865 VerifyReferrerAfterRedirect( |
8867 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, | 8866 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, referrer, referrer); |
8868 origin_server()->GetURL("/path/to/file.html"), | |
8869 origin_server()->GetURL("/path/to/file.html")); | |
8870 | 8867 |
8871 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, | 8868 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, referrer, |
8872 origin_server()->GetURL("/path/to/file.html"), | 8869 referrer); |
8873 origin_server()->GetURL("/path/to/file.html")); | 8870 |
8871 VerifyReferrerAfterRedirect(URLRequest::ORIGIN, referrer.GetOrigin(), | |
mmenke
2017/06/07 21:04:03
first referrer.GetOrigin() -> referrer
estark
2017/06/08 18:42:58
Unintuitive as it is, this is actually intentional
| |
8872 referrer.GetOrigin()); | |
8873 | |
8874 VerifyReferrerAfterRedirect( | |
8875 URLRequest::CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN, referrer, | |
8876 referrer); | |
8877 | |
8878 VerifyReferrerAfterRedirect( | |
8879 URLRequest::ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | |
8880 referrer.GetOrigin(), referrer.GetOrigin()); | |
mmenke
2017/06/07 21:04:02
first referrer.GetOrigin() -> referrer
| |
8881 | |
8882 VerifyReferrerAfterRedirect(URLRequest::NO_REFERRER, GURL(), GURL()); | |
8874 } | 8883 } |
8875 | 8884 |
8876 TEST_F(URLRequestTestReferrerPolicy, HTTPToCrossOriginHTTP) { | 8885 TEST_F(URLRequestTestReferrerPolicy, HTTPToCrossOriginHTTP) { |
8877 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTP, | 8886 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTP, |
8878 net::EmbeddedTestServer::TYPE_HTTP); | 8887 net::EmbeddedTestServer::TYPE_HTTP); |
8888 GURL referrer = origin_server()->GetURL("/path/to/file.html"); | |
8879 | 8889 |
8880 VerifyReferrerAfterRedirect( | 8890 VerifyReferrerAfterRedirect( |
8881 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | 8891 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8882 origin_server()->GetURL("/path/to/file.html"), | 8892 referrer, referrer); |
8883 origin_server()->GetURL("/path/to/file.html")); | |
8884 | 8893 |
8885 VerifyReferrerAfterRedirect( | 8894 VerifyReferrerAfterRedirect( |
8886 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, | 8895 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, |
8887 origin_server()->GetURL("/path/to/file.html"), | 8896 referrer, referrer.GetOrigin()); |
8888 origin_server()->GetURL("/")); | |
8889 | 8897 |
8890 VerifyReferrerAfterRedirect( | 8898 VerifyReferrerAfterRedirect( |
8891 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, | 8899 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, referrer, |
8892 origin_server()->GetURL("/path/to/file.html"), | 8900 referrer.GetOrigin()); |
8893 origin_server()->GetURL("/")); | |
8894 | 8901 |
8895 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, | 8902 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, referrer, |
8896 origin_server()->GetURL("/path/to/file.html"), | 8903 referrer); |
8897 origin_server()->GetURL("/path/to/file.html")); | 8904 |
8905 VerifyReferrerAfterRedirect(URLRequest::ORIGIN, referrer.GetOrigin(), | |
mmenke
2017/06/07 21:04:02
first referrer.GetOrigin() -> referrer
| |
8906 referrer.GetOrigin()); | |
8907 | |
8908 VerifyReferrerAfterRedirect( | |
8909 URLRequest::CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN, referrer, GURL()); | |
8910 | |
8911 VerifyReferrerAfterRedirect( | |
8912 URLRequest::ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | |
8913 referrer.GetOrigin(), referrer.GetOrigin()); | |
mmenke
2017/06/07 21:04:03
first referrer.GetOrigin() -> referrer
| |
8914 | |
8915 VerifyReferrerAfterRedirect(URLRequest::NO_REFERRER, GURL(), GURL()); | |
mmenke
2017/06/07 21:04:01
first GURL() -> referrer
| |
8898 } | 8916 } |
8899 | 8917 |
8900 TEST_F(URLRequestTestReferrerPolicy, HTTPSToSameOriginHTTPS) { | 8918 TEST_F(URLRequestTestReferrerPolicy, HTTPSToSameOriginHTTPS) { |
8901 InstantiateSameOriginServers(net::EmbeddedTestServer::TYPE_HTTPS); | 8919 InstantiateSameOriginServers(net::EmbeddedTestServer::TYPE_HTTPS); |
8920 GURL referrer = origin_server()->GetURL("/path/to/file.html"); | |
8902 | 8921 |
8903 VerifyReferrerAfterRedirect( | 8922 VerifyReferrerAfterRedirect( |
8904 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | 8923 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8905 origin_server()->GetURL("/path/to/file.html"), | 8924 referrer, referrer); |
8906 origin_server()->GetURL("/path/to/file.html")); | |
8907 | 8925 |
8908 VerifyReferrerAfterRedirect( | 8926 VerifyReferrerAfterRedirect( |
8909 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, | 8927 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, |
8910 origin_server()->GetURL("/path/to/file.html"), | 8928 referrer, referrer); |
8911 origin_server()->GetURL("/path/to/file.html")); | |
8912 | 8929 |
8913 VerifyReferrerAfterRedirect( | 8930 VerifyReferrerAfterRedirect( |
8914 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, | 8931 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, referrer, referrer); |
8915 origin_server()->GetURL("/path/to/file.html"), | |
8916 origin_server()->GetURL("/path/to/file.html")); | |
8917 | 8932 |
8918 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, | 8933 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, referrer, |
8919 origin_server()->GetURL("/path/to/file.html"), | 8934 referrer); |
8920 origin_server()->GetURL("/path/to/file.html")); | 8935 |
8936 VerifyReferrerAfterRedirect(URLRequest::ORIGIN, referrer.GetOrigin(), | |
mmenke
2017/06/07 21:04:03
Please fix the rest of these, too.
| |
8937 referrer.GetOrigin()); | |
8938 | |
8939 VerifyReferrerAfterRedirect( | |
8940 URLRequest::CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN, referrer, | |
8941 referrer); | |
8942 | |
8943 VerifyReferrerAfterRedirect( | |
8944 URLRequest::ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | |
8945 referrer.GetOrigin(), referrer.GetOrigin()); | |
8946 | |
8947 VerifyReferrerAfterRedirect(URLRequest::NO_REFERRER, GURL(), GURL()); | |
8921 } | 8948 } |
8922 | 8949 |
8923 TEST_F(URLRequestTestReferrerPolicy, HTTPSToCrossOriginHTTPS) { | 8950 TEST_F(URLRequestTestReferrerPolicy, HTTPSToCrossOriginHTTPS) { |
8924 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTPS, | 8951 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTPS, |
8925 net::EmbeddedTestServer::TYPE_HTTPS); | 8952 net::EmbeddedTestServer::TYPE_HTTPS); |
8953 GURL referrer = origin_server()->GetURL("/path/to/file.html"); | |
8926 | 8954 |
8927 VerifyReferrerAfterRedirect( | 8955 VerifyReferrerAfterRedirect( |
8928 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | 8956 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8929 origin_server()->GetURL("/path/to/file.html"), | 8957 referrer, referrer); |
8930 origin_server()->GetURL("/path/to/file.html")); | |
8931 | 8958 |
8932 VerifyReferrerAfterRedirect( | 8959 VerifyReferrerAfterRedirect( |
8933 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, | 8960 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, |
8934 origin_server()->GetURL("/path/to/file.html"), | 8961 referrer, origin_server()->GetURL("/")); |
8962 | |
8963 VerifyReferrerAfterRedirect( | |
8964 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, referrer, | |
8935 origin_server()->GetURL("/")); | 8965 origin_server()->GetURL("/")); |
8936 | 8966 |
8967 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, referrer, | |
8968 referrer); | |
8969 | |
8970 VerifyReferrerAfterRedirect(URLRequest::ORIGIN, referrer.GetOrigin(), | |
8971 referrer.GetOrigin()); | |
8972 | |
8937 VerifyReferrerAfterRedirect( | 8973 VerifyReferrerAfterRedirect( |
8938 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, | 8974 URLRequest::CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN, referrer, GURL()); |
8939 origin_server()->GetURL("/path/to/file.html"), | |
8940 origin_server()->GetURL("/")); | |
8941 | 8975 |
8942 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, | 8976 VerifyReferrerAfterRedirect( |
8943 origin_server()->GetURL("/path/to/file.html"), | 8977 URLRequest::ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8944 origin_server()->GetURL("/path/to/file.html")); | 8978 referrer.GetOrigin(), referrer.GetOrigin()); |
8979 | |
8980 VerifyReferrerAfterRedirect(URLRequest::NO_REFERRER, GURL(), GURL()); | |
8945 } | 8981 } |
8946 | 8982 |
8947 TEST_F(URLRequestTestReferrerPolicy, HTTPToHTTPS) { | 8983 TEST_F(URLRequestTestReferrerPolicy, HTTPToHTTPS) { |
8948 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTP, | 8984 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTP, |
8949 net::EmbeddedTestServer::TYPE_HTTPS); | 8985 net::EmbeddedTestServer::TYPE_HTTPS); |
8986 GURL referrer = origin_server()->GetURL("/path/to/file.html"); | |
8950 | 8987 |
8951 VerifyReferrerAfterRedirect( | 8988 VerifyReferrerAfterRedirect( |
8952 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | 8989 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8953 origin_server()->GetURL("/path/to/file.html"), | 8990 referrer, referrer); |
8954 origin_server()->GetURL("/path/to/file.html")); | |
8955 | 8991 |
8956 VerifyReferrerAfterRedirect( | 8992 VerifyReferrerAfterRedirect( |
8957 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, | 8993 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, |
8958 origin_server()->GetURL("/path/to/file.html"), | 8994 referrer, origin_server()->GetURL("/")); |
8995 | |
8996 VerifyReferrerAfterRedirect( | |
8997 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, referrer, | |
8959 origin_server()->GetURL("/")); | 8998 origin_server()->GetURL("/")); |
8960 | 8999 |
9000 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, referrer, | |
9001 referrer); | |
9002 | |
9003 VerifyReferrerAfterRedirect(URLRequest::ORIGIN, referrer.GetOrigin(), | |
9004 referrer.GetOrigin()); | |
9005 | |
8961 VerifyReferrerAfterRedirect( | 9006 VerifyReferrerAfterRedirect( |
8962 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, | 9007 URLRequest::CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN, referrer, GURL()); |
8963 origin_server()->GetURL("/path/to/file.html"), | |
8964 origin_server()->GetURL("/")); | |
8965 | 9008 |
8966 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, | 9009 VerifyReferrerAfterRedirect( |
8967 origin_server()->GetURL("/path/to/file.html"), | 9010 URLRequest::ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8968 origin_server()->GetURL("/path/to/file.html")); | 9011 referrer.GetOrigin(), referrer.GetOrigin()); |
9012 | |
9013 VerifyReferrerAfterRedirect(URLRequest::NO_REFERRER, GURL(), GURL()); | |
8969 } | 9014 } |
8970 | 9015 |
8971 TEST_F(URLRequestTestReferrerPolicy, HTTPSToHTTP) { | 9016 TEST_F(URLRequestTestReferrerPolicy, HTTPSToHTTP) { |
8972 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTPS, | 9017 InstantiateCrossOriginServers(net::EmbeddedTestServer::TYPE_HTTPS, |
8973 net::EmbeddedTestServer::TYPE_HTTP); | 9018 net::EmbeddedTestServer::TYPE_HTTP); |
9019 GURL referrer = origin_server()->GetURL("/path/to/file.html"); | |
8974 | 9020 |
8975 VerifyReferrerAfterRedirect( | 9021 VerifyReferrerAfterRedirect( |
8976 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | 9022 URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE, |
8977 origin_server()->GetURL("/path/to/file.html"), GURL()); | 9023 referrer, GURL()); |
8978 | 9024 |
8979 VerifyReferrerAfterRedirect( | 9025 VerifyReferrerAfterRedirect( |
8980 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, | 9026 URLRequest::REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, |
8981 origin_server()->GetURL("/path/to/file.html"), GURL()); | 9027 referrer, GURL()); |
8982 | 9028 |
8983 VerifyReferrerAfterRedirect( | 9029 VerifyReferrerAfterRedirect( |
8984 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, | 9030 URLRequest::ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, referrer, |
8985 origin_server()->GetURL("/path/to/file.html"), | |
8986 origin_server()->GetURL("/")); | 9031 origin_server()->GetURL("/")); |
8987 | 9032 |
8988 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, | 9033 VerifyReferrerAfterRedirect(URLRequest::NEVER_CLEAR_REFERRER, referrer, |
8989 origin_server()->GetURL("/path/to/file.html"), | 9034 referrer); |
8990 origin_server()->GetURL("/path/to/file.html")); | 9035 |
9036 VerifyReferrerAfterRedirect(URLRequest::ORIGIN, referrer.GetOrigin(), | |
9037 referrer.GetOrigin()); | |
9038 | |
9039 VerifyReferrerAfterRedirect( | |
9040 URLRequest::CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN, referrer, GURL()); | |
9041 | |
9042 VerifyReferrerAfterRedirect( | |
9043 URLRequest::ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE, | |
9044 referrer.GetOrigin(), GURL()); | |
9045 | |
9046 VerifyReferrerAfterRedirect(URLRequest::NO_REFERRER, GURL(), GURL()); | |
8991 } | 9047 } |
8992 | 9048 |
8993 class HTTPSRequestTest : public testing::Test { | 9049 class HTTPSRequestTest : public testing::Test { |
8994 public: | 9050 public: |
8995 HTTPSRequestTest() : default_context_(true) { | 9051 HTTPSRequestTest() : default_context_(true) { |
8996 default_context_.set_network_delegate(&default_network_delegate_); | 9052 default_context_.set_network_delegate(&default_network_delegate_); |
8997 default_context_.Init(); | 9053 default_context_.Init(); |
8998 } | 9054 } |
8999 ~HTTPSRequestTest() override {} | 9055 ~HTTPSRequestTest() override {} |
9000 | 9056 |
(...skipping 2248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
11249 AddTestInterceptor()->set_main_intercept_job(std::move(job)); | 11305 AddTestInterceptor()->set_main_intercept_job(std::move(job)); |
11250 | 11306 |
11251 req->Start(); | 11307 req->Start(); |
11252 req->Cancel(); | 11308 req->Cancel(); |
11253 base::RunLoop().RunUntilIdle(); | 11309 base::RunLoop().RunUntilIdle(); |
11254 EXPECT_EQ(ERR_ABORTED, d.request_status()); | 11310 EXPECT_EQ(ERR_ABORTED, d.request_status()); |
11255 EXPECT_EQ(0, d.received_redirect_count()); | 11311 EXPECT_EQ(0, d.received_redirect_count()); |
11256 } | 11312 } |
11257 | 11313 |
11258 } // namespace net | 11314 } // namespace net |
OLD | NEW |