OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "net/http/http_network_transaction.h" | 5 #include "net/http/http_network_transaction.h" |
6 | 6 |
7 #include <math.h> // ceil | 7 #include <math.h> // ceil |
8 #include <stdarg.h> | 8 #include <stdarg.h> |
9 #include <string> | 9 #include <string> |
10 #include <vector> | 10 #include <vector> |
(...skipping 5776 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5787 | 5787 |
5788 TestOldCompletionCallback callback; | 5788 TestOldCompletionCallback callback; |
5789 | 5789 |
5790 int rv = trans->Start(&request, &callback, BoundNetLog()); | 5790 int rv = trans->Start(&request, &callback, BoundNetLog()); |
5791 EXPECT_EQ(ERR_IO_PENDING, rv); | 5791 EXPECT_EQ(ERR_IO_PENDING, rv); |
5792 | 5792 |
5793 rv = callback.WaitForResult(); | 5793 rv = callback.WaitForResult(); |
5794 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); | 5794 EXPECT_EQ(ERR_PROXY_CONNECTION_FAILED, rv); |
5795 } | 5795 } |
5796 | 5796 |
5797 // Host resolution observer used by | 5797 // Forwards all calls to MockHostResolverBase but notes RequestInfo::referrer(). |
5798 // HttpNetworkTransactionTest.ResolveMadeWithReferrer to check that host | 5798 // Used by HttpNetworkTransactionTest.ResolveMadeWithReferrer to check that host |
5799 // resovle requests are issued with a referrer of |expected_referrer|. | 5799 // resolve requests are issued with a referrer of |expected_referrer|. |
5800 class ResolutionReferrerObserver : public HostResolver::Observer { | 5800 class ObservingHostResolver : public MockHostResolverBase { |
5801 public: | 5801 public: |
5802 explicit ResolutionReferrerObserver(const GURL& expected_referrer) | 5802 explicit ObservingHostResolver(const GURL& expected_referrer) |
5803 : expected_referrer_(expected_referrer), | 5803 : MockHostResolverBase(false /* use_caching */), |
| 5804 expected_referrer_(expected_referrer), |
5804 called_start_with_referrer_(false), | 5805 called_start_with_referrer_(false), |
5805 called_finish_with_referrer_(false) { | 5806 called_finish_with_referrer_(false), |
| 5807 ALLOW_THIS_IN_INITIALIZER_LIST( |
| 5808 callback_(this, |
| 5809 &ObservingHostResolver::OnFinishResolutionWithStatus)) { |
5806 } | 5810 } |
5807 | 5811 |
5808 virtual void OnStartResolution(int id, | 5812 virtual int Resolve(const RequestInfo& info, |
5809 const HostResolver::RequestInfo& info) { | 5813 AddressList* addresses, |
5810 if (info.referrer() == expected_referrer_) | 5814 OldCompletionCallback* callback, |
| 5815 RequestHandle* out_req, |
| 5816 const BoundNetLog& net_log) OVERRIDE { |
| 5817 if (info.referrer() == expected_referrer_) { |
5811 called_start_with_referrer_ = true; | 5818 called_start_with_referrer_ = true; |
| 5819 callback_forwarded_ = callback; |
| 5820 callback = &callback_; |
| 5821 } |
| 5822 return MockHostResolverBase::Resolve(info, addresses, callback, out_req, |
| 5823 net_log); |
5812 } | 5824 } |
5813 | 5825 |
5814 virtual void OnFinishResolutionWithStatus( | 5826 void OnFinishResolutionWithStatus(int result) { |
5815 int id, bool was_resolved, const HostResolver::RequestInfo& info ) { | 5827 called_finish_with_referrer_ = true; |
5816 if (info.referrer() == expected_referrer_) | 5828 callback_forwarded_->Run(result); |
5817 called_finish_with_referrer_ = true; | |
5818 } | 5829 } |
5819 | 5830 |
5820 virtual void OnCancelResolution(int id, | 5831 virtual void CancelRequest(RequestHandle handle) OVERRIDE { |
5821 const HostResolver::RequestInfo& info ) { | |
5822 FAIL() << "Should not be cancelling any requests!"; | 5832 FAIL() << "Should not be cancelling any requests!"; |
5823 } | 5833 } |
5824 | 5834 |
5825 bool did_complete_with_expected_referrer() const { | 5835 bool did_complete_with_expected_referrer() const { |
5826 return called_start_with_referrer_ && called_finish_with_referrer_; | 5836 return called_start_with_referrer_ && called_finish_with_referrer_; |
5827 } | 5837 } |
5828 | 5838 |
5829 private: | 5839 private: |
5830 GURL expected_referrer_; | 5840 GURL expected_referrer_; |
5831 bool called_start_with_referrer_; | 5841 bool called_start_with_referrer_; |
5832 bool called_finish_with_referrer_; | 5842 bool called_finish_with_referrer_; |
| 5843 OldCompletionCallbackImpl<ObservingHostResolver> callback_; |
| 5844 OldCompletionCallback* callback_forwarded_; |
5833 | 5845 |
5834 DISALLOW_COPY_AND_ASSIGN(ResolutionReferrerObserver); | 5846 DISALLOW_COPY_AND_ASSIGN(ObservingHostResolver); |
5835 }; | 5847 }; |
5836 | 5848 |
5837 // Make sure that when HostResolver::Resolve() is invoked, it passes through | 5849 // Make sure that when HostResolver::Resolve() is invoked, it passes through |
5838 // the "referrer". This is depended on by the DNS prefetch observer. | 5850 // the "referrer". This is depended on by the DNS prefetch observer. |
5839 TEST_F(HttpNetworkTransactionTest, ResolveMadeWithReferrer) { | 5851 TEST_F(HttpNetworkTransactionTest, ResolveMadeWithReferrer) { |
5840 GURL referrer = GURL("http://expected-referrer/"); | 5852 GURL referrer = GURL("http://expected-referrer/"); |
5841 EXPECT_TRUE(referrer.is_valid()); | 5853 EXPECT_TRUE(referrer.is_valid()); |
5842 ResolutionReferrerObserver resolution_observer(referrer); | |
5843 | 5854 |
5844 // Issue a request, containing an HTTP referrer. | 5855 // Issue a request, containing an HTTP referrer. |
5845 HttpRequestInfo request; | 5856 HttpRequestInfo request; |
5846 request.method = "GET"; | 5857 request.method = "GET"; |
5847 request.url = GURL("http://www.google.com/"); | 5858 request.url = GURL("http://www.google.com/"); |
5848 request.extra_headers.SetHeader(HttpRequestHeaders::kReferer, | 5859 request.extra_headers.SetHeader(HttpRequestHeaders::kReferer, |
5849 referrer.spec()); | 5860 referrer.spec()); |
5850 | 5861 |
5851 SessionDependencies session_deps; | 5862 SessionDependencies session_deps; |
| 5863 // Attach an observer to watch the host resolutions being made. |
| 5864 ObservingHostResolver* observing_resolver = |
| 5865 new ObservingHostResolver(referrer); |
| 5866 session_deps.host_resolver.reset(observing_resolver); |
| 5867 |
5852 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction( | 5868 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction( |
5853 CreateSession(&session_deps))); | 5869 CreateSession(&session_deps))); |
5854 | 5870 |
5855 // Attach an observer to watch the host resolutions being made. | |
5856 session_deps.host_resolver->AddObserver(&resolution_observer); | |
5857 | |
5858 // Connect up a mock socket which will fail when reading. | 5871 // Connect up a mock socket which will fail when reading. |
5859 MockRead data_reads[] = { | 5872 MockRead data_reads[] = { |
5860 MockRead(false, ERR_FAILED), | 5873 MockRead(false, ERR_FAILED), |
5861 }; | 5874 }; |
5862 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); | 5875 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); |
5863 session_deps.socket_factory.AddSocketDataProvider(&data); | 5876 session_deps.socket_factory.AddSocketDataProvider(&data); |
5864 | 5877 |
5865 // Run the request until it fails reading from the socket. | 5878 // Run the request until it fails reading from the socket. |
5866 TestOldCompletionCallback callback; | 5879 TestOldCompletionCallback callback; |
5867 int rv = trans->Start(&request, &callback, BoundNetLog()); | 5880 int rv = trans->Start(&request, &callback, BoundNetLog()); |
5868 EXPECT_EQ(ERR_IO_PENDING, rv); | 5881 EXPECT_EQ(ERR_IO_PENDING, rv); |
5869 rv = callback.WaitForResult(); | 5882 rv = callback.WaitForResult(); |
5870 EXPECT_EQ(ERR_FAILED, rv); | 5883 EXPECT_EQ(ERR_FAILED, rv); |
5871 | 5884 |
5872 // Check that the host resolution observer saw |referrer|. | 5885 // Check that the host resolution observer saw |referrer|. |
5873 EXPECT_TRUE(resolution_observer.did_complete_with_expected_referrer()); | 5886 EXPECT_TRUE(observing_resolver->did_complete_with_expected_referrer()); |
5874 } | 5887 } |
5875 | 5888 |
5876 // Base test to make sure that when the load flags for a request specify to | 5889 // Base test to make sure that when the load flags for a request specify to |
5877 // bypass the cache, the DNS cache is not used. | 5890 // bypass the cache, the DNS cache is not used. |
5878 void BypassHostCacheOnRefreshHelper(int load_flags) { | 5891 void BypassHostCacheOnRefreshHelper(int load_flags) { |
5879 // Issue a request, asking to bypass the cache(s). | 5892 // Issue a request, asking to bypass the cache(s). |
5880 HttpRequestInfo request; | 5893 HttpRequestInfo request; |
5881 request.method = "GET"; | 5894 request.method = "GET"; |
5882 request.load_flags = load_flags; | 5895 request.load_flags = load_flags; |
5883 request.url = GURL("http://www.google.com/"); | 5896 request.url = GURL("http://www.google.com/"); |
(...skipping 3248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9132 int rv = host_resolver_.ResolveFromCache(info, addresses, net_log); | 9145 int rv = host_resolver_.ResolveFromCache(info, addresses, net_log); |
9133 if (rv == OK && info.host_port_pair().Equals(host_port_)) | 9146 if (rv == OK && info.host_port_pair().Equals(host_port_)) |
9134 host_resolver_.GetHostCache()->clear(); | 9147 host_resolver_.GetHostCache()->clear(); |
9135 return rv; | 9148 return rv; |
9136 } | 9149 } |
9137 | 9150 |
9138 virtual void CancelRequest(RequestHandle req) OVERRIDE { | 9151 virtual void CancelRequest(RequestHandle req) OVERRIDE { |
9139 host_resolver_.CancelRequest(req); | 9152 host_resolver_.CancelRequest(req); |
9140 } | 9153 } |
9141 | 9154 |
9142 virtual void AddObserver(Observer* observer) OVERRIDE { | |
9143 return host_resolver_.AddObserver(observer); | |
9144 } | |
9145 | |
9146 virtual void RemoveObserver(Observer* observer) OVERRIDE { | |
9147 return host_resolver_.RemoveObserver(observer); | |
9148 } | |
9149 | |
9150 MockCachingHostResolver* GetMockHostResolver() { | 9155 MockCachingHostResolver* GetMockHostResolver() { |
9151 return &host_resolver_; | 9156 return &host_resolver_; |
9152 } | 9157 } |
9153 | 9158 |
9154 private: | 9159 private: |
9155 MockCachingHostResolver host_resolver_; | 9160 MockCachingHostResolver host_resolver_; |
9156 const HostPortPair host_port_; | 9161 const HostPortPair host_port_; |
9157 }; | 9162 }; |
9158 | 9163 |
9159 TEST_F(HttpNetworkTransactionTest, | 9164 TEST_F(HttpNetworkTransactionTest, |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9309 StaticSocketDataProvider* data[] = { &data1, &data2 }; | 9314 StaticSocketDataProvider* data[] = { &data1, &data2 }; |
9310 | 9315 |
9311 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); | 9316 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); |
9312 | 9317 |
9313 EXPECT_EQ(OK, out.rv); | 9318 EXPECT_EQ(OK, out.rv); |
9314 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); | 9319 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); |
9315 EXPECT_EQ("hello world", out.response_data); | 9320 EXPECT_EQ("hello world", out.response_data); |
9316 } | 9321 } |
9317 | 9322 |
9318 } // namespace net | 9323 } // namespace net |
OLD | NEW |