continuing from http://http://codereview.chromium.org/10823241

This intentionally doesn't change the ChromeOS behavior at all.  They all still use the default FileSystemContext.

This code also exposes the normal and media URLRequestGetters via the StoragePartition, and cleans up a bit of code that was accessing the URLRequestGetter in odd ways.  Also, it makes Workers correctly use the Media Cache for Media fetches.

TBR=benjhyden,sky,davemoore,piman,mkwst,kalman
BUG=85121

Review URL: https://chromiumcodereview.appspot.com/10909182

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@157284 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/content/browser/storage_partition_impl.h b/content/browser/storage_partition_impl.h
index e7f2f5d..d3d6dba 100644
--- a/content/browser/storage_partition_impl.h
+++ b/content/browser/storage_partition_impl.h
@@ -23,10 +23,12 @@
   // need 3 pieces of info from it.
   static StoragePartitionImpl* Create(BrowserContext* context,
                                       const std::string& partition_id,
-                                      const FilePath& partition_path);
+                                      const FilePath& profile_path);
 
   // StoragePartition interface.
   virtual FilePath GetPath() OVERRIDE;
+  virtual net::URLRequestContextGetter* GetURLRequestContext() OVERRIDE;
+  virtual net::URLRequestContextGetter* GetMediaURLRequestContext() OVERRIDE;
   virtual quota::QuotaManager* GetQuotaManager() OVERRIDE;
   virtual ChromeAppCacheService* GetAppCacheService() OVERRIDE;
   virtual fileapi::FileSystemContext* GetFileSystemContext() OVERRIDE;
@@ -35,15 +37,36 @@
   virtual IndexedDBContextImpl* GetIndexedDBContext() OVERRIDE;
 
  private:
-  StoragePartitionImpl(const FilePath& partition_path,
-                       quota::QuotaManager* quota_manager,
-                       ChromeAppCacheService* appcache_service,
-                       fileapi::FileSystemContext* filesystem_context,
-                       webkit_database::DatabaseTracker* database_tracker,
-                       DOMStorageContextImpl* dom_storage_context,
-                       IndexedDBContextImpl* indexed_db_context);
+  friend class StoragePartitionImplMap;
+
+  StoragePartitionImpl(
+      const FilePath& partition_path,
+      quota::QuotaManager* quota_manager,
+      ChromeAppCacheService* appcache_service,
+      fileapi::FileSystemContext* filesystem_context,
+      webkit_database::DatabaseTracker* database_tracker,
+      DOMStorageContextImpl* dom_storage_context,
+      IndexedDBContextImpl* indexed_db_context);
+
+  // Used by StoragePartitionImplMap.
+  //
+  // TODO(ajwong): These should be taken in the constructor and in Create() but
+  // because the URLRequestContextGetter still lives in Profile with a tangled
+  // initialization, if we try to retrieve the URLRequestContextGetter()
+  // before the default StoragePartition is created, we end up reentering the
+  // construction and double-initializing.  For now, we retain the legacy
+  // behavior while allowing StoragePartitionImpl to expose these accessors by
+  // letting StoragePartitionImplMap call these two private settings at the
+  // appropriate time.  These should move back into the constructor once
+  // URLRequestContextGetter's lifetime is sorted out. We should also move the
+  // PostCreateInitialization() out of StoragePartitionImplMap.
+  void SetURLRequestContext(net::URLRequestContextGetter* url_request_context);
+  void SetMediaURLRequestContext(
+      net::URLRequestContextGetter* media_url_request_context);
 
   FilePath partition_path_;
+  scoped_refptr<net::URLRequestContextGetter> url_request_context_;
+  scoped_refptr<net::URLRequestContextGetter> media_url_request_context_;
   scoped_refptr<quota::QuotaManager> quota_manager_;
   scoped_refptr<ChromeAppCacheService> appcache_service_;
   scoped_refptr<fileapi::FileSystemContext> filesystem_context_;