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

Unified Diff: chrome/browser/profiles/profile_impl.cc

Issue 6201005: Initial support for partitioning cookies for isolated apps. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update cookie logic in test. 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/profiles/profile_impl.cc
diff --git a/chrome/browser/profiles/profile_impl.cc b/chrome/browser/profiles/profile_impl.cc
index e4495e3e8b5953857d294a9a408b6f0418c150e8..3eac680d24d7dafa21def0c8ddeacbbc2a38b4c1 100644
--- a/chrome/browser/profiles/profile_impl.cc
+++ b/chrome/browser/profiles/profile_impl.cc
@@ -505,6 +505,14 @@ ProfileImpl::~ProfileImpl() {
CleanupRequestContext(media_request_context_);
CleanupRequestContext(extensions_request_context_);
+ // Clean up all isolated app request contexts.
+ for (ChromeURLRequestContextGetterMap::iterator iter =
+ app_request_context_map_.begin();
+ iter != app_request_context_map_.end();
+ iter++) {
willchan no longer on Chromium 2011/01/26 23:21:52 http://www.corp.google.com/eng/doc/cppguide.xml?ex
Charlie Reis 2011/03/01 21:33:11 Done.
+ CleanupRequestContext(iter->second);
+ }
+
// HistoryService may call into the BookmarkModel, as such we need to
// delete HistoryService before the BookmarkModel. The destructor for
// HistoryService will join with HistoryService's backend thread so that
@@ -726,6 +734,16 @@ URLRequestContextGetter* ProfileImpl::GetRequestContext() {
return request_context_;
}
+URLRequestContextGetter* ProfileImpl::GetRequestContext(const Extension* app) {
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableExperimentalAppManifests)
Matt Perry 2011/01/26 20:09:23 chrome style is: (HasSwitch() && app && ap
Charlie Reis 2011/03/01 21:33:11 Done.
+ && app != NULL
+ && app->is_storage_isolated())
+ return GetRequestContextForIsolatedApp(app);
+
+ return GetRequestContext();
+}
+
URLRequestContextGetter* ProfileImpl::GetRequestContextForMedia() {
if (!media_request_context_) {
FilePath cache_path = base_cache_path_;
@@ -763,6 +781,36 @@ URLRequestContextGetter* ProfileImpl::GetRequestContextForExtensions() {
return extensions_request_context_;
}
+URLRequestContextGetter* ProfileImpl::GetRequestContextForIsolatedApp(
+ const Extension* installed_app) {
+ CHECK(installed_app);
+ std::string id = installed_app->id();
+
+ // Keep a map of request contexts, one per requested app ID. Once created,
+ // the context will exist for the lifetime of the profile.
+ ChromeURLRequestContextGetterMap::iterator iter =
+ app_request_context_map_.find(id);
+ if (iter != app_request_context_map_.end())
+ return iter->second;
+
+ // Have to create a new context for this app.
+ FilePath cookie_path = GetPath();
+ cookie_path = cookie_path.Append(chrome::kAppStorageDirname);
+
+ // Create the directory if it doesn't yet exist.
+ if (!file_util::DirectoryExists(cookie_path))
+ file_util::CreateDirectory(cookie_path);
+ cookie_path = cookie_path.Append(installed_app->id() +
+ chrome::kAppCookiesFileExtension);
+
+ ChromeURLRequestContextGetter* context =
+ ChromeURLRequestContextGetter::CreateOriginalForIsolatedApp(
+ this, installed_app, cookie_path);
+ app_request_context_map_[id] = context;
+
+ return context;
+}
+
void ProfileImpl::RegisterExtensionWithRequestContexts(
const Extension* extension) {
// AddRef to ensure the data lives until the other thread gets it. Balanced in

Powered by Google App Engine
This is Rietveld 408576698