15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/net/url_request_mock_util.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/thread_restrictions.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/test/net/url_request_slow_download_job.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/test/url_request/url_request_failed_job.h"
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/test/url_request/url_request_mock_http_job.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/url_request/url_request_filter.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace chrome_browser_net {
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void SetUrlRequestMocksEnabled(bool enabled) {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Since this involves changing the net::URLRequest ProtocolFactory, we need
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // to run on the IO thread.
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (enabled) {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // We have to look around for our helper files, but we only use
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // this from tests, so allow these IO operations to happen
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // anywhere.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    base::ThreadRestrictions::ScopedAllowIO allow_io;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::URLRequestFilter::GetInstance()->ClearHandlers();
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    net::URLRequestFailedJob::AddUrlHandler();
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    content::URLRequestSlowDownloadJob::AddUrlHandler();
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    base::FilePath root_http;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    PathService::Get(chrome::DIR_TEST_DATA, &root_http);
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    net::URLRequestMockHTTPJob::AddUrlHandler(root_http,
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                              BrowserThread::GetBlockingPool());
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  } else {
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Revert to the default handlers.
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    net::URLRequestFilter::GetInstance()->ClearHandlers();
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace chrome_browser_net
49