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

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

Issue 2123313002: Mac: Further clean up RWHVMac<->DelegatedFrameHost (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix crash in tryjob Created 4 years, 5 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
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_mac.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <objc/runtime.h> 7 #import <objc/runtime.h>
8 #include <OpenGL/gl.h> 8 #include <OpenGL/gl.h>
9 #include <QuartzCore/QuartzCore.h> 9 #include <QuartzCore/QuartzCore.h>
10 #include <stdint.h> 10 #include <stdint.h>
(...skipping 30 matching lines...) Expand all
41 #include "content/browser/frame_host/render_frame_host_impl.h" 41 #include "content/browser/frame_host/render_frame_host_impl.h"
42 #include "content/browser/gpu/compositor_util.h" 42 #include "content/browser/gpu/compositor_util.h"
43 #import "content/browser/renderer_host/input/synthetic_gesture_target_mac.h" 43 #import "content/browser/renderer_host/input/synthetic_gesture_target_mac.h"
44 #include "content/browser/renderer_host/input/web_input_event_builders_mac.h" 44 #include "content/browser/renderer_host/input/web_input_event_builders_mac.h"
45 #include "content/browser/renderer_host/render_view_host_impl.h" 45 #include "content/browser/renderer_host/render_view_host_impl.h"
46 #include "content/browser/renderer_host/render_widget_helper.h" 46 #include "content/browser/renderer_host/render_widget_helper.h"
47 #include "content/browser/renderer_host/render_widget_host_delegate.h" 47 #include "content/browser/renderer_host/render_widget_host_delegate.h"
48 #include "content/browser/renderer_host/render_widget_host_input_event_router.h" 48 #include "content/browser/renderer_host/render_widget_host_input_event_router.h"
49 #import "content/browser/renderer_host/render_widget_host_view_mac_dictionary_he lper.h" 49 #import "content/browser/renderer_host/render_widget_host_view_mac_dictionary_he lper.h"
50 #import "content/browser/renderer_host/render_widget_host_view_mac_editcommand_h elper.h" 50 #import "content/browser/renderer_host/render_widget_host_view_mac_editcommand_h elper.h"
51 #include "content/browser/renderer_host/resize_lock.h"
52 #import "content/browser/renderer_host/text_input_client_mac.h" 51 #import "content/browser/renderer_host/text_input_client_mac.h"
53 #include "content/common/accessibility_messages.h" 52 #include "content/common/accessibility_messages.h"
54 #include "content/common/edit_command.h" 53 #include "content/common/edit_command.h"
55 #include "content/common/input_messages.h" 54 #include "content/common/input_messages.h"
56 #include "content/common/site_isolation_policy.h" 55 #include "content/common/site_isolation_policy.h"
57 #include "content/common/text_input_state.h" 56 #include "content/common/text_input_state.h"
58 #include "content/common/view_messages.h" 57 #include "content/common/view_messages.h"
59 #include "content/public/browser/browser_context.h" 58 #include "content/public/browser/browser_context.h"
60 #include "content/public/browser/browser_plugin_guest_manager.h" 59 #include "content/public/browser/browser_plugin_guest_manager.h"
61 #include "content/public/browser/browser_thread.h" 60 #include "content/public/browser/browser_thread.h"
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 content::RenderWidgetHostViewBase::GetOrientationTypeForDesktop(display); 395 content::RenderWidgetHostViewBase::GetOrientationTypeForDesktop(display);
397 396
398 return results; 397 return results;
399 } 398 }
400 399
401 } // namespace 400 } // namespace
402 401
403 namespace content { 402 namespace content {
404 403
405 //////////////////////////////////////////////////////////////////////////////// 404 ////////////////////////////////////////////////////////////////////////////////
406 // DelegatedFrameHost, public: 405 // BrowserCompositorMacClient, public:
407 406
408 ui::Layer* RenderWidgetHostViewMac::DelegatedFrameHostGetLayer() const { 407 NSView* RenderWidgetHostViewMac::BrowserCompositorMacGetNSView() const {
409 return browser_compositor_->GetRootLayer(); 408 return cocoa_view_;
410 } 409 }
411 410
412 bool RenderWidgetHostViewMac::DelegatedFrameHostIsVisible() const { 411 bool RenderWidgetHostViewMac::BrowserCompositorMacIsVisible() const {
413 return !render_widget_host_->is_hidden(); 412 return !render_widget_host_->is_hidden();
414 } 413 }
415 414
416 SkColor RenderWidgetHostViewMac::DelegatedFrameHostGetGutterColor( 415 SkColor RenderWidgetHostViewMac::BrowserCompositorMacGetGutterColor(
417 SkColor color) const { 416 SkColor color) const {
418 // When making an element on the page fullscreen the element's background 417 // When making an element on the page fullscreen the element's background
419 // may not match the page's, so use black as the gutter color to avoid 418 // may not match the page's, so use black as the gutter color to avoid
420 // flashes of brighter colors during the transition. 419 // flashes of brighter colors during the transition.
421 if (render_widget_host_->delegate() && 420 if (render_widget_host_->delegate() &&
422 render_widget_host_->delegate()->IsFullscreenForCurrentTab()) { 421 render_widget_host_->delegate()->IsFullscreenForCurrentTab()) {
423 return SK_ColorBLACK; 422 return SK_ColorBLACK;
424 } 423 }
425 return color; 424 return color;
426 } 425 }
427 426
428 gfx::Size RenderWidgetHostViewMac::DelegatedFrameHostDesiredSizeInDIP() const { 427 void RenderWidgetHostViewMac::BrowserCompositorMacSendCompositorSwapAck(
429 return GetViewBounds().size();
430 }
431
432 bool RenderWidgetHostViewMac::DelegatedFrameCanCreateResizeLock() const {
433 // Mac uses the RenderWidgetResizeHelper instead of a resize lock.
434 return false;
435 }
436
437 std::unique_ptr<ResizeLock>
438 RenderWidgetHostViewMac::DelegatedFrameHostCreateResizeLock(
439 bool defer_compositor_lock) {
440 NOTREACHED();
441 return std::unique_ptr<ResizeLock>();
442 }
443
444 void RenderWidgetHostViewMac::DelegatedFrameHostResizeLockWasReleased() {
445 NOTREACHED();
446 }
447
448 void RenderWidgetHostViewMac::DelegatedFrameHostSendCompositorSwapAck(
449 int output_surface_id, 428 int output_surface_id,
450 const cc::CompositorFrameAck& ack) { 429 const cc::CompositorFrameAck& ack) {
451 render_widget_host_->Send(new ViewMsg_SwapCompositorFrameAck( 430 render_widget_host_->Send(new ViewMsg_SwapCompositorFrameAck(
452 render_widget_host_->GetRoutingID(), output_surface_id, ack)); 431 render_widget_host_->GetRoutingID(), output_surface_id, ack));
453 } 432 }
454 433
455 void RenderWidgetHostViewMac::DelegatedFrameHostSendReclaimCompositorResources( 434 void RenderWidgetHostViewMac::
456 int output_surface_id, 435 BrowserCompositorMacSendReclaimCompositorResources(
457 const cc::CompositorFrameAck& ack) { 436 int output_surface_id,
437 const cc::CompositorFrameAck& ack) {
458 render_widget_host_->Send(new ViewMsg_ReclaimCompositorResources( 438 render_widget_host_->Send(new ViewMsg_ReclaimCompositorResources(
459 render_widget_host_->GetRoutingID(), output_surface_id, ack)); 439 render_widget_host_->GetRoutingID(), output_surface_id, ack));
460 } 440 }
461 441
462 void RenderWidgetHostViewMac::DelegatedFrameHostOnLostCompositorResources() { 442 void RenderWidgetHostViewMac::BrowserCompositorMacOnLostCompositorResources() {
463 render_widget_host_->ScheduleComposite(); 443 render_widget_host_->ScheduleComposite();
464 } 444 }
465 445
466 void RenderWidgetHostViewMac::DelegatedFrameHostUpdateVSyncParameters( 446 void RenderWidgetHostViewMac::BrowserCompositorMacUpdateVSyncParameters(
467 const base::TimeTicks& timebase, 447 const base::TimeTicks& timebase,
468 const base::TimeDelta& interval) { 448 const base::TimeDelta& interval) {
469 render_widget_host_->UpdateVSyncParameters(timebase, interval); 449 render_widget_host_->UpdateVSyncParameters(timebase, interval);
470 } 450 }
471 451
472 void RenderWidgetHostViewMac::SetBeginFrameSource( 452 void RenderWidgetHostViewMac::BrowserCompositorMacSendBeginFrame(
473 cc::BeginFrameSource* source) { 453 const cc::BeginFrameArgs& args) {
474 if (begin_frame_source_ && needs_begin_frames_) 454 render_widget_host_->Send(
475 begin_frame_source_->RemoveObserver(this); 455 new ViewMsg_BeginFrame(render_widget_host_->GetRoutingID(), args));
476 begin_frame_source_ = source;
477 if (begin_frame_source_ && needs_begin_frames_)
478 begin_frame_source_->AddObserver(this);
479 } 456 }
480 457
481 //////////////////////////////////////////////////////////////////////////////// 458 ////////////////////////////////////////////////////////////////////////////////
482 // cc::BeginFrameSourceBase, public:
483
484 void RenderWidgetHostViewMac::OnSetNeedsBeginFrames(bool needs_begin_frames) {
485 if (needs_begin_frames_ == needs_begin_frames)
486 return;
487
488 needs_begin_frames_ = needs_begin_frames;
489 if (begin_frame_source_) {
490 if (needs_begin_frames_)
491 begin_frame_source_->AddObserver(this);
492 else
493 begin_frame_source_->RemoveObserver(this);
494 }
495 }
496
497 void RenderWidgetHostViewMac::OnBeginFrame(
498 const cc::BeginFrameArgs& args) {
499 browser_compositor_->GetDelegatedFrameHost()->SetVSyncParameters(
500 args.frame_time, args.interval);
501 render_widget_host_->Send(
502 new ViewMsg_BeginFrame(render_widget_host_->GetRoutingID(), args));
503 last_begin_frame_args_ = args;
504 }
505
506 const cc::BeginFrameArgs& RenderWidgetHostViewMac::LastUsedBeginFrameArgs()
507 const {
508 return last_begin_frame_args_;
509 }
510
511 void RenderWidgetHostViewMac::OnBeginFrameSourcePausedChanged(
512 bool paused) {
513 // Only used on Android WebView.
514 }
515
516 ////////////////////////////////////////////////////////////////////////////////
517 // AcceleratedWidgetMacNSView, public: 459 // AcceleratedWidgetMacNSView, public:
518 460
519 NSView* RenderWidgetHostViewMac::AcceleratedWidgetGetNSView() const { 461 NSView* RenderWidgetHostViewMac::AcceleratedWidgetGetNSView() const {
520 return cocoa_view_; 462 return cocoa_view_;
521 } 463 }
522 464
523 void RenderWidgetHostViewMac::AcceleratedWidgetGetVSyncParameters( 465 void RenderWidgetHostViewMac::AcceleratedWidgetGetVSyncParameters(
524 base::TimeTicks* timebase, base::TimeDelta* interval) const { 466 base::TimeTicks* timebase, base::TimeDelta* interval) const {
525 if (display_link_ && 467 if (display_link_ &&
526 display_link_->GetVSyncParameters(timebase, interval)) 468 display_link_->GetVSyncParameters(timebase, interval))
(...skipping 22 matching lines...) Expand all
549 RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget, 491 RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget,
550 bool is_guest_view_hack) 492 bool is_guest_view_hack)
551 : render_widget_host_(RenderWidgetHostImpl::From(widget)), 493 : render_widget_host_(RenderWidgetHostImpl::From(widget)),
552 text_input_type_(ui::TEXT_INPUT_TYPE_NONE), 494 text_input_type_(ui::TEXT_INPUT_TYPE_NONE),
553 can_compose_inline_(true), 495 can_compose_inline_(true),
554 page_at_minimum_scale_(true), 496 page_at_minimum_scale_(true),
555 is_loading_(false), 497 is_loading_(false),
556 allow_pause_for_resize_or_repaint_(true), 498 allow_pause_for_resize_or_repaint_(true),
557 is_guest_view_hack_(is_guest_view_hack), 499 is_guest_view_hack_(is_guest_view_hack),
558 fullscreen_parent_host_view_(nullptr), 500 fullscreen_parent_host_view_(nullptr),
559 begin_frame_source_(nullptr),
560 needs_begin_frames_(false),
561 weak_factory_(this) { 501 weak_factory_(this) {
562 // |cocoa_view_| owns us and we will be deleted when |cocoa_view_| 502 // |cocoa_view_| owns us and we will be deleted when |cocoa_view_|
563 // goes away. Since we autorelease it, our caller must put 503 // goes away. Since we autorelease it, our caller must put
564 // |GetNativeView()| into the view hierarchy right after calling us. 504 // |GetNativeView()| into the view hierarchy right after calling us.
565 cocoa_view_ = [[[RenderWidgetHostViewCocoa alloc] 505 cocoa_view_ = [[[RenderWidgetHostViewCocoa alloc]
566 initWithRenderWidgetHostViewMac:this] autorelease]; 506 initWithRenderWidgetHostViewMac:this] autorelease];
567 507
568 // Paint this view host with |background_color_| when there is no content 508 // Paint this view host with |background_color_| when there is no content
569 // ready to draw. 509 // ready to draw.
570 background_layer_.reset([[CALayer alloc] init]); 510 background_layer_.reset([[CALayer alloc] init]);
(...skipping 23 matching lines...) Expand all
594 534
595 RenderWidgetHostViewMac::~RenderWidgetHostViewMac() { 535 RenderWidgetHostViewMac::~RenderWidgetHostViewMac() {
596 display::Screen::GetScreen()->RemoveObserver(this); 536 display::Screen::GetScreen()->RemoveObserver(this);
597 537
598 // This is being called from |cocoa_view_|'s destructor, so invalidate the 538 // This is being called from |cocoa_view_|'s destructor, so invalidate the
599 // pointer. 539 // pointer.
600 cocoa_view_ = nil; 540 cocoa_view_ = nil;
601 541
602 UnlockMouse(); 542 UnlockMouse();
603 543
604 // Ensure that the browser compositor is destroyed in a safe order. 544 browser_compositor_.reset();
605 browser_compositor_->Destroy();
606 545
607 // We are owned by RenderWidgetHostViewCocoa, so if we go away before the 546 // We are owned by RenderWidgetHostViewCocoa, so if we go away before the
608 // RenderWidgetHost does we need to tell it not to hold a stale pointer to 547 // RenderWidgetHost does we need to tell it not to hold a stale pointer to
609 // us. 548 // us.
610 if (render_widget_host_) { 549 if (render_widget_host_) {
611 // If this is a RenderWidgetHostViewGuest's platform_view_, we're not the 550 // If this is a RenderWidgetHostViewGuest's platform_view_, we're not the
612 // RWH's view, the RenderWidgetHostViewGuest is. So don't reset the RWH's 551 // RWH's view, the RenderWidgetHostViewGuest is. So don't reset the RWH's
613 // view, the RenderWidgetHostViewGuest will do it. 552 // view, the RenderWidgetHostViewGuest will do it.
614 if (!is_guest_view_hack_) 553 if (!is_guest_view_hack_)
615 render_widget_host_->SetView(NULL); 554 render_widget_host_->SetView(NULL);
(...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after
1005 fullscreen_window_manager_.reset(); 944 fullscreen_window_manager_.reset();
1006 [pepper_fullscreen_window_ close]; 945 [pepper_fullscreen_window_ close];
1007 946
1008 // This can be called as part of processing the window's responder 947 // This can be called as part of processing the window's responder
1009 // chain, for instance |-performKeyEquivalent:|. In that case the 948 // chain, for instance |-performKeyEquivalent:|. In that case the
1010 // object needs to survive until the stack unwinds. 949 // object needs to survive until the stack unwinds.
1011 pepper_fullscreen_window_.autorelease(); 950 pepper_fullscreen_window_.autorelease();
1012 951
1013 // Delete the delegated frame state, which will reach back into 952 // Delete the delegated frame state, which will reach back into
1014 // render_widget_host_. 953 // render_widget_host_.
1015 browser_compositor_->Destroy(); 954 browser_compositor_.reset();
1016 955
1017 // Make sure none of our observers send events for us to process after 956 // Make sure none of our observers send events for us to process after
1018 // we release render_widget_host_. 957 // we release render_widget_host_.
1019 NotifyObserversAboutShutdown(); 958 NotifyObserversAboutShutdown();
1020 959
1021 // We get this call just before |render_widget_host_| deletes 960 // We get this call just before |render_widget_host_| deletes
1022 // itself. But we are owned by |cocoa_view_|, which may be retained 961 // itself. But we are owned by |cocoa_view_|, which may be retained
1023 // by some other code. Examples are WebContentsViewMac's 962 // by some other code. Examples are WebContentsViewMac's
1024 // |latent_focus_view_| and TabWindowController's 963 // |latent_focus_view_| and TabWindowController's
1025 // |cachedContentView_|. 964 // |cachedContentView_|.
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
1187 void RenderWidgetHostViewMac::ForwardMouseEvent(const WebMouseEvent& event) { 1126 void RenderWidgetHostViewMac::ForwardMouseEvent(const WebMouseEvent& event) {
1188 if (render_widget_host_) 1127 if (render_widget_host_)
1189 render_widget_host_->ForwardMouseEvent(event); 1128 render_widget_host_->ForwardMouseEvent(event);
1190 1129
1191 if (event.type == WebInputEvent::MouseLeave) { 1130 if (event.type == WebInputEvent::MouseLeave) {
1192 [cocoa_view_ setToolTipAtMousePoint:nil]; 1131 [cocoa_view_ setToolTipAtMousePoint:nil];
1193 tooltip_text_.clear(); 1132 tooltip_text_.clear();
1194 } 1133 }
1195 } 1134 }
1196 1135
1136 void RenderWidgetHostViewMac::OnSetNeedsBeginFrames(bool needs_begin_frames) {
1137 browser_compositor_->SetNeedsBeginFrames(needs_begin_frames);
1138 }
1139
1197 void RenderWidgetHostViewMac::KillSelf() { 1140 void RenderWidgetHostViewMac::KillSelf() {
1198 if (!weak_factory_.HasWeakPtrs()) { 1141 if (!weak_factory_.HasWeakPtrs()) {
1199 [cocoa_view_ setHidden:YES]; 1142 [cocoa_view_ setHidden:YES];
1200 base::MessageLoop::current()->PostTask(FROM_HERE, 1143 base::MessageLoop::current()->PostTask(FROM_HERE,
1201 base::Bind(&RenderWidgetHostViewMac::ShutdownHost, 1144 base::Bind(&RenderWidgetHostViewMac::ShutdownHost,
1202 weak_factory_.GetWeakPtr())); 1145 weak_factory_.GetWeakPtr()));
1203 } 1146 }
1204 } 1147 }
1205 1148
1206 bool RenderWidgetHostViewMac::GetLineBreakIndex( 1149 bool RenderWidgetHostViewMac::GetLineBreakIndex(
(...skipping 2095 matching lines...) Expand 10 before | Expand all | Expand 10 after
3302 3245
3303 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding 3246 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding
3304 // regions that are not draggable. (See ControlRegionView in 3247 // regions that are not draggable. (See ControlRegionView in
3305 // native_app_window_cocoa.mm). This requires the render host view to be 3248 // native_app_window_cocoa.mm). This requires the render host view to be
3306 // draggable by default. 3249 // draggable by default.
3307 - (BOOL)mouseDownCanMoveWindow { 3250 - (BOOL)mouseDownCanMoveWindow {
3308 return YES; 3251 return YES;
3309 } 3252 }
3310 3253
3311 @end 3254 @end
OLDNEW
« no previous file with comments | « content/browser/renderer_host/render_widget_host_view_mac.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698