Merge pull request #4777 from deepak1556/webview_background_patch

webview: allow setting background color
This commit is contained in:
Cheng Zhao 2016-03-15 21:12:04 +09:00
commit e50ba35871
9 changed files with 5 additions and 73 deletions

View file

@ -1101,11 +1101,6 @@ void WebContents::SetSize(const SetSizeParams& params) {
guest_delegate_->SetSize(params); guest_delegate_->SetSize(params);
} }
void WebContents::SetAllowTransparency(bool allow) {
if (guest_delegate_)
guest_delegate_->SetAllowTransparency(allow);
}
bool WebContents::IsGuest() const { bool WebContents::IsGuest() const {
return type_ == WEB_VIEW; return type_ == WEB_VIEW;
} }
@ -1203,7 +1198,6 @@ void WebContents::BuildPrototype(v8::Isolate* isolate,
&WebContents::BeginFrameSubscription) &WebContents::BeginFrameSubscription)
.SetMethod("endFrameSubscription", &WebContents::EndFrameSubscription) .SetMethod("endFrameSubscription", &WebContents::EndFrameSubscription)
.SetMethod("setSize", &WebContents::SetSize) .SetMethod("setSize", &WebContents::SetSize)
.SetMethod("setAllowTransparency", &WebContents::SetAllowTransparency)
.SetMethod("isGuest", &WebContents::IsGuest) .SetMethod("isGuest", &WebContents::IsGuest)
.SetMethod("getWebPreferences", &WebContents::GetWebPreferences) .SetMethod("getWebPreferences", &WebContents::GetWebPreferences)
.SetMethod("getOwnerBrowserWindow", &WebContents::GetOwnerBrowserWindow) .SetMethod("getOwnerBrowserWindow", &WebContents::GetOwnerBrowserWindow)

View file

@ -131,7 +131,6 @@ class WebContents : public mate::TrackableObject<WebContents>,
// Methods for creating <webview>. // Methods for creating <webview>.
void SetSize(const SetSizeParams& params); void SetSize(const SetSizeParams& params);
void SetAllowTransparency(bool allow);
bool IsGuest() const; bool IsGuest() const;
// Callback triggered on permission response. // Callback triggered on permission response.

View file

