Home | History | Annotate | Download | only in ash
      1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CHROME_BROWSER_UI_ASH_ASH_KEYBOARD_CONTROLLER_PROXY_H_
      6 #define CHROME_BROWSER_UI_ASH_ASH_KEYBOARD_CONTROLLER_PROXY_H_
      7 
      8 #include "base/basictypes.h"
      9 #include "base/memory/scoped_ptr.h"
     10 #include "content/public/browser/web_contents_observer.h"
     11 #include "extensions/browser/extension_function_dispatcher.h"
     12 #include "ui/keyboard/keyboard_controller_proxy.h"
     13 
     14 namespace content {
     15 class WebContents;
     16 }
     17 namespace extensions {
     18 class ExtensionFunctionDispatcher;
     19 class WindowController;
     20 }
     21 namespace gfx {
     22 class Rect;
     23 }
     24 namespace ui {
     25 class InputMethod;
     26 }
     27 
     28 // Subclass of KeyboardControllerProxy. It is used by KeyboardController to get
     29 // access to the virtual keyboard window and setup Chrome extension functions.
     30 class AshKeyboardControllerProxy
     31     : public keyboard::KeyboardControllerProxy,
     32       public content::WebContentsObserver,
     33       public extensions::ExtensionFunctionDispatcher::Delegate {
     34  public:
     35   AshKeyboardControllerProxy();
     36   virtual ~AshKeyboardControllerProxy();
     37 
     38  private:
     39   void OnRequest(const ExtensionHostMsg_Request_Params& params);
     40 
     41   // keyboard::KeyboardControllerProxy overrides
     42   virtual content::BrowserContext* GetBrowserContext() OVERRIDE;
     43   virtual ui::InputMethod* GetInputMethod() OVERRIDE;
     44   virtual void RequestAudioInput(content::WebContents* web_contents,
     45       const content::MediaStreamRequest& request,
     46       const content::MediaResponseCallback& callback) OVERRIDE;
     47   virtual void SetupWebContents(content::WebContents* contents) OVERRIDE;
     48   virtual void ShowKeyboardContainer(aura::Window* container) OVERRIDE;
     49 
     50   // The overridden implementation dispatches
     51   // chrome.virtualKeyboardPrivate.onTextInputBoxFocused event to extension to
     52   // provide the input type information. Naturally, when the virtual keyboard
     53   // extension is used as an IME then chrome.input.ime.onFocus provides the
     54   // information, but not when the virtual keyboard is used in conjunction with
     55   // another IME. virtualKeyboardPrivate.onTextInputBoxFocused is the remedy in
     56   // that case.
     57   virtual void SetUpdateInputType(ui::TextInputType type) OVERRIDE;
     58 
     59   // extensions::ExtensionFunctionDispatcher::Delegate overrides
     60   virtual extensions::WindowController* GetExtensionWindowController() const
     61       OVERRIDE;
     62   virtual content::WebContents* GetAssociatedWebContents() const OVERRIDE;
     63 
     64   // content::WebContentsObserver overrides
     65   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
     66 
     67   scoped_ptr<extensions::ExtensionFunctionDispatcher>
     68       extension_function_dispatcher_;
     69 
     70   DISALLOW_COPY_AND_ASSIGN(AshKeyboardControllerProxy);
     71 };
     72 
     73 #endif  // CHROME_BROWSER_UI_ASH_ASH_KEYBOARD_CONTROLLER_PROXY_H_
     74