Removes TextInputFocusManager.

TextInputFocusManager can be removed with the effort of IMF refactoring.
Actually the bugs that TextInputFocusManager was trying to fix have been fixed
already by IMF refactoring.

[email protected]
BUG=474828
TEST=Trybots.

Review URL: https://codereview.chromium.org/1182523003

Cr-Commit-Position: refs/heads/master@{#334379}
diff --git a/ash/root_window_controller_unittest.cc b/ash/root_window_controller_unittest.cc
index 412fecd..8189581 100644
--- a/ash/root_window_controller_unittest.cc
+++ b/ash/root_window_controller_unittest.cc
@@ -30,8 +30,6 @@
 #include "ui/base/ime/dummy_text_input_client.h"
 #include "ui/base/ime/input_method.h"
 #include "ui/base/ime/text_input_client.h"
-#include "ui/base/ime/text_input_focus_manager.h"
-#include "ui/base/ui_base_switches_util.h"
 #include "ui/events/test/event_generator.h"
 #include "ui/events/test/test_event_handler.h"
 #include "ui/keyboard/keyboard_controller_proxy.h"
@@ -902,12 +900,7 @@
   MockTextInputClient text_input_client;
   ui::InputMethod* input_method = proxy->GetInputMethod();
   ASSERT_TRUE(input_method);
-  if (switches::IsTextInputFocusManagerEnabled()) {
-    ui::TextInputFocusManager::GetInstance()->FocusTextInputClient(
-        &text_input_client);
-  } else {
-    input_method->SetFocusedTextInputClient(&text_input_client);
-  }
+  input_method->SetFocusedTextInputClient(&text_input_client);
 
   aura::Window* root_window = Shell::GetPrimaryRootWindow();
   aura::Window* keyboard_container =
@@ -928,12 +921,7 @@
   ASSERT_EQ(root_window->bounds().height() - keyboard_height,
             text_input_client.visible_rect().height());
 
-  if (switches::IsTextInputFocusManagerEnabled()) {
-    ui::TextInputFocusManager::GetInstance()->BlurTextInputClient(
-        &text_input_client);
-  } else {
-    input_method->SetFocusedTextInputClient(NULL);
-  }
+  input_method->SetFocusedTextInputClient(NULL);
 }
 
 // Tests that the virtual keyboard does not block context menus. The virtual
diff --git a/ash/wm/workspace/workspace_layout_manager_unittest.cc b/ash/wm/workspace/workspace_layout_manager_unittest.cc
index 84a2251..63826fcad 100644
--- a/ash/wm/workspace/workspace_layout_manager_unittest.cc
+++ b/ash/wm/workspace/workspace_layout_manager_unittest.cc
@@ -29,8 +29,6 @@
 #include "ui/aura/window_event_dispatcher.h"
 #include "ui/base/ime/dummy_text_input_client.h"
 #include "ui/base/ime/input_method.h"
-#include "ui/base/ime/text_input_focus_manager.h"
-#include "ui/base/ui_base_switches_util.h"
 #include "ui/base/ui_base_types.h"
 #include "ui/gfx/geometry/insets.h"
 #include "ui/gfx/screen.h"
@@ -1014,27 +1012,17 @@
   }
 
   void Focus(ui::TextInputClient* text_input_client) {
-    if (switches::IsTextInputFocusManagerEnabled()) {
-      ui::TextInputFocusManager::GetInstance()->FocusTextInputClient(
-          text_input_client);
-    } else {
-      aura::Window* root_window =
-          ash::Shell::GetInstance()->GetPrimaryRootWindow();
-      ui::InputMethod* input_method = root_window->GetHost()->GetInputMethod();
-      input_method->SetFocusedTextInputClient(text_input_client);
-    }
+    aura::Window* root_window =
+        ash::Shell::GetInstance()->GetPrimaryRootWindow();
+    ui::InputMethod* input_method = root_window->GetHost()->GetInputMethod();
+    input_method->SetFocusedTextInputClient(text_input_client);
   }
 
   void Blur(ui::TextInputClient* text_input_client) {
-    if (switches::IsTextInputFocusManagerEnabled()) {
-      ui::TextInputFocusManager::GetInstance()->BlurTextInputClient(
-          text_input_client);
-    } else {
-      aura::Window* root_window =
-          ash::Shell::GetInstance()->GetPrimaryRootWindow();
-      ui::InputMethod* input_method = root_window->GetHost()->GetInputMethod();
-      input_method->SetFocusedTextInputClient(NULL);
-    }
+    aura::Window* root_window =
+        ash::Shell::GetInstance()->GetPrimaryRootWindow();
+    ui::InputMethod* input_method = root_window->GetHost()->GetInputMethod();
+    input_method->SetFocusedTextInputClient(NULL);
   }
 
  private:
diff --git a/chrome/app/generated_resources.grd b/chrome/app/generated_resources.grd
index d5833feb..53aa529c 100644
--- a/chrome/app/generated_resources.grd
+++ b/chrome/app/generated_resources.grd
@@ -6758,12 +6758,6 @@
       <message name="IDS_FLAGS_ENABLE_APPS_FILE_ASSOCIATIONS_DESCRIPTION" desc="Description for a flag to enable file associations for Chrome Apps.">
         Enable OS integration of file associations for Chrome Apps.
       </message>
-      <message name="IDS_FLAGS_TEXT_INPUT_FOCUS_MANAGER_NAME" desc="Title for the flag to enable the new text input focus manager.">
-        Experimental text input focus manager.
-      </message>
-      <message name="IDS_FLAGS_TEXT_INPUT_FOCUS_MANAGER_DESCRIPTION" desc="Description for the flag to enable the new text input focus manager.">
-        Enable an experimental focus manager to track text input clients.
-      </message>
       <message name="IDS_FLAGS_ENABLE_HARFBUZZ_RENDERTEXT_NAME" desc="Name of the about:flags HarfBuzz RenderText experiment.">
         Enable HarfBuzz for UI text.
       </message>
diff --git a/chrome/browser/about_flags.cc b/chrome/browser/about_flags.cc
index 0aeb725..7e9bf2af 100644
--- a/chrome/browser/about_flags.cc
+++ b/chrome/browser/about_flags.cc
@@ -1615,14 +1615,6 @@
      IDS_FLAGS_EXTENSION_CONTENT_VERIFICATION_DESCRIPTION,
      kOsDesktop,
      MULTI_VALUE_TYPE(kExtensionContentVerificationChoices)},