@ -22,8 +22,7 @@ const int kDefaultHeight = 300;
} // namespace } // namespace
WebViewGuestDelegate::WebViewGuestDelegate() WebViewGuestDelegate::WebViewGuestDelegate()
: 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),
api_web_contents_(nullptr) { api_web_contents_(nullptr) {
@ -96,23 +95,6 @@ void WebViewGuestDelegate::SetSize(const SetSizeParams& params) {
auto_size_enabled_ = enable_auto_size; 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( void WebViewGuestDelegate::HandleKeyboardEvent(
content::WebContents* source, content::WebContents* source,
const content::NativeWebKeyboardEvent& event) { const content::NativeWebKeyboardEvent& event) {
@ -120,19 +102,6 @@ void WebViewGuestDelegate::HandleKeyboardEvent(
embedder_web_contents_->GetDelegate()->HandleKeyboardEvent(source, event); embedder_web_contents_->GetDelegate()->HandleKeyboardEvent(source, event);
} }
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);
}
void WebViewGuestDelegate::DidCommitProvisionalLoadForFrame( void WebViewGuestDelegate::DidCommitProvisionalLoadForFrame(
content::RenderFrameHost* render_frame_host, content::RenderFrameHost* render_frame_host,
const GURL& url, ui::PageTransition transition_type) { const GURL& url, ui::PageTransition transition_type) {

View file

@ -49,16 +49,12 @@ class WebViewGuestDelegate : public content::BrowserPluginGuestDelegate,
// and normal sizes. // and normal sizes.
void SetSize(const SetSizeParams& params); void SetSize(const SetSizeParams& params);
// Sets the transparency of the guest.
void SetAllowTransparency(bool allow);
// Transfer the keyboard event to embedder. // Transfer the keyboard event to embedder.
void HandleKeyboardEvent(content::WebContents* source, void HandleKeyboardEvent(content::WebContents* source,
const content::NativeWebKeyboardEvent& event); const content::NativeWebKeyboardEvent& event);
protected: protected:
// content::WebContentsObserver: // content::WebContentsObserver:
void RenderViewReady() override;
void DidCommitProvisionalLoadForFrame( void DidCommitProvisionalLoadForFrame(
content::RenderFrameHost* render_frame_host, content::RenderFrameHost* render_frame_host,
const GURL& url, ui::PageTransition transition_type) override; const GURL& url, ui::PageTransition transition_type) override;
@ -85,9 +81,6 @@ class WebViewGuestDelegate : public content::BrowserPluginGuestDelegate,
// Returns the default size of the guestview. // Returns the default size of the guestview.
gfx::Size GetDefaultSize() const; gfx::Size GetDefaultSize() const;
// Stores whether the contents of the guest can be transparent.
bool guest_opaque_;
// The WebContents that attaches this guest view. // The WebContents that attaches this guest view.
content::WebContents* embedder_web_contents_; content::WebContents* embedder_web_contents_;

View file

@ -25,6 +25,7 @@
#include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_frame_observer.h" #include "content/public/renderer/render_frame_observer.h"
#include "content/public/renderer/render_thread.h" #include "content/public/renderer/render_thread.h"
#include "content/public/renderer/render_view.h"
#include "ipc/ipc_message_macros.h" #include "ipc/ipc_message_macros.h"
#include "third_party/WebKit/public/web/WebCustomElement.h" #include "third_party/WebKit/public/web/WebCustomElement.h"
#include "third_party/WebKit/public/web/WebLocalFrame.h" #include "third_party/WebKit/public/web/WebLocalFrame.h"
@ -131,6 +132,9 @@ void AtomRendererClient::RenderFrameCreated(
} }
void AtomRendererClient::RenderViewCreated(content::RenderView* render_view) { 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 printing::PrintWebViewHelper(render_view);
new AtomRenderViewObserver(render_view, this); new AtomRenderViewObserver(render_view, this);
} }

View file

@ -131,9 +131,6 @@ var createGuest = function(embedder, params) {
} }
this.loadURL(params.src, opts); this.loadURL(params.src, opts);
} }
if (params.allowtransparency != null) {
this.setAllowTransparency(params.allowtransparency);
}
return guest.allowPopups = params.allowpopups; 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; 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. // Returns WebContents from its guest id.
exports.getGuest = function(id) { exports.getGuest = function(id) {
var ref1; var ref1;

View file

@ -106,7 +106,4 @@ module.exports = {
setSize: function(guestInstanceId, params) { setSize: function(guestInstanceId, params) {
return ipcRenderer.send('ATOM_SHELL_GUEST_VIEW_MANAGER_SET_SIZE', 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);
}
}; };

View file

@ -77,20 +77,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. // Attribute used to define the demension limits of autosizing.
class AutosizeDimensionAttribute extends WebViewAttribute { class AutosizeDimensionAttribute extends WebViewAttribute {
constructor(name, webViewImpl) { constructor(name, webViewImpl) {
@ -292,7 +278,6 @@ class BlinkFeaturesAttribute extends WebViewAttribute {
// Sets up all of the webview attributes. // Sets up all of the webview attributes.
WebViewImpl.prototype.setupWebViewAttributes = function() { WebViewImpl.prototype.setupWebViewAttributes = function() {
this.attributes = {}; this.attributes = {};
this.attributes[webViewConstants.ATTRIBUTE_ALLOWTRANSPARENCY] = new AllowTransparencyAttribute(this);
this.attributes[webViewConstants.ATTRIBUTE_AUTOSIZE] = new AutosizeAttribute(this); this.attributes[webViewConstants.ATTRIBUTE_AUTOSIZE] = new AutosizeAttribute(this);
this.attributes[webViewConstants.ATTRIBUTE_PARTITION] = new PartitionAttribute(this); this.attributes[webViewConstants.ATTRIBUTE_PARTITION] = new PartitionAttribute(this);
this.attributes[webViewConstants.ATTRIBUTE_SRC] = new SrcAttribute(this); this.attributes[webViewConstants.ATTRIBUTE_SRC] = new SrcAttribute(this);

View file

@ -1,6 +1,5 @@
module.exports = { module.exports = {
// Attributes. // Attributes.
ATTRIBUTE_ALLOWTRANSPARENCY: 'allowtransparency',
ATTRIBUTE_AUTOSIZE: 'autosize', ATTRIBUTE_AUTOSIZE: 'autosize',
ATTRIBUTE_MAXHEIGHT: 'maxheight', ATTRIBUTE_MAXHEIGHT: 'maxheight',
ATTRIBUTE_MAXWIDTH: 'maxwidth', ATTRIBUTE_MAXWIDTH: 'maxwidth',