Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / ash / ash_keyboard_controller_proxy.h
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   ~AshKeyboardControllerProxy() override;
37
38  private:
39   void OnRequest(const ExtensionHostMsg_Request_Params& params);
40
41   // keyboard::KeyboardControllerProxy overrides
42   content::BrowserContext* GetBrowserContext() override;
43   ui::InputMethod* GetInputMethod() override;
44   void RequestAudioInput(
45       content::WebContents* web_contents,
46       const content::MediaStreamRequest& request,
47       const content::MediaResponseCallback& callback) override;
48   void SetupWebContents(content::WebContents* contents) override;
49   void ShowKeyboardContainer(aura::Window* container) override;
50
51   // The overridden implementation dispatches
52   // chrome.virtualKeyboardPrivate.onTextInputBoxFocused event to extension to
53   // provide the input type information. Naturally, when the virtual keyboard
54   // extension is used as an IME then chrome.input.ime.onFocus provides the
55   // information, but not when the virtual keyboard is used in conjunction with
56   // another IME. virtualKeyboardPrivate.onTextInputBoxFocused is the remedy in
57   // that case.
58   void SetUpdateInputType(ui::TextInputType type) override;
59
60   // extensions::ExtensionFunctionDispatcher::Delegate overrides
61   extensions::WindowController* GetExtensionWindowController() const override;
62   content::WebContents* GetAssociatedWebContents() const override;
63
64   // content::WebContentsObserver overrides
65   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_