Chromium Code Reviews| 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_base.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_base.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
| 9 #include "content/browser/accessibility/browser_accessibility_manager.h" | 9 #include "content/browser/accessibility/browser_accessibility_manager.h" |
| 10 #include "content/browser/frame_host/frame_tree.h" | |
| 10 #include "content/browser/gpu/gpu_data_manager_impl.h" | 11 #include "content/browser/gpu/gpu_data_manager_impl.h" |
| 11 #include "content/browser/renderer_host/input/synthetic_gesture_target_base.h" | 12 #include "content/browser/renderer_host/input/synthetic_gesture_target_base.h" |
| 12 #include "content/browser/renderer_host/render_process_host_impl.h" | 13 #include "content/browser/renderer_host/render_process_host_impl.h" |
| 14 #include "content/browser/renderer_host/render_view_host_delegate.h" | |
| 15 #include "content/browser/renderer_host/render_view_host_impl.h" | |
| 13 #include "content/browser/renderer_host/render_widget_host_impl.h" | 16 #include "content/browser/renderer_host/render_widget_host_impl.h" |
| 14 #include "content/common/content_switches_internal.h" | 17 #include "content/common/content_switches_internal.h" |
| 18 #include "content/common/view_messages.h" | |
| 15 #include "content/public/browser/render_widget_host_view_frame_subscriber.h" | 19 #include "content/public/browser/render_widget_host_view_frame_subscriber.h" |
| 20 #include "content/public/common/browser_plugin_guest_mode.h" | |
| 16 #include "ui/gfx/display.h" | 21 #include "ui/gfx/display.h" |
| 17 #include "ui/gfx/geometry/point_conversions.h" | 22 #include "ui/gfx/geometry/point_conversions.h" |
| 18 #include "ui/gfx/geometry/size_conversions.h" | 23 #include "ui/gfx/geometry/size_conversions.h" |
| 19 #include "ui/gfx/geometry/size_f.h" | 24 #include "ui/gfx/geometry/size_f.h" |
| 20 #include "ui/gfx/screen.h" | 25 #include "ui/gfx/screen.h" |
| 21 | 26 |
| 22 #if defined(OS_WIN) | 27 #if defined(OS_WIN) |
| 23 #include "base/command_line.h" | 28 #include "base/command_line.h" |
| 24 #include "base/message_loop/message_loop.h" | 29 #include "base/message_loop/message_loop.h" |
| 25 #include "base/win/wrapped_window_proc.h" | 30 #include "base/win/wrapped_window_proc.h" |
| (...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 370 : popup_type_(blink::WebPopupTypeNone), | 375 : popup_type_(blink::WebPopupTypeNone), |
| 371 background_color_(SK_ColorWHITE), | 376 background_color_(SK_ColorWHITE), |
| 372 mouse_locked_(false), | 377 mouse_locked_(false), |
| 373 showing_context_menu_(false), | 378 showing_context_menu_(false), |
| 374 selection_text_offset_(0), | 379 selection_text_offset_(0), |
| 375 selection_range_(gfx::Range::InvalidRange()), | 380 selection_range_(gfx::Range::InvalidRange()), |
| 376 current_device_scale_factor_(0), | 381 current_device_scale_factor_(0), |
| 377 current_display_rotation_(gfx::Display::ROTATE_0), | 382 current_display_rotation_(gfx::Display::ROTATE_0), |
| 378 pinch_zoom_enabled_(content::IsPinchToZoomEnabled()), | 383 pinch_zoom_enabled_(content::IsPinchToZoomEnabled()), |
| 379 renderer_frame_number_(0), | 384 renderer_frame_number_(0), |
| 385 text_input_state_(new TextInputState), | |
| 386 cached_text_input_state_(text_input_state_.get()), | |
| 387 focused_guest_rwhv_(nullptr), | |
| 380 weak_factory_(this) { | 388 weak_factory_(this) { |
| 389 text_input_state_->can_compose_inline = true; | |
| 381 } | 390 } |
| 382 | 391 |
| 383 RenderWidgetHostViewBase::~RenderWidgetHostViewBase() { | 392 RenderWidgetHostViewBase::~RenderWidgetHostViewBase() { |
| 384 DCHECK(!mouse_locked_); | 393 DCHECK(!mouse_locked_); |
| 385 } | 394 } |
| 386 | 395 |
| 387 bool RenderWidgetHostViewBase::OnMessageReceived(const IPC::Message& msg){ | 396 bool RenderWidgetHostViewBase::OnMessageReceived(const IPC::Message& msg){ |
| 388 return false; | 397 return false; |
| 389 } | 398 } |
| 390 | 399 |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 540 current_display_rotation_ == display.rotation()) { | 549 current_display_rotation_ == display.rotation()) { |
| 541 return false; | 550 return false; |
| 542 } | 551 } |
| 543 | 552 |
| 544 current_display_area_ = display.work_area(); | 553 current_display_area_ = display.work_area(); |
| 545 current_device_scale_factor_ = display.device_scale_factor(); | 554 current_device_scale_factor_ = display.device_scale_factor(); |
| 546 current_display_rotation_ = display.rotation(); | 555 current_display_rotation_ = display.rotation(); |
| 547 return true; | 556 return true; |
| 548 } | 557 } |
| 549 | 558 |
| 559 RenderFrameHostImpl* RenderWidgetHostViewBase::GetFocusedFrame() const { | |
| 560 RenderViewHost* rvh = | |
| 561 RenderViewHost::From(RenderWidgetHostImpl::From(GetRenderWidgetHost())); | |
| 562 if (!rvh) | |
| 563 return nullptr; | |
| 564 | |
| 565 FrameTreeNode* focused_frame = | |
| 566 rvh->GetDelegate()->GetFrameTree()->GetFocusedFrame(); | |
| 567 if (!focused_frame) | |
| 568 return nullptr; | |
| 569 | |
| 570 return focused_frame->current_frame_host(); | |
| 571 } | |
| 572 | |
| 550 base::WeakPtr<RenderWidgetHostViewBase> RenderWidgetHostViewBase::GetWeakPtr() { | 573 base::WeakPtr<RenderWidgetHostViewBase> RenderWidgetHostViewBase::GetWeakPtr() { |
| 551 return weak_factory_.GetWeakPtr(); | 574 return weak_factory_.GetWeakPtr(); |
| 552 } | 575 } |
| 553 | 576 |
| 554 scoped_ptr<SyntheticGestureTarget> | 577 scoped_ptr<SyntheticGestureTarget> |
| 555 RenderWidgetHostViewBase::CreateSyntheticGestureTarget() { | 578 RenderWidgetHostViewBase::CreateSyntheticGestureTarget() { |
| 556 RenderWidgetHostImpl* host = | 579 RenderWidgetHostImpl* host = |
| 557 RenderWidgetHostImpl::From(GetRenderWidgetHost()); | 580 RenderWidgetHostImpl::From(GetRenderWidgetHost()); |
| 558 return scoped_ptr<SyntheticGestureTarget>( | 581 return scoped_ptr<SyntheticGestureTarget>( |
| 559 new SyntheticGestureTargetBase(host)); | 582 new SyntheticGestureTargetBase(host)); |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 694 gfx::ToRoundedPoint(point))); | 717 gfx::ToRoundedPoint(point))); |
| 695 } | 718 } |
| 696 | 719 |
| 697 void RenderWidgetHostViewBase::TransformPointToLocalCoordSpace( | 720 void RenderWidgetHostViewBase::TransformPointToLocalCoordSpace( |
| 698 const gfx::Point& point, | 721 const gfx::Point& point, |
| 699 cc::SurfaceId original_surface, | 722 cc::SurfaceId original_surface, |
| 700 gfx::Point* transformed_point) { | 723 gfx::Point* transformed_point) { |
| 701 *transformed_point = point; | 724 *transformed_point = point; |
| 702 } | 725 } |
| 703 | 726 |
| 727 void RenderWidgetHostViewBase::TextInputStateChanged( | |
| 728 const ViewHostMsg_TextInputState_Params& params) { | |
| 729 if (text_input_state_->type != params.type || | |
| 730 #ifndef OS_MACOSX | |
| 731 text_input_state_->mode != params.mode || | |
| 732 text_input_state_->flags != params.flags || | |
| 733 #endif | |
| 734 text_input_state_->can_compose_inline != params.can_compose_inline) { | |
| 735 *text_input_state_ = params; | |
| 736 NotifyTextInputStateChanged(); | |
| 737 } | |
| 738 } | |
| 739 | |
| 740 const TextInputState* RenderWidgetHostViewBase::FindCurrentTextInputState() { | |
| 741 if (!ShouldObtainTextInputStateFromSubFrameViews()) | |
|
kenrb
2016/02/01 20:12:43
Why is this needed? Can't you just compare GetFocu
EhsanK
2016/02/12 15:46:59
Good point! I removed this part and all other code
| |
| 742 return text_input_state_.get(); | |
| 743 | |
| 744 // TODO(ekaramad): This is for out of process contents based on BrowserPlugin. | |
| 745 // Remove this block when BrowserPlugin is removed. | |
| 746 if (!BrowserPluginGuestMode::UseCrossProcessFramesForGuests()) | |
| 747 if (focused_guest_rwhv_) | |
| 748 return focused_guest_rwhv_->current_text_input_state(); | |
| 749 | |
| 750 const TextInputState* state = text_input_state_.get(); | |
| 751 RenderFrameHostImpl* rfhi = GetFocusedFrame(); | |
| 752 // TODO(ekaramd): Remove the RVH part when it goes away. | |
| 753 if (rfhi) { | |
| 754 RenderWidgetHostViewBase* focused_view = nullptr; | |
| 755 if (rfhi->GetRenderWidgetHost()) | |
| 756 focused_view = rfhi->GetRenderWidgetHost()->GetView(); | |
| 757 else if (rfhi->GetRenderViewHost()) | |
| 758 focused_view = | |
| 759 RenderWidgetHostImpl::From(rfhi->GetRenderViewHost()->GetWidget()) | |
| 760 ->GetView(); | |
| 761 if (focused_view && focused_view != this) { | |
| 762 DCHECK(!focused_view->ShouldObtainTextInputStateFromSubFrameViews()); | |
| 763 state = focused_view->FindCurrentTextInputState(); | |
| 764 } | |
| 765 } | |
| 766 return state; | |
| 767 } | |
| 768 | |
| 769 void RenderWidgetHostViewBase::NotifyGuestTextInputStateChanged( | |
| 770 RenderWidgetHostViewBase* guest_rwhv) { | |
| 771 if (guest_rwhv->current_text_input_state()->type != ui::TEXT_INPUT_TYPE_NONE) | |
| 772 focused_guest_rwhv_ = guest_rwhv; | |
| 773 else if (focused_guest_rwhv_ == guest_rwhv) | |
| 774 focused_guest_rwhv_ = nullptr; | |
| 775 NotifyTextInputStateChanged(); | |
| 776 } | |
| 777 | |
| 778 void RenderWidgetHostViewBase::NotifyTextInputStateChanged() { | |
|
kenrb
2016/02/01 20:12:43
Does this need to be called when the focused frame
EhsanK
2016/02/12 15:46:59
This is called whenever after a ViewHostMsg_TextIn
| |
| 779 cached_text_input_state_ = FindCurrentTextInputState(); | |
| 780 } | |
| 781 | |
| 782 bool RenderWidgetHostViewBase::ShouldObtainTextInputStateFromSubFrameViews() | |
| 783 const { | |
| 784 return true; | |
| 785 } | |
| 786 | |
| 704 } // namespace content | 787 } // namespace content |
| OLD | NEW |