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

Unified Diff: chrome/browser/net/chrome_url_request_context.cc

Issue 6201005: Initial support for partitioning cookies for isolated apps. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 11 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: chrome/browser/net/chrome_url_request_context.cc
diff --git a/chrome/browser/net/chrome_url_request_context.cc b/chrome/browser/net/chrome_url_request_context.cc
index d06d8060aa21a06929b8d8ad1acab1b28d0070c1..566c5ce4d63ece3e6dbfcc00b689b3c64f2b630b 100644
--- a/chrome/browser/net/chrome_url_request_context.cc
+++ b/chrome/browser/net/chrome_url_request_context.cc
@@ -375,6 +375,83 @@ ChromeURLRequestContext* FactoryForExtensions::Create() {
return context;
}
+// Factory that creates the ChromeURLRequestContext for a given isolated app.
+class FactoryForIsolatedApp : public ChromeURLRequestContextFactory {
+ public:
+ FactoryForIsolatedApp(Profile* profile, const Extension* app,
+ const FilePath& cookie_store_path, bool incognito)
+ : ChromeURLRequestContextFactory(profile),
+ cookie_store_path_(cookie_store_path),
+ incognito_(incognito),
+ original_context_getter_(
+ static_cast<ChromeURLRequestContextGetter*>(
+ profile->GetOriginalProfile()->GetRequestContext())) {
+ }
+
+ virtual ChromeURLRequestContext* Create();
+
+ private:
+ scoped_refptr<const Extension> app_;
+ FilePath cookie_store_path_;
+ bool incognito_;
+ scoped_refptr<ChromeURLRequestContextGetter> original_context_getter_;
+};
+
+ChromeURLRequestContext* FactoryForIsolatedApp::Create() {
+ ChromeURLRequestContext* context = new ChromeURLRequestContext;
+ ApplyProfileParametersToContext(context);
+
+ ChromeURLRequestContext* original_context =
+ original_context_getter_->GetIOContext();
+
+ IOThread::Globals* io_thread_globals = io_thread()->globals();
+
+ // Share the same proxy service, host resolver, cert verifier,
+ // and http_auth_handler_factory as the original profile.
+ context->set_host_resolver(original_context->host_resolver());
+ context->set_cert_verifier(original_context->cert_verifier());
+ context->set_proxy_service(original_context->proxy_service());
+ context->set_http_auth_handler_factory(
+ original_context->http_auth_handler_factory());
+
+ net::HttpCache::BackendFactory* backend =
+ net::HttpCache::DefaultBackend::InMemory(0);
+
+ net::HttpCache* cache =
+ new net::HttpCache(context->host_resolver(),
+ context->cert_verifier(),
+ context->dnsrr_resolver(),
+ NULL /* dns_cert_checker */,
+ context->proxy_service(),
+ context->ssl_config_service(),
+ context->http_auth_handler_factory(),
+ &io_thread_globals->network_delegate,
+ io_thread()->net_log(),
+ backend);
+
+ // TODO(creis): We care about the rest of storage as well, not just cookies.
+ scoped_refptr<SQLitePersistentCookieStore> cookie_db = NULL;
+ if (!incognito_) {
+ DCHECK(!cookie_store_path_.empty());
+ cookie_db = new SQLitePersistentCookieStore(cookie_store_path_);
+ }
+ net::CookieMonster* cookie_monster =
+ new net::CookieMonster(cookie_db.get(), cookie_monster_delegate_);
+ context->set_cookie_store(cookie_monster);
+ context->set_cookie_policy(
+ new ChromeCookiePolicy(host_content_settings_map_));
+
+ context->set_http_transaction_factory(cache);
+
+ context->set_ftp_transaction_factory(
+ new net::FtpNetworkLayer(context->host_resolver()));
+
+ appcache_service_->set_request_context(context);
+
+ context->set_net_log(io_thread()->net_log());
+ return context;
+}
+
// Factory that creates the ChromeURLRequestContext for incognito profile.
class FactoryForOffTheRecord : public ChromeURLRequestContextFactory {
public:
@@ -650,6 +727,16 @@ ChromeURLRequestContextGetter::CreateOriginalForExtensions(
// static
ChromeURLRequestContextGetter*
+ChromeURLRequestContextGetter::CreateOriginalForIsolatedApp(Profile* profile,
+ const Extension* app, const FilePath& cookie_store_path) {
+ DCHECK(!profile->IsOffTheRecord());
+ return new ChromeURLRequestContextGetter(
+ profile,
+ new FactoryForIsolatedApp(profile, app, cookie_store_path, false));
+}
+
+// static
+ChromeURLRequestContextGetter*
ChromeURLRequestContextGetter::CreateOffTheRecord(Profile* profile) {
DCHECK(profile->IsOffTheRecord());
return new ChromeURLRequestContextGetter(
@@ -665,6 +752,15 @@ ChromeURLRequestContextGetter::CreateOffTheRecordForExtensions(
profile, new FactoryForExtensions(profile, FilePath(), true));
}
+// static
+ChromeURLRequestContextGetter*
+ChromeURLRequestContextGetter::CreateOffTheRecordForIsolatedApp(
+ Profile* profile, const Extension* app) {
+ DCHECK(profile->IsOffTheRecord());
+ return new ChromeURLRequestContextGetter(
+ profile, new FactoryForIsolatedApp(profile, app, FilePath(), true));
+}
+
void ChromeURLRequestContextGetter::CleanupOnUIThread() {
CheckCurrentlyOnMainThread();
// Unregister for pref notifications.

Powered by Google App Engine
This is Rietveld 408576698