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