diff --git a/content/browser/frame_host/interstitial_page_impl_browsertest.cc b/content/browser/frame_host/interstitial_page_impl_browsertest.cc index 00a5bec3d2198..b483282f58920 100644 --- a/content/browser/frame_host/interstitial_page_impl_browsertest.cc +++ b/content/browser/frame_host/interstitial_page_impl_browsertest.cc @@ -51,10 +51,6 @@ class TestInterstitialPageDelegate : public InterstitialPageDelegate { " window.domAutomationController.send(" " window.getSelection().toString());" "}" - "function set_selection_change_listener() {" - " document.addEventListener('selectionchange'," - " function() { document.title='SELECTION_CHANGED'; })" - "}" "" "" "original body text" @@ -283,11 +279,6 @@ class InterstitialPageImplTest : public ContentBrowserTest { "create_input_and_set_text('" + text + "')"); } - bool SetSelectionChangeListener() { - return ExecuteScript(interstitial_->GetMainFrame(), - "set_selection_change_listener()"); - } - std::string PerformCut() { clipboard_message_watcher_->InitWait(); title_update_watcher_->InitWait("TEXT_CHANGED"); @@ -317,11 +308,9 @@ class InterstitialPageImplTest : public ContentBrowserTest { } void PerformSelectAll() { - title_update_watcher_->InitWait("SELECTION_CHANGED"); RenderFrameHostImpl* rfh = static_cast(interstitial_->GetMainFrame()); rfh->GetRenderWidgetHost()->delegate()->SelectAll(); - title_update_watcher_->Wait(); } private: @@ -398,14 +387,12 @@ IN_PROC_BROWSER_TEST_F(InterstitialPageImplTest, Paste) { IN_PROC_BROWSER_TEST_F(InterstitialPageImplTest, SelectAll) { SetUpInterstitialPage(); - ASSERT_TRUE(SetSelectionChangeListener()); std::string input_text; ASSERT_TRUE(GetSelection(&input_text)); EXPECT_EQ(std::string(), input_text); PerformSelectAll(); - ASSERT_TRUE(GetSelection(&input_text)); EXPECT_EQ("original body text", input_text); diff --git a/content/browser/renderer_host/ime_adapter_android.cc b/content/browser/renderer_host/ime_adapter_android.cc index 92b3346747006..f41ebefe1cea3 100644 --- a/content/browser/renderer_host/ime_adapter_android.cc +++ b/content/browser/renderer_host/ime_adapter_android.cc @@ -22,6 +22,7 @@ #include "content/browser/renderer_host/render_view_host_impl.h" #include "content/browser/renderer_host/render_widget_host_impl.h" #include "content/browser/renderer_host/render_widget_host_view_android.h" +#include "content/common/frame_messages.h" #include "content/common/input_messages.h" #include "content/common/view_messages.h" #include "content/public/browser/browser_thread.h" @@ -263,8 +264,8 @@ void ImeAdapterAndroid::SetEditableSelectionOffsets( if (!rfh) return; - rfh->Send(new InputMsg_SetEditableSelectionOffsets(rfh->GetRoutingID(), start, - end)); + rfh->Send(new FrameMsg_SetEditableSelectionOffsets(rfh->GetRoutingID(), + start, end)); } void ImeAdapterAndroid::SetCharacterBounds( diff --git a/content/common/frame_messages.h b/content/common/frame_messages.h index a518fd476f746..31bb2c6e77d08 100644 --- a/content/common/frame_messages.h +++ b/content/common/frame_messages.h @@ -715,6 +715,12 @@ IPC_MESSAGE_ROUTED4(FrameMsg_JavaScriptExecuteRequestInIsolatedWorld, bool, /* if true, a reply is requested */ int /* world_id */) +// Selects between the given start and end offsets in the currently focused +// editable field. +IPC_MESSAGE_ROUTED2(FrameMsg_SetEditableSelectionOffsets, + int /* start */, + int /* end */) + // Requests a navigation to the supplied markup, in an iframe with sandbox // attributes. IPC_MESSAGE_ROUTED1(FrameMsg_SetupTransitionView, diff --git a/content/common/input_messages.h b/content/common/input_messages.h index 95e094e343fae..e83a77bac4e47 100644 --- a/content/common/input_messages.h +++ b/content/common/input_messages.h @@ -151,12 +151,6 @@ IPC_MESSAGE_ROUTED2(InputMsg_ExtendSelectionAndDelete, int /* before */, int /* after */) -// Selects between the given start and end offsets in the currently focused -// editable field. -IPC_MESSAGE_ROUTED2(InputMsg_SetEditableSelectionOffsets, - int /* start */, - int /* end */) - // This message sends a string being composed with an input method. IPC_MESSAGE_ROUTED5( InputMsg_ImeSetComposition, diff --git a/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java b/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java index 089cd646b9e9d..57f041679d297 100644 --- a/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java +++ b/content/public/android/javatests/src/org/chromium/content/browser/input/ImeTest.java @@ -1202,30 +1202,6 @@ public CharSequence call() { })); } - // Tests that the method call order is kept. - // See crbug.com/601707 for details. - @MediumTest - @Feature({"TextInput"}) - public void testSetSelectionCommitTextOrder() throws Exception { - final ChromiumBaseInputConnection connection = mConnection; - runBlockingOnImeThread(new Callable() { - @Override - public Void call() { - connection.beginBatchEdit(); - connection.commitText("hello world", 1); - connection.setSelection(6, 6); - connection.deleteSurroundingText(0, 5); - connection.commitText("'", 1); - connection.commitText("world", 1); - connection.setSelection(7, 7); - connection.setComposingText("", 1); - connection.endBatchEdit(); - return null; - } - }); - waitAndVerifyUpdateSelection(0, 7, 7, -1, -1); - } - private void performGo(TestCallbackHelperContainer testCallbackHelperContainer) throws Throwable { final InputConnection inputConnection = mConnection; diff --git a/content/public/renderer/render_view.h b/content/public/renderer/render_view.h index 9aa06333ca4e7..8c036d505a80c 100644 --- a/content/public/renderer/render_view.h +++ b/content/public/renderer/render_view.h @@ -151,8 +151,6 @@ class CONTENT_EXPORT RenderView : public IPC::Sender { // Returns the device scale factor for unit tests. virtual float GetDeviceScaleFactorForTest() const = 0; - virtual bool HasAddedInputHandler() const = 0; - protected: ~RenderView() override {} diff --git a/content/renderer/input/input_event_filter.cc b/content/renderer/input/input_event_filter.cc index d267ddcfeb4e6..109b4fe9ed029 100644 --- a/content/renderer/input/input_event_filter.cc +++ b/content/renderer/input/input_event_filter.cc @@ -68,13 +68,13 @@ void InputEventFilter::SetIsFlingingInMainThreadEventQueue(int routing_id, iter->second->set_is_flinging(is_flinging); } -void InputEventFilter::RegisterRoutingID(int routing_id) { +void InputEventFilter::DidAddInputHandler(int routing_id) { base::AutoLock locked(routes_lock_); routes_.insert(routing_id); route_queues_[routing_id].reset(new MainThreadEventQueue(routing_id, this)); } -void InputEventFilter::UnregisterRoutingID(int routing_id) { +void InputEventFilter::DidRemoveInputHandler(int routing_id) { base::AutoLock locked(routes_lock_); routes_.erase(routing_id); route_queues_.erase(routing_id); diff --git a/content/renderer/input/input_event_filter.h b/content/renderer/input/input_event_filter.h index 3a953fd9180e7..2f4b5f1eecb6a 100644 --- a/content/renderer/input/input_event_filter.h +++ b/content/renderer/input/input_event_filter.h @@ -61,8 +61,8 @@ class CONTENT_EXPORT InputEventFilter : public InputHandlerManagerClient, // InputHostMsg_HandleInputEvent_ACK. // void SetBoundHandler(const Handler& handler) override; - void RegisterRoutingID(int routing_id) override; - void UnregisterRoutingID(int routing_id) override; + void DidAddInputHandler(int routing_id) override; + void DidRemoveInputHandler(int routing_id) override; void DidOverscroll(int routing_id, const DidOverscrollParams& params) override; void DidStartFlinging(int routing_id) override; diff --git a/content/renderer/input/input_event_filter_unittest.cc b/content/renderer/input/input_event_filter_unittest.cc index 39bad720f4c90..6fbe1d484edf7 100644 --- a/content/renderer/input/input_event_filter_unittest.cc +++ b/content/renderer/input/input_event_filter_unittest.cc @@ -177,7 +177,7 @@ TEST_F(InputEventFilterTest, Basic) { EXPECT_EQ(0U, event_recorder_.record_count()); EXPECT_EQ(0U, message_recorder_.message_count()); - filter_->RegisterRoutingID(kTestRoutingID); + filter_->DidAddInputHandler(kTestRoutingID); AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); ASSERT_EQ(arraysize(kEvents), ipc_sink_.message_count()); @@ -253,7 +253,7 @@ TEST_F(InputEventFilterTest, Basic) { } TEST_F(InputEventFilterTest, PreserveRelativeOrder) { - filter_->RegisterRoutingID(kTestRoutingID); + filter_->DidAddInputHandler(kTestRoutingID); event_recorder_.set_send_to_widget(true); @@ -316,7 +316,7 @@ TEST_F(InputEventFilterTest, NonBlockingWheel) { SyntheticWebMouseWheelEventBuilder::Build(30, 30, 0, 53, 1, false), }; - filter_->RegisterRoutingID(kTestRoutingID); + filter_->DidAddInputHandler(kTestRoutingID); event_recorder_.set_send_to_widget(true); event_recorder_.set_passive(true); @@ -394,7 +394,7 @@ TEST_F(InputEventFilterTest, NonBlockingTouch) { kEvents[3].PressPoint(10, 10); kEvents[3].MovePoint(0, 35, 35); - filter_->RegisterRoutingID(kTestRoutingID); + filter_->DidAddInputHandler(kTestRoutingID); event_recorder_.set_send_to_widget(true); event_recorder_.set_passive(true); @@ -468,7 +468,7 @@ TEST_F(InputEventFilterTest, IntermingledNonBlockingTouch) { SyntheticWebTouchEvent kBlockingEvents[1]; kBlockingEvents[0].PressPoint(10, 10); - filter_->RegisterRoutingID(kTestRoutingID); + filter_->DidAddInputHandler(kTestRoutingID); event_recorder_.set_send_to_widget(true); event_recorder_.set_passive(true); AddEventsToFilter(filter_.get(), kEvents, arraysize(kEvents)); diff --git a/content/renderer/input/input_handler_manager.cc b/content/renderer/input/input_handler_manager.cc index 9803bd9a0e563..b6deb4c0b187c 100644 --- a/content/renderer/input/input_handler_manager.cc +++ b/content/renderer/input/input_handler_manager.cc @@ -107,7 +107,7 @@ void InputHandlerManager::AddInputHandlerOnCompositorThread( std::unique_ptr wrapper(new InputHandlerWrapper( this, routing_id, main_task_runner, input_handler, render_view_impl, enable_smooth_scrolling, enable_wheel_gestures)); - client_->RegisterRoutingID(routing_id); + client_->DidAddInputHandler(routing_id); if (synchronous_handler_proxy_client_) { synchronous_handler_proxy_client_->DidAddSynchronousHandlerProxy( routing_id, wrapper->input_handler_proxy()); @@ -121,7 +121,7 @@ void InputHandlerManager::RemoveInputHandler(int routing_id) { TRACE_EVENT0("input", "InputHandlerManager::RemoveInputHandler"); - client_->UnregisterRoutingID(routing_id); + client_->DidRemoveInputHandler(routing_id); if (synchronous_handler_proxy_client_) { synchronous_handler_proxy_client_->DidRemoveSynchronousHandlerProxy( routing_id); @@ -129,39 +129,6 @@ void InputHandlerManager::RemoveInputHandler(int routing_id) { input_handlers_.erase(routing_id); } -void InputHandlerManager::RegisterRoutingID(int routing_id) { - if (task_runner_->BelongsToCurrentThread()) { - RegisterRoutingIDOnCompositorThread(routing_id); - } else { - task_runner_->PostTask( - FROM_HERE, - base::Bind(&InputHandlerManager::RegisterRoutingIDOnCompositorThread, - base::Unretained(this), routing_id)); - } -} - -void InputHandlerManager::RegisterRoutingIDOnCompositorThread(int routing_id) { - DCHECK(task_runner_->BelongsToCurrentThread()); - client_->RegisterRoutingID(routing_id); -} - -void InputHandlerManager::UnregisterRoutingID(int routing_id) { - if (task_runner_->BelongsToCurrentThread()) { - UnregisterRoutingIDOnCompositorThread(routing_id); - } else { - task_runner_->PostTask( - FROM_HERE, - base::Bind(&InputHandlerManager::UnregisterRoutingIDOnCompositorThread, - base::Unretained(this), routing_id)); - } -} - -void InputHandlerManager::UnregisterRoutingIDOnCompositorThread( - int routing_id) { - DCHECK(task_runner_->BelongsToCurrentThread()); - client_->UnregisterRoutingID(routing_id); -} - void InputHandlerManager::ObserveWheelEventAndResultOnMainThread( int routing_id, const blink::WebMouseWheelEvent& wheel_event, diff --git a/content/renderer/input/input_handler_manager.h b/content/renderer/input/input_handler_manager.h index bdcaceca1d088..3403b82c5999d 100644 --- a/content/renderer/input/input_handler_manager.h +++ b/content/renderer/input/input_handler_manager.h @@ -59,9 +59,6 @@ class CONTENT_EXPORT InputHandlerManager { bool enable_smooth_scrolling, bool enable_wheel_gestures); - void RegisterRoutingID(int routing_id); - void UnregisterRoutingID(int routing_id); - void ObserveWheelEventAndResultOnMainThread( int routing_id, const blink::WebMouseWheelEvent& wheel_event, @@ -104,9 +101,6 @@ class CONTENT_EXPORT InputHandlerManager { bool enable_smooth_scrolling, bool enable_wheel_gestures); - void RegisterRoutingIDOnCompositorThread(int routing_id); - void UnregisterRoutingIDOnCompositorThread(int routing_id); - void ObserveWheelEventAndResultOnCompositorThread( int routing_id, const blink::WebMouseWheelEvent& wheel_event, diff --git a/content/renderer/input/input_handler_manager_client.h b/content/renderer/input/input_handler_manager_client.h index 5518442247c24..e0dcb19aabe1c 100644 --- a/content/renderer/input/input_handler_manager_client.h +++ b/content/renderer/input/input_handler_manager_client.h @@ -44,8 +44,8 @@ class CONTENT_EXPORT InputHandlerManagerClient { virtual void SetBoundHandler(const Handler& handler) = 0; // Called from the compositor thread. - virtual void RegisterRoutingID(int routing_id) = 0; - virtual void UnregisterRoutingID(int routing_id) = 0; + virtual void DidAddInputHandler(int routing_id) = 0; + virtual void DidRemoveInputHandler(int routing_id) = 0; virtual void DidOverscroll(int routing_id, const DidOverscrollParams& params) = 0; virtual void DidStartFlinging(int routing_id) = 0; diff --git a/content/renderer/mus/compositor_mus_connection_unittest.cc b/content/renderer/mus/compositor_mus_connection_unittest.cc index bec0633e73a4e..9ca91a184f361 100644 --- a/content/renderer/mus/compositor_mus_connection_unittest.cc +++ b/content/renderer/mus/compositor_mus_connection_unittest.cc @@ -123,8 +123,8 @@ class TestInputHandlerManagerClient // content::InputHandlerManagerClient: void SetBoundHandler(const Handler& handler) override {} - void RegisterRoutingID(int routing_id) override {} - void UnregisterRoutingID(int routing_id) override {} + void DidAddInputHandler(int routing_id) override {} + void DidRemoveInputHandler(int routing_id) override {} void DidOverscroll(int routing_id, const content::DidOverscrollParams& params) override {} void DidStartFlinging(int routing_id) override {} diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc index 8bd405abff36a..ad69005b7df18 100644 --- a/content/renderer/render_frame_impl.cc +++ b/content/renderer/render_frame_impl.cc @@ -97,7 +97,6 @@ #include "content/renderer/history_serialization.h" #include "content/renderer/image_downloader/image_downloader_impl.h" #include "content/renderer/ime_event_guard.h" -#include "content/renderer/input/input_handler_manager.h" #include "content/renderer/internal_document_state_data.h" #include "content/renderer/manifest/manifest_manager.h" #include "content/renderer/media/audio_device_factory.h" @@ -1114,13 +1113,6 @@ RenderFrameImpl::~RenderFrameImpl() { render_view_->UnregisterVideoHoleFrame(this); #endif - // Unregister from InputHandlerManager. render_thread may be NULL in tests. - RenderThreadImpl* render_thread = RenderThreadImpl::current(); - InputHandlerManager* input_handler_manager = - render_thread ? render_thread->input_handler_manager() : nullptr; - if (input_handler_manager) - input_handler_manager->UnregisterRoutingID(GetRoutingID()); - if (is_main_frame_) { // Ensure the RenderView doesn't point to this object, once it is destroyed. // TODO(nasko): Add a check that the |main_render_frame_| of |render_view_| @@ -1181,15 +1173,6 @@ void RenderFrameImpl::Initialize() { // We delay calling this until we have the WebFrame so that any observer or // embedder can call GetWebFrame on any RenderFrame. GetContentClient()->renderer()->RenderFrameCreated(this); - - RenderThreadImpl* render_thread = RenderThreadImpl::current(); - // render_thread may be NULL in tests. - InputHandlerManager* input_handler_manager = - render_thread ? render_thread->input_handler_manager() : nullptr; - if (input_handler_manager) { - DCHECK(render_view_->HasAddedInputHandler()); - input_handler_manager->RegisterRoutingID(GetRoutingID()); - } } void RenderFrameImpl::InitializeBlameContext(RenderFrameImpl* parent_frame) { @@ -1467,8 +1450,6 @@ bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) { OnExtendSelectionAndDelete) IPC_MESSAGE_HANDLER(InputMsg_SetCompositionFromExistingText, OnSetCompositionFromExistingText) - IPC_MESSAGE_HANDLER(InputMsg_SetEditableSelectionOffsets, - OnSetEditableSelectionOffsets) IPC_MESSAGE_HANDLER(InputMsg_ExecuteNoValueEditCommand, OnExecuteNoValueEditCommand) IPC_MESSAGE_HANDLER(FrameMsg_CSSInsertRequest, OnCSSInsertRequest) @@ -1481,6 +1462,8 @@ bool RenderFrameImpl::OnMessageReceived(const IPC::Message& msg) { OnJavaScriptExecuteRequestInIsolatedWorld) IPC_MESSAGE_HANDLER(FrameMsg_VisualStateRequest, OnVisualStateRequest) + IPC_MESSAGE_HANDLER(FrameMsg_SetEditableSelectionOffsets, + OnSetEditableSelectionOffsets) IPC_MESSAGE_HANDLER(FrameMsg_Reload, OnReload) IPC_MESSAGE_HANDLER(FrameMsg_ReloadLoFiImages, OnReloadLoFiImages) IPC_MESSAGE_HANDLER(FrameMsg_TextSurroundingSelectionRequest, diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index c6c6a4991ced8..6e9efe7da12de 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -659,8 +659,7 @@ RenderViewImpl::RenderViewImpl(CompositorDependencies* compositor_deps, expected_content_intent_id_(0), #endif enumeration_completion_id_(0), - session_storage_namespace_id_(params.session_storage_namespace_id), - has_added_input_handler_(false) { + session_storage_namespace_id_(params.session_storage_namespace_id) { GetWidget()->set_owner_delegate(this); } @@ -2052,19 +2051,17 @@ void RenderViewImpl::initializeLayerTreeView() { // (SnowLeopard, which has Aqua scrollbars which need synchronous updates). use_threaded_event_handling = compositor_deps_->IsElasticOverscrollEnabled(); #endif - if (!use_threaded_event_handling) - return; - - RenderThreadImpl* render_thread = RenderThreadImpl::current(); - // render_thread may be NULL in tests. - InputHandlerManager* input_handler_manager = - render_thread ? render_thread->input_handler_manager() : NULL; - if (input_handler_manager) { - input_handler_manager->AddInputHandler( - GetRoutingID(), rwc->GetInputHandler(), AsWeakPtr(), - webkit_preferences_.enable_scroll_animator, - UseGestureBasedWheelScrolling()); - has_added_input_handler_ = true; + if (use_threaded_event_handling) { + RenderThreadImpl* render_thread = RenderThreadImpl::current(); + // render_thread may be NULL in tests. + InputHandlerManager* input_handler_manager = + render_thread ? render_thread->input_handler_manager() : NULL; + if (input_handler_manager) { + input_handler_manager->AddInputHandler( + GetRoutingID(), rwc->GetInputHandler(), AsWeakPtr(), + webkit_preferences_.enable_scroll_animator, + UseGestureBasedWheelScrolling()); + } } } @@ -2217,10 +2214,6 @@ float RenderViewImpl::GetDeviceScaleFactorForTest() const { return device_scale_factor_; } -bool RenderViewImpl::HasAddedInputHandler() const { - return has_added_input_handler_; -} - gfx::Point RenderViewImpl::ConvertWindowPointToViewport( const gfx::Point& point) { blink::WebFloatRect point_in_viewport(point.x(), point.y(), 0, 0); diff --git a/content/renderer/render_view_impl.h b/content/renderer/render_view_impl.h index 8d292c2c9d19d..bc0efbf8d5374 100644 --- a/content/renderer/render_view_impl.h +++ b/content/renderer/render_view_impl.h @@ -445,7 +445,6 @@ class CONTENT_EXPORT RenderViewImpl void ConvertViewportToWindowViaWidget(blink::WebRect* rect) override; gfx::RectF ElementBoundsInWindow(const blink::WebElement& element) override; float GetDeviceScaleFactorForTest() const override; - bool HasAddedInputHandler() const override; gfx::Point ConvertWindowPointToViewport(const gfx::Point& point); @@ -965,8 +964,6 @@ class CONTENT_EXPORT RenderViewImpl typedef std::map BitmapMap; BitmapMap disambiguation_bitmaps_; - bool has_added_input_handler_; - // --------------------------------------------------------------------------- // ADDING NEW DATA? Please see if it fits appropriately in one of the above // sections rather than throwing it randomly at the end. If you're adding a