OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 <stack> | 5 #include <stack> |
6 #include <utility> | 6 #include <utility> |
7 | 7 |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/bind_helpers.h" | 9 #include "base/bind_helpers.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 const char kHttpBasicBody[] = "Hello"; | 39 const char kHttpBasicBody[] = "Hello"; |
40 | 40 |
41 const int kNumBlocks = 4; | 41 const int kNumBlocks = 4; |
42 const int kBlockSize = 1024; | 42 const int kBlockSize = 1024; |
43 | 43 |
44 class MockURLRequestJobFactory : public net::URLRequestJobFactory { | 44 class MockURLRequestJobFactory : public net::URLRequestJobFactory { |
45 public: | 45 public: |
46 MockURLRequestJobFactory() : job_(NULL) { | 46 MockURLRequestJobFactory() : job_(NULL) { |
47 } | 47 } |
48 | 48 |
49 virtual ~MockURLRequestJobFactory() { | 49 ~MockURLRequestJobFactory() override { DCHECK(!job_); } |
50 DCHECK(!job_); | |
51 } | |
52 | 50 |
53 void SetJob(net::URLRequestJob* job) { | 51 void SetJob(net::URLRequestJob* job) { |
54 job_ = job; | 52 job_ = job; |
55 } | 53 } |
56 | 54 |
57 bool has_job() const { | 55 bool has_job() const { |
58 return job_ != NULL; | 56 return job_ != NULL; |
59 } | 57 } |
60 | 58 |
61 // net::URLRequestJobFactory implementation. | 59 // net::URLRequestJobFactory implementation. |
62 virtual net::URLRequestJob* MaybeCreateJobWithProtocolHandler( | 60 net::URLRequestJob* MaybeCreateJobWithProtocolHandler( |
63 const std::string& scheme, | 61 const std::string& scheme, |
64 net::URLRequest* request, | 62 net::URLRequest* request, |
65 net::NetworkDelegate* network_delegate) const override { | 63 net::NetworkDelegate* network_delegate) const override { |
66 if (job_) { | 64 if (job_) { |
67 net::URLRequestJob* temp = job_; | 65 net::URLRequestJob* temp = job_; |
68 job_ = NULL; | 66 job_ = NULL; |
69 return temp; | 67 return temp; |
70 } else { | 68 } else { |
71 return new net::URLRequestErrorJob(request, | 69 return new net::URLRequestErrorJob(request, |
72 network_delegate, | 70 network_delegate, |
73 net::ERR_INTERNET_DISCONNECTED); | 71 net::ERR_INTERNET_DISCONNECTED); |
74 } | 72 } |
75 } | 73 } |
76 | 74 |
77 virtual bool IsHandledProtocol(const std::string& scheme) const override { | 75 bool IsHandledProtocol(const std::string& scheme) const override { |
78 return scheme == "http"; | 76 return scheme == "http"; |
79 }; | 77 }; |
80 | 78 |
81 virtual bool IsHandledURL(const GURL& url) const override { | 79 bool IsHandledURL(const GURL& url) const override { |
82 return url.SchemeIs("http"); | 80 return url.SchemeIs("http"); |
83 } | 81 } |
84 | 82 |
85 virtual bool IsSafeRedirectTarget(const GURL& location) const override { | 83 bool IsSafeRedirectTarget(const GURL& location) const override { |
86 return false; | 84 return false; |
87 } | 85 } |
88 | 86 |
89 private: | 87 private: |
90 mutable net::URLRequestJob* job_; | 88 mutable net::URLRequestJob* job_; |
91 }; | 89 }; |
92 | 90 |
93 class AppCacheURLRequestJobTest : public testing::Test { | 91 class AppCacheURLRequestJobTest : public testing::Test { |
94 public: | 92 public: |
95 | 93 |
96 // Test Harness ------------------------------------------------------------- | 94 // Test Harness ------------------------------------------------------------- |
97 // TODO(michaeln): share this test harness with AppCacheResponseTest | 95 // TODO(michaeln): share this test harness with AppCacheResponseTest |
98 | 96 |
99 class MockStorageDelegate : public AppCacheStorage::Delegate { | 97 class MockStorageDelegate : public AppCacheStorage::Delegate { |
100 public: | 98 public: |
101 explicit MockStorageDelegate(AppCacheURLRequestJobTest* test) | 99 explicit MockStorageDelegate(AppCacheURLRequestJobTest* test) |
102 : loaded_info_id_(0), test_(test) { | 100 : loaded_info_id_(0), test_(test) { |
103 } | 101 } |
104 | 102 |
105 virtual void OnResponseInfoLoaded(AppCacheResponseInfo* info, | 103 void OnResponseInfoLoaded(AppCacheResponseInfo* info, |
106 int64 response_id) override { | 104 int64 response_id) override { |
107 loaded_info_ = info; | 105 loaded_info_ = info; |
108 loaded_info_id_ = response_id; | 106 loaded_info_id_ = response_id; |
109 test_->ScheduleNextTask(); | 107 test_->ScheduleNextTask(); |
110 } | 108 } |
111 | 109 |
112 scoped_refptr<AppCacheResponseInfo> loaded_info_; | 110 scoped_refptr<AppCacheResponseInfo> loaded_info_; |
113 int64 loaded_info_id_; | 111 int64 loaded_info_id_; |
114 AppCacheURLRequestJobTest* test_; | 112 AppCacheURLRequestJobTest* test_; |
115 }; | 113 }; |
116 | 114 |
117 class MockURLRequestDelegate : public net::URLRequest::Delegate { | 115 class MockURLRequestDelegate : public net::URLRequest::Delegate { |
118 public: | 116 public: |
119 explicit MockURLRequestDelegate(AppCacheURLRequestJobTest* test) | 117 explicit MockURLRequestDelegate(AppCacheURLRequestJobTest* test) |
120 : test_(test), | 118 : test_(test), |
121 received_data_(new net::IOBuffer(kNumBlocks * kBlockSize)), | 119 received_data_(new net::IOBuffer(kNumBlocks * kBlockSize)), |
122 did_receive_headers_(false), amount_received_(0), | 120 did_receive_headers_(false), amount_received_(0), |
123 kill_after_amount_received_(0), kill_with_io_pending_(false) { | 121 kill_after_amount_received_(0), kill_with_io_pending_(false) { |
124 } | 122 } |
125 | 123 |
126 virtual void OnResponseStarted(net::URLRequest* request) override { | 124 void OnResponseStarted(net::URLRequest* request) override { |
127 amount_received_ = 0; | 125 amount_received_ = 0; |
128 did_receive_headers_ = false; | 126 did_receive_headers_ = false; |
129 if (request->status().is_success()) { | 127 if (request->status().is_success()) { |
130 EXPECT_TRUE(request->response_headers()); | 128 EXPECT_TRUE(request->response_headers()); |
131 did_receive_headers_ = true; | 129 did_receive_headers_ = true; |
132 received_info_ = request->response_info(); | 130 received_info_ = request->response_info(); |
133 ReadSome(request); | 131 ReadSome(request); |
134 } else { | 132 } else { |
135 RequestComplete(); | 133 RequestComplete(); |
136 } | 134 } |
137 } | 135 } |
138 | 136 |
139 virtual void OnReadCompleted(net::URLRequest* request, | 137 void OnReadCompleted(net::URLRequest* request, int bytes_read) override { |
140 int bytes_read) override { | |
141 if (bytes_read > 0) { | 138 if (bytes_read > 0) { |
142 amount_received_ += bytes_read; | 139 amount_received_ += bytes_read; |
143 | 140 |
144 if (kill_after_amount_received_ && !kill_with_io_pending_) { | 141 if (kill_after_amount_received_ && !kill_with_io_pending_) { |
145 if (amount_received_ >= kill_after_amount_received_) { | 142 if (amount_received_ >= kill_after_amount_received_) { |
146 request->Cancel(); | 143 request->Cancel(); |
147 return; | 144 return; |
148 } | 145 } |
149 } | 146 } |
150 | 147 |
(...skipping 703 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
854 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequest); | 851 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequest); |
855 } | 852 } |
856 | 853 |
857 TEST_F(AppCacheURLRequestJobTest, CancelRequestWithIOPending) { | 854 TEST_F(AppCacheURLRequestJobTest, CancelRequestWithIOPending) { |
858 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequestWithIOPending); | 855 RunTestOnIOThread(&AppCacheURLRequestJobTest::CancelRequestWithIOPending); |
859 } | 856 } |
860 | 857 |
861 } // namespace | 858 } // namespace |
862 | 859 |
863 } // namespace content | 860 } // namespace content |
OLD | NEW |