-#if defined(USE_AURA)
-    {"text-input-focus-manager",
-     IDS_FLAGS_TEXT_INPUT_FOCUS_MANAGER_NAME,
-     IDS_FLAGS_TEXT_INPUT_FOCUS_MANAGER_DESCRIPTION,
-     kOsCrOS | kOsLinux | kOsWin,
-     ENABLE_DISABLE_VALUE_TYPE(switches::kEnableTextInputFocusManager,
-                               switches::kDisableTextInputFocusManager)},
-#endif
 #if defined(ENABLE_EXTENSIONS)
     {"extension-active-script-permission",
      IDS_FLAGS_USER_CONSENT_FOR_EXTENSION_SCRIPTS_NAME,
diff --git a/chrome/browser/chromeos/login/ui/login_display_host_impl.cc b/chrome/browser/chromeos/login/ui/login_display_host_impl.cc
index 7409b6b3..caf108a 100644
--- a/chrome/browser/chromeos/login/ui/login_display_host_impl.cc
+++ b/chrome/browser/chromeos/login/ui/login_display_host_impl.cc
@@ -83,7 +83,6 @@
 #include "ui/base/ime/chromeos/extension_ime_util.h"
 #include "ui/base/ime/chromeos/input_method_manager.h"
 #include "ui/base/resource/resource_bundle.h"
-#include "ui/base/ui_base_switches_util.h"
 #include "ui/compositor/layer.h"
 #include "ui/compositor/layer_animation_observer.h"
 #include "ui/compositor/scoped_layer_animation_settings.h"
@@ -973,8 +972,6 @@
   VLOG(1) << "Login WebUI >> Show already initialized UI";
   login_window_->Show();
   login_view_->GetWebContents()->Focus();
-  if (::switches::IsTextInputFocusManagerEnabled())
-    login_view_->RequestFocus();
   login_view_->SetStatusAreaVisible(status_area_saved_visibility_);
   login_view_->OnPostponedShow();
 
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc
index 592bd3d..af5bb96 100644
--- a/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc
@@ -20,13 +20,13 @@
 #include "chrome/test/base/interactive_test_utils.h"
 #include "ui/base/clipboard/clipboard.h"
 #include "ui/base/clipboard/scoped_clipboard_writer.h"
-#include "ui/base/ime/text_input_focus_manager.h"
 #include "ui/base/test/ui_controls.h"
 #include "ui/base/ui_base_switches.h"
 #include "ui/events/event_processor.h"
 #include "ui/events/event_utils.h"
 #include "ui/events/test/event_generator.h"
 #include "ui/views/controls/textfield/textfield_test_api.h"
+#include "ui/views/ime/input_method.h"
 
 namespace {
 
@@ -376,18 +376,12 @@
 }
 
 IN_PROC_BROWSER_TEST_F(OmniboxViewViewsTest, FocusedTextInputClient) {
-  base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
-  cmd_line->AppendSwitch(switches::kEnableTextInputFocusManager);
-
-  // TODO(yukishiino): The following call to FocusLocationBar is not necessary
-  // if the flag is enabled by default.  Remove the call once the transition to
-  // TextInputFocusManager completes.
   chrome::FocusLocationBar(browser());
   OmniboxView* view = NULL;
   ASSERT_NO_FATAL_FAILURE(GetOmniboxViewForBrowser(browser(), &view));
   OmniboxViewViews* omnibox_view_views = static_cast<OmniboxViewViews*>(view);
-  ui::TextInputFocusManager* text_input_focus_manager =
-      ui::TextInputFocusManager::GetInstance();
+  views::InputMethod* input_method =
+      omnibox_view_views->GetWidget()->GetInputMethod();
   EXPECT_EQ(omnibox_view_views->GetTextInputClient(),
-            text_input_focus_manager->GetFocusedTextInputClient());
+            input_method->GetTextInputClient());
 }
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index 84f12f1..43a824b 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -1016,7 +1016,6 @@
     ],
      # Cross-platform views interactive tests ready for toolkit-views on Mac.
     'chrome_interactive_ui_test_views_sources': [
-      '../ui/views/controls/webview/webview_interactive_uitest.cc',
       '../ui/views/corewm/desktop_capture_controller_unittest.cc',
       '../ui/views/widget/desktop_aura/desktop_window_tree_host_x11_interactive_uitest.cc',
       '../ui/views/widget/desktop_aura/x11_topmost_window_finder_interactive_uitest.cc',
diff --git a/ui/base/ime/BUILD.gn b/ui/base/ime/BUILD.gn
index 99e4aaee..5125aa2 100644
--- a/ui/base/ime/BUILD.gn
+++ b/ui/base/ime/BUILD.gn
@@ -89,8 +89,6 @@
     "remote_input_method_win.h",
     "text_input_client.cc",
     "text_input_client.h",
-    "text_input_focus_manager.cc",
-    "text_input_focus_manager.h",
     "text_input_type.h",
     "ui_base_ime_export.h",
     "win/imm32_manager.cc",
diff --git a/ui/base/ime/input_method_base.cc b/ui/base/ime/input_method_base.cc
index b117a08..dc85619 100644
--- a/ui/base/ime/input_method_base.cc
+++ b/ui/base/ime/input_method_base.cc
@@ -10,8 +10,6 @@
 #include "ui/base/ime/input_method_delegate.h"
 #include "ui/base/ime/input_method_observer.h"
 #include "ui/base/ime/text_input_client.h"
-#include "ui/base/ime/text_input_focus_manager.h"
-#include "ui/base/ui_base_switches_util.h"
 #include "ui/events/event.h"
 
 namespace ui {
@@ -51,9 +49,6 @@
 }
 
 TextInputClient* InputMethodBase::GetTextInputClient() const {
-  if (switches::IsTextInputFocusManagerEnabled())
-    return TextInputFocusManager::GetInstance()->GetFocusedTextInputClient();
-
   return system_toplevel_window_focused_ ? text_input_client_ : NULL;
 }
 
@@ -132,9 +127,6 @@
 
 void InputMethodBase::SetFocusedTextInputClientInternal(
     TextInputClient* client) {
-  if (switches::IsTextInputFocusManagerEnabled())
-    return;
-
   TextInputClient* old = text_input_client_;
   if (old == client)
     return;
diff --git a/ui/base/ime/input_method_base_unittest.cc b/ui/base/ime/input_method_base_unittest.cc
index 55db6f9d..3e9ae87 100644
--- a/ui/base/ime/input_method_base_unittest.cc
+++ b/ui/base/ime/input_method_base_unittest.cc
@@ -12,8 +12,6 @@
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/base/ime/dummy_text_input_client.h"
 #include "ui/base/ime/input_method_observer.h"
-#include "ui/base/ime/text_input_focus_manager.h"
-#include "ui/base/ui_base_switches_util.h"
 #include "ui/events/event.h"
 
 namespace ui {
@@ -54,15 +52,9 @@
 
   // Verifies the result satisfies the expectation or not.
   void Verify() {
-    if (switches::IsTextInputFocusManagerEnabled()) {
-      EXPECT_FALSE(on_will_change_focused_client_called_);
-      EXPECT_FALSE(on_did_change_focused_client_called_);
-      EXPECT_FALSE(on_text_input_state_changed_);
-    } else {
-      EXPECT_EQ(call_expected_, on_will_change_focused_client_called_);
-      EXPECT_EQ(call_expected_, on_did_change_focused_client_called_);
-      EXPECT_EQ(call_expected_, on_text_input_state_changed_);
-    }
+    EXPECT_EQ(call_expected_, on_will_change_focused_client_called_);
+    EXPECT_EQ(call_expected_, on_did_change_focused_client_called_);
+    EXPECT_EQ(call_expected_, on_text_input_state_changed_);
   }
 
   void OnWillChangeFocusedClient(TextInputClient* focused_before,
@@ -203,12 +195,7 @@
 
 void SetFocusedTextInputClient(InputMethod* input_method,
                                TextInputClient* text_input_client) {
-  if (switches::IsTextInputFocusManagerEnabled()) {
-    TextInputFocusManager::GetInstance()->FocusTextInputClient(
-        text_input_client);
-  } else {
-    input_method->SetFocusedTextInputClient(text_input_client);
-  }
+  input_method->SetFocusedTextInputClient(text_input_client);
 }
 
 TEST_F(InputMethodBaseTest, SetFocusedTextInputClient) {
@@ -271,10 +258,6 @@
 }
 
 TEST_F(InputMethodBaseTest, DetachTextInputClient) {
-  // DetachTextInputClient is not supported when IsTextInputFocusManagerEnabled.
-  if (switches::IsTextInputFocusManagerEnabled())
-    return;
-
   DummyTextInputClient text_input_client;
   DummyTextInputClient text_input_client_the_other;
 
diff --git a/ui/base/ime/input_method_chromeos_unittest.cc b/ui/base/ime/input_method_chromeos_unittest.cc
index aa4ac76a..8593924 100644
--- a/ui/base/ime/input_method_chromeos_unittest.cc
+++ b/ui/base/ime/input_method_chromeos_unittest.cc
@@ -23,8 +23,6 @@
 #include "ui/base/ime/dummy_text_input_client.h"
 #include "ui/base/ime/input_method_delegate.h"
 #include "ui/base/ime/text_input_client.h"
-#include "ui/base/ime/text_input_focus_manager.h"
-#include "ui/base/ui_base_switches_util.h"
 #include "ui/events/event.h"
 #include "ui/events/event_utils.h"
 #include "ui/events/keycodes/dom/dom_code.h"
@@ -220,19 +218,12 @@
         mock_ime_candidate_window_handler_.get());
 
     ime_.reset(new TestableInputMethodChromeOS(this));
-    if (switches::IsTextInputFocusManagerEnabled())
-      TextInputFocusManager::GetInstance()->FocusTextInputClient(this);
-    else
-      ime_->SetFocusedTextInputClient(this);
+    ime_->SetFocusedTextInputClient(this);
   }
 
   void TearDown() override {
-    if (ime_.get()) {
-      if (switches::IsTextInputFocusManagerEnabled())
-        TextInputFocusManager::GetInstance()->BlurTextInputClient(this);
-      else
-        ime_->SetFocusedTextInputClient(NULL);
-    }
+    if (ime_.get())
+      ime_->SetFocusedTextInputClient(NULL);
     ime_.reset();
     chromeos::IMEBridge::Get()->SetCurrentEngineHandler(NULL);
     chromeos::IMEBridge::Get()->SetCandidateWindowHandler(NULL);
@@ -377,30 +368,21 @@
 TEST_F(InputMethodChromeOSTest, GetTextInputClient) {
   ime_->OnFocus();
   EXPECT_EQ(this, ime_->GetTextInputClient());
-  if (switches::IsTextInputFocusManagerEnabled())
-    TextInputFocusManager::GetInstance()->BlurTextInputClient(this);
-  else
-    ime_->SetFocusedTextInputClient(NULL);
+  ime_->SetFocusedTextInputClient(NULL);
   EXPECT_EQ(NULL, ime_->GetTextInputClient());
 }
 
 TEST_F(InputMethodChromeOSTest, GetInputTextType_WithoutFocusedClient) {
   ime_->OnFocus();
   EXPECT_EQ(TEXT_INPUT_TYPE_NONE, ime_->GetTextInputType());
-  if (switches::IsTextInputFocusManagerEnabled())
-    TextInputFocusManager::GetInstance()->BlurTextInputClient(this);
-  else
-    ime_->SetFocusedTextInputClient(NULL);
+  ime_->SetFocusedTextInputClient(NULL);
   input_type_ = TEXT_INPUT_TYPE_PASSWORD;
   ime_->OnTextInputTypeChanged(this);
   // The OnTextInputTypeChanged() call above should be ignored since |this| is
   // not the current focused client.
   EXPECT_EQ(TEXT_INPUT_TYPE_NONE, ime_->GetTextInputType());
 
-  if (switches::IsTextInputFocusManagerEnabled())
-    TextInputFocusManager::GetInstance()->FocusTextInputClient(this);
-  else
-    ime_->SetFocusedTextInputClient(this);
+  ime_->SetFocusedTextInputClient(this);
   ime_->OnTextInputTypeChanged(this);
   EXPECT_EQ(TEXT_INPUT_TYPE_PASSWORD, ime_->GetTextInputType());
 }
@@ -408,28 +390,19 @@
 TEST_F(InputMethodChromeOSTest, GetInputTextType_WithoutFocusedWindow) {
   ime_->OnFocus();
   EXPECT_EQ(TEXT_INPUT_TYPE_NONE, ime_->GetTextInputType());
-  if (switches::IsTextInputFocusManagerEnabled())
-    TextInputFocusManager::GetInstance()->BlurTextInputClient(this);
-  else
-    ime_->OnBlur();
+  ime_->OnBlur();
   input_type_ = TEXT_INPUT_TYPE_PASSWORD;
   ime_->OnTextInputTypeChanged(this);
   // The OnTextInputTypeChanged() call above should be ignored since the top-
   // level window which the ime_ is attached to is not currently focused.
   EXPECT_EQ(TEXT_INPUT_TYPE_NONE, ime_->GetTextInputType());
 
-  if (switches::IsTextInputFocusManagerEnabled())
-    TextInputFocusManager::GetInstance()->FocusTextInputClient(this);
-  else
-    ime_->OnFocus();
+  ime_->OnFocus();
   ime_->OnTextInputTypeChanged(this);
   EXPECT_EQ(TEXT_INPUT_TYPE_PASSWORD, ime_->GetTextInputType());
 }
 
 TEST_F(InputMethodChromeOSTest, GetInputTextType_WithoutFocusedWindow2) {
-  if (switches::IsTextInputFocusManagerEnabled())
-    return;
-
   EXPECT_EQ(TEXT_INPUT_TYPE_NONE, ime_->GetTextInputType());
   input_type_ = TEXT_INPUT_TYPE_PASSWORD;
   ime_->OnTextInputTypeChanged(this);
@@ -540,10 +513,6 @@
   EXPECT_EQ(TEXT_INPUT_MODE_KANA,
             mock_ime_engine_handler_->last_text_input_context().mode);
 
-  // When IsTextInputFocusManagerEnabled, InputMethod::SetFocusedTextInputClient
-  // is not supported and it's no-op.
-  if (switches::IsTextInputFocusManagerEnabled())
-    return;
   // Confirm that FocusOut is called when set focus to NULL client.
   ime_->SetFocusedTextInputClient(NULL);
   EXPECT_EQ(3, mock_ime_engine_handler_->focus_in_call_count());
diff --git a/ui/base/ime/mock_input_method.cc b/ui/base/ime/mock_input_method.cc
index 6a93643b..046942ab 100644
--- a/ui/base/ime/mock_input_method.cc
+++ b/ui/base/ime/mock_input_method.cc
@@ -5,8 +5,6 @@
 #include "ui/base/ime/mock_input_method.h"
 
 #include "ui/base/ime/input_method_delegate.h"
-#include "ui/base/ime/text_input_focus_manager.h"
-#include "ui/base/ui_base_switches_util.h"
 #include "ui/events/event.h"
 
 namespace ui {
@@ -25,9 +23,6 @@
 }
 
 void MockInputMethod::SetFocusedTextInputClient(TextInputClient* client) {
-  if (switches::IsTextInputFocusManagerEnabled())
-    return;
-
   if (text_input_client_ == client)
     return;
   text_input_client_ = client;
@@ -42,9 +37,6 @@
 }
 
 TextInputClient* MockInputMethod::GetTextInputClient() const {
-  if (switches::IsTextInputFocusManagerEnabled())
-    return TextInputFocusManager::GetInstance()->GetFocusedTextInputClient();
-
   return text_input_client_;
 }
 
diff --git a/ui/base/ime/text_input_focus_manager.cc b/ui/base/ime/text_input_focus_manager.cc
deleted file mode 100644
index 25033d8..0000000
--- a/ui/base/ime/text_input_focus_manager.cc
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/base/ime/text_input_focus_manager.h"
-
-#include "base/logging.h"
-#include "base/memory/singleton.h"
-
-namespace ui {
-
-// TODO(sky): reenable these DCHECKs. We're in the process of enabling usage
-// of views from multiple threads and this causes problems. See
-// http://crbug.com/388045 for details.
-
-TextInputFocusManager* TextInputFocusManager::GetInstance() {
-  TextInputFocusManager* instance = Singleton<TextInputFocusManager>::get();
-  // DCHECK(instance->thread_checker_.CalledOnValidThread());
-  return instance;
-}
-
-TextInputClient* TextInputFocusManager::GetFocusedTextInputClient() {
-  // DCHECK(thread_checker_.CalledOnValidThread());
-  return focused_text_input_client_;
-}
-
-void TextInputFocusManager::FocusTextInputClient(
-    TextInputClient* text_input_client) {
-  // DCHECK(thread_checker_.CalledOnValidThread());
-  focused_text_input_client_ = text_input_client;
-}
-
-void TextInputFocusManager::BlurTextInputClient(
-    TextInputClient* text_input_client) {
-  // DCHECK(thread_checker_.CalledOnValidThread());
-  if (focused_text_input_client_ == text_input_client)
-    focused_text_input_client_ = NULL;
-}
-
-TextInputFocusManager::TextInputFocusManager()
-    : focused_text_input_client_(NULL) {}
-
-TextInputFocusManager::~TextInputFocusManager() {}
-
-}  // namespace ui
diff --git a/ui/base/ime/text_input_focus_manager.h b/ui/base/ime/text_input_focus_manager.h
deleted file mode 100644
index 88bf3fce..0000000
--- a/ui/base/ime/text_input_focus_manager.h
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_BASE_IME_TEXT_INPUT_FOCUS_MANAGER_H_
-#define UI_BASE_IME_TEXT_INPUT_FOCUS_MANAGER_H_
-
-#include "base/macros.h"
-#include "base/threading/thread_checker.h"
-#include "ui/base/ime/ui_base_ime_export.h"
-
-template <typename T> struct DefaultSingletonTraits;
-
-namespace ui {
-
-class TextInputClient;
-
-// Manages the focused TextInputClient across windows and their contents.
-class UI_BASE_IME_EXPORT TextInputFocusManager {
- public:
-  static TextInputFocusManager* GetInstance();
-
-  // Returns the currently focused text input client or NULL.
-  TextInputClient* GetFocusedTextInputClient();
-
-  // Changes the text input focus to |text_input_client|.
-  void FocusTextInputClient(TextInputClient* text_input_client);
-
-  // Removes the text input focus from |text_input_client|.  If
-  // |text_input_client| was not focused, does nothing.
-  void BlurTextInputClient(TextInputClient* text_input_client);
-
- private:
-  friend struct DefaultSingletonTraits<TextInputFocusManager>;
-
-  TextInputFocusManager();
-  ~TextInputFocusManager();
-
-  TextInputClient* focused_text_input_client_;
-  base::ThreadChecker thread_checker_;
-
-  DISALLOW_COPY_AND_ASSIGN(TextInputFocusManager);
-};
-
-}  // namespace ui
-
-#endif  // UI_BASE_IME_TEXT_INPUT_FOCUS_MANAGER_H_
diff --git a/ui/base/ime/ui_base_ime.gyp b/ui/base/ime/ui_base_ime.gyp
index 65134f7..b612984 100644
--- a/ui/base/ime/ui_base_ime.gyp
+++ b/ui/base/ime/ui_base_ime.gyp
@@ -110,8 +110,6 @@
         'remote_input_method_win.h',
         'text_input_client.cc',
         'text_input_client.h',
-        'text_input_focus_manager.cc',
-        'text_input_focus_manager.h',
         'text_input_type.h',
         'ui_base_ime_export.h',
         'win/imm32_manager.cc',
diff --git a/ui/base/ui_base_switches.cc b/ui/base/ui_base_switches.cc
index e26b8828..f3682da 100644
--- a/ui/base/ui_base_switches.cc
+++ b/ui/base/ui_base_switches.cc
@@ -22,9 +22,6 @@
 // Disables large icons on the New Tab page.
 const char kDisableIconNtp[] = "disable-icon-ntp";
 
-// Disables an experimental focus manager to track text input clients.
-const char kDisableTextInputFocusManager[] = "disable-text-input-focus-manager";
-
 // Disables touch adjustment.
 const char kDisableTouchAdjustment[] = "disable-touch-adjustment";
 
@@ -44,9 +41,6 @@
 const char kEnableLinkDisambiguationPopup[] =
     "enable-link-disambiguation-popup";
 
-// Enables an experimental focus manager to track text input clients.
-const char kEnableTextInputFocusManager[] = "enable-text-input-focus-manager";
-
 // Enables touch event based drag and drop.
 const char kEnableTouchDragDrop[] = "enable-touch-drag-drop";
 
diff --git a/ui/base/ui_base_switches.h b/ui/base/ui_base_switches.h
index eddf34f..7541bad3 100644
--- a/ui/base/ui_base_switches.h
+++ b/ui/base/ui_base_switches.h
@@ -19,14 +19,12 @@
 
 UI_BASE_EXPORT extern const char kDisableDwmComposition[];
 UI_BASE_EXPORT extern const char kDisableIconNtp[];
-UI_BASE_EXPORT extern const char kDisableTextInputFocusManager[];
 UI_BASE_EXPORT extern const char kDisableTouchAdjustment[];
 UI_BASE_EXPORT extern const char kDisableTouchDragDrop[];
 UI_BASE_EXPORT extern const char kDisableTouchEditing[];
 UI_BASE_EXPORT extern const char kDisableTouchFeedback[];
 UI_BASE_EXPORT extern const char kEnableIconNtp[];
 UI_BASE_EXPORT extern const char kEnableLinkDisambiguationPopup[];
-UI_BASE_EXPORT extern const char kEnableTextInputFocusManager[];
 UI_BASE_EXPORT extern const char kEnableTouchDragDrop[];
 UI_BASE_EXPORT extern const char kEnableTouchEditing[];
 UI_BASE_EXPORT extern const char kLang[];
diff --git a/ui/base/ui_base_switches_util.cc b/ui/base/ui_base_switches_util.cc
index 6dcb9ef3..e529a7c8 100644
--- a/ui/base/ui_base_switches_util.cc
+++ b/ui/base/ui_base_switches_util.cc
@@ -21,11 +21,6 @@
 #endif
 }
 
-bool IsTextInputFocusManagerEnabled() {
-  return base::CommandLine::ForCurrentProcess()->HasSwitch(
-      switches::kEnableTextInputFocusManager);
-}
-
 bool IsTouchDragDropEnabled() {
 #if defined(OS_CHROMEOS)
   return !base::CommandLine::ForCurrentProcess()->HasSwitch(
diff --git a/ui/base/ui_base_switches_util.h b/ui/base/ui_base_switches_util.h
index 213aed6..fe6c289 100644
--- a/ui/base/ui_base_switches_util.h
+++ b/ui/base/ui_base_switches_util.h
@@ -10,7 +10,6 @@
 namespace switches {
 
 UI_BASE_EXPORT bool IsLinkDisambiguationPopupEnabled();
-UI_BASE_EXPORT bool IsTextInputFocusManagerEnabled();
 UI_BASE_EXPORT bool IsTouchDragDropEnabled();
 UI_BASE_EXPORT bool IsTouchEditingEnabled();
 UI_BASE_EXPORT bool IsTouchFeedbackEnabled();
diff --git a/ui/keyboard/keyboard_controller_unittest.cc b/ui/keyboard/keyboard_controller_unittest.cc
index 640e7f7..116e43e 100644
--- a/ui/keyboard/keyboard_controller_unittest.cc
+++ b/ui/keyboard/keyboard_controller_unittest.cc
@@ -19,8 +19,6 @@
 #include "ui/base/ime/input_method.h"
 #include "ui/base/ime/input_method_factory.h"
 #include "ui/base/ime/text_input_client.h"
-#include "ui/base/ime/text_input_focus_manager.h"
-#include "ui/base/ui_base_switches_util.h"
 #include "ui/compositor/compositor.h"
 #include "ui/compositor/layer_type.h"
 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
@@ -185,8 +183,6 @@
     aura_test_helper_->SetUp(context_factory);
     new wm::DefaultActivationClient(aura_test_helper_->root_window());
     ui::SetUpInputMethodFactoryForTesting();
-    if (::switches::IsTextInputFocusManagerEnabled())
-      ui::TextInputFocusManager::GetInstance()->FocusTextInputClient(NULL);
     focus_controller_.reset(new TestFocusController(root_window()));
     proxy_ = new TestKeyboardControllerProxy();
     controller_.reset(new KeyboardController(proxy_));
@@ -197,8 +193,6 @@
     controller()->RemoveObserver(this);
     controller_.reset();
     focus_controller_.reset();
-    if (::switches::IsTextInputFocusManagerEnabled())
-      ui::TextInputFocusManager::GetInstance()->FocusTextInputClient(NULL);
     aura_test_helper_->TearDown();
     ui::TerminateContextFactoryForTests();
   }
@@ -235,12 +229,7 @@
 
   void SetFocus(ui::TextInputClient* client) {
     ui::InputMethod* input_method = proxy()->GetInputMethod();
-    if (::switches::IsTextInputFocusManagerEnabled()) {
-      ui::TextInputFocusManager::GetInstance()->FocusTextInputClient(client);
-      input_method->OnTextInputTypeChanged(client);
-    } else {
-      input_method->SetFocusedTextInputClient(client);
-    }
+    input_method->SetFocusedTextInputClient(client);
     if (client && client->GetTextInputType() != ui::TEXT_INPUT_TYPE_NONE) {
       input_method->ShowImeIfNeeded();
       if (proxy_->GetKeyboardWindow()->bounds().height() == 0) {
diff --git a/ui/views/cocoa/bridged_native_widget.mm b/ui/views/cocoa/bridged_native_widget.mm
index a465d24..c5fa0a2 100644
--- a/ui/views/cocoa/bridged_native_widget.mm
+++ b/ui/views/cocoa/bridged_native_widget.mm
@@ -15,7 +15,6 @@
 #include "ui/base/hit_test.h"
 #include "ui/base/ime/input_method.h"
 #include "ui/base/ime/input_method_factory.h"
-#include "ui/base/ui_base_switches_util.h"
 #include "ui/gfx/display.h"
 #include "ui/gfx/geometry/dip_util.h"
 #import "ui/gfx/mac/coordinate_conversion.h"
@@ -709,9 +708,6 @@
 }
 
 InputMethod* BridgedNativeWidget::CreateInputMethod() {
-  if (switches::IsTextInputFocusManagerEnabled())
-    return new NullInputMethod();
-
   return new InputMethodBridge(this, GetHostInputMethod(), true);
 }
 
diff --git a/ui/views/controls/webview/webview.cc b/ui/views/controls/webview/webview.cc
index 059540a..adeeadc 100644
--- a/ui/views/controls/webview/webview.cc
+++ b/ui/views/controls/webview/webview.cc
@@ -14,7 +14,6 @@
 #include "ipc/ipc_message.h"
 #include "ui/accessibility/ax_enums.h"
 #include "ui/accessibility/ax_view_state.h"
-#include "ui/base/ui_base_switches_util.h"
 #include "ui/events/event.h"
 #include "ui/views/controls/native/native_view_host.h"
 #include "ui/views/focus/focus_manager.h"
@@ -111,21 +110,6 @@
 }
 
 ui::TextInputClient* WebView::GetTextInputClient() {
-  // This function delegates the text input handling to the underlying
-  // content::RenderWidgetHostView.  So when the underlying RWHV is destroyed or
-  // replaced with another one, we have to notify the FocusManager through
-  // FocusManager::OnTextInputClientChanged() that the focused TextInputClient
-  // needs to be updated.
-  if (switches::IsTextInputFocusManagerEnabled() &&
-      web_contents() && !web_contents()->IsBeingDestroyed()) {
-    const content::RenderViewHost* host = web_contents()->GetRenderViewHost();
-    content::RenderWidgetHostView* host_view =
-        is_embedding_fullscreen_widget_ ?
-        web_contents()->GetFullscreenRenderWidgetHostView() :
-        web_contents()->GetRenderWidgetHostView();
-    if (host && host->IsRenderViewLive() && host_view)
-      return host_view->GetTextInputClient();
-  }
   return NULL;
 }
 
@@ -393,11 +377,6 @@
 }
 
 void WebView::NotifyMaybeTextInputClientAndAccessibilityChanged() {
-  // Update the TextInputClient as needed; see GetTextInputClient().
-  FocusManager* const focus_manager = GetFocusManager();
-  if (focus_manager)
-    focus_manager->OnTextInputClientChanged(this);
-
 #if defined(OS_CHROMEOS)
   if (web_contents())
     NotifyAccessibilityEvent(ui::AX_EVENT_CHILDREN_CHANGED, false);
diff --git a/ui/views/controls/webview/webview_interactive_uitest.cc b/ui/views/controls/webview/webview_interactive_uitest.cc
deleted file mode 100644
index a15dfaa..0000000
--- a/ui/views/controls/webview/webview_interactive_uitest.cc
+++ /dev/null
@@ -1,119 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/views/controls/webview/webview.h"
-
-#include "base/command_line.h"
-#include "base/memory/scoped_ptr.h"
-#include "content/public/browser/web_contents.h"
-#include "content/public/test/mock_render_process_host.h"
-#include "content/public/test/test_browser_context.h"
-#include "content/public/test/test_browser_thread.h"
-#include "content/public/test/test_renderer_host.h"
-#include "content/public/test/web_contents_tester.h"
-#include "ui/base/ime/text_input_focus_manager.h"
-#include "ui/base/ui_base_switches.h"
-#include "ui/gl/gl_surface.h"
-#include "ui/views/test/test_views_delegate.h"
-#include "ui/views/test/webview_test_helper.h"
-#include "ui/views/test/widget_test.h"
-
-namespace {
-
-class WebViewTestViewsDelegate : public views::TestViewsDelegate {
- public:
-  WebViewTestViewsDelegate() {}
-
-  // Overriden from TestViewsDelegate.
-  content::WebContents* CreateWebContents(
-      content::BrowserContext* browser_context,
-      content::SiteInstance* site_instance) override {
-    return content::WebContentsTester::CreateTestWebContents(browser_context,
-                                                             site_instance);
-  }
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(WebViewTestViewsDelegate);
-};
-
-class WebViewInteractiveUiTest : public views::test::WidgetTest {
- public:
-  WebViewInteractiveUiTest()
-      : ui_thread_(content::BrowserThread::UI, base::MessageLoop::current()) {}
-
-  void SetUp() override {
-    gfx::GLSurface::InitializeOneOffForTests();
-    set_views_delegate(make_scoped_ptr(new WebViewTestViewsDelegate));
-    WidgetTest::SetUp();
-  }
-
- protected:
-  content::BrowserContext* browser_context() { return &browser_context_; }
-
- private:
-  content::TestBrowserContext browser_context_;
-  views::WebViewTestHelper webview_test_helper_;
-  content::TestBrowserThread ui_thread_;
-
-  DISALLOW_COPY_AND_ASSIGN(WebViewInteractiveUiTest);
-};
-
-TEST_F(WebViewInteractiveUiTest, TextInputClientIsUpToDate) {
-  // WebViewInteractiveUiTest.TextInputClientIsUpToDate needs
-  // kEnableTextInputFocusManager flag to be enabled.
-  base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
-  cmd_line->AppendSwitch(switches::kEnableTextInputFocusManager);
-
-  // Create a top level widget and a webview as its content.
-  views::Widget* widget = CreateTopLevelFramelessPlatformWidget();
-  views::WebView* webview = new views::WebView(browser_context());
-  widget->SetContentsView(webview);
-  widget->Show();
-  webview->RequestFocus();
-
-  // Mac needs to spin a run loop to activate. Don't fake it, so that the Widget
-  // still gets didBecomeKey notifications. There is just one widget, so a
-  // single spin of the runloop should be enough (it didn't flake in local tests
-  // but a WidgetObserver might be needed).
-#if defined(OS_MACOSX)
-  RunPendingMessages();
-#endif
-  EXPECT_TRUE(widget->IsActive());
-
-  ui::TextInputFocusManager* text_input_focus_manager =
-      ui::TextInputFocusManager::GetInstance();
-  EXPECT_EQ(nullptr, webview->GetTextInputClient());
-  EXPECT_EQ(text_input_focus_manager->GetFocusedTextInputClient(),
-            webview->GetTextInputClient());
-
-  // Case 1: Creates a new WebContents.
-  content::WebContents* web_contents1 = webview->GetWebContents();
-  web_contents1->GetRenderViewHost()->GetProcess()->Init();
-  content::RenderViewHostTester::For(web_contents1->GetRenderViewHost())
-      ->CreateTestRenderView(base::string16(), MSG_ROUTING_NONE,
-                             MSG_ROUTING_NONE, -1, false);
-  webview->RequestFocus();
-  ui::TextInputClient* client1 = webview->GetTextInputClient();
-  EXPECT_NE(nullptr, client1);
-  EXPECT_EQ(text_input_focus_manager->GetFocusedTextInputClient(), client1);
-
-  // Case 2: Replaces a WebContents by SetWebContents().
-  scoped_ptr<content::WebContents> web_contents2(
-      content::WebContentsTester::CreateTestWebContents(browser_context(),
-                                                        nullptr));
-  web_contents2->GetRenderViewHost()->GetProcess()->Init();
-  content::RenderViewHostTester::For(web_contents2->GetRenderViewHost())
-      ->CreateTestRenderView(base::string16(), MSG_ROUTING_NONE,
-                             MSG_ROUTING_NONE, -1, false);
-  webview->SetWebContents(web_contents2.get());
-  ui::TextInputClient* client2 = webview->GetTextInputClient();
-  EXPECT_NE(nullptr, client2);
-  EXPECT_EQ(text_input_focus_manager->GetFocusedTextInputClient(), client2);
-  EXPECT_NE(client1, client2);
-
-  widget->Close();
-  RunPendingMessages();
-}
-
-}  // namespace
diff --git a/ui/views/focus/focus_manager.cc b/ui/views/focus/focus_manager.cc
index 86acea3c..c84c315 100644
--- a/ui/views/focus/focus_manager.cc
+++ b/ui/views/focus/focus_manager.cc
@@ -13,8 +13,6 @@
 #include "ui/base/accelerators/accelerator.h"
 #include "ui/base/ime/input_method.h"
 #include "ui/base/ime/text_input_client.h"
-#include "ui/base/ime/text_input_focus_manager.h"
-#include "ui/base/ui_base_switches_util.h"
 #include "ui/events/event.h"
 #include "ui/events/keycodes/keyboard_codes.h"
 #include "ui/views/focus/focus_manager_delegate.h"
@@ -301,13 +299,8 @@
 
 void FocusManager::SetFocusedViewWithReason(
     View* view, FocusChangeReason reason) {
-  if (focused_view_ == view) {
-    // In the case that the widget lost the focus and gained it back without
-    // changing the focused view, we have to make the text input client focused.
-    // TODO(yukishiino): Remove this hack once we fix http://crbug.com/383236
-    FocusTextInputClient(focused_view_);
+  if (focused_view_ == view)
     return;
-  }
 
   base::AutoReset<bool> auto_changing_focus(&is_changing_focus_, true);
   // Update the reason for the focus change (since this is checked by
@@ -318,18 +311,14 @@
 
   View* old_focused_view = focused_view_;
   focused_view_ = view;
-  if (old_focused_view) {
+  if (old_focused_view)
     old_focused_view->Blur();
-    BlurTextInputClient(old_focused_view);
-  }
   // Also make |focused_view_| the stored focus view. This way the stored focus
   // view is remembered if focus changes are requested prior to a show or while
   // hidden.
   SetStoredFocusView(focused_view_);
-  if (focused_view_) {
-    FocusTextInputClient(focused_view_);
+  if (focused_view_)
     focused_view_->Focus();
-  }
 
   FOR_EACH_OBSERVER(FocusChangeListener, focus_change_listeners_,
                     OnDidChangeFocus(old_focused_view, focused_view_));
@@ -443,46 +432,6 @@
   SetStoredFocusView(NULL);
 }
 
-void FocusManager::OnTextInputClientChanged(View* view) {
-  if (view == focused_view_)
-    FocusTextInputClient(view);
-}
-
-void FocusManager::FocusTextInputClient(View* view) {
-  if (!switches::IsTextInputFocusManagerEnabled())
-    return;
-
-  // If the widget is not active, do not steal the text input focus.
-  if (!widget_->IsActive())
-    return;
-
-  ui::TextInputClient* text_input_client =
-      view ? view->GetTextInputClient() : NULL;
-  ui::TextInputFocusManager::GetInstance()->
-      FocusTextInputClient(text_input_client);
-  ui::InputMethod* input_method = widget_->GetHostInputMethod();
-  if (input_method) {
-    input_method->OnTextInputTypeChanged(text_input_client);
-    input_method->OnCaretBoundsChanged(text_input_client);
-  }
-}
-
-void FocusManager::BlurTextInputClient(View* view) {
-  if (!switches::IsTextInputFocusManagerEnabled())
-    return;
-
-  ui::TextInputClient* text_input_client =
-      view ? view->GetTextInputClient() : NULL;
-  if (text_input_client && text_input_client->HasCompositionText()) {
-    text_input_client->ConfirmCompositionText();
-    ui::InputMethod* input_method = widget_->GetHostInputMethod();
-    if (input_method && input_method->GetTextInputClient() == text_input_client)
-      input_method->CancelComposition(text_input_client);
-  }
-  ui::TextInputFocusManager::GetInstance()->
-      BlurTextInputClient(text_input_client);
-}
-
 // Find the next (previous if reverse is true) focusable view for the specified
 // FocusTraversable, starting at the specified view, traversing down the
 // FocusTraversable hierarchy.
diff --git a/ui/views/focus/focus_manager.h b/ui/views/focus/focus_manager.h
index 4030158..aa8f66a1d4 100644
--- a/ui/views/focus/focus_manager.h
+++ b/ui/views/focus/focus_manager.h
@@ -216,15 +216,6 @@
   // Returns true if in the process of changing the focused view.
   bool is_changing_focus() const { return is_changing_focus_; }
 
-  // Changes the text input focus to |view->GetTextInputClient()| iff |view|
-  // is focused.  Views must call this method when their internal
-  // TextInputClient instance changes.
-  void OnTextInputClientChanged(View* view);
-
-  // Moves the text input focus into/out from |view|.
-  void FocusTextInputClient(View* view);
-  void BlurTextInputClient(View* view);
-
   // Disable shortcut handling.
   void set_shortcut_handling_suspended(bool suspended) {
     shortcut_handling_suspended_ = suspended;
diff --git a/ui/views/focus/focus_manager_unittest.cc b/ui/views/focus/focus_manager_unittest.cc
index 007d9fc..5789c5e 100644
--- a/ui/views/focus/focus_manager_unittest.cc
+++ b/ui/views/focus/focus_manager_unittest.cc
@@ -12,9 +12,6 @@
 #include "ui/aura/client/focus_client.h"
 #include "ui/aura/window.h"
 #include "ui/base/accelerators/accelerator.h"
-#include "ui/base/ime/dummy_text_input_client.h"
-#include "ui/base/ime/text_input_focus_manager.h"
-#include "ui/base/ui_base_switches.h"
 #include "ui/events/keycodes/keyboard_codes.h"
 #include "ui/views/accessible_pane_view.h"
 #include "ui/views/controls/button/label_button.h"
@@ -796,60 +793,6 @@
   EXPECT_EQ(&view, GetFocusManager()->GetStoredFocusView());
 }
 
-class TextInputTestView : public View {
- public:
-  TextInputTestView() {}
-
-  ui::TextInputClient* GetTextInputClient() override {
-    return &text_input_client_;
-  }
-
- private:
-  ui::DummyTextInputClient text_input_client_;
-
-  DISALLOW_COPY_AND_ASSIGN(TextInputTestView);
-};
-
-TEST_F(FocusManagerTest, TextInputClient) {
-  base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
-  cmd_line->AppendSwitch(switches::kEnableTextInputFocusManager);
-
-  View* view = new TextInputTestView;
-  ui::TextInputClient* text_input_client = view->GetTextInputClient();
-  view->SetFocusable(true);
-  GetContentsView()->AddChildView(view);
-  ui::TextInputFocusManager* text_input_focus_manager =
-      ui::TextInputFocusManager::GetInstance();
-
-  GetFocusManager()->SetFocusedView(view);
-  EXPECT_EQ(view, GetFocusManager()->GetFocusedView());
-  EXPECT_EQ(text_input_client,
-            text_input_focus_manager->GetFocusedTextInputClient());
-  GetFocusManager()->StoreFocusedView(false);
-  EXPECT_TRUE(GetFocusManager()->RestoreFocusedView());
-  EXPECT_EQ(text_input_client,
-            text_input_focus_manager->GetFocusedTextInputClient());
-
-  // Repeat with |true|.
-  GetFocusManager()->SetFocusedView(view);
-  EXPECT_EQ(view, GetFocusManager()->GetFocusedView());
-  EXPECT_EQ(text_input_client,
-            text_input_focus_manager->GetFocusedTextInputClient());
-  GetFocusManager()->StoreFocusedView(true);
-  EXPECT_TRUE(GetFocusManager()->RestoreFocusedView());
-  EXPECT_EQ(text_input_client,
-            text_input_focus_manager->GetFocusedTextInputClient());
-
-  // Focus the view twice in a row.
-  GetFocusManager()->SetFocusedView(view);
-  EXPECT_EQ(text_input_client,
-            text_input_focus_manager->GetFocusedTextInputClient());
-  ui::TextInputFocusManager::GetInstance()->FocusTextInputClient(NULL);
-  GetFocusManager()->SetFocusedView(view);
-  EXPECT_EQ(text_input_client,
-            text_input_focus_manager->GetFocusedTextInputClient());
-}
-
 namespace {
 
 // Trivial WidgetDelegate implementation that allows setting return value of
diff --git a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
index dcbd24c..2ee6351 100644
--- a/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
+++ b/ui/views/widget/desktop_aura/desktop_native_widget_aura.cc
@@ -16,7 +16,6 @@
 #include "ui/aura/window_tree_host.h"
 #include "ui/base/hit_test.h"
 #include "ui/base/ime/input_method.h"
-#include "ui/base/ui_base_switches_util.h"
 #include "ui/compositor/layer.h"
 #include "ui/gfx/canvas.h"
 #include "ui/gfx/display.h"
@@ -629,9 +628,6 @@
 }
 
 InputMethod* DesktopNativeWidgetAura::CreateInputMethod() {
-  if (switches::IsTextInputFocusManagerEnabled())
-    return new NullInputMethod();
-
   return new InputMethodBridge(this, GetHostInputMethod(), false);
 }
 
diff --git a/ui/views/widget/native_widget_aura.cc b/ui/views/widget/native_widget_aura.cc
index cf3017b..6c53b2d 100644
--- a/ui/views/widget/native_widget_aura.cc
+++ b/ui/views/widget/native_widget_aura.cc
@@ -18,7 +18,6 @@
 #include "ui/aura/window_observer.h"
 #include "ui/aura/window_tree_host.h"
 #include "ui/base/dragdrop/os_exchange_data.h"
-#include "ui/base/ui_base_switches_util.h"
 #include "ui/base/ui_base_types.h"
 #include "ui/compositor/layer.h"
 #include "ui/events/event.h"
@@ -271,9 +270,6 @@
   if (!window_)
     return NULL;
 
-  if (switches::IsTextInputFocusManagerEnabled())
-    return new NullInputMethod();
-
   return new InputMethodBridge(this, GetHostInputMethod(), true);
 }
 
@@ -889,12 +885,6 @@
   if (!input_method)
     return;
   input_method->DispatchKeyEvent(*event);
-  if (switches::IsTextInputFocusManagerEnabled()) {
-    FocusManager* focus_manager = GetWidget()->GetFocusManager();
-    delegate_->OnKeyEvent(event);
-    if (!event->handled() && focus_manager)
-      focus_manager->OnKeyEvent(*event);
-  }
   event->SetHandled();
 }
 
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc
index 7f8e076..a5739205 100644
--- a/ui/views/widget/widget.cc
+++ b/ui/views/widget/widget.cc
@@ -1051,19 +1051,6 @@
   FOR_EACH_OBSERVER(WidgetObserver, observers_,
                     OnWidgetActivationChanged(this, active));
 
-  // During window creation, the widget gets focused without activation, and in
-  // that case, the focus manager cannot set the appropriate text input client
-  // because the widget is not active.  Thus we have to notify the focus manager
-  // not only when the focus changes but also when the widget gets activated.
-  // See crbug.com/377479 for details.
-  views::FocusManager* focus_manager = GetFocusManager();
-  if (focus_manager) {
-    if (active)
-      focus_manager->FocusTextInputClient(focus_manager->GetFocusedView());
-    else
-      focus_manager->BlurTextInputClient(focus_manager->GetFocusedView());
-  }
-
   if (IsVisible() && non_client_view())
     non_client_view()->frame_view()->SchedulePaint();
 }
diff --git a/ui/wm/core/focus_controller.cc b/ui/wm/core/focus_controller.cc
index 1fee190..d062903 100644
--- a/ui/wm/core/focus_controller.cc
+++ b/ui/wm/core/focus_controller.cc
@@ -10,7 +10,6 @@
 #include "ui/aura/client/focus_change_observer.h"
 #include "ui/aura/env.h"
 #include "ui/aura/window_tracker.h"
-#include "ui/base/ime/text_input_focus_manager.h"
 #include "ui/events/event.h"
 #include "ui/wm/core/focus_rules.h"
 #include "ui/wm/core/window_util.h"
@@ -231,14 +230,6 @@
   base::AutoReset<bool> updating_focus(&updating_focus_, true);
   aura::Window* lost_focus = focused_window_;
 
-  // |window| is going to get the focus, so reset the text input client.
-  // OnWindowFocused() may set a proper text input client if the implementation
-  // supports text input.
-  ui::TextInputFocusManager* text_input_focus_manager =
-      ui::TextInputFocusManager::GetInstance();
-  if (window)
-    text_input_focus_manager->FocusTextInputClient(NULL);
-
   // Allow for the window losing focus to be deleted during dispatch. If it is
   // deleted pass NULL to observers instead of a deleted window.
   aura::WindowTracker window_tracker;
@@ -270,10 +261,6 @@
         focused_window_,
         window_tracker.Contains(lost_focus) ? lost_focus : NULL);
   }
-
-  // Ensure that the text input client is reset when the window loses the focus.
-  if (!window)
-    text_input_focus_manager->FocusTextInputClient(NULL);
 }
 
 void FocusController::SetActiveWindow(
diff --git a/ui/wm/core/focus_controller_unittest.cc b/ui/wm/core/focus_controller_unittest.cc
index a8bddb3..c82e3dd8 100644
--- a/ui/wm/core/focus_controller_unittest.cc
+++ b/ui/wm/core/focus_controller_unittest.cc
@@ -15,8 +15,6 @@
 #include "ui/aura/window.h"
 #include "ui/aura/window_event_dispatcher.h"
 #include "ui/aura/window_tracker.h"
-#include "ui/base/ime/dummy_text_input_client.h"
-#include "ui/base/ime/text_input_focus_manager.h"
 #include "ui/events/event.h"
 #include "ui/events/event_constants.h"
 #include "ui/events/event_handler.h"
@@ -265,25 +263,6 @@
   DISALLOW_COPY_AND_ASSIGN(ScopedTargetFocusNotificationObserver);
 };
 
-class ScopedFocusedTextInputClientChanger
-    : public ScopedFocusNotificationObserver {
- public:
-  ScopedFocusedTextInputClientChanger(aura::Window* root_window,
-                                      ui::TextInputClient* text_input_client)
-      : ScopedFocusNotificationObserver(root_window),
-        text_input_client_(text_input_client) {}
-
- private:
-  // Overridden from aura::client::FocusChangeObserver:
-  void OnWindowFocused(aura::Window* gained_focus,
-                       aura::Window* lost_focus) override {
-    ui::TextInputFocusManager::GetInstance()->FocusTextInputClient(
-        text_input_client_);
-  }
-
-  ui::TextInputClient* text_input_client_;
-};
-
 // Used to fake the handling of events in the pre-target phase.
 class SimpleEventHandler : public ui::EventHandler {
  public:
@@ -486,7 +465,6 @@
   virtual void FocusChangeDuringDrag() {}
   virtual void ChangeFocusWhenNothingFocusedAndCaptured() {}
   virtual void DontPassDeletedWindow() {}
-  virtual void FocusedTextInputClient() {}
 
  private:
   scoped_ptr<FocusController> focus_controller_;
@@ -858,41 +836,6 @@
     }
   }
 
