Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_mac.mm

Issue 2702153003: [content] Fix background color update handling in RWHVAura. (Closed)
Patch Set: rebase: employ same mechanism in RWHVMac. Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/render_widget_host_view_mac.h" 5 #include "content/browser/renderer_host/render_widget_host_view_mac.h"
6 6
7 #import <Carbon/Carbon.h> 7 #import <Carbon/Carbon.h>
8 #import <objc/runtime.h> 8 #import <objc/runtime.h>
9 #include <OpenGL/gl.h> 9 #include <OpenGL/gl.h>
10 #include <QuartzCore/QuartzCore.h> 10 #include <QuartzCore/QuartzCore.h>
(...skipping 431 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 442
443 RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget, 443 RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget,
444 bool is_guest_view_hack) 444 bool is_guest_view_hack)
445 : render_widget_host_(RenderWidgetHostImpl::From(widget)), 445 : render_widget_host_(RenderWidgetHostImpl::From(widget)),
446 page_at_minimum_scale_(true), 446 page_at_minimum_scale_(true),
447 is_loading_(false), 447 is_loading_(false),
448 allow_pause_for_resize_or_repaint_(true), 448 allow_pause_for_resize_or_repaint_(true),
449 is_guest_view_hack_(is_guest_view_hack), 449 is_guest_view_hack_(is_guest_view_hack),
450 fullscreen_parent_host_view_(nullptr), 450 fullscreen_parent_host_view_(nullptr),
451 needs_flush_input_(false), 451 needs_flush_input_(false),
452 background_color_(SK_ColorWHITE),
452 weak_factory_(this) { 453 weak_factory_(this) {
453 // |cocoa_view_| owns us and we will be deleted when |cocoa_view_| 454 // |cocoa_view_| owns us and we will be deleted when |cocoa_view_|
454 // goes away. Since we autorelease it, our caller must put 455 // goes away. Since we autorelease it, our caller must put
455 // |GetNativeView()| into the view hierarchy right after calling us. 456 // |GetNativeView()| into the view hierarchy right after calling us.
456 cocoa_view_ = [[[RenderWidgetHostViewCocoa alloc] 457 cocoa_view_ = [[[RenderWidgetHostViewCocoa alloc]
457 initWithRenderWidgetHostViewMac:this] autorelease]; 458 initWithRenderWidgetHostViewMac:this] autorelease];
458 459
459 // Paint this view host with |background_color_| when there is no content 460 // Paint this view host with |background_color_| when there is no content
460 // ready to draw. 461 // ready to draw.
461 background_layer_.reset([[CALayer alloc] init]); 462 background_layer_.reset([[CALayer alloc] init]);
(...skipping 965 matching lines...) Expand 10 before | Expand all | Expand 10 after
1427 browser_compositor_->DidCreateNewRendererCompositorFrameSink(); 1428 browser_compositor_->DidCreateNewRendererCompositorFrameSink();
1428 } 1429 }
1429 1430
1430 void RenderWidgetHostViewMac::SubmitCompositorFrame( 1431 void RenderWidgetHostViewMac::SubmitCompositorFrame(
1431 const cc::LocalSurfaceId& local_surface_id, 1432 const cc::LocalSurfaceId& local_surface_id,
1432 cc::CompositorFrame frame) { 1433 cc::CompositorFrame frame) {
1433 TRACE_EVENT0("browser", "RenderWidgetHostViewMac::OnSwapCompositorFrame"); 1434 TRACE_EVENT0("browser", "RenderWidgetHostViewMac::OnSwapCompositorFrame");
1434 1435
1435 // Override the compositor background color. See RenderWidgetHostViewAura 1436 // Override the compositor background color. See RenderWidgetHostViewAura
1436 // for more details. 1437 // for more details.
1437 SetBackgroundColor(frame.metadata.root_background_color); 1438 UpdateBackgroundColorFromRenderer(frame.metadata.root_background_color);
1438 1439
1439 last_scroll_offset_ = frame.metadata.root_scroll_offset; 1440 last_scroll_offset_ = frame.metadata.root_scroll_offset;
1440 1441
1441 page_at_minimum_scale_ = 1442 page_at_minimum_scale_ =
1442 frame.metadata.page_scale_factor == frame.metadata.min_page_scale_factor; 1443 frame.metadata.page_scale_factor == frame.metadata.min_page_scale_factor;
1443 browser_compositor_->SubmitCompositorFrame(local_surface_id, 1444 browser_compositor_->SubmitCompositorFrame(local_surface_id,
1444 std::move(frame)); 1445 std::move(frame));
1445 UpdateDisplayVSyncParameters(); 1446 UpdateDisplayVSyncParameters();
1446 } 1447 }
1447 1448
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
1635 if (!active) 1636 if (!active)
1636 UnlockMouse(); 1637 UnlockMouse();
1637 } 1638 }
1638 1639
1639 void RenderWidgetHostViewMac::ShowDefinitionForSelection() { 1640 void RenderWidgetHostViewMac::ShowDefinitionForSelection() {
1640 RenderWidgetHostViewMacDictionaryHelper helper(this); 1641 RenderWidgetHostViewMacDictionaryHelper helper(this);
1641 helper.ShowDefinitionForSelection(); 1642 helper.ShowDefinitionForSelection();
1642 } 1643 }
1643 1644
1644 void RenderWidgetHostViewMac::SetBackgroundColor(SkColor color) { 1645 void RenderWidgetHostViewMac::SetBackgroundColor(SkColor color) {
1645 if (color == background_color_) 1646 // The renderer will feed its color back to us with the first CompositorFrame.
1646 return; 1647 // We short-cut here to show a sensible color before that happens.
1648 UpdateBackgroundColorFromRenderer(color);
1647 1649
1648 RenderWidgetHostViewBase::SetBackgroundColor(color); 1650 DCHECK(SkColorGetA(color) == SK_AlphaOPAQUE ||
1649 bool opaque = GetBackgroundOpaque(); 1651 SkColorGetA(color) == SK_AlphaTRANSPARENT);
1650 1652 bool opaque = SkColorGetA(color) == SK_AlphaOPAQUE;
1651 if (render_widget_host_) 1653 if (render_widget_host_)
1652 render_widget_host_->SetBackgroundOpaque(opaque); 1654 render_widget_host_->SetBackgroundOpaque(opaque);
1655 }
1656
1657 SkColor RenderWidgetHostViewMac::background_color() const {
1658 return background_color_;
1659 }
1660
1661 void RenderWidgetHostViewMac::UpdateBackgroundColorFromRenderer(SkColor color) {
1662 if (color == background_color())
1663 return;
1664 background_color_ = color;
1665
1666 bool opaque = SkColorGetA(color) == SK_AlphaOPAQUE;
1653 1667
1654 [cocoa_view_ setOpaque:opaque]; 1668 [cocoa_view_ setOpaque:opaque];
1655 1669
1656 browser_compositor_->SetHasTransparentBackground(!opaque); 1670 browser_compositor_->SetHasTransparentBackground(!opaque);
1657 1671
1658 ScopedCAActionDisabler disabler; 1672 ScopedCAActionDisabler disabler;
1659 base::ScopedCFTypeRef<CGColorRef> cg_color( 1673 base::ScopedCFTypeRef<CGColorRef> cg_color(
1660 skia::CGColorCreateFromSkColor(color)); 1674 skia::CGColorCreateFromSkColor(color));
1661 [background_layer_ setBackgroundColor:cg_color]; 1675 [background_layer_ setBackgroundColor:cg_color];
1662 } 1676 }
(...skipping 1844 matching lines...) Expand 10 before | Expand all | Expand 10 after
3507 3521
3508 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding 3522 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding
3509 // regions that are not draggable. (See ControlRegionView in 3523 // regions that are not draggable. (See ControlRegionView in
3510 // native_app_window_cocoa.mm). This requires the render host view to be 3524 // native_app_window_cocoa.mm). This requires the render host view to be
3511 // draggable by default. 3525 // draggable by default.
3512 - (BOOL)mouseDownCanMoveWindow { 3526 - (BOOL)mouseDownCanMoveWindow {
3513 return YES; 3527 return YES;
3514 } 3528 }
3515 3529
3516 @end 3530 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698