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