summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-16 23:37:34 +0000
committerwillchan@chromium.org <willchan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-16 23:37:34 +0000
commitbeeb77607384ebb1ee652c97fa2fa47445b5ce8a (patch)
tree83fde4d985f3e23c2bfd72664d37d85470b53e65 /chrome/browser
parent77feb46ee8d7e7b2a174714fa17e830573f01476 (diff)
downloadchromium_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.cc7
-rw-r--r--chrome/browser/net/blob_url_request_job_factory.cc51
-rw-r--r--chrome/browser/net/blob_url_request_job_factory.h14
-rw-r--r--chrome/browser/net/file_system_url_request_job_factory.cc47
-rw-r--r--chrome/browser/net/file_system_url_request_job_factory.h12
-rw-r--r--chrome/browser/net/metadata_url_request.cc38
-rw-r--r--chrome/browser/net/metadata_url_request.h6
-rw-r--r--chrome/browser/profiles/profile_io_data.cc25
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.