-  // Verifies if the focused text input client is cleared when a window gains
-  // or loses the focus.
-  void FocusedTextInputClient() override {
-    ui::TextInputFocusManager* text_input_focus_manager =
-        ui::TextInputFocusManager::GetInstance();
-    ui::DummyTextInputClient text_input_client;
-    ui::TextInputClient* null_text_input_client = NULL;
-
-    EXPECT_EQ(null_text_input_client,
-              text_input_focus_manager->GetFocusedTextInputClient());
-
-    text_input_focus_manager->FocusTextInputClient(&text_input_client);
-    EXPECT_EQ(&text_input_client,
-              text_input_focus_manager->GetFocusedTextInputClient());
-    FocusWindowById(1);
-    // The focused text input client gets cleared when a window gets focused
-    // unless any of observers sets the focused text input client.
-    EXPECT_EQ(null_text_input_client,
-              text_input_focus_manager->GetFocusedTextInputClient());
-
-    ScopedFocusedTextInputClientChanger text_input_focus_changer(
-        root_window(), &text_input_client);
-    EXPECT_EQ(null_text_input_client,
-              text_input_focus_manager->GetFocusedTextInputClient());
-    FocusWindowById(2);
-    // |text_input_focus_changer| sets the focused text input client.
-    EXPECT_EQ(&text_input_client,
-              text_input_focus_manager->GetFocusedTextInputClient());
-
-    FocusWindow(NULL);
-    // The focused text input client gets cleared when a window loses the focus.
-    EXPECT_EQ(null_text_input_client,
-              text_input_focus_manager->GetFocusedTextInputClient());
-  }
-
  private:
   DISALLOW_COPY_AND_ASSIGN(FocusControllerDirectTestBase);
 };
@@ -1344,10 +1287,6 @@
 FOCUS_CONTROLLER_TEST(FocusControllerParentHideTest,
                       TransientChildWindowActivationTest);
 
-// - Verifies that the focused text input client is cleard when the window focus
-//   changes.
-ALL_FOCUS_TESTS(FocusedTextInputClient);
-
 // If a mouse event was handled, it should not activate a window.
 FOCUS_CONTROLLER_TEST(FocusControllerMouseEventTest, IgnoreHandledEvent);