Chromium Code Reviews| Index: chrome/browser/prerender/prerender_test_utils.cc |
| diff --git a/chrome/browser/prerender/prerender_test_utils.cc b/chrome/browser/prerender/prerender_test_utils.cc |
| index 364bfe579f57baa7b1c17ef274cb65c77f01f73d..40ea890932dad9dc859ebf1166ebc1372ffe7047 100644 |
| --- a/chrome/browser/prerender/prerender_test_utils.cc |
| +++ b/chrome/browser/prerender/prerender_test_utils.cc |
| @@ -104,6 +104,55 @@ class CountingInterceptor : public net::URLRequestInterceptor { |
| mutable base::WeakPtrFactory<CountingInterceptor> weak_factory_; |
| }; |
| +// URLRequestJob (and associated handler) which hangs. |
| +class HangingURLRequestJob : public net::URLRequestJob { |
| + public: |
| + HangingURLRequestJob(net::URLRequest* request, |
| + net::NetworkDelegate* network_delegate) |
| + : net::URLRequestJob(request, network_delegate) { |
| + } |
| + |
| + void Start() override {} |
| + |
| + private: |
| + ~HangingURLRequestJob() override {} |
| +}; |
| + |
| +class HangingFirstRequestInterceptor : public net::URLRequestInterceptor { |
| + public: |
| + HangingFirstRequestInterceptor(const base::FilePath& file, |
| + base::Closure callback) |
| + : file_(file), |
| + callback_(callback), |
| + first_run_(true) { |
| + } |
| + ~HangingFirstRequestInterceptor() override {} |
| + |
| + net::URLRequestJob* MaybeInterceptRequest( |
| + net::URLRequest* request, |
| + net::NetworkDelegate* network_delegate) const override { |
| + if (first_run_) { |
| + first_run_ = false; |
| + if (!callback_.is_null()) { |
| + BrowserThread::PostTask( |
| + BrowserThread::UI, FROM_HERE, callback_); |
| + } |
| + return new HangingURLRequestJob(request, network_delegate); |
| + } |
| + return new net::URLRequestMockHTTPJob( |
| + request, |
| + network_delegate, |
| + file_, |
| + BrowserThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior( |
| + base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)); |
| + } |
| + |
| + private: |
| + base::FilePath file_; |
| + base::Closure callback_; |
| + mutable bool first_run_; |
| +}; |
| + |
| // An ExternalProtocolHandler that blocks everything and asserts it never is |
| // called. |
| class NeverRunsExternalProtocolHandlerDelegate |
| @@ -656,6 +705,15 @@ void CreateMockInterceptorOnIO(const GURL& url, const base::FilePath& file) { |
| file, content::BrowserThread::GetBlockingPool())); |
| } |
| +void CreateHangingFirstRequestInterceptorOnIO( |
| + const GURL& url, const base::FilePath& file, base::Closure callback) { |
| + CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + std::unique_ptr<net::URLRequestInterceptor> never_respond_handler( |
|
pasko
2016/11/17 17:19:28
nit: 'never' sounds confusing since it will respon
mattcary
2016/11/18 08:22:55
Done.
This was old code that was moved, but since
|
| + new HangingFirstRequestInterceptor(file, callback)); |
| + net::URLRequestFilter::GetInstance()->AddUrlInterceptor( |
| + url, std::move(never_respond_handler)); |
| +} |
| + |
| } // namespace test_utils |
| } // namespace prerender |