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

Unified Diff: trunk/src/chrome/browser/profiles/profile_impl_io_data.cc

Issue 23551005: Revert 219709 "Remove the Extensions URLRequestContext." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 years, 4 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: trunk/src/chrome/browser/profiles/profile_impl_io_data.cc
===================================================================
--- trunk/src/chrome/browser/profiles/profile_impl_io_data.cc (revision 219785)
+++ trunk/src/chrome/browser/profiles/profile_impl_io_data.cc (working copy)
@@ -22,7 +22,6 @@
#include "chrome/browser/net/chrome_net_log.h"
#include "chrome/browser/net/chrome_network_delegate.h"
#include "chrome/browser/net/connect_interceptor.h"
-#include "chrome/browser/net/cookie_store_util.h"
#include "chrome/browser/net/http_server_properties_manager.h"
#include "chrome/browser/net/predictor.h"
#include "chrome/browser/net/sqlite_server_bound_cert_store.h"
@@ -97,27 +96,33 @@
}
void ProfileImplIOData::Handle::Init(
+ const base::FilePath& cookie_path,
const base::FilePath& server_bound_cert_path,
const base::FilePath& cache_path,
int cache_max_size,
const base::FilePath& media_cache_path,
int media_cache_max_size,
+ const base::FilePath& extensions_cookie_path,
const base::FilePath& profile_path,
const base::FilePath& infinite_cache_path,
chrome_browser_net::Predictor* predictor,
+ bool restore_old_session_cookies,
quota::SpecialStoragePolicy* special_storage_policy) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!io_data_->lazy_params_);
DCHECK(predictor);
- LazyParams* lazy_params = new LazyParams();
+ LazyParams* lazy_params = new LazyParams;
+ lazy_params->cookie_path = cookie_path;
lazy_params->server_bound_cert_path = server_bound_cert_path;
lazy_params->cache_path = cache_path;
lazy_params->cache_max_size = cache_max_size;
lazy_params->media_cache_path = media_cache_path;
lazy_params->media_cache_max_size = media_cache_max_size;
+ lazy_params->extensions_cookie_path = extensions_cookie_path;
lazy_params->infinite_cache_path = infinite_cache_path;
+ lazy_params->restore_old_session_cookies = restore_old_session_cookies;
lazy_params->special_storage_policy = special_storage_policy;
io_data_->lazy_params_.reset(lazy_params);
@@ -186,6 +191,18 @@
}
scoped_refptr<ChromeURLRequestContextGetter>
+ProfileImplIOData::Handle::GetExtensionsRequestContextGetter() const {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ LazyInitialize();
+ if (!extensions_request_context_getter_.get()) {
+ extensions_request_context_getter_ =
+ ChromeURLRequestContextGetter::CreateOriginalForExtensions(profile_,
+ io_data_);
+ }
+ return extensions_request_context_getter_;
+}
+
+scoped_refptr<ChromeURLRequestContextGetter>
ProfileImplIOData::Handle::CreateIsolatedAppRequestContextGetter(
const base::FilePath& partition_path,
bool in_memory,
@@ -291,7 +308,8 @@
ProfileImplIOData::LazyParams::LazyParams()
: cache_max_size(0),
- media_cache_max_size(0) {}
+ media_cache_max_size(0),
+ restore_old_session_cookies(false) {}
ProfileImplIOData::LazyParams::~LazyParams() {}
@@ -312,6 +330,13 @@
IOThread* const io_thread = profile_params->io_thread;
IOThread::Globals* const io_thread_globals = io_thread->globals();
+ const CommandLine& command_line = *CommandLine::ForCurrentProcess();
+ // Only allow Record Mode if we are in a Debug build or where we are running
+ // a cycle, and the user has limited control.
+ bool record_mode = command_line.HasSwitch(switches::kRecordMode) &&
+ (chrome::kRecordModeEnabled ||
+ command_line.HasSwitch(switches::kVisitURLs));
+ bool playback_mode = command_line.HasSwitch(switches::kPlaybackMode);
network_delegate()->set_predictor(predictor_.get());
@@ -343,14 +368,32 @@
main_context->set_proxy_service(proxy_service());
+ scoped_refptr<net::CookieStore> cookie_store = NULL;
net::ServerBoundCertService* server_bound_cert_service = NULL;
- if (chrome_browser_net::ShouldUseInMemoryCookiesAndCache()) {
+ if (record_mode || playback_mode) {
+ // Don't use existing cookies and use an in-memory store.
+ cookie_store = new net::CookieMonster(
+ NULL, profile_params->cookie_monster_delegate.get());
// Don't use existing server-bound certs and use an in-memory store.
server_bound_cert_service = new net::ServerBoundCertService(
new net::DefaultServerBoundCertStore(NULL),
base::WorkerPool::GetTaskRunner(true));
}
+ // setup cookie store
+ if (!cookie_store.get()) {
+ DCHECK(!lazy_params_->cookie_path.empty());
+
+ cookie_store = content::CreatePersistentCookieStore(
+ lazy_params_->cookie_path,
+ lazy_params_->restore_old_session_cookies,
+ lazy_params_->special_storage_policy.get(),
+ profile_params->cookie_monster_delegate.get());
+ cookie_store->GetCookieMonster()->SetPersistSessionCookies(true);
+ }
+
+ main_context->set_cookie_store(cookie_store.get());
+
// Setup server bound cert service.
if (!server_bound_cert_service) {
DCHECK(!lazy_params_->server_bound_cert_path.empty());
@@ -385,10 +428,9 @@
ChromeDataReductionProxyAndroid::Init(main_cache->GetSession());
#endif
- if (chrome_browser_net::ShouldUseInMemoryCookiesAndCache()) {
+ if (record_mode || playback_mode) {
main_cache->set_mode(
- chrome_browser_net::IsCookieRecordMode() ?
- net::HttpCache::RECORD : net::HttpCache::PLAYBACK);
+ record_mode ? net::HttpCache::RECORD : net::HttpCache::PLAYBACK);
}
main_http_factory_.reset(main_cache);
@@ -409,6 +451,10 @@
ftp_factory_.get());
main_context->set_job_factory(main_job_factory_.get());
+#if defined(ENABLE_EXTENSIONS)
+ InitializeExtensionsRequestContext(profile_params);
+#endif
+
// Create a media request context based on the main context, but using a
// media cache. It shares the same job factory as the main context.
StoragePartitionDescriptor details(profile_path_, false);
@@ -418,6 +464,48 @@
lazy_params_.reset();
}
+void ProfileImplIOData::
+ InitializeExtensionsRequestContext(ProfileParams* profile_params) const {
+ ChromeURLRequestContext* extensions_context = extensions_request_context();
+ IOThread* const io_thread = profile_params->io_thread;
+ IOThread::Globals* const io_thread_globals = io_thread->globals();
+ ApplyProfileParamsToContext(extensions_context);
+
+ extensions_context->set_transport_security_state(transport_security_state());
+
+ extensions_context->set_net_log(io_thread->net_log());
+
+ extensions_context->set_throttler_manager(
+ io_thread_globals->throttler_manager.get());
+
+ net::CookieStore* extensions_cookie_store =
+ content::CreatePersistentCookieStore(
+ lazy_params_->extensions_cookie_path,
+ lazy_params_->restore_old_session_cookies,
+ NULL,
+ NULL);
+ // Enable cookies for devtools and extension URLs.
+ const char* schemes[] = {chrome::kChromeDevToolsScheme,
+ extensions::kExtensionScheme};
+ extensions_cookie_store->GetCookieMonster()->SetCookieableSchemes(schemes, 2);
+ extensions_context->set_cookie_store(extensions_cookie_store);
+
+ scoped_ptr<net::URLRequestJobFactoryImpl> extensions_job_factory(
+ new net::URLRequestJobFactoryImpl());
+ // TODO(shalev): The extensions_job_factory has a NULL NetworkDelegate.
+ // Without a network_delegate, this protocol handler will never
+ // handle file: requests, but as a side effect it makes
+ // job_factory::IsHandledProtocol return true, which prevents attempts to
+ // handle the protocol externally. We pass NULL in to
+ // SetUpJobFactory() to get this effect.
+ extensions_job_factory_ = SetUpJobFactoryDefaults(
+ extensions_job_factory.Pass(),
+ scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>(),
+ NULL,
+ ftp_factory_.get());
+ extensions_context->set_job_factory(extensions_job_factory_.get());
+}
+
ChromeURLRequestContext*
ProfileImplIOData::InitializeAppRequestContext(
ChromeURLRequestContext* main_context,
@@ -429,9 +517,19 @@
AppRequestContext* context = new AppRequestContext(load_time_stats());
context->CopyFrom(main_context);
+ base::FilePath cookie_path = partition_descriptor.path.Append(
+ chrome::kCookieFilename);
base::FilePath cache_path =
partition_descriptor.path.Append(chrome::kCacheDirname);
+ const CommandLine& command_line = *CommandLine::ForCurrentProcess();
+ // Only allow Record Mode if we are in a Debug build or where we are running
+ // a cycle, and the user has limited control.
+ bool record_mode = command_line.HasSwitch(switches::kRecordMode) &&
+ (chrome::kRecordModeEnabled ||
+ command_line.HasSwitch(switches::kVisitURLs));
+ bool playback_mode = command_line.HasSwitch(switches::kPlaybackMode);
+
// Use a separate HTTP disk cache for isolated apps.
net::HttpCache::BackendFactory* app_backend = NULL;
if (partition_descriptor.in_memory) {
@@ -450,12 +548,35 @@
net::HttpCache* app_http_cache =
new net::HttpCache(main_network_session, app_backend);
- if (chrome_browser_net::ShouldUseInMemoryCookiesAndCache()) {
+ scoped_refptr<net::CookieStore> cookie_store = NULL;
+ if (partition_descriptor.in_memory) {
+ cookie_store = new net::CookieMonster(NULL, NULL);
+ } else if (record_mode || playback_mode) {
+ // Don't use existing cookies and use an in-memory store.
+ // TODO(creis): We should have a cookie delegate for notifying the cookie
+ // extensions API, but we need to update it to understand isolated apps
+ // first.
+ cookie_store = new net::CookieMonster(NULL, NULL);
app_http_cache->set_mode(
- chrome_browser_net::IsCookieRecordMode() ?
- net::HttpCache::RECORD : net::HttpCache::PLAYBACK);
+ record_mode ? net::HttpCache::RECORD : net::HttpCache::PLAYBACK);
}
+ // Use an app-specific cookie store.
+ if (!cookie_store.get()) {
+ DCHECK(!cookie_path.empty());
+
+ // TODO(creis): We should have a cookie delegate for notifying the cookie
+ // extensions API, but we need to update it to understand isolated apps
+ // first.
+ cookie_store = content::CreatePersistentCookieStore(
+ cookie_path,
+ false,
+ NULL,
+ NULL);
+ }
+
+ // Transfer ownership of the cookies and cache to AppRequestContext.
+ context->SetCookieStore(cookie_store.get());
context->SetHttpTransactionFactory(
scoped_ptr<net::HttpTransactionFactory>(app_http_cache));
« no previous file with comments | « trunk/src/chrome/browser/profiles/profile_impl_io_data.h ('k') | trunk/src/chrome/browser/profiles/profile_io_data.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698