Merge pull request #136 from deepak1556/browser_context_partition_patch

handle partition config in browser context
This commit is contained in:
Cheng Zhao 2015-09-01 20:01:29 +08:00
commit 7612b10dc1
10 changed files with 57 additions and 35 deletions

View file

@ -69,13 +69,17 @@ class BrowserContext::ResourceContext : public content::ResourceContext {
BrowserContext::BrowserContext() : resource_context_(new ResourceContext) { BrowserContext::BrowserContext() : resource_context_(new ResourceContext) {
} }
void BrowserContext::Initialize() { void BrowserContext::Initialize(const std::string& partition_path, bool in_memory) {
if (!PathService::Get(DIR_USER_DATA, &path_)) { if (!PathService::Get(DIR_USER_DATA, &path_)) {
PathService::Get(DIR_APP_DATA, &path_); PathService::Get(DIR_APP_DATA, &path_);
path_ = path_.Append(base::FilePath::FromUTF8Unsafe(GetApplicationName())); path_ = path_.Append(base::FilePath::FromUTF8Unsafe(GetApplicationName()));
PathService::Override(DIR_USER_DATA, path_); PathService::Override(DIR_USER_DATA, path_);
} }
if (!partition_path.empty())
path_ = path_.Append(base::FilePath::FromUTF8Unsafe(partition_path));
in_memory_ = in_memory;
auto prefs_path = GetPath().Append(FILE_PATH_LITERAL("Preferences")); auto prefs_path = GetPath().Append(FILE_PATH_LITERAL("Preferences"));
base::PrefServiceFactory prefs_factory; base::PrefServiceFactory prefs_factory;
prefs_factory.SetUserPrefsFile(prefs_path, prefs_factory.SetUserPrefsFile(prefs_path,
@ -108,6 +112,7 @@ net::URLRequestContextGetter* BrowserContext::CreateRequestContext(
this, this,
net_log, net_log,
GetPath(), GetPath(),
in_memory_,
BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::IO), BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::IO),
BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::FILE), BrowserThread::UnsafeGetMessageLoopForThread(BrowserThread::FILE),
protocol_handlers, protocol_handlers,
@ -130,7 +135,7 @@ scoped_ptr<content::ZoomLevelDelegate> BrowserContext::CreateZoomLevelDelegate(
} }
bool BrowserContext::IsOffTheRecord() const { bool BrowserContext::IsOffTheRecord() const {
return false; return in_memory_;
} }
net::URLRequestContextGetter* BrowserContext::GetRequestContext() { net::URLRequestContextGetter* BrowserContext::GetRequestContext() {

View file

@ -23,7 +23,8 @@ class BrowserContext : public content::BrowserContext,
BrowserContext(); BrowserContext();
~BrowserContext(); ~BrowserContext();
virtual void Initialize(); virtual void Initialize(const std::string& partition_path,
bool in_memory = false);
// content::BrowserContext: // content::BrowserContext:
scoped_ptr<content::ZoomLevelDelegate> CreateZoomLevelDelegate( scoped_ptr<content::ZoomLevelDelegate> CreateZoomLevelDelegate(
@ -71,6 +72,7 @@ class BrowserContext : public content::BrowserContext,
void RegisterInternalPrefs(PrefRegistrySimple* pref_registry); void RegisterInternalPrefs(PrefRegistrySimple* pref_registry);
base::FilePath path_; base::FilePath path_;
bool in_memory_;
scoped_ptr<ResourceContext> resource_context_; scoped_ptr<ResourceContext> resource_context_;
scoped_refptr<URLRequestContextGetter> url_request_getter_; scoped_refptr<URLRequestContextGetter> url_request_getter_;
scoped_ptr<PrefService> prefs_; scoped_ptr<PrefService> prefs_;

View file

@ -121,12 +121,10 @@ void BrowserMainParts::PreMainMessageLoopStart() {
void BrowserMainParts::PreMainMessageLoopRun() { void BrowserMainParts::PreMainMessageLoopRun() {
browser_context_.reset(CreateBrowserContext()); browser_context_.reset(CreateBrowserContext());
browser_context_->Initialize(); browser_context_->Initialize(std::string());
web_ui_controller_factory_.reset(
new WebUIControllerFactory(browser_context_.get()));
content::WebUIControllerFactory::RegisterFactory( content::WebUIControllerFactory::RegisterFactory(
web_ui_controller_factory_.get()); WebUIControllerFactory::GetInstance());
// --remote-debugging-port // --remote-debugging-port
auto command_line = base::CommandLine::ForCurrentProcess(); auto command_line = base::CommandLine::ForCurrentProcess();

View file

@ -28,7 +28,6 @@ class WMState;
namespace brightray { namespace brightray {
class BrowserContext; class BrowserContext;
class WebUIControllerFactory;
class BrowserMainParts : public content::BrowserMainParts { class BrowserMainParts : public content::BrowserMainParts {
public: public:
@ -57,7 +56,6 @@ class BrowserMainParts : public content::BrowserMainParts {
#endif #endif
scoped_ptr<BrowserContext> browser_context_; scoped_ptr<BrowserContext> browser_context_;
scoped_ptr<WebUIControllerFactory> web_ui_controller_factory_;
scoped_ptr<devtools_http_handler::DevToolsHttpHandler> devtools_http_handler_; scoped_ptr<devtools_http_handler::DevToolsHttpHandler> devtools_http_handler_;
#if defined(TOOLKIT_VIEWS) #if defined(TOOLKIT_VIEWS)

View file

@ -6,8 +6,6 @@
#include <string> #include <string>
#include "browser/browser_context.h"
#include "base/memory/ref_counted_memory.h" #include "base/memory/ref_counted_memory.h"
#include "base/strings/string_util.h" #include "base/strings/string_util.h"
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
@ -93,7 +91,8 @@ class BundledDataSource : public content::URLDataSource {
} // namespace } // namespace
DevToolsUI::DevToolsUI(BrowserContext* browser_context, content::WebUI* web_ui) DevToolsUI::DevToolsUI(content::BrowserContext* browser_context,
content::WebUI* web_ui)
: WebUIController(web_ui) { : WebUIController(web_ui) {
web_ui->SetBindings(0); web_ui->SetBindings(0);
content::URLDataSource::Add(browser_context, new BundledDataSource()); content::URLDataSource::Add(browser_context, new BundledDataSource());

View file

@ -6,6 +6,7 @@
#define BRIGHTRAY_BROWSER_DEVTOOLS_UI_H_ #define BRIGHTRAY_BROWSER_DEVTOOLS_UI_H_
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "content/public/browser/browser_context.h"
#include "content/public/browser/web_ui_controller.h" #include "content/public/browser/web_ui_controller.h"
namespace brightray { namespace brightray {
@ -14,7 +15,8 @@ class BrowserContext;
class DevToolsUI : public content::WebUIController { class DevToolsUI : public content::WebUIController {
public: public:
explicit DevToolsUI(BrowserContext* browser_context, content::WebUI* web_ui); explicit DevToolsUI(content::BrowserContext* browser_context,
content::WebUI* web_ui);
private: private:
DISALLOW_COPY_AND_ASSIGN(DevToolsUI); DISALLOW_COPY_AND_ASSIGN(DevToolsUI);

View file

@ -121,6 +121,7 @@ URLRequestContextGetter::URLRequestContextGetter(
Delegate* delegate, Delegate* delegate,
NetLog* net_log, NetLog* net_log,
const base::FilePath& base_path, const base::FilePath& base_path,
bool in_memory,
base::MessageLoop* io_loop, base::MessageLoop* io_loop,
base::MessageLoop* file_loop, base::MessageLoop* file_loop,
content::ProtocolHandlerMap* protocol_handlers, content::ProtocolHandlerMap* protocol_handlers,
@ -128,6 +129,7 @@ URLRequestContextGetter::URLRequestContextGetter(
: delegate_(delegate), : delegate_(delegate),
net_log_(net_log), net_log_(net_log),
base_path_(base_path), base_path_(base_path),
in_memory_(in_memory),
io_loop_(io_loop), io_loop_(io_loop),
file_loop_(file_loop), file_loop_(file_loop),
url_sec_mgr_(net::URLSecurityManager::Create(NULL, NULL)), url_sec_mgr_(net::URLSecurityManager::Create(NULL, NULL)),
@ -154,8 +156,8 @@ net::HostResolver* URLRequestContextGetter::host_resolver() {
net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() { net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
auto& command_line = *base::CommandLine::ForCurrentProcess();
if (!url_request_context_.get()) { if (!url_request_context_.get()) {
auto& command_line = *base::CommandLine::ForCurrentProcess();
url_request_context_.reset(new net::URLRequestContext); url_request_context_.reset(new net::URLRequestContext);
// --log-net-log // --log-net-log
@ -166,11 +168,18 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() {
url_request_context_->set_network_delegate(network_delegate_.get()); url_request_context_->set_network_delegate(network_delegate_.get());
storage_.reset(new net::URLRequestContextStorage(url_request_context_.get())); storage_.reset(new net::URLRequestContextStorage(url_request_context_.get()));
auto cookie_config = content::CookieStoreConfig(
base_path_.Append(FILE_PATH_LITERAL("Cookies")), scoped_refptr<net::CookieStore> cookie_store = nullptr;
content::CookieStoreConfig::EPHEMERAL_SESSION_COOKIES, if (in_memory_) {
NULL, NULL); cookie_store = content::CreateCookieStore(content::CookieStoreConfig());
storage_->set_cookie_store(content::CreateCookieStore(cookie_config)); } else {
auto cookie_config = content::CookieStoreConfig(
base_path_.Append(FILE_PATH_LITERAL("Cookies")),
content::CookieStoreConfig::EPHEMERAL_SESSION_COOKIES,
NULL, NULL);
cookie_store = content::CreateCookieStore(cookie_config);
}
storage_->set_cookie_store(cookie_store.get());
storage_->set_channel_id_service(make_scoped_ptr( storage_->set_channel_id_service(make_scoped_ptr(
new net::ChannelIDService(new net::DefaultChannelIDStore(NULL), new net::ChannelIDService(new net::DefaultChannelIDStore(NULL),
base::WorkerPool::GetTaskRunner(true)))); base::WorkerPool::GetTaskRunner(true))));
@ -265,7 +274,12 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() {
storage_->set_host_resolver(host_resolver.Pass()); storage_->set_host_resolver(host_resolver.Pass());
network_session_params.host_resolver = url_request_context_->host_resolver(); network_session_params.host_resolver = url_request_context_->host_resolver();
net::HttpCache::BackendFactory* backend = delegate_->CreateHttpCacheBackendFactory(base_path_); net::HttpCache::BackendFactory* backend = nullptr;
if (in_memory_) {
backend = net::HttpCache::DefaultBackend::InMemory(0);
} else {
backend = delegate_->CreateHttpCacheBackendFactory(base_path_);
}
storage_->set_http_transaction_factory(new net::HttpCache(network_session_params, backend)); storage_->set_http_transaction_factory(new net::HttpCache(network_session_params, backend));
storage_->set_job_factory(delegate_->CreateURLRequestJobFactory( storage_->set_job_factory(delegate_->CreateURLRequestJobFactory(

View file

@ -49,6 +49,7 @@ class URLRequestContextGetter : public net::URLRequestContextGetter {
Delegate* delegate, Delegate* delegate,
NetLog* net_log, NetLog* net_log,
const base::FilePath& base_path, const base::FilePath& base_path,
bool in_memory,
base::MessageLoop* io_loop, base::MessageLoop* io_loop,
base::MessageLoop* file_loop, base::MessageLoop* file_loop,
content::ProtocolHandlerMap* protocol_handlers, content::ProtocolHandlerMap* protocol_handlers,
@ -66,6 +67,7 @@ class URLRequestContextGetter : public net::URLRequestContextGetter {
NetLog* net_log_; NetLog* net_log_;
base::FilePath base_path_; base::FilePath base_path_;
bool in_memory_;
base::MessageLoop* io_loop_; base::MessageLoop* io_loop_;
base::MessageLoop* file_loop_; base::MessageLoop* file_loop_;

View file

@ -4,9 +4,8 @@
#include "browser/web_ui_controller_factory.h" #include "browser/web_ui_controller_factory.h"
#include "browser/browser_context.h"
#include "browser/devtools_ui.h" #include "browser/devtools_ui.h"
#include "base/memory/singleton.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui.h"
#include "content/public/common/url_constants.h" #include "content/public/common/url_constants.h"
@ -19,9 +18,12 @@ const char kChromeUIDevToolsBundledHost[] = "devtools";
} }
WebUIControllerFactory::WebUIControllerFactory(BrowserContext* browser_context) // static
: browser_context_(browser_context) { WebUIControllerFactory* WebUIControllerFactory::GetInstance() {
DCHECK(browser_context_); return Singleton<WebUIControllerFactory>::get();
}
WebUIControllerFactory::WebUIControllerFactory() {
} }
WebUIControllerFactory::~WebUIControllerFactory() { WebUIControllerFactory::~WebUIControllerFactory() {
@ -48,11 +50,10 @@ bool WebUIControllerFactory::UseWebUIBindingsForURL(
content::WebUIController* WebUIControllerFactory::CreateWebUIControllerForURL( content::WebUIController* WebUIControllerFactory::CreateWebUIControllerForURL(
content::WebUI* web_ui, const GURL& url) const { content::WebUI* web_ui, const GURL& url) const {
DCHECK(browser_context_); if (url.host() == kChromeUIDevToolsBundledHost) {
auto browser_context = web_ui->GetWebContents()->GetBrowserContext();
if (url.host() == kChromeUIDevToolsBundledHost) return new DevToolsUI(browser_context, web_ui);
return new DevToolsUI(browser_context_, web_ui); }
return NULL; return NULL;
} }

View file

@ -9,13 +9,17 @@
#include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_controller_factory.h" #include "content/public/browser/web_ui_controller_factory.h"
template <typename T> struct DefaultSingletonTraits;
namespace brightray { namespace brightray {
class BrowserContext; class BrowserContext;
class WebUIControllerFactory : public content::WebUIControllerFactory { class WebUIControllerFactory : public content::WebUIControllerFactory {
public: public:
explicit WebUIControllerFactory(BrowserContext* browser_context); static WebUIControllerFactory* GetInstance();
WebUIControllerFactory();
virtual ~WebUIControllerFactory(); virtual ~WebUIControllerFactory();
content::WebUI::TypeID GetWebUIType( content::WebUI::TypeID GetWebUIType(
@ -28,11 +32,8 @@ class WebUIControllerFactory : public content::WebUIControllerFactory {
content::WebUI* web_ui, content::WebUI* web_ui,
const GURL& url) const override; const GURL& url) const override;
static WebUIControllerFactory* GetInstance();
private: private:
// Weak reference to the browser context. friend struct DefaultSingletonTraits<WebUIControllerFactory>;
BrowserContext* browser_context_;
DISALLOW_COPY_AND_ASSIGN(WebUIControllerFactory); DISALLOW_COPY_AND_ASSIGN(WebUIControllerFactory);
}; };