| OLD | NEW |
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 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/renderer/input/frame_input_handler_impl.h" | 5 #include "content/renderer/input/frame_input_handler_impl.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/debug/stack_trace.h" | 10 #include "base/debug/stack_trace.h" |
| 11 #include "base/logging.h" | 11 #include "base/logging.h" |
| 12 #include "content/renderer/ime_event_guard.h" | 12 #include "content/renderer/ime_event_guard.h" |
| 13 #include "content/renderer/render_thread_impl.h" | 13 #include "content/renderer/render_thread_impl.h" |
| 14 #include "content/renderer/render_view_impl.h" | 14 #include "content/renderer/render_view_impl.h" |
| 15 #include "content/renderer/render_widget.h" | 15 #include "content/renderer/render_widget.h" |
| 16 #include "third_party/WebKit/public/web/WebInputMethodController.h" |
| 16 #include "third_party/WebKit/public/web/WebLocalFrame.h" | 17 #include "third_party/WebKit/public/web/WebLocalFrame.h" |
| 17 | 18 |
| 18 namespace content { | 19 namespace content { |
| 19 | 20 |
| 20 FrameInputHandlerImpl::FrameInputHandlerImpl( | 21 FrameInputHandlerImpl::FrameInputHandlerImpl( |
| 21 base::WeakPtr<RenderFrameImpl> render_frame, | 22 base::WeakPtr<RenderFrameImpl> render_frame, |
| 22 mojom::FrameInputHandlerRequest request) | 23 mojom::FrameInputHandlerRequest request) |
| 23 : binding_(this), | 24 : binding_(this), |
| 24 render_frame_(render_frame), | 25 render_frame_(render_frame), |
| 25 input_event_queue_(render_frame->GetRenderWidget()->GetInputEventQueue()), | 26 input_event_queue_(render_frame->GetRenderWidget()->GetInputEventQueue()), |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 | 250 |
| 250 void FrameInputHandlerImpl::CollapseSelection() { | 251 void FrameInputHandlerImpl::CollapseSelection() { |
| 251 if (!main_thread_task_runner_->BelongsToCurrentThread()) { | 252 if (!main_thread_task_runner_->BelongsToCurrentThread()) { |
| 252 RunOnMainThread( | 253 RunOnMainThread( |
| 253 base::Bind(&FrameInputHandlerImpl::CollapseSelection, weak_this_)); | 254 base::Bind(&FrameInputHandlerImpl::CollapseSelection, weak_this_)); |
| 254 return; | 255 return; |
| 255 } | 256 } |
| 256 | 257 |
| 257 if (!render_frame_) | 258 if (!render_frame_) |
| 258 return; | 259 return; |
| 259 const blink::WebRange& range = | 260 const blink::WebRange& range = render_frame_->GetWebFrame() |
| 260 render_frame_->GetRenderWidget()->GetWebWidget()->CaretOrSelectionRange(); | 261 ->GetInputMethodController() |
| 262 ->GetSelectionOffsets(); |
| 261 if (range.IsNull()) | 263 if (range.IsNull()) |
| 262 return; | 264 return; |
| 263 | 265 |
| 264 HandlingState handling_state(render_frame_.get(), | 266 HandlingState handling_state(render_frame_.get(), |
| 265 UpdateState::kIsSelectingRange); | 267 UpdateState::kIsSelectingRange); |
| 266 render_frame_->GetWebFrame()->SelectRange( | 268 render_frame_->GetWebFrame()->SelectRange( |
| 267 blink::WebRange(range.EndOffset(), 0)); | 269 blink::WebRange(range.EndOffset(), 0)); |
| 268 } | 270 } |
| 269 | 271 |
| 270 void FrameInputHandlerImpl::SelectRange(const gfx::Point& base, | 272 void FrameInputHandlerImpl::SelectRange(const gfx::Point& base, |
| (...skipping 21 matching lines...) Expand all Loading... |
| 292 int32_t end) { | 294 int32_t end) { |
| 293 if (!main_thread_task_runner_->BelongsToCurrentThread()) { | 295 if (!main_thread_task_runner_->BelongsToCurrentThread()) { |
| 294 RunOnMainThread( | 296 RunOnMainThread( |
| 295 base::Bind(&FrameInputHandlerImpl::AdjustSelectionByCharacterOffset, | 297 base::Bind(&FrameInputHandlerImpl::AdjustSelectionByCharacterOffset, |
| 296 weak_this_, start, end)); | 298 weak_this_, start, end)); |
| 297 return; | 299 return; |
| 298 } | 300 } |
| 299 | 301 |
| 300 if (!render_frame_) | 302 if (!render_frame_) |
| 301 return; | 303 return; |
| 302 blink::WebRange range = | 304 blink::WebRange range = render_frame_->GetWebFrame() |
| 303 render_frame_->GetRenderWidget()->GetWebWidget()->CaretOrSelectionRange(); | 305 ->GetInputMethodController() |
| 306 ->GetSelectionOffsets(); |
| 304 if (range.IsNull()) | 307 if (range.IsNull()) |
| 305 return; | 308 return; |
| 306 | 309 |
| 307 // Sanity checks to disallow empty and out of range selections. | 310 // Sanity checks to disallow empty and out of range selections. |
| 308 if (start - end > range.length() || range.StartOffset() + start < 0) | 311 if (start - end > range.length() || range.StartOffset() + start < 0) |
| 309 return; | 312 return; |
| 310 | 313 |
| 311 HandlingState handling_state(render_frame_.get(), | 314 HandlingState handling_state(render_frame_.get(), |
| 312 UpdateState::kIsSelectingRange); | 315 UpdateState::kIsSelectingRange); |
| 313 // A negative adjust amount moves the selection towards the beginning of | 316 // A negative adjust amount moves the selection towards the beginning of |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 413 break; | 416 break; |
| 414 } | 417 } |
| 415 } | 418 } |
| 416 | 419 |
| 417 FrameInputHandlerImpl::HandlingState::~HandlingState() { | 420 FrameInputHandlerImpl::HandlingState::~HandlingState() { |
| 418 render_frame_->set_handling_select_range(original_select_range_value_); | 421 render_frame_->set_handling_select_range(original_select_range_value_); |
| 419 render_frame_->set_is_pasting(original_pasting_value_); | 422 render_frame_->set_is_pasting(original_pasting_value_); |
| 420 } | 423 } |
| 421 | 424 |
| 422 } // namespace content | 425 } // namespace content |
| OLD | NEW |