OLD | NEW |
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 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
477 | 477 |
478 display::Screen::GetScreen()->AddObserver(this); | 478 display::Screen::GetScreen()->AddObserver(this); |
479 | 479 |
480 if (!is_guest_view_hack_) | 480 if (!is_guest_view_hack_) |
481 render_widget_host_->SetView(this); | 481 render_widget_host_->SetView(this); |
482 | 482 |
483 // Let the page-level input event router know about our surface ID | 483 // Let the page-level input event router know about our surface ID |
484 // namespace for surface-based hit testing. | 484 // namespace for surface-based hit testing. |
485 if (render_widget_host_->delegate() && | 485 if (render_widget_host_->delegate() && |
486 render_widget_host_->delegate()->GetInputEventRouter()) { | 486 render_widget_host_->delegate()->GetInputEventRouter()) { |
487 render_widget_host_->delegate() | 487 render_widget_host_->delegate()->GetInputEventRouter()->AddFrameSinkIdOwner( |
488 ->GetInputEventRouter() | 488 GetFrameSinkId(), this); |
489 ->AddSurfaceClientIdOwner(GetSurfaceClientId(), this); | |
490 } | 489 } |
491 | 490 |
492 RenderViewHost* rvh = RenderViewHost::From(render_widget_host_); | 491 RenderViewHost* rvh = RenderViewHost::From(render_widget_host_); |
493 if (rvh) { | 492 if (rvh) { |
494 // TODO(mostynb): actually use prefs. Landing this as a separate CL | 493 // TODO(mostynb): actually use prefs. Landing this as a separate CL |
495 // first to rebaseline some unreliable layout tests. | 494 // first to rebaseline some unreliable layout tests. |
496 ignore_result(rvh->GetWebkitPreferences()); | 495 ignore_result(rvh->GetWebkitPreferences()); |
497 } | 496 } |
498 | 497 |
499 if (GetTextInputManager()) | 498 if (GetTextInputManager()) |
(...skipping 507 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1007 selection_range_ = selection->range; | 1006 selection_range_ = selection->range; |
1008 selection_text_offset_ = selection->offset; | 1007 selection_text_offset_ = selection->offset; |
1009 } | 1008 } |
1010 | 1009 |
1011 void RenderWidgetHostViewMac::RenderProcessGone(base::TerminationStatus status, | 1010 void RenderWidgetHostViewMac::RenderProcessGone(base::TerminationStatus status, |
1012 int error_code) { | 1011 int error_code) { |
1013 Destroy(); | 1012 Destroy(); |
1014 } | 1013 } |
1015 | 1014 |
1016 void RenderWidgetHostViewMac::Destroy() { | 1015 void RenderWidgetHostViewMac::Destroy() { |
1017 // SurfaceClientIds registered with RenderWidgetHostInputEventRouter | 1016 // FrameSinkIds registered with RenderWidgetHostInputEventRouter |
1018 // have already been cleared when RenderWidgetHostViewBase notified its | 1017 // have already been cleared when RenderWidgetHostViewBase notified its |
1019 // observers of our impending destruction. | 1018 // observers of our impending destruction. |
1020 [[NSNotificationCenter defaultCenter] | 1019 [[NSNotificationCenter defaultCenter] |
1021 removeObserver:cocoa_view_ | 1020 removeObserver:cocoa_view_ |
1022 name:NSWindowWillCloseNotification | 1021 name:NSWindowWillCloseNotification |
1023 object:popup_window_]; | 1022 object:popup_window_]; |
1024 | 1023 |
1025 // We've been told to destroy. | 1024 // We've been told to destroy. |
1026 [cocoa_view_ retain]; | 1025 [cocoa_view_ retain]; |
1027 [cocoa_view_ removeFromSuperview]; | 1026 [cocoa_view_ removeFromSuperview]; |
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1479 } | 1478 } |
1480 | 1479 |
1481 std::unique_ptr<SyntheticGestureTarget> | 1480 std::unique_ptr<SyntheticGestureTarget> |
1482 RenderWidgetHostViewMac::CreateSyntheticGestureTarget() { | 1481 RenderWidgetHostViewMac::CreateSyntheticGestureTarget() { |
1483 RenderWidgetHostImpl* host = | 1482 RenderWidgetHostImpl* host = |
1484 RenderWidgetHostImpl::From(GetRenderWidgetHost()); | 1483 RenderWidgetHostImpl::From(GetRenderWidgetHost()); |
1485 return std::unique_ptr<SyntheticGestureTarget>( | 1484 return std::unique_ptr<SyntheticGestureTarget>( |
1486 new SyntheticGestureTargetMac(host, cocoa_view_)); | 1485 new SyntheticGestureTargetMac(host, cocoa_view_)); |
1487 } | 1486 } |
1488 | 1487 |
1489 uint32_t RenderWidgetHostViewMac::GetSurfaceClientId() { | 1488 cc::FrameSinkId RenderWidgetHostViewMac::GetFrameSinkId() { |
1490 return browser_compositor_->GetDelegatedFrameHost()->GetSurfaceClientId(); | 1489 return browser_compositor_->GetDelegatedFrameHost()->GetFrameSinkId(); |
1491 } | 1490 } |
1492 | 1491 |
1493 uint32_t RenderWidgetHostViewMac::SurfaceClientIdAtPoint( | 1492 cc::FrameSinkId RenderWidgetHostViewMac::FrameSinkIdAtPoint( |
1494 cc::SurfaceHittestDelegate* delegate, | 1493 cc::SurfaceHittestDelegate* delegate, |
1495 const gfx::Point& point, | 1494 const gfx::Point& point, |
1496 gfx::Point* transformed_point) { | 1495 gfx::Point* transformed_point) { |
1497 // The surface hittest happens in device pixels, so we need to convert the | 1496 // The surface hittest happens in device pixels, so we need to convert the |
1498 // |point| from DIPs to pixels before hittesting. | 1497 // |point| from DIPs to pixels before hittesting. |
1499 float scale_factor = display::Screen::GetScreen() | 1498 float scale_factor = display::Screen::GetScreen() |
1500 ->GetDisplayNearestWindow(cocoa_view_) | 1499 ->GetDisplayNearestWindow(cocoa_view_) |
1501 .device_scale_factor(); | 1500 .device_scale_factor(); |
1502 gfx::Point point_in_pixels = gfx::ConvertPointToPixel(scale_factor, point); | 1501 gfx::Point point_in_pixels = gfx::ConvertPointToPixel(scale_factor, point); |
1503 cc::SurfaceId id = | 1502 cc::SurfaceId id = |
1504 browser_compositor_->GetDelegatedFrameHost()->SurfaceIdAtPoint( | 1503 browser_compositor_->GetDelegatedFrameHost()->SurfaceIdAtPoint( |
1505 delegate, point_in_pixels, transformed_point); | 1504 delegate, point_in_pixels, transformed_point); |
1506 *transformed_point = gfx::ConvertPointToDIP(scale_factor, *transformed_point); | 1505 *transformed_point = gfx::ConvertPointToDIP(scale_factor, *transformed_point); |
1507 | 1506 |
1508 // It is possible that the renderer has not yet produced a surface, in which | 1507 // It is possible that the renderer has not yet produced a surface, in which |
1509 // case we return our current namespace. | 1508 // case we return our current namespace. |
1510 if (id.is_null()) | 1509 if (id.is_null()) |
1511 return GetSurfaceClientId(); | 1510 return GetFrameSinkId(); |
1512 return id.client_id(); | 1511 return id.frame_sink_id(); |
1513 } | 1512 } |
1514 | 1513 |
1515 bool RenderWidgetHostViewMac::ShouldRouteEvent( | 1514 bool RenderWidgetHostViewMac::ShouldRouteEvent( |
1516 const WebInputEvent& event) const { | 1515 const WebInputEvent& event) const { |
1517 // See also RenderWidgetHostViewAura::ShouldRouteEvent. | 1516 // See also RenderWidgetHostViewAura::ShouldRouteEvent. |
1518 // TODO(wjmaclean): Update this function if RenderWidgetHostViewMac implements | 1517 // TODO(wjmaclean): Update this function if RenderWidgetHostViewMac implements |
1519 // OnTouchEvent(), to match what we are doing in RenderWidgetHostViewAura. | 1518 // OnTouchEvent(), to match what we are doing in RenderWidgetHostViewAura. |
1520 DCHECK(WebInputEvent::isMouseEventType(event.type) || | 1519 DCHECK(WebInputEvent::isMouseEventType(event.type) || |
1521 event.type == WebInputEvent::MouseWheel); | 1520 event.type == WebInputEvent::MouseWheel); |
1522 return render_widget_host_->delegate() && | 1521 return render_widget_host_->delegate() && |
(...skipping 1866 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3389 | 3388 |
3390 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding | 3389 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding |
3391 // regions that are not draggable. (See ControlRegionView in | 3390 // regions that are not draggable. (See ControlRegionView in |
3392 // native_app_window_cocoa.mm). This requires the render host view to be | 3391 // native_app_window_cocoa.mm). This requires the render host view to be |
3393 // draggable by default. | 3392 // draggable by default. |
3394 - (BOOL)mouseDownCanMoveWindow { | 3393 - (BOOL)mouseDownCanMoveWindow { |
3395 return YES; | 3394 return YES; |
3396 } | 3395 } |
3397 | 3396 |
3398 @end | 3397 @end |
OLD | NEW |