| Index: content/public/test/text_input_test_utils.h | 
| diff --git a/content/public/test/text_input_test_utils.h b/content/public/test/text_input_test_utils.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..5b78a5602e4b4c3669e318e37eb0d71a938c8a15 | 
| --- /dev/null | 
| +++ b/content/public/test/text_input_test_utils.h | 
| @@ -0,0 +1,153 @@ | 
| +// Copyright 2016 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 CONTENT_PUBLIC_TEST_TEXT_INPUT_TEST_UTILS_H_ | 
| +#define CONTENT_PUBLIC_TEST_TEXT_INPUT_TEST_UTILS_H_ | 
| + | 
| +#include <string> | 
| +#include <unordered_map> | 
| +#include <vector> | 
| + | 
| +#include "base/callback.h" | 
| +#include "ui/base/ime/text_input_mode.h" | 
| +#include "ui/base/ime/text_input_type.h" | 
| + | 
| +namespace content { | 
| + | 
| +class RenderWidgetHostView; | 
| +class RenderWidgetHostViewBase; | 
| +class WebContents; | 
| +struct TextInputState; | 
| + | 
| +// Returns the |TextInputState.type| from the TextInputManager owned by | 
| +// |web_contents|. | 
| +ui::TextInputType GetTextInputTypeFromWebContents(WebContents* web_contents); | 
| + | 
| +// This method returns true if |view| is registered in the TextInputManager that | 
| +// is owned by |web_contents|. If that is the case, the value of |type| will be | 
| +// the |TextInputState.type| corresponding to the |view|. Returns false if | 
| +// |view| is not registered. | 
| +bool GetTextInputTypeForView(WebContents* web_contents, | 
| +                             RenderWidgetHostView* view, | 
| +                             ui::TextInputType* type); | 
| + | 
| +// Returns the RWHV corresponding to the frame with a focused <input> within the | 
| +// given WebContents. | 
| +RenderWidgetHostView* GetActiveViewFromWebContents(WebContents* web_contents); | 
| + | 
| +// This class provides the necessary API for accessing the state of and also | 
| +// observing the TextInputManager for WebContents. | 
| +class TextInputManagerTester { | 
| + public: | 
| +  using Callback = base::Callback<void(TextInputManagerTester*)>; | 
| + | 
| +  TextInputManagerTester(WebContents* web_contents); | 
| +  virtual ~TextInputManagerTester(); | 
| + | 
| +  // Sets a callback which is invoked when a RWHV calls UpdateTextInputState | 
| +  // on the TextInputManager which is being observed. | 
| +  void SetUpdateTextInputStateCalledCallback(const Callback& callback); | 
| + | 
| +  // Returns true if there is a focused <input> and populates |type| with | 
| +  // |TextInputState.type| of the TextInputManager. | 
| +  bool GetTextInputType(ui::TextInputType* type); | 
| + | 
| +  // Returns true if there is a focused <input> and populates |value| with | 
| +  // |TextInputState.value| of the TextInputManager. | 
| +  bool GetTextInputValue(std::string* value); | 
| + | 
| +  // Returns the RenderWidgetHostView with a focused <input> element or nullptr | 
| +  // if none exists. | 
| +  const RenderWidgetHostView* GetActiveView(); | 
| + | 
| +  // Returns the RenderWidgetHostView which has most recently called | 
| +  // TextInputManager::UpdateTextInputState on the TextInputManager which is | 
| +  // being observed. | 
| +  const RenderWidgetHostView* GetUpdatedView(); | 
| + | 
| +  // Returns true if a call to TextInputManager::UpdateTextInputState has led | 
| +  // to a change in TextInputState (since the time the observer has been | 
| +  // created). | 
| +  bool IsTextInputStateChanged(); | 
| + | 
| + private: | 
| +  // The actual internal observer of the TextInputManager. | 
| +  class InternalObserver; | 
| + | 
| +  std::unique_ptr<InternalObserver> observer_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(TextInputManagerTester); | 
| +}; | 
| + | 
| +// This class observes the lifetime of a RenderWidgetHostView. | 
| +class TestRenderWidgetHostViewDestructionObserver { | 
| + public: | 
| +  TestRenderWidgetHostViewDestructionObserver(RenderWidgetHostView* view); | 
| +  virtual ~TestRenderWidgetHostViewDestructionObserver(); | 
| + | 
| +  // Waits for the RWHV which is being observed to get destroyed. | 
| +  void Wait(); | 
| + | 
| + private: | 
| +  // The actual internal observer of RenderWidgetHostViewBase. | 
| +  class InternalObserver; | 
| + | 
| +  std::unique_ptr<InternalObserver> observer_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(TestRenderWidgetHostViewDestructionObserver); | 
| +}; | 
| + | 
| +// Helper class to create TextInputState structs on the browser side and send it | 
| +// to the given RenderWidgetHostView. This class can be used for faking changes | 
| +// in TextInputState for testing on the browser side. | 
| +class TextInputStateSender { | 
| + public: | 
| +  explicit TextInputStateSender(RenderWidgetHostView* view); | 
| +  virtual ~TextInputStateSender(); | 
| + | 
| +  void Send(); | 
| + | 
| +  void SetFromCurrentState(); | 
| + | 
| +  // The required setter methods. These setter methods can be used to call | 
| +  // RenderWidgetHostViewBase::TextInputStateChanged with fake, customized | 
| +  // TextInputState. Used for unit-testing on the browser side. | 
| +  void SetType(ui::TextInputType type); | 
| +  void SetMode(ui::TextInputMode mode); | 
| +  void SetFlags(int flags); | 
| +  void SetCanComposeInline(bool can_compose_inline); | 
| +  void SetShowImeIfNeeded(bool show_ime_if_needed); | 
| +  void SetIsNonImeChange(bool is_non_ime_change); | 
| + | 
| + private: | 
| +  std::unique_ptr<TextInputState> text_input_state_; | 
| +  RenderWidgetHostViewBase* const view_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(TextInputStateSender); | 
| +}; | 
| + | 
| +// This class is intended to observe the InputMethod. | 
| +class TestInputMethodObserver { | 
| + public: | 
| +  // static | 
| +  // Creates and returns a platform specific implementation of an | 
| +  // InputMethodObserver. | 
| +  static std::unique_ptr<TestInputMethodObserver> Create( | 
| +      WebContents* web_contents); | 
| + | 
| +  virtual ~TestInputMethodObserver(); | 
| + | 
| +  virtual ui::TextInputType GetTextInputTypeFromClient() = 0; | 
| + | 
| +  virtual void SetOnTextInputTypeChangedCallback( | 
| +      const base::Closure& callback) = 0; | 
| +  virtual void SetOnShowImeIfNeededCallback(const base::Closure& callback) = 0; | 
| + | 
| + protected: | 
| +  TestInputMethodObserver(); | 
| +}; | 
| + | 
| +}  // namespace content | 
| + | 
| +#endif  // CONTENT_PUBLIC_TEST_TEXT_INPUT_TEST_UTILS_H_ | 
|  |