summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorshuchen@chromium.org <shuchen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-29 03:31:09 +0000
committershuchen@chromium.org <shuchen@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-29 03:31:09 +0000
commit112f658dd4ee5ead677ab818fe4efe14ac8d501e (patch)
treed8a2364dcd6753e72adf3397e648b95b76b4da89
parentb520e13a9cddc9089d5ff0bf1c168a0abb6b7ec9 (diff)
downloadchromium_src-112f658dd4ee5ead677ab818fe4efe14ac8d501e.zip
chromium_src-112f658dd4ee5ead677ab818fe4efe14ac8d501e.tar.gz
chromium_src-112f658dd4ee5ead677ab818fe4efe14ac8d501e.tar.bz2
[IME API] Implement input view which reuses virtual keyboard window.
BUG=chromium:316524 TEST=Locally verified on sandbox of ChromeOS on Linux. Review URL: https://codereview.chromium.org/91443002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@237868 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/browser/chromeos/input_method/input_method_engine_ibus.cc17
-rw-r--r--chrome/browser/chromeos/input_method/input_method_engine_ibus.h4
-rw-r--r--chromeos/ime/input_method_descriptor.h1
-rw-r--r--ui/keyboard/keyboard.gyp1
-rw-r--r--ui/keyboard/keyboard_controller.cc4
-rw-r--r--ui/keyboard/keyboard_controller.h5
-rw-r--r--ui/keyboard/keyboard_controller_proxy.cc38
-rw-r--r--ui/keyboard/keyboard_controller_proxy.h12
8 files changed, 72 insertions, 10 deletions
diff --git a/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc b/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc
index 5648cb9..dd2a934 100644
--- a/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc
+++ b/chrome/browser/chromeos/input_method/input_method_engine_ibus.cc
@@ -13,6 +13,7 @@
#undef FocusOut
#include <map>
+#include "ash/shell.h"
#include "base/bind.h"
#include "base/logging.h"
#include "base/memory/scoped_ptr.h"
@@ -27,6 +28,7 @@
#include "chromeos/ime/input_method_manager.h"
#include "ui/events/event.h"
#include "ui/events/keycodes/keyboard_code_conversion_x.h"
+#include "ui/keyboard/keyboard_controller.h"
namespace chromeos {
const char* kErrorNotActive = "IME is not active";
@@ -108,6 +110,8 @@ void InputMethodEngineIBus::Initialize(
ibus_id_ = extension_ime_util::GetInputMethodID(extension_id, engine_id);
}
+ input_view_url_ = input_view;
+
manager->AddInputMethodExtension(ibus_id_, engine_name, layouts, languages,
options_page, input_view, this);
RegisterComponent();
@@ -444,11 +448,24 @@ void InputMethodEngineIBus::Enable() {
IBusEngineHandlerInterface::InputContext context(ui::TEXT_INPUT_TYPE_TEXT,
ui::TEXT_INPUT_MODE_DEFAULT);
FocusIn(context);
+
+ keyboard::KeyboardController* keyboard_controller =
+ ash::Shell::GetInstance()->keyboard_controller();
+ if (keyboard_controller) {
+ keyboard_controller->SetOverrideContentUrl(input_view_url_);
+ }
}
void InputMethodEngineIBus::Disable() {
active_ = false;
observer_->OnDeactivated(engine_id_);
+
+ keyboard::KeyboardController* keyboard_controller =
+ ash::Shell::GetInstance()->keyboard_controller();
+ if (keyboard_controller) {
+ GURL empty_url;
+ keyboard_controller->SetOverrideContentUrl(empty_url);
+ }
}
void InputMethodEngineIBus::PropertyActivate(const std::string& property_name) {
diff --git a/chrome/browser/chromeos/input_method/input_method_engine_ibus.h b/chrome/browser/chromeos/input_method/input_method_engine_ibus.h
index 56f8d39..6e45474a 100644
--- a/chrome/browser/chromeos/input_method/input_method_engine_ibus.h
+++ b/chrome/browser/chromeos/input_method/input_method_engine_ibus.h
@@ -11,6 +11,7 @@
#include "base/memory/weak_ptr.h"
#include "chrome/browser/chromeos/input_method/input_method_engine.h"
#include "ui/base/ime/chromeos/ibus_bridge.h"
+#include "url/gurl.h"
namespace ui {
class KeyEvent;
@@ -153,6 +154,9 @@ class InputMethodEngineIBus : public InputMethodEngine,
// Used for making callbacks.
base::WeakPtrFactory<InputMethodEngineIBus> weak_ptr_factory_;
+
+ // Used for input view window.
+ GURL input_view_url_;
};
} // namespace chromeos
diff --git a/chromeos/ime/input_method_descriptor.h b/chromeos/ime/input_method_descriptor.h
index cec186b..b63b54f 100644
--- a/chromeos/ime/input_method_descriptor.h
+++ b/chromeos/ime/input_method_descriptor.h
@@ -35,6 +35,7 @@ class CHROMEOS_EXPORT InputMethodDescriptor {
return language_codes_;
}
const GURL& options_page_url() const { return options_page_url_; }
+ const GURL& input_view_url() const { return input_view_url_; }
const std::vector<std::string>& keyboard_layouts() const {
return keyboard_layouts_;
}
diff --git a/ui/keyboard/keyboard.gyp b/ui/keyboard/keyboard.gyp
index 7953ef9..4ea3b09 100644
--- a/ui/keyboard/keyboard.gyp
+++ b/ui/keyboard/keyboard.gyp
@@ -82,6 +82,7 @@
'../../content/content.gyp:content',
'../../skia/skia.gyp:skia',
'../../testing/gtest.gyp:gtest',
+ '../../url/url.gyp:url_lib',
'../aura/aura.gyp:aura',
'../aura/aura.gyp:aura_test_support',
'../compositor/compositor.gyp:compositor',
diff --git a/ui/keyboard/keyboard_controller.cc b/ui/keyboard/keyboard_controller.cc
index 537cf12..0cb975f 100644
--- a/ui/keyboard/keyboard_controller.cc
+++ b/ui/keyboard/keyboard_controller.cc
@@ -182,6 +182,10 @@ void KeyboardController::OnWindowHierarchyChanged(
OnTextInputStateChanged(proxy_->GetInputMethod()->GetTextInputClient());
}
+void KeyboardController::SetOverrideContentUrl(const GURL& url) {
+ proxy_->SetOverrideContentUrl(url);
+}
+
void KeyboardController::OnTextInputStateChanged(
const ui::TextInputClient* client) {
if (!container_.get())
diff --git a/ui/keyboard/keyboard_controller.h b/ui/keyboard/keyboard_controller.h
index 1daa296..45bba32 100644
--- a/ui/keyboard/keyboard_controller.h
+++ b/ui/keyboard/keyboard_controller.h
@@ -12,6 +12,7 @@
#include "ui/aura/window_observer.h"
#include "ui/base/ime/input_method_observer.h"
#include "ui/keyboard/keyboard_export.h"
+#include "url/gurl.h"
namespace aura {
class Window;
@@ -51,6 +52,10 @@ class KEYBOARD_EXPORT KeyboardController : public ui::InputMethodObserver,
// KeyboardController.
aura::Window* GetContainerWindow();
+ // Sets the override content url. This is used by for input view for extension
+ // IMEs.
+ void SetOverrideContentUrl(const GURL& url);
+
// Hides virtual keyboard and notifies observer bounds change.
// This function should be called with a delay to avoid layout flicker
// when the focus of input field quickly change. |automatic| is true when the
diff --git a/ui/keyboard/keyboard_controller_proxy.cc b/ui/keyboard/keyboard_controller_proxy.cc
index 1cfb99d..2d1bb4b 100644
--- a/ui/keyboard/keyboard_controller_proxy.cc
+++ b/ui/keyboard/keyboard_controller_proxy.cc
@@ -93,28 +93,46 @@ class KeyboardContentsDelegate : public content::WebContentsDelegate,
namespace keyboard {
-KeyboardControllerProxy::KeyboardControllerProxy() {
+KeyboardControllerProxy::KeyboardControllerProxy()
+ : default_url_(kKeyboardWebUIURL) {
}
KeyboardControllerProxy::~KeyboardControllerProxy() {
}
+const GURL& KeyboardControllerProxy::GetValidUrl() {
+ return override_url_.is_valid() ? override_url_ : default_url_;
+}
+
+void KeyboardControllerProxy::SetOverrideContentUrl(const GURL& url) {
+ if (override_url_ == url)
+ return;
+ override_url_ = url;
+
+ ReloadContents();
+}
+
+void KeyboardControllerProxy::ReloadContents() {
+ if (keyboard_contents_) {
+ content::OpenURLParams params(
+ GetValidUrl(),
+ content::Referrer(),
+ SINGLETON_TAB,
+ content::PAGE_TRANSITION_AUTO_TOPLEVEL,
+ false);
+ keyboard_contents_->OpenURL(params);
+ }
+}
+
aura::Window* KeyboardControllerProxy::GetKeyboardWindow() {
if (!keyboard_contents_) {
content::BrowserContext* context = GetBrowserContext();
- GURL url(kKeyboardWebUIURL);
keyboard_contents_.reset(content::WebContents::Create(
content::WebContents::CreateParams(context,
- content::SiteInstance::CreateForURL(context, url))));
+ content::SiteInstance::CreateForURL(context, GetValidUrl()))));
keyboard_contents_->SetDelegate(new KeyboardContentsDelegate(this));
SetupWebContents(keyboard_contents_.get());
-
- content::OpenURLParams params(url,
- content::Referrer(),
- SINGLETON_TAB,
- content::PAGE_TRANSITION_AUTO_TOPLEVEL,
- false);
- keyboard_contents_->OpenURL(params);
+ ReloadContents();
}
return keyboard_contents_->GetView()->GetNativeView();
diff --git a/ui/keyboard/keyboard_controller_proxy.h b/ui/keyboard/keyboard_controller_proxy.h
index 5358597..cdd870a 100644
--- a/ui/keyboard/keyboard_controller_proxy.h
+++ b/ui/keyboard/keyboard_controller_proxy.h
@@ -38,6 +38,9 @@ class KEYBOARD_EXPORT KeyboardControllerProxy {
// with the proxy.
virtual aura::Window* GetKeyboardWindow();
+ // Sets the override content url.
+ void SetOverrideContentUrl(const GURL& url);
+
// Gets the InputMethod that will provide notifications about changes in the
// text input context.
virtual ui::InputMethod* GetInputMethod() = 0;
@@ -74,6 +77,15 @@ class KEYBOARD_EXPORT KeyboardControllerProxy {
virtual void SetupWebContents(content::WebContents* contents);
private:
+ // Reloads the web contents to the valid url from GetValidUrl().
+ void ReloadContents();
+
+ // Gets the valid url from default url or override url.
+ const GURL& GetValidUrl();
+
+ const GURL default_url_;
+ GURL override_url_;
+
scoped_ptr<content::WebContents> keyboard_contents_;
DISALLOW_COPY_AND_ASSIGN(KeyboardControllerProxy);