Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(426)

Side by Side Diff: chrome/browser/net/dns_probe_browsertest.cc

Issue 300693005: Make URLRequestFilter use URLRequestInterceptors. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix merge Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 <set> 5 #include <set>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
(...skipping 17 matching lines...) Expand all
28 #include "chrome/test/base/ui_test_utils.h" 28 #include "chrome/test/base/ui_test_utils.h"
29 #include "content/public/browser/browser_thread.h" 29 #include "content/public/browser/browser_thread.h"
30 #include "content/public/browser/web_contents.h" 30 #include "content/public/browser/web_contents.h"
31 #include "content/public/test/browser_test_utils.h" 31 #include "content/public/test/browser_test_utils.h"
32 #include "content/public/test/test_navigation_observer.h" 32 #include "content/public/test/test_navigation_observer.h"
33 #include "content/test/net/url_request_failed_job.h" 33 #include "content/test/net/url_request_failed_job.h"
34 #include "content/test/net/url_request_mock_http_job.h" 34 #include "content/test/net/url_request_mock_http_job.h"
35 #include "net/base/net_errors.h" 35 #include "net/base/net_errors.h"
36 #include "net/dns/dns_test_util.h" 36 #include "net/dns/dns_test_util.h"
37 #include "net/url_request/url_request_filter.h" 37 #include "net/url_request/url_request_filter.h"
38 #include "net/url_request/url_request_interceptor.h"
38 #include "net/url_request/url_request_job.h" 39 #include "net/url_request/url_request_job.h"
39 #include "net/url_request/url_request_job_factory.h"
40 40
41 using base::Bind; 41 using base::Bind;
42 using base::Callback; 42 using base::Callback;
43 using base::Closure; 43 using base::Closure;
44 using base::ConstRef; 44 using base::ConstRef;
45 using base::FilePath; 45 using base::FilePath;
46 using base::MessageLoop; 46 using base::MessageLoop;
47 using base::Unretained; 47 using base::Unretained;
48 using chrome_common_net::DnsProbeStatus; 48 using chrome_common_net::DnsProbeStatus;
49 using content::BrowserThread; 49 using content::BrowserThread;
50 using content::URLRequestFailedJob; 50 using content::URLRequestFailedJob;
51 using content::URLRequestMockHTTPJob; 51 using content::URLRequestMockHTTPJob;
52 using content::WebContents; 52 using content::WebContents;
53 using google_util::LinkDoctorBaseURL; 53 using google_util::LinkDoctorBaseURL;
54 using net::MockDnsClientRule; 54 using net::MockDnsClientRule;
55 using net::NetworkDelegate; 55 using net::NetworkDelegate;
56 using net::URLRequest; 56 using net::URLRequest;
57 using net::URLRequestFilter; 57 using net::URLRequestFilter;
58 using net::URLRequestInterceptor;
58 using net::URLRequestJob; 59 using net::URLRequestJob;
59 using net::URLRequestJobFactory;
60 using ui_test_utils::NavigateToURL; 60 using ui_test_utils::NavigateToURL;
61 using ui_test_utils::NavigateToURLBlockUntilNavigationsComplete; 61 using ui_test_utils::NavigateToURLBlockUntilNavigationsComplete;
62 62
63 namespace chrome_browser_net { 63 namespace chrome_browser_net {
64 64
65 namespace { 65 namespace {
66 66
67 // Postable function to run a Closure on the UI thread. Since 67 // Postable function to run a Closure on the UI thread. Since
68 // BrowserThread::PostTask returns a bool, it can't directly be posted to 68 // BrowserThread::PostTask returns a bool, it can't directly be posted to
69 // another thread. 69 // another thread.
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 virtual ~DelayableURLRequestMockHTTPJob() { 208 virtual ~DelayableURLRequestMockHTTPJob() {
209 if (should_delay_) 209 if (should_delay_)
210 destruction_callback_.Run(this); 210 destruction_callback_.Run(this);
211 } 211 }
212 212
213 bool should_delay_; 213 bool should_delay_;
214 bool start_delayed_; 214 bool start_delayed_;
215 const DestructionCallback destruction_callback_; 215 const DestructionCallback destruction_callback_;
216 }; 216 };
217 217
218 // ProtocolHandler for navigation correction requests. Can cause requests to 218 // Interceptor for navigation correction requests. Can cause requests to
219 // fail with an error, and/or delay a request until a test allows to continue. 219 // fail with an error, and/or delay a request until a test allows to continue.
220 // Also can run a callback when a delayed request is cancelled. 220 // Also can run a callback when a delayed request is cancelled.
221 class BreakableCorrectionProtocolHandler 221 class BreakableCorrectionInterceptor : public URLRequestInterceptor {
222 : public URLRequestJobFactory::ProtocolHandler {
223 public: 222 public:
224 explicit BreakableCorrectionProtocolHandler( 223 explicit BreakableCorrectionInterceptor(
225 const FilePath& mock_corrections_file_path) 224 const FilePath& mock_corrections_file_path)
226 : mock_corrections_file_path_(mock_corrections_file_path), 225 : mock_corrections_file_path_(mock_corrections_file_path),
227 net_error_(net::OK), 226 net_error_(net::OK),
228 delay_requests_(false), 227 delay_requests_(false),
229 on_request_destroyed_callback_( 228 on_request_destroyed_callback_(
230 base::Bind(&BreakableCorrectionProtocolHandler::OnRequestDestroyed, 229 base::Bind(&BreakableCorrectionInterceptor::OnRequestDestroyed,
231 base::Unretained(this))) { 230 base::Unretained(this))) {
232 } 231 }
233 232
234 virtual ~BreakableCorrectionProtocolHandler() { 233 virtual ~BreakableCorrectionInterceptor() {
235 // All delayed requests should have been resumed or cancelled by this point. 234 // All delayed requests should have been resumed or cancelled by this point.
236 EXPECT_TRUE(delayed_requests_.empty()); 235 EXPECT_TRUE(delayed_requests_.empty());
237 } 236 }
238 237
239 virtual URLRequestJob* MaybeCreateJob( 238 virtual URLRequestJob* MaybeInterceptRequest(
240 URLRequest* request, 239 URLRequest* request,
241 NetworkDelegate* network_delegate) const OVERRIDE { 240 NetworkDelegate* network_delegate) const OVERRIDE {
242 if (net_error_ != net::OK) { 241 if (net_error_ != net::OK) {
243 DelayableURLRequestFailedJob* job = 242 DelayableURLRequestFailedJob* job =
244 new DelayableURLRequestFailedJob( 243 new DelayableURLRequestFailedJob(
245 request, network_delegate, net_error_, delay_requests_, 244 request, network_delegate, net_error_, delay_requests_,
246 on_request_destroyed_callback_); 245 on_request_destroyed_callback_);
247 if (delay_requests_) 246 if (delay_requests_)
248 delayed_requests_.insert(job); 247 delayed_requests_.insert(job);
249 return job; 248 return job;
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 MockDnsClientRule::Result public_good_result); 320 MockDnsClientRule::Result public_good_result);
322 void SetCorrectionServiceNetError(int net_error); 321 void SetCorrectionServiceNetError(int net_error);
323 void SetCorrectionServiceDelayRequests(bool delay_requests); 322 void SetCorrectionServiceDelayRequests(bool delay_requests);
324 void SetRequestDestructionCallback(const base::Closure& callback); 323 void SetRequestDestructionCallback(const base::Closure& callback);
325 void StartDelayedProbes(int expected_delayed_probe_count); 324 void StartDelayedProbes(int expected_delayed_probe_count);
326 325
327 private: 326 private:
328 IOThread* io_thread_; 327 IOThread* io_thread_;
329 DnsProbeService* original_dns_probe_service_; 328 DnsProbeService* original_dns_probe_service_;
330 DelayingDnsProbeService* delaying_dns_probe_service_; 329 DelayingDnsProbeService* delaying_dns_probe_service_;
331 BreakableCorrectionProtocolHandler* protocol_handler_; 330 BreakableCorrectionInterceptor* interceptor_;
332 FilePath mock_corrections_file_path_; 331 FilePath mock_corrections_file_path_;
333 }; 332 };
334 333
335 DnsProbeBrowserTestIOThreadHelper::DnsProbeBrowserTestIOThreadHelper() 334 DnsProbeBrowserTestIOThreadHelper::DnsProbeBrowserTestIOThreadHelper()
336 : io_thread_(NULL), 335 : io_thread_(NULL),
337 original_dns_probe_service_(NULL), 336 original_dns_probe_service_(NULL),
338 delaying_dns_probe_service_(NULL), 337 delaying_dns_probe_service_(NULL),
339 protocol_handler_(NULL), 338 interceptor_(NULL),
340 mock_corrections_file_path_(GetMockLinkDoctorFilePath()) {} 339 mock_corrections_file_path_(GetMockLinkDoctorFilePath()) {}
341 340
342 void DnsProbeBrowserTestIOThreadHelper::SetUpOnIOThread(IOThread* io_thread) { 341 void DnsProbeBrowserTestIOThreadHelper::SetUpOnIOThread(IOThread* io_thread) {
343 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 342 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
344 CHECK(io_thread); 343 CHECK(io_thread);
345 CHECK(!io_thread_); 344 CHECK(!io_thread_);
346 CHECK(!original_dns_probe_service_); 345 CHECK(!original_dns_probe_service_);
347 CHECK(!delaying_dns_probe_service_); 346 CHECK(!delaying_dns_probe_service_);
348 CHECK(!protocol_handler_); 347 CHECK(!interceptor_);
349 348
350 io_thread_ = io_thread; 349 io_thread_ = io_thread;
351 350
352 delaying_dns_probe_service_ = new DelayingDnsProbeService(); 351 delaying_dns_probe_service_ = new DelayingDnsProbeService();
353 352
354 IOThread::Globals* globals = io_thread_->globals(); 353 IOThread::Globals* globals = io_thread_->globals();
355 original_dns_probe_service_ = globals->dns_probe_service.release(); 354 original_dns_probe_service_ = globals->dns_probe_service.release();
356 globals->dns_probe_service.reset(delaying_dns_probe_service_); 355 globals->dns_probe_service.reset(delaying_dns_probe_service_);
357 356
358 URLRequestFailedJob::AddUrlHandler(); 357 URLRequestFailedJob::AddUrlHandler();
359 358
360 scoped_ptr<URLRequestJobFactory::ProtocolHandler> protocol_handler( 359 interceptor_ =
361 new BreakableCorrectionProtocolHandler(mock_corrections_file_path_)); 360 new BreakableCorrectionInterceptor(mock_corrections_file_path_);
362 protocol_handler_ = 361 URLRequestFilter::GetInstance()->AddUrlInterceptor(
363 static_cast<BreakableCorrectionProtocolHandler*>(protocol_handler.get()); 362 LinkDoctorBaseURL(), scoped_ptr<URLRequestInterceptor>(interceptor_));
364 URLRequestFilter::GetInstance()->AddUrlProtocolHandler(
365 LinkDoctorBaseURL(), protocol_handler.Pass());
366 } 363 }
367 364
368 void DnsProbeBrowserTestIOThreadHelper::CleanUpOnIOThreadAndDeleteHelper() { 365 void DnsProbeBrowserTestIOThreadHelper::CleanUpOnIOThreadAndDeleteHelper() {
369 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 366 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
370 367
371 URLRequestFilter::GetInstance()->ClearHandlers(); 368 URLRequestFilter::GetInstance()->ClearHandlers();
372 369
373 IOThread::Globals* globals = io_thread_->globals(); 370 IOThread::Globals* globals = io_thread_->globals();
374 scoped_ptr<DnsProbeService> delaying_dns_probe_service( 371 scoped_ptr<DnsProbeService> delaying_dns_probe_service(
375 globals->dns_probe_service.release()); 372 globals->dns_probe_service.release());
(...skipping 13 matching lines...) Expand all
389 service->SetSystemClientForTesting( 386 service->SetSystemClientForTesting(
390 CreateMockDnsClientForProbes(system_result)); 387 CreateMockDnsClientForProbes(system_result));
391 service->SetPublicClientForTesting( 388 service->SetPublicClientForTesting(
392 CreateMockDnsClientForProbes(public_result)); 389 CreateMockDnsClientForProbes(public_result));
393 } 390 }
394 391
395 void DnsProbeBrowserTestIOThreadHelper::SetCorrectionServiceNetError( 392 void DnsProbeBrowserTestIOThreadHelper::SetCorrectionServiceNetError(
396 int net_error) { 393 int net_error) {
397 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 394 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
398 395
399 protocol_handler_->set_net_error(net_error); 396 interceptor_->set_net_error(net_error);
400 } 397 }
401 398
402 void DnsProbeBrowserTestIOThreadHelper::SetCorrectionServiceDelayRequests( 399 void DnsProbeBrowserTestIOThreadHelper::SetCorrectionServiceDelayRequests(
403 bool delay_requests) { 400 bool delay_requests) {
404 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 401 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
405 402
406 protocol_handler_->SetDelayRequests(delay_requests); 403 interceptor_->SetDelayRequests(delay_requests);
407 } 404 }
408 405
409 void DnsProbeBrowserTestIOThreadHelper::SetRequestDestructionCallback( 406 void DnsProbeBrowserTestIOThreadHelper::SetRequestDestructionCallback(
410 const base::Closure& callback) { 407 const base::Closure& callback) {
411 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 408 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
412 409
413 protocol_handler_->SetRequestDestructionCallback(callback); 410 interceptor_->SetRequestDestructionCallback(callback);
414 } 411 }
415 412
416 void DnsProbeBrowserTestIOThreadHelper::StartDelayedProbes( 413 void DnsProbeBrowserTestIOThreadHelper::StartDelayedProbes(
417 int expected_delayed_probe_count) { 414 int expected_delayed_probe_count) {
418 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 415 CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
419 416
420 CHECK(delaying_dns_probe_service_); 417 CHECK(delaying_dns_probe_service_);
421 418
422 int actual_delayed_probe_count = 419 int actual_delayed_probe_count =
423 delaying_dns_probe_service_->delayed_probe_count(); 420 delaying_dns_probe_service_->delayed_probe_count();
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after
989 986
990 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_INCONCLUSIVE, 987 EXPECT_EQ(chrome_common_net::DNS_PROBE_FINISHED_INCONCLUSIVE,
991 WaitForSentStatus()); 988 WaitForSentStatus());
992 EXPECT_EQ(0, pending_status_count()); 989 EXPECT_EQ(0, pending_status_count());
993 ExpectDisplayingLocalErrorPage("ERR_NAME_NOT_RESOLVED"); 990 ExpectDisplayingLocalErrorPage("ERR_NAME_NOT_RESOLVED");
994 } 991 }
995 992
996 } // namespace 993 } // namespace
997 994
998 } // namespace chrome_browser_net 995 } // namespace chrome_browser_net
OLDNEW
« no previous file with comments | « chrome/browser/extensions/user_script_listener_unittest.cc ('k') | chrome/browser/net/load_timing_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698