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

Unified Diff: content/browser/resource_context_impl.cc

Issue 10909182: Make FileSystemContext respect StoragePartitions. filesystem:// urls will be properly isolated (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: patch unittest fix from michael Created 8 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/resource_context_impl.cc
diff --git a/content/browser/resource_context_impl.cc b/content/browser/resource_context_impl.cc
index c4074d31f09372ec5c4d46b86c03ef6949147af6..1ebcbcea287d16c3eea9301b217e923fd2967624 100644
--- a/content/browser/resource_context_impl.cc
+++ b/content/browser/resource_context_impl.cc
@@ -54,134 +54,6 @@ class NonOwningZoomData : public base::SupportsUserData::Data {
HostZoomMap* host_zoom_map_;
};
-class BlobProtocolHandler : public webkit_blob::BlobProtocolHandler {
- public:
- BlobProtocolHandler(
- webkit_blob::BlobStorageController* blob_storage_controller,
- base::MessageLoopProxy* loop_proxy)
- : webkit_blob::BlobProtocolHandler(blob_storage_controller,
- loop_proxy) {}
-
- virtual ~BlobProtocolHandler() {}
-
- private:
- virtual scoped_refptr<webkit_blob::BlobData>
- LookupBlobData(net::URLRequest* request) const {
- const ResourceRequestInfoImpl* info =
- ResourceRequestInfoImpl::ForRequest(request);
- if (!info)
- return NULL;
- return info->requested_blob_data();
- }
-
- DISALLOW_COPY_AND_ASSIGN(BlobProtocolHandler);
-};
-
-// Adds a bunch of debugging urls. We use an interceptor instead of a protocol
-// handler because we want to reuse the chrome://scheme (everyone is familiar
-// with it, and no need to expose the content/chrome separation through our UI).
-class DeveloperProtocolHandler
- : public net::URLRequestJobFactory::Interceptor {
- public:
- DeveloperProtocolHandler(
- AppCacheService* appcache_service,
- BlobStorageController* blob_storage_controller)
- : appcache_service_(appcache_service),
- blob_storage_controller_(blob_storage_controller) {}
- virtual ~DeveloperProtocolHandler() {}
-
- virtual net::URLRequestJob* MaybeIntercept(
- net::URLRequest* request,
- net::NetworkDelegate* network_delegate) const OVERRIDE {
- // Check for chrome://view-http-cache/*, which uses its own job type.
- if (ViewHttpCacheJobFactory::IsSupportedURL(request->url()))
- return ViewHttpCacheJobFactory::CreateJobForRequest(request,
- network_delegate);
-
- // Next check for chrome://appcache-internals/, which uses its own job type.
- if (request->url().SchemeIs(chrome::kChromeUIScheme) &&
- request->url().host() == chrome::kChromeUIAppCacheInternalsHost) {
- return appcache::ViewAppCacheInternalsJobFactory::CreateJobForRequest(
- request, network_delegate, appcache_service_);
- }
-
- // Next check for chrome://blob-internals/, which uses its own job type.
- if (ViewBlobInternalsJobFactory::IsSupportedURL(request->url())) {
- return ViewBlobInternalsJobFactory::CreateJobForRequest(
- request, network_delegate, blob_storage_controller_);
- }
-
-#if defined(USE_TCMALLOC)
- // Next check for chrome://tcmalloc/, which uses its own job type.
- if (request->url().SchemeIs(chrome::kChromeUIScheme) &&
- request->url().host() == chrome::kChromeUITcmallocHost) {
- return new TcmallocInternalsRequestJob(request, network_delegate);
- }
-#endif
-
- // Next check for chrome://histograms/, which uses its own job type.
- if (request->url().SchemeIs(chrome::kChromeUIScheme) &&
- request->url().host() == chrome::kChromeUIHistogramHost) {
- return new HistogramInternalsRequestJob(request, network_delegate);
- }
-
- return NULL;
- }
-
- virtual net::URLRequestJob* MaybeInterceptRedirect(
- const GURL& location,
- net::URLRequest* request,
- net::NetworkDelegate* network_delegate) const OVERRIDE {
- return NULL;
- }
-
- virtual net::URLRequestJob* MaybeInterceptResponse(
- net::URLRequest* request,
- net::NetworkDelegate* network_delegate) const OVERRIDE {
- return NULL;
- }
-
- virtual bool WillHandleProtocol(const std::string& protocol) const {
- return protocol == chrome::kChromeUIScheme;
- }
-
- private:
- AppCacheService* appcache_service_;
- BlobStorageController* blob_storage_controller_;
-};
-
-void InitializeRequestContext(
- scoped_refptr<net::URLRequestContextGetter> context_getter,
- AppCacheService* appcache_service,
- FileSystemContext* file_system_context,
- ChromeBlobStorageContext* blob_storage_context) {
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
- if (!context_getter)
- return; // tests.
- net::URLRequestContext* context = context_getter->GetURLRequestContext();
- net::URLRequestJobFactory* job_factory =
- const_cast<net::URLRequestJobFactory*>(context->job_factory());
- if (job_factory->IsHandledProtocol(chrome::kBlobScheme))
- return; // Already initialized this RequestContext.
-
- bool set_protocol = job_factory->SetProtocolHandler(
- chrome::kBlobScheme,
- new BlobProtocolHandler(
- blob_storage_context->controller(),
- BrowserThread::GetMessageLoopProxyForThread(BrowserThread::FILE)));
- DCHECK(set_protocol);
- set_protocol = job_factory->SetProtocolHandler(
- chrome::kFileSystemScheme,
- CreateFileSystemProtocolHandler(file_system_context));
- DCHECK(set_protocol);
-
- job_factory->AddInterceptor(
- new DeveloperProtocolHandler(appcache_service,
- blob_storage_context->controller()));
-
- // TODO(jam): Add the ProtocolHandlerRegistryIntercepter here!
-}
-
} // namespace
@@ -227,45 +99,6 @@ void InitializeResourceContext(BrowserContext* browser_context) {
new NonOwningZoomData(
HostZoomMap::GetForBrowserContext(browser_context)));
resource_context->DetachUserDataThread();
-
- StoragePartition* storage_partition =
- BrowserContext::GetDefaultStoragePartition(browser_context);
-
- // Add content's URLRequestContext's hooks.
- // Check first to avoid memory leak in unittests.
- // TODO(creis): Do equivalent initializations for isolated app and isolated
- // media request contexts.
- if (BrowserThread::IsMessageLoopValid(BrowserThread::IO)) {
- // TODO(ajwong): Move this whole block into
- // StoragePartitionImplMap::PostCreateInitialization after we're certain
- // this is safe to happen before InitializeResourceContext, and after we've
- // found the right URLRequestContext for a storage partition. Otherwise,
- // our isolated URLRequestContext getters will do the wrong thing for blobs,
- // and FileSystemContext.
- //
- // http://crbug.com/85121
-
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(
- &InitializeRequestContext,
- make_scoped_refptr(browser_context->GetRequestContext()),
- storage_partition->GetAppCacheService(),
- make_scoped_refptr(
- storage_partition->GetFileSystemContext()),
- make_scoped_refptr(
- ChromeBlobStorageContext::GetFor(browser_context))));
- BrowserThread::PostTask(
- BrowserThread::IO, FROM_HERE,
- base::Bind(
- &InitializeRequestContext,
- make_scoped_refptr(browser_context->GetMediaRequestContext()),
- storage_partition->GetAppCacheService(),
- make_scoped_refptr(
- storage_partition->GetFileSystemContext()),
- make_scoped_refptr(
- ChromeBlobStorageContext::GetFor(browser_context))));
- }
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698