1 // Copyright (c) 2012 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.
5 #include "xwalk/runtime/renderer/tizen/xwalk_render_view_ext_tizen.h"
10 #include "base/strings/utf_string_conversions.h"
11 #include "content/public/renderer/render_frame.h"
12 #include "content/public/renderer/render_view.h"
13 #include "third_party/WebKit/public/web/WebDocument.h"
14 #include "third_party/WebKit/public/web/WebLocalFrame.h"
15 #include "third_party/WebKit/public/web/WebScriptSource.h"
16 #include "third_party/WebKit/public/web/WebView.h"
17 #include "ui/events/keycodes/keyboard_codes_posix.h"
18 #include "xwalk/runtime/common/xwalk_common_messages.h"
21 std::string GenerateEventJs(const std::string& name) {
23 std::string defineJs =
24 "var event = new Event('tizenhwkey');"
25 "function defineProps(val) {"
26 " Object.defineProperty(event, 'keyName', {"
28 " configurable: false,"
33 std::string nameJs = "defineProps('" + name + "');";
34 std::string dispatchJs = "document.dispatchEvent(event);";
45 XWalkRenderViewExtTizen::XWalkRenderViewExtTizen(
46 content::RenderView* render_view)
47 : content::RenderViewObserver(render_view) {
48 render_view_ = render_view;
52 XWalkRenderViewExtTizen::~XWalkRenderViewExtTizen() {
56 void XWalkRenderViewExtTizen::RenderViewCreated(
57 content::RenderView* render_view) {
58 new XWalkRenderViewExtTizen(render_view); // |render_view| takes ownership.
61 bool XWalkRenderViewExtTizen::OnMessageReceived(const IPC::Message& message) {
63 IPC_BEGIN_MESSAGE_MAP(XWalkRenderViewExtTizen, message)
64 IPC_MESSAGE_HANDLER(ViewMsg_HWKeyPressed,
66 IPC_MESSAGE_UNHANDLED(handled = false)
71 void XWalkRenderViewExtTizen::OnHWKeyPressed(int keycode) {
72 std::string event_name;
73 if (keycode == ui::VKEY_BACK) {
75 } else if (keycode == ui::VKEY_HOME) {
78 LOG(INFO) << "Unknown input key code, only support 'back' & 'menu'"
83 content::RenderFrame* render_frame = render_view_->GetMainRenderFrame();
84 blink::WebLocalFrame* web_frame = render_frame->GetWebFrame();
85 blink::WebScriptSource source =
86 blink::WebScriptSource(base::ASCIIToUTF16(GenerateEventJs(event_name)));
87 web_frame->executeScript(source);