From f8f3fba433190437c400ca1814ace640200671b3 Mon Sep 17 00:00:00 2001 From: Robo Date: Sun, 13 Mar 2016 09:46:33 +0530 Subject: [PATCH 1/2] webview: allow setting background color --- atom/browser/api/atom_api_web_contents.cc | 6 ---- atom/browser/api/atom_api_web_contents.h | 1 - atom/browser/web_view_guest_delegate.cc | 34 +++----------------- atom/browser/web_view_guest_delegate.h | 6 ---- atom/common/api/api_messages.h | 2 ++ atom/renderer/atom_render_view_observer.cc | 9 ++++++ atom/renderer/atom_render_view_observer.h | 1 + lib/browser/guest-view-manager.js | 8 ----- lib/renderer/web-view/guest-view-internal.js | 3 -- lib/renderer/web-view/web-view-attributes.js | 15 --------- lib/renderer/web-view/web-view-constants.js | 1 - 11 files changed, 17 insertions(+), 69 deletions(-) diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index c8b597704cd0..e5ea7e32a292 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -1100,11 +1100,6 @@ void WebContents::SetSize(const SetSizeParams& params) { guest_delegate_->SetSize(params); } -void WebContents::SetAllowTransparency(bool allow) { - if (guest_delegate_) - guest_delegate_->SetAllowTransparency(allow); -} - bool WebContents::IsGuest() const { return type_ == WEB_VIEW; } @@ -1202,7 +1197,6 @@ void WebContents::BuildPrototype(v8::Isolate* isolate, &WebContents::BeginFrameSubscription) .SetMethod("endFrameSubscription", &WebContents::EndFrameSubscription) .SetMethod("setSize", &WebContents::SetSize) - .SetMethod("setAllowTransparency", &WebContents::SetAllowTransparency) .SetMethod("isGuest", &WebContents::IsGuest) .SetMethod("getWebPreferences", &WebContents::GetWebPreferences) .SetMethod("getOwnerBrowserWindow", &WebContents::GetOwnerBrowserWindow) diff --git a/atom/browser/api/atom_api_web_contents.h b/atom/browser/api/atom_api_web_contents.h index d98b838fb464..b734dc304dff 100644 --- a/atom/browser/api/atom_api_web_contents.h +++ b/atom/browser/api/atom_api_web_contents.h @@ -131,7 +131,6 @@ class WebContents : public mate::TrackableObject, // Methods for creating . void SetSize(const SetSizeParams& params); - void SetAllowTransparency(bool allow); bool IsGuest() const; // Callback triggered on permission response. diff --git a/atom/browser/web_view_guest_delegate.cc b/atom/browser/web_view_guest_delegate.cc index 38f0fb1783fa..47fcc204a4da 100644 --- a/atom/browser/web_view_guest_delegate.cc +++ b/atom/browser/web_view_guest_delegate.cc @@ -5,6 +5,7 @@ #include "atom/browser/web_view_guest_delegate.h" #include "atom/browser/api/atom_api_web_contents.h" +#include "atom/common/api/api_messages.h" #include "atom/common/native_mate_converters/gurl_converter.h" #include "content/public/browser/guest_host.h" #include "content/public/browser/render_frame_host.h" @@ -22,8 +23,7 @@ const int kDefaultHeight = 300; } // namespace WebViewGuestDelegate::WebViewGuestDelegate() - : guest_opaque_(true), - guest_host_(nullptr), + : guest_host_(nullptr), auto_size_enabled_(false), is_full_page_plugin_(false), api_web_contents_(nullptr) { @@ -96,23 +96,6 @@ void WebViewGuestDelegate::SetSize(const SetSizeParams& params) { auto_size_enabled_ = enable_auto_size; } -void WebViewGuestDelegate::SetAllowTransparency(bool allow) { - if (guest_opaque_ != allow) - return; - - auto render_view_host = web_contents()->GetRenderViewHost(); - guest_opaque_ = !allow; - if (!render_view_host->GetWidget()->GetView()) - return; - - if (guest_opaque_) { - render_view_host->GetWidget()->GetView()->SetBackgroundColorToDefault(); - } else { - render_view_host->GetWidget()->GetView()->SetBackgroundColor( - SK_ColorTRANSPARENT); - } -} - void WebViewGuestDelegate::HandleKeyboardEvent( content::WebContents* source, const content::NativeWebKeyboardEvent& event) { @@ -121,16 +104,9 @@ void WebViewGuestDelegate::HandleKeyboardEvent( } void WebViewGuestDelegate::RenderViewReady() { - // We don't want to accidentally set the opacity of an interstitial page. - // WebContents::GetRenderWidgetHostView will return the RWHV of an - // interstitial page if one is showing at this time. We only want opacity - // to apply to web pages. - auto render_view_host_view = - web_contents()->GetRenderViewHost()->GetWidget()->GetView(); - if (guest_opaque_) - render_view_host_view->SetBackgroundColorToDefault(); - else - render_view_host_view->SetBackgroundColor(SK_ColorTRANSPARENT); + // Set default UA-dependent background as transparent. + api_web_contents_->Send(new AtomViewMsg_SetTransparentBackground( + api_web_contents_->routing_id())); } void WebViewGuestDelegate::DidCommitProvisionalLoadForFrame( diff --git a/atom/browser/web_view_guest_delegate.h b/atom/browser/web_view_guest_delegate.h index 65e0bcde1916..d4549e8dba4a 100644 --- a/atom/browser/web_view_guest_delegate.h +++ b/atom/browser/web_view_guest_delegate.h @@ -49,9 +49,6 @@ class WebViewGuestDelegate : public content::BrowserPluginGuestDelegate, // and normal sizes. void SetSize(const SetSizeParams& params); - // Sets the transparency of the guest. - void SetAllowTransparency(bool allow); - // Transfer the keyboard event to embedder. void HandleKeyboardEvent(content::WebContents* source, const content::NativeWebKeyboardEvent& event); @@ -85,9 +82,6 @@ class WebViewGuestDelegate : public content::BrowserPluginGuestDelegate, // Returns the default size of the guestview. gfx::Size GetDefaultSize() const; - // Stores whether the contents of the guest can be transparent. - bool guest_opaque_; - // The WebContents that attaches this guest view. content::WebContents* embedder_web_contents_; diff --git a/atom/common/api/api_messages.h b/atom/common/api/api_messages.h index eeb26614847b..e98f1bdfba0f 100644 --- a/atom/common/api/api_messages.h +++ b/atom/common/api/api_messages.h @@ -37,3 +37,5 @@ IPC_MESSAGE_ROUTED2(AtomViewMsg_Message, // Sent by the renderer when the draggable regions are updated. IPC_MESSAGE_ROUTED1(AtomViewHostMsg_UpdateDraggableRegions, std::vector /* regions */) + +IPC_MESSAGE_ROUTED0(AtomViewMsg_SetTransparentBackground) diff --git a/atom/renderer/atom_render_view_observer.cc b/atom/renderer/atom_render_view_observer.cc index cdbdb3d7c3ce..19eaec9e07bf 100644 --- a/atom/renderer/atom_render_view_observer.cc +++ b/atom/renderer/atom_render_view_observer.cc @@ -22,6 +22,7 @@ #include "ipc/ipc_message_macros.h" #include "net/base/net_module.h" #include "net/grit/net_resources.h" +#include "third_party/skia/include/core/SkColor.h" #include "third_party/WebKit/public/web/WebDraggableRegion.h" #include "third_party/WebKit/public/web/WebDocument.h" #include "third_party/WebKit/public/web/WebFrame.h" @@ -113,6 +114,8 @@ bool AtomRenderViewObserver::OnMessageReceived(const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(AtomRenderViewObserver, message) IPC_MESSAGE_HANDLER(AtomViewMsg_Message, OnBrowserMessage) + IPC_MESSAGE_HANDLER(AtomViewMsg_SetTransparentBackground, + OnSetTransparentBackground) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() @@ -148,4 +151,10 @@ void AtomRenderViewObserver::OnBrowserMessage(const base::string16& channel, } } +void AtomRenderViewObserver::OnSetTransparentBackground() { + if (!render_view()->GetWebView()) + return; + render_view()->GetWebView()->setBaseBackgroundColor(SK_ColorTRANSPARENT); +} + } // namespace atom diff --git a/atom/renderer/atom_render_view_observer.h b/atom/renderer/atom_render_view_observer.h index 4b9d59f3fa08..3fcaeaa331fb 100644 --- a/atom/renderer/atom_render_view_observer.h +++ b/atom/renderer/atom_render_view_observer.h @@ -32,6 +32,7 @@ class AtomRenderViewObserver : public content::RenderViewObserver { void OnBrowserMessage(const base::string16& channel, const base::ListValue& args); + void OnSetTransparentBackground(); // Weak reference to renderer client. AtomRendererClient* renderer_client_; diff --git a/lib/browser/guest-view-manager.js b/lib/browser/guest-view-manager.js index b41b9b3a0f5c..574207dd5b15 100644 --- a/lib/browser/guest-view-manager.js +++ b/lib/browser/guest-view-manager.js @@ -131,9 +131,6 @@ var createGuest = function(embedder, params) { } this.loadURL(params.src, opts); } - if (params.allowtransparency != null) { - this.setAllowTransparency(params.allowtransparency); - } return guest.allowPopups = params.allowpopups; }); @@ -229,11 +226,6 @@ ipcMain.on('ATOM_SHELL_GUEST_VIEW_MANAGER_SET_SIZE', function(event, id, params) return (ref1 = guestInstances[id]) != null ? ref1.guest.setSize(params) : void 0; }); -ipcMain.on('ATOM_SHELL_GUEST_VIEW_MANAGER_SET_ALLOW_TRANSPARENCY', function(event, id, allowtransparency) { - var ref1; - return (ref1 = guestInstances[id]) != null ? ref1.guest.setAllowTransparency(allowtransparency) : void 0; -}); - // Returns WebContents from its guest id. exports.getGuest = function(id) { var ref1; diff --git a/lib/renderer/web-view/guest-view-internal.js b/lib/renderer/web-view/guest-view-internal.js index a7427abd631c..c6e46fab9547 100644 --- a/lib/renderer/web-view/guest-view-internal.js +++ b/lib/renderer/web-view/guest-view-internal.js @@ -106,7 +106,4 @@ module.exports = { setSize: function(guestInstanceId, params) { return ipcRenderer.send('ATOM_SHELL_GUEST_VIEW_MANAGER_SET_SIZE', guestInstanceId, params); }, - setAllowTransparency: function(guestInstanceId, allowtransparency) { - return ipcRenderer.send('ATOM_SHELL_GUEST_VIEW_MANAGER_SET_ALLOW_TRANSPARENCY', guestInstanceId, allowtransparency); - } }; diff --git a/lib/renderer/web-view/web-view-attributes.js b/lib/renderer/web-view/web-view-attributes.js index bb7847fe1636..e47b42c02614 100644 --- a/lib/renderer/web-view/web-view-attributes.js +++ b/lib/renderer/web-view/web-view-attributes.js @@ -81,20 +81,6 @@ class BooleanAttribute extends WebViewAttribute { } } -// Attribute that specifies whether transparency is allowed in the webview. -class AllowTransparencyAttribute extends BooleanAttribute { - constructor(webViewImpl) { - super(webViewConstants.ATTRIBUTE_ALLOWTRANSPARENCY, webViewImpl); - } - - handleMutation() { - if (!this.webViewImpl.guestInstanceId) { - return; - } - return guestViewInternal.setAllowTransparency(this.webViewImpl.guestInstanceId, this.getValue()); - } -} - // Attribute used to define the demension limits of autosizing. class AutosizeDimensionAttribute extends WebViewAttribute { constructor(name, webViewImpl) { @@ -298,7 +284,6 @@ class BlinkFeaturesAttribute extends WebViewAttribute { // Sets up all of the webview attributes. WebViewImpl.prototype.setupWebViewAttributes = function() { this.attributes = {}; - this.attributes[webViewConstants.ATTRIBUTE_ALLOWTRANSPARENCY] = new AllowTransparencyAttribute(this); this.attributes[webViewConstants.ATTRIBUTE_AUTOSIZE] = new AutosizeAttribute(this); this.attributes[webViewConstants.ATTRIBUTE_PARTITION] = new PartitionAttribute(this); this.attributes[webViewConstants.ATTRIBUTE_SRC] = new SrcAttribute(this); diff --git a/lib/renderer/web-view/web-view-constants.js b/lib/renderer/web-view/web-view-constants.js index de2a571f5d5f..297941aa8012 100644 --- a/lib/renderer/web-view/web-view-constants.js +++ b/lib/renderer/web-view/web-view-constants.js @@ -1,6 +1,5 @@ module.exports = { // Attributes. - ATTRIBUTE_ALLOWTRANSPARENCY: 'allowtransparency', ATTRIBUTE_AUTOSIZE: 'autosize', ATTRIBUTE_MAXHEIGHT: 'maxheight', ATTRIBUTE_MAXWIDTH: 'maxwidth', From fd53a4b24daffa1e2bcec5d3a5467ac3ea9a4b95 Mon Sep 17 00:00:00 2001 From: Robo Date: Mon, 14 Mar 2016 19:24:04 +0530 Subject: [PATCH 2/2] modify default background for all render views --- atom/browser/web_view_guest_delegate.cc | 7 ------- atom/browser/web_view_guest_delegate.h | 1 - atom/common/api/api_messages.h | 2 -- atom/renderer/atom_render_view_observer.cc | 9 --------- atom/renderer/atom_render_view_observer.h | 1 - atom/renderer/atom_renderer_client.cc | 4 ++++ 6 files changed, 4 insertions(+), 20 deletions(-) diff --git a/atom/browser/web_view_guest_delegate.cc b/atom/browser/web_view_guest_delegate.cc index 47fcc204a4da..6abb9713bfac 100644 --- a/atom/browser/web_view_guest_delegate.cc +++ b/atom/browser/web_view_guest_delegate.cc @@ -5,7 +5,6 @@ #include "atom/browser/web_view_guest_delegate.h" #include "atom/browser/api/atom_api_web_contents.h" -#include "atom/common/api/api_messages.h" #include "atom/common/native_mate_converters/gurl_converter.h" #include "content/public/browser/guest_host.h" #include "content/public/browser/render_frame_host.h" @@ -103,12 +102,6 @@ void WebViewGuestDelegate::HandleKeyboardEvent( embedder_web_contents_->GetDelegate()->HandleKeyboardEvent(source, event); } -void WebViewGuestDelegate::RenderViewReady() { - // Set default UA-dependent background as transparent. - api_web_contents_->Send(new AtomViewMsg_SetTransparentBackground( - api_web_contents_->routing_id())); -} - void WebViewGuestDelegate::DidCommitProvisionalLoadForFrame( content::RenderFrameHost* render_frame_host, const GURL& url, ui::PageTransition transition_type) { diff --git a/atom/browser/web_view_guest_delegate.h b/atom/browser/web_view_guest_delegate.h index d4549e8dba4a..95888ff749fd 100644 --- a/atom/browser/web_view_guest_delegate.h +++ b/atom/browser/web_view_guest_delegate.h @@ -55,7 +55,6 @@ class WebViewGuestDelegate : public content::BrowserPluginGuestDelegate, protected: // content::WebContentsObserver: - void RenderViewReady() override; void DidCommitProvisionalLoadForFrame( content::RenderFrameHost* render_frame_host, const GURL& url, ui::PageTransition transition_type) override; diff --git a/atom/common/api/api_messages.h b/atom/common/api/api_messages.h index e98f1bdfba0f..eeb26614847b 100644 --- a/atom/common/api/api_messages.h +++ b/atom/common/api/api_messages.h @@ -37,5 +37,3 @@ IPC_MESSAGE_ROUTED2(AtomViewMsg_Message, // Sent by the renderer when the draggable regions are updated. IPC_MESSAGE_ROUTED1(AtomViewHostMsg_UpdateDraggableRegions, std::vector /* regions */) - -IPC_MESSAGE_ROUTED0(AtomViewMsg_SetTransparentBackground) diff --git a/atom/renderer/atom_render_view_observer.cc b/atom/renderer/atom_render_view_observer.cc index 19eaec9e07bf..cdbdb3d7c3ce 100644 --- a/atom/renderer/atom_render_view_observer.cc +++ b/atom/renderer/atom_render_view_observer.cc @@ -22,7 +22,6 @@ #include "ipc/ipc_message_macros.h" #include "net/base/net_module.h" #include "net/grit/net_resources.h" -#include "third_party/skia/include/core/SkColor.h" #include "third_party/WebKit/public/web/WebDraggableRegion.h" #include "third_party/WebKit/public/web/WebDocument.h" #include "third_party/WebKit/public/web/WebFrame.h" @@ -114,8 +113,6 @@ bool AtomRenderViewObserver::OnMessageReceived(const IPC::Message& message) { bool handled = true; IPC_BEGIN_MESSAGE_MAP(AtomRenderViewObserver, message) IPC_MESSAGE_HANDLER(AtomViewMsg_Message, OnBrowserMessage) - IPC_MESSAGE_HANDLER(AtomViewMsg_SetTransparentBackground, - OnSetTransparentBackground) IPC_MESSAGE_UNHANDLED(handled = false) IPC_END_MESSAGE_MAP() @@ -151,10 +148,4 @@ void AtomRenderViewObserver::OnBrowserMessage(const base::string16& channel, } } -void AtomRenderViewObserver::OnSetTransparentBackground() { - if (!render_view()->GetWebView()) - return; - render_view()->GetWebView()->setBaseBackgroundColor(SK_ColorTRANSPARENT); -} - } // namespace atom diff --git a/atom/renderer/atom_render_view_observer.h b/atom/renderer/atom_render_view_observer.h index 3fcaeaa331fb..4b9d59f3fa08 100644 --- a/atom/renderer/atom_render_view_observer.h +++ b/atom/renderer/atom_render_view_observer.h @@ -32,7 +32,6 @@ class AtomRenderViewObserver : public content::RenderViewObserver { void OnBrowserMessage(const base::string16& channel, const base::ListValue& args); - void OnSetTransparentBackground(); // Weak reference to renderer client. AtomRendererClient* renderer_client_; diff --git a/atom/renderer/atom_renderer_client.cc b/atom/renderer/atom_renderer_client.cc index a996bd0efb25..50ff109a2fc6 100644 --- a/atom/renderer/atom_renderer_client.cc +++ b/atom/renderer/atom_renderer_client.cc @@ -25,6 +25,7 @@ #include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_frame_observer.h" #include "content/public/renderer/render_thread.h" +#include "content/public/renderer/render_view.h" #include "ipc/ipc_message_macros.h" #include "third_party/WebKit/public/web/WebCustomElement.h" #include "third_party/WebKit/public/web/WebLocalFrame.h" @@ -131,6 +132,9 @@ void AtomRendererClient::RenderFrameCreated( } void AtomRendererClient::RenderViewCreated(content::RenderView* render_view) { + // Set default UA-dependent background as transparent. + render_view->GetWebView()->setBaseBackgroundColor(SK_ColorTRANSPARENT); + new printing::PrintWebViewHelper(render_view); new AtomRenderViewObserver(render_view, this); }