Index: chrome/browser/profiles/profile_io_data.h |
diff --git a/chrome/browser/profiles/profile_io_data.h b/chrome/browser/profiles/profile_io_data.h |
index ff5c4637d188fb7cc56faca703cb74111573d6ee..21f894ca0c33cc26f201de65dafb307520abcc21 100644 |
--- a/chrome/browser/profiles/profile_io_data.h |
+++ b/chrome/browser/profiles/profile_io_data.h |
@@ -82,6 +82,9 @@ class ProfileIOData { |
ChromeURLRequestContext* GetIsolatedAppRequestContext( |
ChromeURLRequestContext* main_context, |
const std::string& app_id) const; |
+ ChromeURLRequestContext* GetIsolatedMediaRequestContext( |
+ ChromeURLRequestContext* media_context, |
+ const std::string& app_id) const; |
// These are useful when the Chrome layer is called from the content layer |
// with a content::ResourceContext, and they want access to Chrome data for |
@@ -135,6 +138,22 @@ class ProfileIOData { |
bool GetMetricsEnabledStateOnIOThread() const; |
protected: |
+ // A URLRequestContext for media that owns its HTTP factory, to ensure |
+ // it is deleted. |
+ class MediaRequestContext : public ChromeURLRequestContext { |
+ public: |
+ explicit MediaRequestContext(chrome_browser_net::CacheStats* cache_stats); |
+ |
+ void SetHttpTransactionFactory(net::HttpTransactionFactory* http_factory); |
+ |
+ private: |
+ virtual ~MediaRequestContext(); |
+ |
+ scoped_ptr<net::HttpTransactionFactory> http_factory_; |
+ }; |
+ |
+ // A URLRequestContext for apps that owns its cookie store and HTTP factory, |
+ // to ensure they are deleted. |
class AppRequestContext : public ChromeURLRequestContext { |
public: |
explicit AppRequestContext(chrome_browser_net::CacheStats* cache_stats); |
@@ -271,7 +290,7 @@ class ProfileIOData { |
}; |
typedef base::hash_map<std::string, ChromeURLRequestContext*> |
- AppRequestContextMap; |
+ URLRequestContextMap; |
// -------------------------------------------- |
// Virtual interface for subtypes to implement: |
@@ -287,6 +306,12 @@ class ProfileIOData { |
ChromeURLRequestContext* main_context, |
const std::string& app_id) const = 0; |
+ // Does an on-demand initialization of a media RequestContext for the given |
+ // isolated app. |
+ virtual ChromeURLRequestContext* InitializeMediaRequestContext( |
+ ChromeURLRequestContext* original_context, |
+ const std::string& app_id) const = 0; |
+ |
// These functions are used to transfer ownership of the lazily initialized |
// context from ProfileIOData to the URLRequestContextGetter. |
virtual ChromeURLRequestContext* |
@@ -295,6 +320,10 @@ class ProfileIOData { |
AcquireIsolatedAppRequestContext( |
ChromeURLRequestContext* main_context, |
const std::string& app_id) const = 0; |
+ virtual ChromeURLRequestContext* |
+ AcquireIsolatedMediaRequestContext( |
+ ChromeURLRequestContext* app_context, |
+ const std::string& app_id) const = 0; |
// Returns the CacheStats object to be used for this profile. |
virtual chrome_browser_net::CacheStats* GetCacheStats( |
@@ -362,8 +391,9 @@ class ProfileIOData { |
// called. |
mutable scoped_ptr<ChromeURLRequestContext> main_request_context_; |
mutable scoped_ptr<ChromeURLRequestContext> extensions_request_context_; |
- // One AppRequestContext per isolated app. |
- mutable AppRequestContextMap app_request_context_map_; |
+ // One URLRequestContext per isolated app for main and media requests. |
+ mutable URLRequestContextMap app_request_context_map_; |
+ mutable URLRequestContextMap isolated_media_request_context_map_; |
mutable scoped_ptr<ResourceContext> resource_context_; |