| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "components/component_updater/test/url_request_post_interceptor.h" | 5 #include "components/update_client/test/url_request_post_interceptor.h" |
| 6 | 6 |
| 7 #include "base/files/file_util.h" | 7 #include "base/files/file_util.h" |
| 8 #include "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
| 10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
| 11 #include "components/component_updater/test/test_configurator.h" | 11 #include "components/update_client/test/test_configurator.h" |
| 12 #include "net/base/upload_bytes_element_reader.h" | 12 #include "net/base/upload_bytes_element_reader.h" |
| 13 #include "net/base/upload_data_stream.h" | 13 #include "net/base/upload_data_stream.h" |
| 14 #include "net/url_request/url_request.h" | 14 #include "net/url_request/url_request.h" |
| 15 #include "net/url_request/url_request_filter.h" | 15 #include "net/url_request/url_request_filter.h" |
| 16 #include "net/url_request/url_request_interceptor.h" | 16 #include "net/url_request/url_request_interceptor.h" |
| 17 #include "net/url_request/url_request_simple_job.h" | 17 #include "net/url_request/url_request_simple_job.h" |
| 18 #include "net/url_request/url_request_test_util.h" | 18 #include "net/url_request/url_request_test_util.h" |
| 19 | 19 |
| 20 namespace component_updater { | 20 namespace update_client { |
| 21 | 21 |
| 22 // Returns a canned response. | 22 // Returns a canned response. |
| 23 class URLRequestMockJob : public net::URLRequestSimpleJob { | 23 class URLRequestMockJob : public net::URLRequestSimpleJob { |
| 24 public: | 24 public: |
| 25 URLRequestMockJob(net::URLRequest* request, | 25 URLRequestMockJob(net::URLRequest* request, |
| 26 net::NetworkDelegate* network_delegate, | 26 net::NetworkDelegate* network_delegate, |
| 27 int response_code, | 27 int response_code, |
| 28 const std::string& response_body) | 28 const std::string& response_body) |
| 29 : net::URLRequestSimpleJob(request, network_delegate), | 29 : net::URLRequestSimpleJob(request, network_delegate), |
| 30 response_code_(response_code), | 30 response_code_(response_code), |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 return requests_; | 116 return requests_; |
| 117 } | 117 } |
| 118 | 118 |
| 119 std::string URLRequestPostInterceptor::GetRequestsAsString() const { | 119 std::string URLRequestPostInterceptor::GetRequestsAsString() const { |
| 120 std::vector<std::string> requests(GetRequests()); | 120 std::vector<std::string> requests(GetRequests()); |
| 121 | 121 |
| 122 std::string s = "Requests are:"; | 122 std::string s = "Requests are:"; |
| 123 | 123 |
| 124 int i = 0; | 124 int i = 0; |
| 125 for (std::vector<std::string>::const_iterator it = requests.begin(); | 125 for (std::vector<std::string>::const_iterator it = requests.begin(); |
| 126 it != requests.end(); | 126 it != requests.end(); ++it) { |
| 127 ++it) { | |
| 128 s.append(base::StringPrintf("\n (%d): %s", ++i, it->c_str())); | 127 s.append(base::StringPrintf("\n (%d): %s", ++i, it->c_str())); |
| 129 } | 128 } |
| 130 | 129 |
| 131 return s; | 130 return s; |
| 132 } | 131 } |
| 133 | 132 |
| 134 void URLRequestPostInterceptor::Reset() { | 133 void URLRequestPostInterceptor::Reset() { |
| 135 base::AutoLock auto_lock(interceptor_lock_); | 134 base::AutoLock auto_lock(interceptor_lock_); |
| 136 hit_count_ = 0; | 135 hit_count_ = 0; |
| 137 requests_.clear(); | 136 requests_.clear(); |
| 138 ClearExpectations(); | 137 ClearExpectations(); |
| 139 } | 138 } |
| 140 | 139 |
| 141 class URLRequestPostInterceptor::Delegate : public net::URLRequestInterceptor { | 140 class URLRequestPostInterceptor::Delegate : public net::URLRequestInterceptor { |
| 142 public: | 141 public: |
| 143 Delegate(const std::string& scheme, | 142 Delegate(const std::string& scheme, |
| 144 const std::string& hostname, | 143 const std::string& hostname, |
| 145 const scoped_refptr<base::SequencedTaskRunner>& io_task_runner) | 144 const scoped_refptr<base::SequencedTaskRunner>& io_task_runner) |
| 146 : scheme_(scheme), hostname_(hostname), io_task_runner_(io_task_runner) {} | 145 : scheme_(scheme), hostname_(hostname), io_task_runner_(io_task_runner) {} |
| 147 | 146 |
| 148 void Register() { | 147 void Register() { |
| 149 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); | 148 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); |
| 150 net::URLRequestFilter::GetInstance()->AddHostnameInterceptor( | 149 net::URLRequestFilter::GetInstance()->AddHostnameInterceptor( |
| 151 scheme_, hostname_, scoped_ptr<net::URLRequestInterceptor>(this)); | 150 scheme_, hostname_, scoped_ptr<net::URLRequestInterceptor>(this)); |
| 152 } | 151 } |
| 153 | 152 |
| 154 void Unregister() { | 153 void Unregister() { |
| 155 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); | 154 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); |
| 156 for (InterceptorMap::iterator it = interceptors_.begin(); | 155 for (InterceptorMap::iterator it = interceptors_.begin(); |
| 157 it != interceptors_.end(); | 156 it != interceptors_.end(); ++it) |
| 158 ++it) | |
| 159 delete (*it).second; | 157 delete (*it).second; |
| 160 net::URLRequestFilter::GetInstance()->RemoveHostnameHandler(scheme_, | 158 net::URLRequestFilter::GetInstance()->RemoveHostnameHandler(scheme_, |
| 161 hostname_); | 159 hostname_); |
| 162 } | 160 } |
| 163 | 161 |
| 164 void OnCreateInterceptor(URLRequestPostInterceptor* interceptor) { | 162 void OnCreateInterceptor(URLRequestPostInterceptor* interceptor) { |
| 165 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); | 163 DCHECK(io_task_runner_->RunsTasksOnCurrentThread()); |
| 166 DCHECK(interceptors_.find(interceptor->GetUrl()) == interceptors_.end()); | 164 DCHECK(interceptors_.find(interceptor->GetUrl()) == interceptors_.end()); |
| 167 | 165 |
| 168 interceptors_.insert(std::make_pair(interceptor->GetUrl(), interceptor)); | 166 interceptors_.insert(std::make_pair(interceptor->GetUrl(), interceptor)); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 return NULL; | 209 return NULL; |
| 212 const URLRequestPostInterceptor::Expectation& expectation( | 210 const URLRequestPostInterceptor::Expectation& expectation( |
| 213 interceptor->expectations_.front()); | 211 interceptor->expectations_.front()); |
| 214 if (expectation.first->Match(request_body)) { | 212 if (expectation.first->Match(request_body)) { |
| 215 const int response_code(expectation.second.response_code); | 213 const int response_code(expectation.second.response_code); |
| 216 const std::string response_body(expectation.second.response_body); | 214 const std::string response_body(expectation.second.response_body); |
| 217 delete expectation.first; | 215 delete expectation.first; |
| 218 interceptor->expectations_.pop(); | 216 interceptor->expectations_.pop(); |
| 219 ++interceptor->hit_count_; | 217 ++interceptor->hit_count_; |
| 220 | 218 |
| 221 return new URLRequestMockJob( | 219 return new URLRequestMockJob(request, network_delegate, response_code, |
| 222 request, network_delegate, response_code, response_body); | 220 response_body); |
| 223 } | 221 } |
| 224 } | 222 } |
| 225 | 223 |
| 226 return NULL; | 224 return NULL; |
| 227 } | 225 } |
| 228 | 226 |
| 229 typedef std::map<GURL, URLRequestPostInterceptor*> InterceptorMap; | 227 typedef std::map<GURL, URLRequestPostInterceptor*> InterceptorMap; |
| 230 InterceptorMap interceptors_; | 228 InterceptorMap interceptors_; |
| 231 | 229 |
| 232 const std::string scheme_; | 230 const std::string scheme_; |
| 233 const std::string hostname_; | 231 const std::string hostname_; |
| 234 scoped_refptr<base::SequencedTaskRunner> io_task_runner_; | 232 scoped_refptr<base::SequencedTaskRunner> io_task_runner_; |
| 235 | 233 |
| 236 DISALLOW_COPY_AND_ASSIGN(Delegate); | 234 DISALLOW_COPY_AND_ASSIGN(Delegate); |
| 237 }; | 235 }; |
| 238 | 236 |
| 239 URLRequestPostInterceptorFactory::URLRequestPostInterceptorFactory( | 237 URLRequestPostInterceptorFactory::URLRequestPostInterceptorFactory( |
| 240 const std::string& scheme, | 238 const std::string& scheme, |
| 241 const std::string& hostname, | 239 const std::string& hostname, |
| 242 const scoped_refptr<base::SequencedTaskRunner>& io_task_runner) | 240 const scoped_refptr<base::SequencedTaskRunner>& io_task_runner) |
| 243 : scheme_(scheme), | 241 : scheme_(scheme), |
| 244 hostname_(hostname), | 242 hostname_(hostname), |
| 245 io_task_runner_(io_task_runner), | 243 io_task_runner_(io_task_runner), |
| 246 delegate_(new URLRequestPostInterceptor::Delegate(scheme, | 244 delegate_(new URLRequestPostInterceptor::Delegate(scheme, |
| 247 hostname, | 245 hostname, |
| 248 io_task_runner)) { | 246 io_task_runner)) { |
| 249 io_task_runner_->PostTask( | 247 io_task_runner_->PostTask( |
| 250 FROM_HERE, | 248 FROM_HERE, base::Bind(&URLRequestPostInterceptor::Delegate::Register, |
| 251 base::Bind(&URLRequestPostInterceptor::Delegate::Register, | 249 base::Unretained(delegate_))); |
| 252 base::Unretained(delegate_))); | |
| 253 } | 250 } |
| 254 | 251 |
| 255 URLRequestPostInterceptorFactory::~URLRequestPostInterceptorFactory() { | 252 URLRequestPostInterceptorFactory::~URLRequestPostInterceptorFactory() { |
| 256 io_task_runner_->PostTask( | 253 io_task_runner_->PostTask( |
| 257 FROM_HERE, | 254 FROM_HERE, base::Bind(&URLRequestPostInterceptor::Delegate::Unregister, |
| 258 base::Bind(&URLRequestPostInterceptor::Delegate::Unregister, | 255 base::Unretained(delegate_))); |
| 259 base::Unretained(delegate_))); | |
| 260 } | 256 } |
| 261 | 257 |
| 262 URLRequestPostInterceptor* URLRequestPostInterceptorFactory::CreateInterceptor( | 258 URLRequestPostInterceptor* URLRequestPostInterceptorFactory::CreateInterceptor( |
| 263 const base::FilePath& filepath) { | 259 const base::FilePath& filepath) { |
| 264 const GURL base_url( | 260 const GURL base_url( |
| 265 base::StringPrintf("%s://%s", scheme_.c_str(), hostname_.c_str())); | 261 base::StringPrintf("%s://%s", scheme_.c_str(), hostname_.c_str())); |
| 266 GURL absolute_url(base_url.Resolve(filepath.MaybeAsASCII())); | 262 GURL absolute_url(base_url.Resolve(filepath.MaybeAsASCII())); |
| 267 URLRequestPostInterceptor* interceptor( | 263 URLRequestPostInterceptor* interceptor( |
| 268 new URLRequestPostInterceptor(absolute_url, io_task_runner_)); | 264 new URLRequestPostInterceptor(absolute_url, io_task_runner_)); |
| 269 bool res = io_task_runner_->PostTask( | 265 bool res = io_task_runner_->PostTask( |
| 270 FROM_HERE, | 266 FROM_HERE, |
| 271 base::Bind(&URLRequestPostInterceptor::Delegate::OnCreateInterceptor, | 267 base::Bind(&URLRequestPostInterceptor::Delegate::OnCreateInterceptor, |
| 272 base::Unretained(delegate_), | 268 base::Unretained(delegate_), base::Unretained(interceptor))); |
| 273 base::Unretained(interceptor))); | |
| 274 if (!res) { | 269 if (!res) { |
| 275 delete interceptor; | 270 delete interceptor; |
| 276 return NULL; | 271 return NULL; |
| 277 } | 272 } |
| 278 | 273 |
| 279 return interceptor; | 274 return interceptor; |
| 280 } | 275 } |
| 281 | 276 |
| 282 bool PartialMatch::Match(const std::string& actual) const { | 277 bool PartialMatch::Match(const std::string& actual) const { |
| 283 return actual.find(expected_) != std::string::npos; | 278 return actual.find(expected_) != std::string::npos; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 296 URLRequestPostInterceptor* InterceptorFactory::CreateInterceptor() { | 291 URLRequestPostInterceptor* InterceptorFactory::CreateInterceptor() { |
| 297 return CreateInterceptorForPath(POST_INTERCEPT_PATH); | 292 return CreateInterceptorForPath(POST_INTERCEPT_PATH); |
| 298 } | 293 } |
| 299 | 294 |
| 300 URLRequestPostInterceptor* InterceptorFactory::CreateInterceptorForPath( | 295 URLRequestPostInterceptor* InterceptorFactory::CreateInterceptorForPath( |
| 301 const char* url_path) { | 296 const char* url_path) { |
| 302 return URLRequestPostInterceptorFactory::CreateInterceptor( | 297 return URLRequestPostInterceptorFactory::CreateInterceptor( |
| 303 base::FilePath::FromUTF8Unsafe(url_path)); | 298 base::FilePath::FromUTF8Unsafe(url_path)); |
| 304 } | 299 } |
| 305 | 300 |
| 306 } // namespace component_updater | 301 } // namespace update_client |
| OLD | NEW |