From 276e12ce718be4afa9c6775052c89d8bebb22b6a Mon Sep 17 00:00:00 2001 From: Heilig Benedek Date: Fri, 3 Nov 2017 03:01:26 +0100 Subject: [PATCH] pass on web_contents to properly handle devtools --- atom/browser/api/atom_api_web_contents.cc | 18 +++++++++++++++--- atom/browser/api/atom_api_web_contents.h | 6 ++++++ atom/browser/native_window.h | 1 + atom/browser/native_window_views.cc | 9 +++++---- atom/browser/native_window_views.h | 1 + 5 files changed, 28 insertions(+), 7 deletions(-) diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 032df7341aa0..bb815c3a2345 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -770,7 +770,7 @@ void WebContents::DidChangeThemeColor(SkColor theme_color) { if (theme_color != SK_ColorTRANSPARENT) { Emit("did-change-theme-color", atom::ToRGBHex(theme_color)); } else { - Emit("did-change-theme-color", nullptr); + Emit("did-change-theme-color", atom::ToRGBHex(SK_ColorTRANSPARENT)); } } @@ -933,9 +933,10 @@ bool WebContents::OnMessageReceived(const IPC::Message& message, auto relay = NativeWindowRelay::FromWebContents(web_contents()); if (!relay) return false; + IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(WebContents, message, frame_host) + IPC_MESSAGE_HANDLER(AtomAutofillFrameHostMsg_ShowPopup, ShowAutofillPopup) + IPC_END_MESSAGE_MAP() IPC_BEGIN_MESSAGE_MAP_WITH_PARAM(NativeWindow, message, frame_host) - IPC_MESSAGE_FORWARD(AtomAutofillFrameHostMsg_ShowPopup, - relay->window.get(), NativeWindow::ShowAutofillPopup) IPC_MESSAGE_FORWARD(AtomAutofillFrameHostMsg_HidePopup, relay->window.get(), NativeWindow::HideAutofillPopup) IPC_MESSAGE_UNHANDLED(handled = false) @@ -944,6 +945,17 @@ bool WebContents::OnMessageReceived(const IPC::Message& message, return handled; } +void WebContents::ShowAutofillPopup( + content::RenderFrameHost* frame_host, + const gfx::RectF& bounds, + const std::vector& values, + const std::vector& labels) { + auto relay = NativeWindowRelay::FromWebContents(web_contents()); + if (relay) + relay->window->ShowAutofillPopup( + frame_host, web_contents(), bounds, values, labels); +} + // There are three ways of destroying a webContents: // 1. call webContents.destroy(); // 2. garbage collection; diff --git a/atom/browser/api/atom_api_web_contents.h b/atom/browser/api/atom_api_web_contents.h index d51265ed126b..2949905f1761 100644 --- a/atom/browser/api/atom_api_web_contents.h +++ b/atom/browser/api/atom_api_web_contents.h @@ -357,6 +357,12 @@ class WebContents : public mate::TrackableObject, void DevToolsOpened() override; void DevToolsClosed() override; + void ShowAutofillPopup( + content::RenderFrameHost* frame_host, + const gfx::RectF& bounds, + const std::vector& values, + const std::vector& labels); + private: AtomBrowserContext* GetBrowserContext() const; diff --git a/atom/browser/native_window.h b/atom/browser/native_window.h index 21d76e09eca0..0c0b50483dcb 100644 --- a/atom/browser/native_window.h +++ b/atom/browser/native_window.h @@ -232,6 +232,7 @@ class NativeWindow : public base::SupportsUserData, const content::NativeWebKeyboardEvent& event) {} virtual void ShowAutofillPopup( content::RenderFrameHost* frame_host, + content::WebContents* web_contents, const gfx::RectF& bounds, const std::vector& values, const std::vector& labels) {} diff --git a/atom/browser/native_window_views.cc b/atom/browser/native_window_views.cc index b5a438bf76df..31909961f031 100644 --- a/atom/browser/native_window_views.cc +++ b/atom/browser/native_window_views.cc @@ -1358,15 +1358,16 @@ void NativeWindowViews::HandleKeyboardEvent( void NativeWindowViews::ShowAutofillPopup( content::RenderFrameHost* frame_host, + content::WebContents* web_contents, const gfx::RectF& bounds, const std::vector& values, const std::vector& labels) { WebContentsPreferences* web_preferences = - WebContentsPreferences::FromWebContents(web_contents()); + WebContentsPreferences::FromWebContents(web_contents); - bool isOffsceen = web_preferences->IsOffScreen(web_contents()); - bool isEmbedderOffscreen = web_preferences->IsGuest(web_contents()) && - web_preferences->IsOffScreen(web_preferences->Embedder(web_contents())); + bool isOffsceen = web_preferences->IsOffScreen(web_contents); + bool isEmbedderOffscreen = web_preferences->IsGuest(web_contents) && + web_preferences->IsOffScreen(web_preferences->Embedder(web_contents)); autofill_popup_->CreateView( frame_host, diff --git a/atom/browser/native_window_views.h b/atom/browser/native_window_views.h index 0f14f35c8f3e..638f2b849c9a 100644 --- a/atom/browser/native_window_views.h +++ b/atom/browser/native_window_views.h @@ -190,6 +190,7 @@ class NativeWindowViews : public NativeWindow, const content::NativeWebKeyboardEvent& event) override; void ShowAutofillPopup( content::RenderFrameHost* frame_host, + content::WebContents* web_contents, const gfx::RectF& bounds, const std::vector& values, const std::vector& labels) override;