Pass isGuest when creating WebContents

This commit is contained in:
Cheng Zhao 2015-06-24 23:29:32 +08:00
parent 4b61683cdf
commit 081a4597e9
5 changed files with 46 additions and 28 deletions

View file

@ -163,29 +163,42 @@ WebContents::WebContents(const mate::Dictionary& options)
: guest_opaque_(true), : guest_opaque_(true),
guest_host_(nullptr), guest_host_(nullptr),
auto_size_enabled_(false), auto_size_enabled_(false),
is_full_page_plugin_(false), is_full_page_plugin_(false) {
type_(WEB_VIEW) { bool is_guest = false;
options.Get("isGuest", &is_guest);
type_ = is_guest ? WEB_VIEW : BROWSER_WINDOW;
auto browser_context = AtomBrowserMainParts::Get()->browser_context(); auto browser_context = AtomBrowserMainParts::Get()->browser_context();
content::SiteInstance* site_instance = content::SiteInstance::CreateForURL( content::WebContents* web_contents;
browser_context, GURL("chrome-guest://fake-host")); if (is_guest) {
content::SiteInstance* site_instance = content::SiteInstance::CreateForURL(
content::WebContents::CreateParams params(browser_context, site_instance); browser_context, GURL("chrome-guest://fake-host"));
params.guest_delegate = this; content::WebContents::CreateParams params(browser_context, site_instance);
auto web_contents = content::WebContents::Create(params); params.guest_delegate = this;
web_contents = content::WebContents::Create(params);
NativeWindow* owner_window = nullptr; } else {
WebContents* embedder = nullptr; content::WebContents::CreateParams params(browser_context);
if (options.Get("embedder", &embedder) && embedder) { web_contents = content::WebContents::Create(params);
auto relay = NativeWindowRelay::FromWebContents(embedder->web_contents());
if (relay)
owner_window = relay->window.get();
} }
Observe(web_contents);
AttachAsUserData(web_contents); AttachAsUserData(web_contents);
InitWithWebContents(web_contents, owner_window); InitWithWebContents(web_contents);
inspectable_web_contents_ = managed_web_contents(); inspectable_web_contents_ = managed_web_contents();
Observe(GetWebContents()); if (is_guest) {
NativeWindow* owner_window = nullptr;
WebContents* embedder = nullptr;
if (options.Get("embedder", &embedder) && embedder) {
// New WebContents's owner_window is the embedder's owner_window.
auto relay = NativeWindowRelay::FromWebContents(embedder->web_contents());
if (relay)
owner_window = relay->window.get();
}
if (owner_window)
SetOwnerWindow(owner_window);
}
} }
WebContents::~WebContents() { WebContents::~WebContents() {

View file

@ -116,14 +116,9 @@ CommonWebContentsDelegate::~CommonWebContentsDelegate() {
} }
void CommonWebContentsDelegate::InitWithWebContents( void CommonWebContentsDelegate::InitWithWebContents(
content::WebContents* web_contents, content::WebContents* web_contents) {
NativeWindow* owner_window) {
owner_window_ = owner_window->GetWeakPtr();
web_contents->SetDelegate(this); web_contents->SetDelegate(this);
NativeWindowRelay* relay = new NativeWindowRelay(owner_window_);
web_contents->SetUserData(relay->key, relay);
printing::PrintViewManagerBasic::CreateForWebContents(web_contents); printing::PrintViewManagerBasic::CreateForWebContents(web_contents);
printing::PrintPreviewMessageHandler::CreateForWebContents(web_contents); printing::PrintPreviewMessageHandler::CreateForWebContents(web_contents);
@ -132,6 +127,13 @@ void CommonWebContentsDelegate::InitWithWebContents(
web_contents_->SetDelegate(this); web_contents_->SetDelegate(this);
} }
void CommonWebContentsDelegate::SetOwnerWindow(NativeWindow* owner_window) {
content::WebContents* web_contents = GetWebContents();
owner_window_ = owner_window->GetWeakPtr();
NativeWindowRelay* relay = new NativeWindowRelay(owner_window_);
web_contents->SetUserData(relay->key, relay);
}
void CommonWebContentsDelegate::DestroyWebContents() { void CommonWebContentsDelegate::DestroyWebContents() {
web_contents_.reset(); web_contents_.reset();
} }

View file

@ -26,10 +26,12 @@ class CommonWebContentsDelegate
CommonWebContentsDelegate(); CommonWebContentsDelegate();
virtual ~CommonWebContentsDelegate(); virtual ~CommonWebContentsDelegate();
// Create a InspectableWebContents object and takes onwership of // Creates a InspectableWebContents object and takes onwership of
// |web_contents|. // |web_contents|.
void InitWithWebContents(content::WebContents* web_contents, void InitWithWebContents(content::WebContents* web_contents);
NativeWindow* owner_window);
// Set the window as owner window.
void SetOwnerWindow(NativeWindow* owner_window);
// Destroy the managed InspectableWebContents object. // Destroy the managed InspectableWebContents object.
void DestroyWebContents(); void DestroyWebContents();

View file

@ -38,7 +38,7 @@ createGuest = (embedder, params) ->
webViewManager ?= process.atomBinding 'web_view_manager' webViewManager ?= process.atomBinding 'web_view_manager'
id = getNextInstanceId embedder id = getNextInstanceId embedder
guest = webContents.create {embedder} guest = webContents.create {isGuest: true, embedder}
guestInstances[id] = {guest, embedder} guestInstances[id] = {guest, embedder}
# Destroy guest when the embedder is gone or navigated. # Destroy guest when the embedder is gone or navigated.

View file

@ -94,7 +94,8 @@ NativeWindow::NativeWindow(content::WebContents* web_contents,
has_dialog_attached_(false), has_dialog_attached_(false),
zoom_factor_(1.0), zoom_factor_(1.0),
weak_factory_(this) { weak_factory_(this) {
InitWithWebContents(web_contents, this); InitWithWebContents(web_contents);
SetOwnerWindow(this);
options.Get(switches::kFrame, &has_frame_); options.Get(switches::kFrame, &has_frame_);
options.Get(switches::kTransparent, &transparent_); options.Get(switches::kTransparent, &transparent_);