Avoid using global BrowserContext

This commit is contained in:
Cheng Zhao 2015-02-04 15:08:29 -08:00
parent 502c0f0df7
commit 2c61070b36
4 changed files with 34 additions and 25 deletions

View file

@ -39,10 +39,9 @@ v8::Persistent<v8::ObjectTemplate> template_;
// Get the window that has the |guest| embedded.
NativeWindow* GetWindowFromGuest(const content::WebContents* guest) {
auto manager = AtomBrowserContext::Get()->GetGuestManager();
int guest_process_id = guest->GetRenderProcessHost()->GetID();
auto process = guest->GetRenderProcessHost();
WebViewManager::WebViewInfo info;
if (!static_cast<WebViewManager*>(manager)->GetInfo(guest_process_id, &info))
if (WebViewManager::GetInfoForProcess(process, &info))
return nullptr;
return NativeWindow::FromRenderView(
info.embedder->GetRenderProcessHost()->GetID(),

View file

@ -44,19 +44,6 @@ struct FindByProcessId {
int child_process_id_;
};
bool GetWebViewInfo(content::RenderProcessHost* host,
WebViewManager::WebViewInfo* info) {
if (!host)
return false;
auto context = host->GetBrowserContext();
if (!context)
return false;
auto manager = context->GetGuestManager();
if (!manager)
return false;
return static_cast<WebViewManager*>(manager)->GetInfo(host->GetID(), info);
}
} // namespace
AtomBrowserClient::AtomBrowserClient()
@ -110,15 +97,15 @@ void AtomBrowserClient::OverrideWebkitPrefs(
}
// Custom preferences of guest page.
auto process = render_view_host->GetProcess();
WebViewManager::WebViewInfo info;
if (GetWebViewInfo(render_view_host->GetProcess(), &info)) {
if (WebViewManager::GetInfoForProcess(process, &info)) {
prefs->web_security_enabled = !info.disable_web_security;
return;
}
NativeWindow* window = NativeWindow::FromRenderView(
render_view_host->GetProcess()->GetID(),
render_view_host->GetRoutingID());
process->GetID(), render_view_host->GetRoutingID());
if (window)
window->OverrideWebkitPrefs(url, prefs);
}
@ -168,7 +155,7 @@ void AtomBrowserClient::AppendExtraCommandLineSwitches(
// Append commnad line arguments for guest web view.
auto child_process = content::RenderProcessHost::FromID(child_process_id);
WebViewManager::WebViewInfo info;
if (GetWebViewInfo(child_process, &info)) {
if (WebViewManager::GetInfoForProcess(child_process, &info)) {
command_line->AppendSwitchASCII(
switches::kGuestInstanceID,
base::IntToString(info.guest_instance_id));

View file

@ -42,8 +42,11 @@ struct Converter<atom::WebViewManager::WebViewInfo> {
if (!options.Get("preloadUrl", &preload_url))
return false;
return net::FileURLToFilePath(preload_url, &(out->preload_script)) &&
options.Get("nodeIntegration", &(out->node_integration)) &&
if (!preload_url.is_empty() &&
!net::FileURLToFilePath(preload_url, &(out->preload_script)))
return false;
return options.Get("nodeIntegration", &(out->node_integration)) &&
options.Get("plugins", &(out->plugins)) &&
options.Get("disableWebSecurity", &(out->disable_web_security));
}
@ -53,6 +56,20 @@ struct Converter<atom::WebViewManager::WebViewInfo> {
namespace atom {
// static
bool WebViewManager::GetInfoForProcess(content::RenderProcessHost* process,
WebViewInfo* info) {
if (!process)
return false;
auto context = process->GetBrowserContext();
if (!context)
return false;
auto manager = context->GetGuestManager();
if (!manager)
return false;
return static_cast<WebViewManager*>(manager)->GetInfo(process->GetID(), info);
}
WebViewManager::WebViewManager(content::BrowserContext* context) {
}

View file

@ -14,15 +14,13 @@
namespace content {
class BrowserContext;
class RenderProcessHost;
}
namespace atom {
class WebViewManager : public content::BrowserPluginGuestManager {
public:
explicit WebViewManager(content::BrowserContext* context);
virtual ~WebViewManager();
struct WebViewInfo {
int guest_instance_id;
content::WebContents* embedder;
@ -32,6 +30,14 @@ class WebViewManager : public content::BrowserPluginGuestManager {
base::FilePath preload_script;
};
// Finds the WebViewManager attached with |process| and returns the
// WebViewInfo of it.
static bool GetInfoForProcess(content::RenderProcessHost* process,
WebViewInfo* info);
explicit WebViewManager(content::BrowserContext* context);
virtual ~WebViewManager();
void AddGuest(int guest_instance_id,
int element_instance_id,
content::WebContents* embedder,