From 0e956c497dcd26290216f07e03c178b5f07eb210 Mon Sep 17 00:00:00 2001 From: Robo Date: Fri, 28 Aug 2015 01:24:05 +0530 Subject: [PATCH] use browser context from webcontents for registering datasource --- brightray/browser/browser_context.cc | 4 ++-- brightray/browser/browser_context.h | 2 +- brightray/browser/browser_main_parts.cc | 6 ++---- brightray/browser/browser_main_parts.h | 2 -- brightray/browser/devtools_ui.cc | 5 ++--- brightray/browser/devtools_ui.h | 4 +++- .../browser/web_ui_controller_factory.cc | 21 ++++++++++--------- brightray/browser/web_ui_controller_factory.h | 11 +++++----- 8 files changed, 27 insertions(+), 28 deletions(-) diff --git a/brightray/browser/browser_context.cc b/brightray/browser/browser_context.cc index 34701a4d9c2..756f27e0f95 100644 --- a/brightray/browser/browser_context.cc +++ b/brightray/browser/browser_context.cc @@ -69,7 +69,7 @@ class BrowserContext::ResourceContext : public content::ResourceContext { BrowserContext::BrowserContext() : resource_context_(new ResourceContext) { } -void BrowserContext::Initialize(const base::FilePath& partition_path, bool in_memory) { +void BrowserContext::Initialize(const std::string& partition_path, bool in_memory) { if (!PathService::Get(DIR_USER_DATA, &path_)) { PathService::Get(DIR_APP_DATA, &path_); path_ = path_.Append(base::FilePath::FromUTF8Unsafe(GetApplicationName())); @@ -77,7 +77,7 @@ void BrowserContext::Initialize(const base::FilePath& partition_path, bool in_me } if (!partition_path.empty()) - path_ = path_.Append(partition_path); + path_ = path_.Append(base::FilePath::FromUTF8Unsafe(partition_path)); in_memory_ = in_memory; auto prefs_path = GetPath().Append(FILE_PATH_LITERAL("Preferences")); diff --git a/brightray/browser/browser_context.h b/brightray/browser/browser_context.h index a59d21c49a1..ebf16a32b73 100644 --- a/brightray/browser/browser_context.h +++ b/brightray/browser/browser_context.h @@ -23,7 +23,7 @@ class BrowserContext : public content::BrowserContext, BrowserContext(); ~BrowserContext(); - virtual void Initialize(const base::FilePath& partition_path, + virtual void Initialize(const std::string& partition_path, bool in_memory = false); // content::BrowserContext: diff --git a/brightray/browser/browser_main_parts.cc b/brightray/browser/browser_main_parts.cc index 537d1c1f295..fd283f72ed0 100644 --- a/brightray/browser/browser_main_parts.cc +++ b/brightray/browser/browser_main_parts.cc @@ -121,12 +121,10 @@ void BrowserMainParts::PreMainMessageLoopStart() { void BrowserMainParts::PreMainMessageLoopRun() { browser_context_.reset(CreateBrowserContext()); - browser_context_->Initialize(base::FilePath()); + browser_context_->Initialize(std::string()); - web_ui_controller_factory_.reset( - new WebUIControllerFactory(browser_context_.get())); content::WebUIControllerFactory::RegisterFactory( - web_ui_controller_factory_.get()); + WebUIControllerFactory::GetInstance()); // --remote-debugging-port auto command_line = base::CommandLine::ForCurrentProcess(); diff --git a/brightray/browser/browser_main_parts.h b/brightray/browser/browser_main_parts.h index d5ae8f1b7f2..8822cb7c09d 100644 --- a/brightray/browser/browser_main_parts.h +++ b/brightray/browser/browser_main_parts.h @@ -28,7 +28,6 @@ class WMState; namespace brightray { class BrowserContext; -class WebUIControllerFactory; class BrowserMainParts : public content::BrowserMainParts { public: @@ -57,7 +56,6 @@ class BrowserMainParts : public content::BrowserMainParts { #endif scoped_ptr browser_context_; - scoped_ptr web_ui_controller_factory_; scoped_ptr devtools_http_handler_; #if defined(TOOLKIT_VIEWS) diff --git a/brightray/browser/devtools_ui.cc b/brightray/browser/devtools_ui.cc index c5df7e02764..8f8ded3b76d 100644 --- a/brightray/browser/devtools_ui.cc +++ b/brightray/browser/devtools_ui.cc @@ -6,8 +6,6 @@ #include -#include "browser/browser_context.h" - #include "base/memory/ref_counted_memory.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" @@ -93,7 +91,8 @@ class BundledDataSource : public content::URLDataSource { } // namespace -DevToolsUI::DevToolsUI(BrowserContext* browser_context, content::WebUI* web_ui) +DevToolsUI::DevToolsUI(content::BrowserContext* browser_context, + content::WebUI* web_ui) : WebUIController(web_ui) { web_ui->SetBindings(0); content::URLDataSource::Add(browser_context, new BundledDataSource()); diff --git a/brightray/browser/devtools_ui.h b/brightray/browser/devtools_ui.h index 1f5ff4f7217..176de9b71ba 100644 --- a/brightray/browser/devtools_ui.h +++ b/brightray/browser/devtools_ui.h @@ -6,6 +6,7 @@ #define BRIGHTRAY_BROWSER_DEVTOOLS_UI_H_ #include "base/compiler_specific.h" +#include "content/public/browser/browser_context.h" #include "content/public/browser/web_ui_controller.h" namespace brightray { @@ -14,7 +15,8 @@ class BrowserContext; class DevToolsUI : public content::WebUIController { public: - explicit DevToolsUI(BrowserContext* browser_context, content::WebUI* web_ui); + explicit DevToolsUI(content::BrowserContext* browser_context, + content::WebUI* web_ui); private: DISALLOW_COPY_AND_ASSIGN(DevToolsUI); diff --git a/brightray/browser/web_ui_controller_factory.cc b/brightray/browser/web_ui_controller_factory.cc index 9a9694de083..cacc2f8dc28 100644 --- a/brightray/browser/web_ui_controller_factory.cc +++ b/brightray/browser/web_ui_controller_factory.cc @@ -4,9 +4,8 @@ #include "browser/web_ui_controller_factory.h" -#include "browser/browser_context.h" #include "browser/devtools_ui.h" - +#include "base/memory/singleton.h" #include "content/public/browser/web_contents.h" #include "content/public/browser/web_ui.h" #include "content/public/common/url_constants.h" @@ -19,9 +18,12 @@ const char kChromeUIDevToolsBundledHost[] = "devtools"; } -WebUIControllerFactory::WebUIControllerFactory(BrowserContext* browser_context) - : browser_context_(browser_context) { - DCHECK(browser_context_); +// static +WebUIControllerFactory* WebUIControllerFactory::GetInstance() { + return Singleton::get(); +} + +WebUIControllerFactory::WebUIControllerFactory() { } WebUIControllerFactory::~WebUIControllerFactory() { @@ -48,11 +50,10 @@ bool WebUIControllerFactory::UseWebUIBindingsForURL( content::WebUIController* WebUIControllerFactory::CreateWebUIControllerForURL( content::WebUI* web_ui, const GURL& url) const { - DCHECK(browser_context_); - - if (url.host() == kChromeUIDevToolsBundledHost) - return new DevToolsUI(browser_context_, web_ui); - + if (url.host() == kChromeUIDevToolsBundledHost) { + auto browser_context = web_ui->GetWebContents()->GetBrowserContext(); + return new DevToolsUI(browser_context, web_ui); + } return NULL; } diff --git a/brightray/browser/web_ui_controller_factory.h b/brightray/browser/web_ui_controller_factory.h index 6f860841aff..3367255bba3 100644 --- a/brightray/browser/web_ui_controller_factory.h +++ b/brightray/browser/web_ui_controller_factory.h @@ -9,13 +9,17 @@ #include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui_controller_factory.h" +template struct DefaultSingletonTraits; + namespace brightray { class BrowserContext; class WebUIControllerFactory : public content::WebUIControllerFactory { public: - explicit WebUIControllerFactory(BrowserContext* browser_context); + static WebUIControllerFactory* GetInstance(); + + WebUIControllerFactory(); virtual ~WebUIControllerFactory(); content::WebUI::TypeID GetWebUIType( @@ -28,11 +32,8 @@ class WebUIControllerFactory : public content::WebUIControllerFactory { content::WebUI* web_ui, const GURL& url) const override; - static WebUIControllerFactory* GetInstance(); - private: - // Weak reference to the browser context. - BrowserContext* browser_context_; + friend struct DefaultSingletonTraits; DISALLOW_COPY_AND_ASSIGN(WebUIControllerFactory); };