diff options
author | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-16 23:37:34 +0000 |
---|---|---|
committer | willchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-16 23:37:34 +0000 |
commit | beeb77607384ebb1ee652c97fa2fa47445b5ce8a (patch) | |
tree | 83fde4d985f3e23c2bfd72664d37d85470b53e65 /chrome/browser | |
parent | 77feb46ee8d7e7b2a174714fa17e830573f01476 (diff) | |
download | chromium_src-beeb77607384ebb1ee652c97fa2fa47445b5ce8a.zip chromium_src-beeb77607384ebb1ee652c97fa2fa47445b5ce8a.tar.gz chromium_src-beeb77607384ebb1ee652c97fa2fa47445b5ce8a.tar.bz2 |
Convert more ProtocolFactories to ProtocolHandlers.
BUG=81979
TEST=none
Review URL: http://codereview.chromium.org/7034006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85556 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r-- | chrome/browser/browser_main.cc | 7 | ||||
-rw-r--r-- | chrome/browser/net/blob_url_request_job_factory.cc | 51 | ||||
-rw-r--r-- | chrome/browser/net/blob_url_request_job_factory.h | 14 | ||||
-rw-r--r-- | chrome/browser/net/file_system_url_request_job_factory.cc | 47 | ||||
-rw-r--r-- | chrome/browser/net/file_system_url_request_job_factory.h | 12 | ||||
-rw-r--r-- | chrome/browser/net/metadata_url_request.cc | 38 | ||||
-rw-r--r-- | chrome/browser/net/metadata_url_request.h | 6 | ||||
-rw-r--r-- | chrome/browser/profiles/profile_io_data.cc | 25 |
8 files changed, 152 insertions, 48 deletions
diff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc index 5f972fb5..57d3618 100644 --- a/chrome/browser/browser_main.cc +++ b/chrome/browser/browser_main.cc @@ -49,11 +49,8 @@ #include "chrome/browser/metrics/metrics_log.h" #include "chrome/browser/metrics/metrics_service.h" #include "chrome/browser/metrics/thread_watcher.h" -#include "chrome/browser/net/blob_url_request_job_factory.h" #include "chrome/browser/net/chrome_dns_cert_provenance_checker.h" #include "chrome/browser/net/chrome_dns_cert_provenance_checker_factory.h" -#include "chrome/browser/net/file_system_url_request_job_factory.h" -#include "chrome/browser/net/metadata_url_request.h" #include "chrome/browser/net/predictor_api.h" #include "chrome/browser/net/sdch_dictionary_fetcher.h" #include "chrome/browser/net/websocket_experiment/websocket_experiment_runner.h" @@ -1690,10 +1687,6 @@ int BrowserMain(const MainFunctionParams& parameters) { // Configure modules that need access to resources. net::NetModule::SetResourceProvider(chrome_common_net::NetResourceProvider); - RegisterMetadataURLRequestHandler(); - RegisterBlobURLRequestJobFactory(); - RegisterFileSystemURLRequestJobFactory(); - // In unittest mode, this will do nothing. In normal mode, this will create // the global GoogleURLTracker and IntranetRedirectDetector instances, which // will promptly go to sleep for five and seven seconds, respectively (to diff --git a/chrome/browser/net/blob_url_request_job_factory.cc b/chrome/browser/net/blob_url_request_job_factory.cc index b8ffc8d..bdae1c8 100644 --- a/chrome/browser/net/blob_url_request_job_factory.cc +++ b/chrome/browser/net/blob_url_request_job_factory.cc @@ -1,22 +1,50 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/net/blob_url_request_job_factory.h" -#include "chrome/browser/net/chrome_url_request_context.h" +#include "base/basictypes.h" +#include "base/compiler_specific.h" #include "chrome/common/url_constants.h" #include "content/browser/browser_thread.h" #include "content/browser/chrome_blob_storage_context.h" #include "content/browser/renderer_host/resource_dispatcher_host.h" #include "content/browser/renderer_host/resource_dispatcher_host_request_info.h" +#include "net/url_request/url_request_job_factory.h" #include "webkit/blob/blob_storage_controller.h" #include "webkit/blob/blob_url_request_job.h" namespace { -net::URLRequestJob* BlobURLRequestJobFactory(net::URLRequest* request, - const std::string& scheme) { +class BlobProtocolHandler + : public net::URLRequestJobFactory::ProtocolHandler { + public: + explicit BlobProtocolHandler( + webkit_blob::BlobStorageController* blob_storage_controller); + virtual ~BlobProtocolHandler(); + + virtual net::URLRequestJob* MaybeCreateJob( + net::URLRequest* request) const OVERRIDE; + + private: + // No scoped_refptr because |blob_storage_controller_| is owned by the + // ProfileIOData, which also owns this ProtocolHandler. + webkit_blob::BlobStorageController* const blob_storage_controller_; + + DISALLOW_COPY_AND_ASSIGN(BlobProtocolHandler); +}; + +BlobProtocolHandler::BlobProtocolHandler( + webkit_blob::BlobStorageController* blob_storage_controller) + : blob_storage_controller_(blob_storage_controller) { + DCHECK(blob_storage_controller); +} + +BlobProtocolHandler::~BlobProtocolHandler() {} + +net::URLRequestJob* BlobProtocolHandler::MaybeCreateJob( + net::URLRequest* request) const { scoped_refptr<webkit_blob::BlobData> data; ResourceDispatcherHostRequestInfo* info = ResourceDispatcherHost::InfoForRequest(request); @@ -24,19 +52,18 @@ net::URLRequestJob* BlobURLRequestJobFactory(net::URLRequest* request, // Resource dispatcher host already looked up the blob data. data = info->requested_blob_data(); } else { - // This request is not coming thru resource dispatcher host. - data = static_cast<ChromeURLRequestContext*>(request->context())-> - blob_storage_context()-> - controller()->GetBlobDataFromUrl(request->url()); + // This request is not coming through resource dispatcher host. + data = blob_storage_controller_->GetBlobDataFromUrl(request->url()); } return new webkit_blob::BlobURLRequestJob( request, data, BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); } -} +} // namespace -void RegisterBlobURLRequestJobFactory() { - net::URLRequest::RegisterProtocolFactory(chrome::kBlobScheme, - &BlobURLRequestJobFactory); +net::URLRequestJobFactory::ProtocolHandler* +CreateBlobProtocolHandler(webkit_blob::BlobStorageController* controller) { + DCHECK(controller); + return new BlobProtocolHandler(controller); } diff --git a/chrome/browser/net/blob_url_request_job_factory.h b/chrome/browser/net/blob_url_request_job_factory.h index b009eaf..a6fbecd 100644 --- a/chrome/browser/net/blob_url_request_job_factory.h +++ b/chrome/browser/net/blob_url_request_job_factory.h @@ -1,10 +1,20 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_NET_BLOB_URL_REQUEST_JOB_FACTORY_H_ #define CHROME_BROWSER_NET_BLOB_URL_REQUEST_JOB_FACTORY_H_ -void RegisterBlobURLRequestJobFactory(); +#include "net/url_request/url_request_job_factory.h" + +namespace webkit_blob { +class BlobStorageController; +} // webkit_blob + +// |controller|'s lifetime should exceed the lifetime of the ProtocolHandler. +// Currently, this is only used by ProfileIOData which owns |controller| and the +// ProtocolHandler. +net::URLRequestJobFactory::ProtocolHandler* CreateBlobProtocolHandler( + webkit_blob::BlobStorageController* controller); #endif // CHROME_BROWSER_NET_BLOB_URL_REQUEST_JOB_FACTORY_H_ diff --git a/chrome/browser/net/file_system_url_request_job_factory.cc b/chrome/browser/net/file_system_url_request_job_factory.cc index ae9f118..ba7b1ae 100644 --- a/chrome/browser/net/file_system_url_request_job_factory.cc +++ b/chrome/browser/net/file_system_url_request_job_factory.cc @@ -4,6 +4,8 @@ #include "chrome/browser/net/file_system_url_request_job_factory.h" +#include "base/basictypes.h" +#include "base/compiler_specific.h" #include "chrome/browser/net/chrome_url_request_context.h" #include "chrome/common/url_constants.h" #include "content/browser/browser_thread.h" @@ -13,27 +15,52 @@ namespace { -net::URLRequestJob* FileSystemURLRequestJobFactory(net::URLRequest* request, - const std::string& scheme) { - fileapi::FileSystemContext* file_system_context = - static_cast<ChromeURLRequestContext*>(request->context()) - ->file_system_context(); +class FileSystemProtocolHandler + : public net::URLRequestJobFactory::ProtocolHandler { + public: + explicit FileSystemProtocolHandler(fileapi::FileSystemContext* context); + virtual ~FileSystemProtocolHandler(); + + virtual net::URLRequestJob* MaybeCreateJob( + net::URLRequest* request) const OVERRIDE; + + private: + // No scoped_refptr because |file_system_context_| is owned by the + // ProfileIOData, which also owns this ProtocolHandler. + fileapi::FileSystemContext* const file_system_context_; + + DISALLOW_COPY_AND_ASSIGN(FileSystemProtocolHandler); +}; + +FileSystemProtocolHandler::FileSystemProtocolHandler( + fileapi::FileSystemContext* context) + : file_system_context_(context) { + DCHECK(file_system_context_); +} + +FileSystemProtocolHandler::~FileSystemProtocolHandler() {} + +net::URLRequestJob* FileSystemProtocolHandler::MaybeCreateJob( + net::URLRequest* request) const { const std::string path = request->url().path(); // If the path ends with a /, we know it's a directory. If the path refers // to a directory and gets dispatched to FileSystemURLRequestJob, that class // redirects back here, by adding a / to the URL. if (!path.empty() && path[path.size() - 1] == '/') { - return new fileapi::FileSystemDirURLRequestJob(request, file_system_context, + return new fileapi::FileSystemDirURLRequestJob( + request, file_system_context_, BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); } - return new fileapi::FileSystemURLRequestJob(request, file_system_context, + return new fileapi::FileSystemURLRequestJob( + request, file_system_context_, BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)); } } // anonymous namespace -void RegisterFileSystemURLRequestJobFactory() { - net::URLRequest::RegisterProtocolFactory(chrome::kFileSystemScheme, - &FileSystemURLRequestJobFactory); +net::URLRequestJobFactory::ProtocolHandler* +CreateFileSystemProtocolHandler(fileapi::FileSystemContext* context) { + DCHECK(context); + return new FileSystemProtocolHandler(context); } diff --git a/chrome/browser/net/file_system_url_request_job_factory.h b/chrome/browser/net/file_system_url_request_job_factory.h index 57345d2..1051715 100644 --- a/chrome/browser/net/file_system_url_request_job_factory.h +++ b/chrome/browser/net/file_system_url_request_job_factory.h @@ -5,6 +5,16 @@ #ifndef CHROME_BROWSER_NET_FILE_SYSTEM_URL_REQUEST_JOB_FACTORY_H_ #define CHROME_BROWSER_NET_FILE_SYSTEM_URL_REQUEST_JOB_FACTORY_H_ -void RegisterFileSystemURLRequestJobFactory(); +#include "net/url_request/url_request_job_factory.h" + +namespace fileapi { +class FileSystemContext; +} // namespace fileapi + +// |context|'s lifetime should exceed the lifetime of the ProtocolHandler. +// Currently, this is only used by ProfileIOData which owns |context| and the +// ProtocolHandler. +net::URLRequestJobFactory::ProtocolHandler* +CreateFileSystemProtocolHandler(fileapi::FileSystemContext* context); #endif // CHROME_BROWSER_NET_FILE_SYSTEM_URL_REQUEST_JOB_FACTORY_H_ diff --git a/chrome/browser/net/metadata_url_request.cc b/chrome/browser/net/metadata_url_request.cc index 2dcbed7..43c1edd 100644 --- a/chrome/browser/net/metadata_url_request.cc +++ b/chrome/browser/net/metadata_url_request.cc @@ -16,6 +16,7 @@ #include "net/base/net_util.h" #include "net/url_request/url_request.h" #include "net/url_request/url_request_job.h" +#include "net/url_request/url_request_job_factory.h" namespace { @@ -23,9 +24,6 @@ class MetadataRequestHandler : public net::URLRequestJob { public: explicit MetadataRequestHandler(net::URLRequest* request); - static net::URLRequestJob* Factory(net::URLRequest* request, - const std::string& scheme); - // net::URLRequestJob implementation. virtual void Start(); virtual void Kill(); @@ -53,11 +51,6 @@ MetadataRequestHandler::MetadataRequestHandler(net::URLRequest* request) MetadataRequestHandler::~MetadataRequestHandler() { } -net::URLRequestJob* MetadataRequestHandler::Factory(net::URLRequest* request, - const std::string& scheme) { - return new MetadataRequestHandler(request); -} - void MetadataRequestHandler::Start() { // Start reading asynchronously so that all error reporting and data // callbacks happen as they would for network requests. @@ -127,11 +120,30 @@ void MetadataRequestHandler::StartAsync() { NotifyHeadersComplete(); } +class MetadataProtocolHandler + : public net::URLRequestJobFactory::ProtocolHandler { + public: + MetadataProtocolHandler(); + virtual ~MetadataProtocolHandler(); + + virtual net::URLRequestJob* MaybeCreateJob( + net::URLRequest* request) const OVERRIDE; + + private: + DISALLOW_COPY_AND_ASSIGN(MetadataProtocolHandler); +}; + +MetadataProtocolHandler::MetadataProtocolHandler() {} + +MetadataProtocolHandler::~MetadataProtocolHandler() {} + +net::URLRequestJob* MetadataProtocolHandler::MaybeCreateJob( + net::URLRequest* request) const { + return new MetadataRequestHandler(request); +} + } // namespace -void RegisterMetadataURLRequestHandler() { -#if defined(OS_CHROMEOS) - net::URLRequest::RegisterProtocolFactory(chrome::kMetadataScheme, - &MetadataRequestHandler::Factory); -#endif +net::URLRequestJobFactory::ProtocolHandler* CreateMetadataProtocolHandler() { + return new MetadataProtocolHandler; } diff --git a/chrome/browser/net/metadata_url_request.h b/chrome/browser/net/metadata_url_request.h index a6d65fa..3b0cf40 100644 --- a/chrome/browser/net/metadata_url_request.h +++ b/chrome/browser/net/metadata_url_request.h @@ -1,4 +1,4 @@ -// Copyright (c) 2009 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -6,6 +6,8 @@ #define CHROME_BROWSER_NET_METADATA_URL_REQUEST_H_ #pragma once -void RegisterMetadataURLRequestHandler(); +#include "net/url_request/url_request_job_factory.h" + +net::URLRequestJobFactory::ProtocolHandler* CreateMetadataProtocolHandler(); #endif // CHROME_BROWSER_NET_METADATA_URL_REQUEST_H_ diff --git a/chrome/browser/profiles/profile_io_data.cc b/chrome/browser/profiles/profile_io_data.cc index 9f7a441..02db976 100644 --- a/chrome/browser/profiles/profile_io_data.cc +++ b/chrome/browser/profiles/profile_io_data.cc @@ -18,10 +18,13 @@ #include "chrome/browser/extensions/extension_protocols.h" #include "chrome/browser/extensions/user_script_master.h" #include "chrome/browser/io_thread.h" +#include "chrome/browser/net/blob_url_request_job_factory.h" #include "chrome/browser/net/chrome_cookie_notification_details.h" #include "chrome/browser/net/chrome_dns_cert_provenance_checker_factory.h" #include "chrome/browser/net/chrome_net_log.h" #include "chrome/browser/net/chrome_network_delegate.h" +#include "chrome/browser/net/file_system_url_request_job_factory.h" +#include "chrome/browser/net/metadata_url_request.h" #include "chrome/browser/net/pref_proxy_config_service.h" #include "chrome/browser/net/proxy_service_factory.h" #include "chrome/browser/prefs/pref_service.h" @@ -264,7 +267,12 @@ bool ProfileIOData::IsHandledProtocol(const std::string& scheme) { chrome::kExtensionScheme, chrome::kUserScriptScheme, chrome::kChromeUIScheme, - chrome::kChromeDevToolsScheme + chrome::kChromeDevToolsScheme, +#if defined(OS_CHROMEOS) + chrome::kMetadataScheme, +#endif // defined(OS_CHROMEOS) + chrome::kBlobScheme, + chrome::kFileSystemScheme, }; for (size_t i = 0; i < arraysize(kProtocolList); ++i) { if (scheme == kProtocolList[i]) @@ -401,6 +409,21 @@ void ProfileIOData::LazyInitialize() const { set_protocol = job_factory_->SetProtocolHandler( chrome::kChromeDevToolsScheme, CreateDevToolsProtocolHandler(chrome_url_data_manager_backend_.get())); +#if defined(OS_CHROMEOS) + set_protocol = job_factory_->SetProtocolHandler( + chrome::kMetadataScheme, + CreateMetadataProtocolHandler()); +#endif // defined(OS_CHROMEOS) + DCHECK(set_protocol); + set_protocol = job_factory_->SetProtocolHandler( + chrome::kBlobScheme, + CreateBlobProtocolHandler( + profile_params_->blob_storage_context->controller())); + DCHECK(set_protocol); + set_protocol = job_factory_->SetProtocolHandler( + chrome::kFileSystemScheme, + CreateFileSystemProtocolHandler( + profile_params_->file_system_context)); DCHECK(set_protocol); // Take ownership over these parameters. |