Index: athena/virtual_keyboard/virtual_keyboard_bindings_impl.cc |
diff --git a/athena/virtual_keyboard/virtual_keyboard_bindings_impl.cc b/athena/virtual_keyboard/virtual_keyboard_bindings_impl.cc |
deleted file mode 100644 |
index 85fe5f52a125d9bd7595834c6d35eb5b1f43e018..0000000000000000000000000000000000000000 |
--- a/athena/virtual_keyboard/virtual_keyboard_bindings_impl.cc |
+++ /dev/null |
@@ -1,202 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "athena/virtual_keyboard/public/virtual_keyboard_bindings.h" |
- |
-#include "base/json/json_string_value_serializer.h" |
-#include "base/logging.h" |
-#include "base/macros.h" |
-#include "base/strings/stringprintf.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/values.h" |
-#include "content/public/common/bindings_policy.h" |
-#include "content/public/renderer/render_frame.h" |
-#include "content/public/renderer/render_view.h" |
-#include "content/public/renderer/render_view_observer.h" |
-#include "gin/handle.h" |
-#include "gin/object_template_builder.h" |
-#include "gin/wrappable.h" |
-#include "third_party/WebKit/public/web/WebKit.h" |
-#include "third_party/WebKit/public/web/WebLocalFrame.h" |
-#include "ui/keyboard/keyboard_constants.h" |
- |
-namespace { |
- |
-struct VKEvent { |
- std::string event_type; |
- int char_value; |
- int key_code; |
- std::string key_name; |
- int modifiers; |
-}; |
- |
-} // namespace |
- |
-namespace gin { |
- |
-template <> |
-struct Converter<VKEvent> { |
- static bool FromV8(v8::Isolate* isolate, |
- v8::Handle<v8::Value> val, |
- VKEvent* event) { |
- if (!val->IsObject()) |
- return false; |
- v8::Handle<v8::Object> dict(v8::Handle<v8::Object>::Cast(val)); |
- |
- if (!Converter<std::string>::FromV8( |
- isolate, |
- dict->Get(v8::String::NewFromUtf8(isolate, "type")), |
- &event->event_type)) |
- return false; |
- if (!Converter<int32_t>::FromV8( |
- isolate, |
- dict->Get(v8::String::NewFromUtf8(isolate, "charValue")), |
- &event->char_value)) |
- return false; |
- if (!Converter<int32_t>::FromV8( |
- isolate, |
- dict->Get(v8::String::NewFromUtf8(isolate, "keyCode")), |
- &event->key_code)) |
- return false; |
- if (!Converter<std::string>::FromV8( |
- isolate, |
- dict->Get(v8::String::NewFromUtf8(isolate, "keyName")), |
- &event->key_name)) |
- return false; |
- if (!Converter<int32_t>::FromV8( |
- isolate, |
- dict->Get(v8::String::NewFromUtf8(isolate, "modifiers")), |
- &event->modifiers)) |
- return false; |
- |
- return true; |
- } |
-}; |
- |
-} // namespace gin |
- |
-namespace athena { |
- |
-namespace { |
- |
-class VKBindings : public gin::Wrappable<VKBindings> { |
- public: |
- static gin::WrapperInfo kWrapperInfo; |
- |
- static void Install(content::RenderView* render_view) { |
- blink::WebFrame* web_frame = |
- render_view->GetMainRenderFrame()->GetWebFrame(); |
- v8::Isolate* isolate = blink::mainThreadIsolate(); |
- v8::HandleScope handle_scope(isolate); |
- v8::Handle<v8::Context> context = web_frame->mainWorldScriptContext(); |
- if (context.IsEmpty()) |
- return; |
- |
- v8::Context::Scope context_scope(context); |
- |
- v8::Handle<v8::Object> global = context->Global(); |
- v8::Handle<v8::Object> chrome = |
- global->Get(gin::StringToV8(isolate, "chrome"))->ToObject(); |
- CHECK(!chrome.IsEmpty()); |
- |
- gin::Handle<VKBindings> controller = |
- gin::CreateHandle(isolate, new VKBindings(render_view)); |
- if (controller.IsEmpty()) |
- return; |
- chrome->Set(gin::StringToSymbol(isolate, "virtualKeyboardPrivate"), |
- controller.ToV8()); |
- |
- const std::string kInputBoxFocusedEvent = |
- "chrome.virtualKeyboardPrivate.onTextInputBoxFocused = {};" |
- "chrome.virtualKeyboardPrivate.onTextInputBoxFocused.addListener = " |
- " function(callback) { " |
- " window.setTimeout(function() {" |
- " callback({type: 'text'});" |
- " }, 100);" |
- " };"; |
- render_view->GetMainRenderFrame()->ExecuteJavaScript( |
- base::UTF8ToUTF16(kInputBoxFocusedEvent)); |
- } |
- |
- private: |
- explicit VKBindings(content::RenderView* render_view) |
- : render_view_(render_view) {} |
- virtual ~VKBindings() {} |
- |
- // gin::WrappableBase |
- virtual gin::ObjectTemplateBuilder GetObjectTemplateBuilder( |
- v8::Isolate* isolate) OVERRIDE { |
- return gin::Wrappable<VKBindings>::GetObjectTemplateBuilder(isolate) |
- .SetMethod("moveCursor", &VKBindings::NotImplemented) |
- .SetMethod("sendKeyEvent", &VKBindings::SendKeyEvent) |
- .SetMethod("hideKeyboard", &VKBindings::HideKeyboard) |
- .SetMethod("lockKeyboard", &VKBindings::NotImplemented) |
- .SetMethod("keyboardLoaded", &VKBindings::NotImplemented) |
- .SetMethod("getKeyboardConfig", &VKBindings::NotImplemented); |
- } |
- |
- void SendKeyEvent(gin::Arguments* args) { |
- VKEvent event; |
- if (!args->GetNext(&event)) { |
- LOG(ERROR) << "Failed to get the type"; |
- return; |
- } |
- base::ListValue params; |
- params.Set(0, new base::StringValue(event.event_type)); |
- params.Set(1, new base::FundamentalValue(event.char_value)); |
- params.Set(2, new base::FundamentalValue(event.key_code)); |
- params.Set(3, new base::StringValue(event.key_name)); |
- params.Set(4, new base::FundamentalValue(event.modifiers)); |
- |
- std::string params_json; |
- JSONStringValueSerializer serializer(¶ms_json); |
- if (!serializer.Serialize(params)) |
- return; |
- |
- render_view_->GetMainRenderFrame()->ExecuteJavaScript( |
- base::UTF8ToUTF16("chrome.send('sendKeyEvent', " + params_json + ")")); |
- } |
- |
- void HideKeyboard() { |
- render_view_->GetMainRenderFrame()->ExecuteJavaScript( |
- base::UTF8ToUTF16("chrome.send('hideKeyboard', [])")); |
- } |
- |
- void NotImplemented(gin::Arguments* args) { NOTIMPLEMENTED(); } |
- |
- content::RenderView* render_view_; |
- |
- DISALLOW_COPY_AND_ASSIGN(VKBindings); |
-}; |
- |
-gin::WrapperInfo VKBindings::kWrapperInfo = {gin::kEmbedderNativeGin}; |
- |
-class VirtualKeyboardBindingsImpl : public VirtualKeyboardBindings, |
- public content::RenderViewObserver { |
- public: |
- explicit VirtualKeyboardBindingsImpl(content::RenderView* render_view) |
- : content::RenderViewObserver(render_view) {} |
- |
- virtual ~VirtualKeyboardBindingsImpl() {} |
- |
- private: |
- // content::RenderViewObserver: |
- virtual void Navigate(const GURL& url) OVERRIDE { |
- bool enabled_bindings = render_view()->GetEnabledBindings(); |
- if (!(enabled_bindings & content::BINDINGS_POLICY_WEB_UI)) |
- return; |
- if (url.GetOrigin() == GURL(keyboard::kKeyboardURL)) |
- VKBindings::Install(render_view()); |
- } |
- DISALLOW_COPY_AND_ASSIGN(VirtualKeyboardBindingsImpl); |
-}; |
- |
-} // namespace |
- |
-VirtualKeyboardBindings* VirtualKeyboardBindings::Create( |
- content::RenderView* render_view) { |
- return new VirtualKeyboardBindingsImpl(render_view); |
-} |
- |
-} // namespace athena |