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 14namespace content { 15class WebContents; 16} 17namespace extensions { 18class ExtensionFunctionDispatcher; 19class WindowController; 20} 21namespace gfx { 22class Rect; 23} 24namespace ui { 25class 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. 30class 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