1 From c1f83116854209a14f7c7fde0b6851297b584c3b Mon Sep 17 00:00:00 2001
2 From: Dongseong Hwang <dongseong.hwang@intel.com>
3 Date: Mon, 22 Jul 2013 19:49:15 +0300
4 Subject: [PATCH 09/33] Implement focus handling of delegate.
6 There are two important delegate functions that allow embedder control focus.
7 1. WebContentsViewDelegate::Focus() : time to focus in web contents widget.
8 2. WebContentsDelegate::TakeFocus() : time to focus out web contents widget and
9 focus in next widget in toolkit framework.
11 .../renderer_host/render_widget_host_view_efl.cc | 27 +++++++++----
12 .../browser/web_contents/web_contents_view_efl.cc | 10 +++--
13 .../browser/web_contents/web_contents_view_efl.h | 1 +
14 .../public/browser/web_contents_view_delegate.h | 2 +
15 content/shell/DEPS | 3 ++
16 content/shell/shell.cc | 6 +++
17 content/shell/shell.h | 2 +
18 content/shell/shell_efl.cc | 10 +++++
19 content/shell/shell_web_contents_view_delegate.h | 1 +
20 .../shell/shell_web_contents_view_delegate_efl.cc | 9 +++++
21 efl_webview/efl_webview.gyp | 4 ++
22 efl_webview/examples/main.cc | 4 +-
23 efl_webview/lib/content_browser_client_xwalk.cc | 8 ++++
24 efl_webview/lib/content_browser_client_xwalk.h | 2 +
25 efl_webview/lib/web_contents_delegate_xwalk.cc | 36 +++++++++++++++++
26 efl_webview/lib/web_contents_delegate_xwalk.h | 35 ++++++++++++++++
27 .../lib/web_contents_view_delegate_xwalk.cc | 40 +++++++++++++++++++
28 efl_webview/lib/web_contents_view_delegate_xwalk.h | 40 +++++++++++++++++++
29 efl_webview/lib/webview.cc | 46 ++++++----------------
30 19 files changed, 241 insertions(+), 45 deletions(-)
31 create mode 100644 efl_webview/lib/web_contents_delegate_xwalk.cc
32 create mode 100644 efl_webview/lib/web_contents_delegate_xwalk.h
33 create mode 100644 efl_webview/lib/web_contents_view_delegate_xwalk.cc
34 create mode 100644 efl_webview/lib/web_contents_view_delegate_xwalk.h
36 diff --git a/content/browser/renderer_host/render_widget_host_view_efl.cc b/content/browser/renderer_host/render_widget_host_view_efl.cc
37 index 9858418..22b1967 100644
38 --- a/content/browser/renderer_host/render_widget_host_view_efl.cc
39 +++ b/content/browser/renderer_host/render_widget_host_view_efl.cc
40 @@ -131,10 +131,19 @@ void RenderWidgetHostViewEfl::PreserveWindowKeyUp(Evas_Event_Key_Up* key_up) {
43 void RenderWidgetHostViewEfl::PreserveWindowFocusIn() {
44 + ShowCurrentCursor();
49 + host_->SetActive(true);
52 void RenderWidgetHostViewEfl::PreserveWindowFocusOut() {
53 -// root_window_host_delegate_->OnHostLostMouseGrab();
54 + if (host_ && !IsShowingContextMenu()) {
55 + host_->SetActive(false);
60 void RenderWidgetHostViewEfl::PreserveWindowShow() {
61 @@ -148,11 +157,15 @@ void RenderWidgetHostViewEfl::PreserveWindowMove(const gfx::Point& origin) {
64 void RenderWidgetHostViewEfl::PreserveWindowResize(const gfx::Size& size) {
71 void RenderWidgetHostViewEfl::PreserveWindowRepaint(const gfx::Rect& damage_rect) {
78 bool RenderWidgetHostViewEfl::OnMessageReceived(const IPC::Message& message) {
79 @@ -169,12 +182,10 @@ bool RenderWidgetHostViewEfl::OnMessageReceived(const IPC::Message& message) {
81 void RenderWidgetHostViewEfl::InitAsChild(
82 gfx::NativeView parent_view) {
83 - Evas_Object* elm_box = reinterpret_cast<Evas_Object*>(parent_view);
84 - Evas* evas = evas_object_evas_get(elm_box);
85 - preserve_window_ = gfx::PreserveWindow::Create(this, evas);
86 + preserve_window_ = gfx::PreserveWindow::Create(this, evas_object_evas_get(parent_view));
87 evas_object_size_hint_align_set(preserve_window_->SmartObject(), EVAS_HINT_FILL, EVAS_HINT_FILL);
88 evas_object_size_hint_weight_set(preserve_window_->SmartObject(), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
89 - elm_box_pack_end(elm_box, preserve_window_->SmartObject());
90 + elm_box_pack_end(parent_view, preserve_window_->SmartObject());
91 evas_object_show(preserve_window_->SmartObject());
92 compositing_surface_ = elm_win_xwindow_get(preserve_window_->EvasWindow());
94 @@ -241,7 +252,7 @@ void RenderWidgetHostViewEfl::SetBounds(const gfx::Rect& rect) {
97 gfx::NativeView RenderWidgetHostViewEfl::GetNativeView() const {
98 - return reinterpret_cast<gfx::NativeView>(preserve_window_->SmartObject());
99 + return preserve_window_->SmartObject();
102 gfx::NativeViewId RenderWidgetHostViewEfl::GetNativeViewId() const {
103 diff --git a/content/browser/web_contents/web_contents_view_efl.cc b/content/browser/web_contents/web_contents_view_efl.cc
104 index ccdfbf3..3885d0b 100644
105 --- a/content/browser/web_contents/web_contents_view_efl.cc
106 +++ b/content/browser/web_contents/web_contents_view_efl.cc
107 @@ -70,7 +70,9 @@ void WebContentsViewEfl::OnTabCrashed(base::TerminationStatus status,
110 void WebContentsViewEfl::Focus() {
113 + delegate_->Focus();
117 void WebContentsViewEfl::SetInitialFocus() {
118 @@ -110,7 +112,7 @@ RenderWidgetHostView* WebContentsViewEfl::CreateViewForWidget(
120 RenderWidgetHostView* view =
121 RenderWidgetHostView::CreateViewForWidget(render_widget_host);
122 - view->InitAsChild(reinterpret_cast<gfx::NativeView>(view_container_box_));
123 + view->InitAsChild(view_container_box_);
124 if (render_widget_host->IsRenderView()) {
125 RenderViewHost* rvh = RenderViewHost::From(render_widget_host);
126 if (!static_cast<RenderViewHostImpl*>(rvh)->is_swapped_out())
127 @@ -158,7 +160,9 @@ void WebContentsViewEfl::GotFocus() {
128 // This is called when the renderer asks us to take focus back (i.e., it has
129 // iterated past the last focusable element on the page).
130 void WebContentsViewEfl::TakeFocus(bool reverse) {
131 - /* TODO: Assign Focus to EFL evas_object */
132 + if (!web_contents_->GetDelegate())
134 + web_contents_->GetDelegate()->TakeFocus(web_contents_, reverse);
137 void WebContentsViewEfl::UpdateDragDest(RenderViewHost* host) {
138 diff --git a/content/browser/web_contents/web_contents_view_efl.h b/content/browser/web_contents/web_contents_view_efl.h
139 index 3c6d2f6..e481009 100644
140 --- a/content/browser/web_contents/web_contents_view_efl.h
141 +++ b/content/browser/web_contents/web_contents_view_efl.h
142 @@ -81,6 +81,7 @@ class CONTENT_EXPORT WebContentsViewEfl
143 virtual void TakeFocus(bool reverse) OVERRIDE;
145 void SetViewContainerBox(Evas_Object* container_box) { view_container_box_ = container_box; }
146 + Evas_Object* ViewContainerBox() { return view_container_box_; }
149 void UpdateDragDest(RenderViewHost* new_host);
150 diff --git a/content/public/browser/web_contents_view_delegate.h b/content/public/browser/web_contents_view_delegate.h
151 index 605582b..aec9701 100644
152 --- a/content/public/browser/web_contents_view_delegate.h
153 +++ b/content/public/browser/web_contents_view_delegate.h
154 @@ -81,6 +81,8 @@ class CONTENT_EXPORT WebContentsViewDelegate {
155 virtual NSObject<RenderWidgetHostViewMacDelegate>*
156 CreateRenderWidgetHostViewDelegate(
157 RenderWidgetHost* render_widget_host) = 0;
158 +#elif defined(TOOLKIT_EFL)
159 + virtual void Focus() = 0;
163 diff --git a/content/shell/DEPS b/content/shell/DEPS
164 index 64bcfea..08bdc07 100644
165 --- a/content/shell/DEPS
166 +++ b/content/shell/DEPS
167 @@ -8,6 +8,9 @@ include_rules = [
168 # content's public API.
171 + # content/shell/shell_web_contents_view_delegate_efl.cc illegally include "content/browser/web_contents/web_contents_view_efl.h"
172 + "+content/browser",
174 # The content_shell is an embedder so it must work with resource bundles.
177 diff --git a/content/shell/shell.cc b/content/shell/shell.cc
178 index 5eac7af..9e6576e 100644
179 --- a/content/shell/shell.cc
180 +++ b/content/shell/shell.cc
181 @@ -309,6 +309,12 @@ void Shell::DeactivateContents(WebContents* contents) {
182 contents->GetRenderViewHost()->Blur();
185 +#if !defined(TOOLKIT_EFL)
186 +bool Shell::TakeFocus(WebContents* source, bool reverse) {
191 void Shell::Observe(int type,
192 const NotificationSource& source,
193 const NotificationDetails& details) {
194 diff --git a/content/shell/shell.h b/content/shell/shell.h
195 index e58bb42..2d9ba10 100644
196 --- a/content/shell/shell.h
197 +++ b/content/shell/shell.h
198 @@ -144,6 +144,8 @@ class Shell : public WebContentsDelegate,
199 virtual void RendererUnresponsive(WebContents* source) OVERRIDE;
200 virtual void ActivateContents(WebContents* contents) OVERRIDE;
201 virtual void DeactivateContents(WebContents* contents) OVERRIDE;
202 + virtual bool TakeFocus(content::WebContents* source,
203 + bool reverse) OVERRIDE;
207 diff --git a/content/shell/shell_efl.cc b/content/shell/shell_efl.cc
208 index 557424e..e4ec4e5 100644
209 --- a/content/shell/shell_efl.cc
210 +++ b/content/shell/shell_efl.cc
211 @@ -105,4 +105,14 @@ void Shell::OnMainWindowDel(void* data, Evas* evas, Evas_Object* object,
215 +bool Shell::TakeFocus(WebContents* source, bool reverse) {
216 + DCHECK(source == web_contents_.get());
217 + WebContentsView* content_view = web_contents_->GetView();
218 + Evas_Object* view_box =
219 + static_cast<WebContentsViewEfl*>(content_view)->ViewContainerBox();
220 + elm_object_focus_next(view_box,
221 + reverse ? ELM_FOCUS_PREVIOUS : ELM_FOCUS_NEXT);
225 } // namespace content
226 diff --git a/content/shell/shell_web_contents_view_delegate.h b/content/shell/shell_web_contents_view_delegate.h
227 index 283f37f..8352438 100644
228 --- a/content/shell/shell_web_contents_view_delegate.h
229 +++ b/content/shell/shell_web_contents_view_delegate.h
230 @@ -26,6 +26,7 @@ class ShellWebContentsViewDelegate : public WebContentsViewDelegate {
231 virtual void ShowContextMenu(const ContextMenuParams& params,
232 ContextMenuSourceType type) OVERRIDE;
233 virtual WebDragDestDelegate* GetDragDestDelegate() OVERRIDE;
234 + virtual void Focus() OVERRIDE;
236 #if defined(TOOLKIT_GTK)
237 virtual void Initialize(GtkWidget* expanded_container,
238 diff --git a/content/shell/shell_web_contents_view_delegate_efl.cc b/content/shell/shell_web_contents_view_delegate_efl.cc
239 index 18498f3..60aaa16 100644
240 --- a/content/shell/shell_web_contents_view_delegate_efl.cc
241 +++ b/content/shell/shell_web_contents_view_delegate_efl.cc
244 #include "content/shell/shell_web_contents_view_delegate.h"
246 +#include <Elementary.h>
247 #include "base/command_line.h"
248 +#include "content/browser/web_contents/web_contents_view_efl.h"
249 #include "content/public/browser/render_process_host.h"
250 #include "content/public/browser/render_view_host.h"
251 #include "content/public/browser/render_widget_host_view.h"
252 @@ -48,4 +50,11 @@ WebDragDestDelegate* ShellWebContentsViewDelegate::GetDragDestDelegate() {
256 +void ShellWebContentsViewDelegate::Focus() {
257 + WebContentsView* content_view = web_contents_->GetView();
258 + Evas_Object* view_box =
259 + static_cast<WebContentsViewEfl*>(content_view)->ViewContainerBox();
260 + elm_object_focus_set(view_box, EINA_TRUE);
263 } // namespace content
264 diff --git a/efl_webview/efl_webview.gyp b/efl_webview/efl_webview.gyp
265 index f6b959f..f49badd 100644
266 --- a/efl_webview/efl_webview.gyp
267 +++ b/efl_webview/efl_webview.gyp
269 'lib/message_pump_xwalk.h',
270 'lib/process_main.cc',
271 'lib/process_main.h',
272 + 'lib/web_contents_delegate_xwalk.cc',
273 + 'lib/web_contents_delegate_xwalk.h',
274 + 'lib/web_contents_view_delegate_xwalk.cc',
275 + 'lib/web_contents_view_delegate_xwalk.h',
276 'lib/web_runtime_context.cc',
277 'lib/web_runtime_context.h',
279 diff --git a/efl_webview/examples/main.cc b/efl_webview/examples/main.cc
280 index f69ad43..a41c986 100644
281 --- a/efl_webview/examples/main.cc
282 +++ b/efl_webview/examples/main.cc
283 @@ -41,6 +41,8 @@ static void window_create()
285 Evas_Object* elm_window = elm_win_util_standard_add("efl-webview-window", APP_NAME);
286 elm_win_autodel_set(elm_window, EINA_TRUE);
287 + elm_object_focus_allow_set(elm_window, EINA_TRUE);
288 + elm_win_focus_highlight_enabled_set(elm_window, EINA_TRUE);
290 /* Create vertical layout */
291 Evas_Object* vertical_layout = elm_box_add(elm_window);
292 @@ -87,7 +89,7 @@ static void window_create()
293 evas_object_size_hint_weight_set(webview, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
294 evas_object_size_hint_align_set(webview, EVAS_HINT_FILL, EVAS_HINT_FILL);
295 elm_box_pack_end(vertical_layout, webview);
296 - evas_object_focus_set(webview, EINA_TRUE);
297 + elm_object_focus_set(webview, EINA_TRUE);
298 evas_object_show(webview);
300 evas_object_smart_callback_add(back_button, "clicked",
301 diff --git a/efl_webview/lib/content_browser_client_xwalk.cc b/efl_webview/lib/content_browser_client_xwalk.cc
302 index b640320..cc2269e 100644
303 --- a/efl_webview/lib/content_browser_client_xwalk.cc
304 +++ b/efl_webview/lib/content_browser_client_xwalk.cc
306 #include "efl_webview/lib/content_browser_client_xwalk.h"
308 #include "content/public/browser/browser_main_parts.h"
309 +#include "content/public/browser/web_contents.h"
310 #include "content/public/common/main_function_params.h"
311 #include "efl_webview/lib/browser_context_xwalk.h"
312 +#include "efl_webview/lib/web_contents_view_delegate_xwalk.h"
313 #include "efl_webview/lib/web_runtime_context.h"
316 @@ -59,4 +61,10 @@ net::URLRequestContextGetter* ContentBrowserClientXWalk::CreateRequestContext(
317 CreateRequestContext(protocol_handlers);
320 +content::WebContentsViewDelegate*
321 + ContentBrowserClientXWalk::GetWebContentsViewDelegate(
322 + content::WebContents* web_contents) {
323 + return new WebContentsViewDelegateXWalk(web_contents);
327 diff --git a/efl_webview/lib/content_browser_client_xwalk.h b/efl_webview/lib/content_browser_client_xwalk.h
328 index c5c235d..a8ff6ae 100644
329 --- a/efl_webview/lib/content_browser_client_xwalk.h
330 +++ b/efl_webview/lib/content_browser_client_xwalk.h
331 @@ -19,6 +19,8 @@ class ContentBrowserClientXWalk : public content::ContentBrowserClient {
332 virtual net::URLRequestContextGetter* CreateRequestContext(
333 content::BrowserContext* browser_context,
334 content::ProtocolHandlerMap* protocol_handlers) OVERRIDE;
335 + virtual content::WebContentsViewDelegate* GetWebContentsViewDelegate(
336 + content::WebContents* web_contents) OVERRIDE;
339 DISALLOW_COPY_AND_ASSIGN(ContentBrowserClientXWalk);
340 diff --git a/efl_webview/lib/web_contents_delegate_xwalk.cc b/efl_webview/lib/web_contents_delegate_xwalk.cc
342 index 0000000..a6cb3a3
344 +++ b/efl_webview/lib/web_contents_delegate_xwalk.cc
346 +// Copyright (c) 2013 Intel Corporation. All rights reserved.
347 +// Use of this source code is governed by a BSD-style license that can be
348 +// found in the LICENSE file.
350 +#include "efl_webview/lib/web_contents_delegate_xwalk.h"
352 +#include <Elementary.h>
353 +#include "content/public/browser/web_contents.h"
354 +#include "efl_webview/lib/web_contents_view_delegate_xwalk.h"
359 +const int g_window_width = 800;
360 +const int g_window_height = 600;
363 +WebContentsDelegateXWalk::WebContentsDelegateXWalk(
364 + content::BrowserContext* browser_context, Evas_Object* view_box)
365 + : view_box_(view_box)
367 + content::WebContents::CreateParams create_params(browser_context, 0);
368 + create_params.initial_size = gfx::Size(g_window_width, g_window_height);
370 + web_contents_.reset(content::WebContents::Create(create_params));
371 + web_contents_->SetDelegate(this);
374 +bool WebContentsDelegateXWalk::TakeFocus(
375 + content::WebContents* source, bool reverse) {
376 + elm_object_focus_next(view_box_,
377 + reverse ? ELM_FOCUS_PREVIOUS : ELM_FOCUS_NEXT);
381 +} // namespace xwalk
382 diff --git a/efl_webview/lib/web_contents_delegate_xwalk.h b/efl_webview/lib/web_contents_delegate_xwalk.h
384 index 0000000..182d2e8
386 +++ b/efl_webview/lib/web_contents_delegate_xwalk.h
388 +// Copyright (c) 2013 Intel Corporation. All rights reserved.
389 +// Use of this source code is governed by a BSD-style license that can be
390 +// found in the LICENSE file.
392 +#ifndef EFL_WEBVIEW_LIB_WEB_CONTENTS_DELEGATE_XWALK_H_
393 +#define EFL_WEBVIEW_LIB_WEB_CONTENTS_DELEGATE_XWALK_H_
397 +#include "base/memory/scoped_ptr.h"
398 +#include "content/public/browser/web_contents_delegate.h"
401 +class WebContentsViewDelegate;
406 +class WebContentsDelegateXWalk : public content::WebContentsDelegate
409 + WebContentsDelegateXWalk(content::BrowserContext*, Evas_Object*);
410 + virtual bool TakeFocus(content::WebContents* source,
411 + bool reverse) OVERRIDE;
413 + content::WebContents* WebContents() { return web_contents_.get(); }
416 + Evas_Object* view_box_;
417 + scoped_ptr<content::WebContents> web_contents_;
420 +} // namespace xwalk
422 +#endif // EFL_WEBVIEW_LIB_WEB_CONTENTS_DELEGATE_XWALK_H_
423 diff --git a/efl_webview/lib/web_contents_view_delegate_xwalk.cc b/efl_webview/lib/web_contents_view_delegate_xwalk.cc
425 index 0000000..40b59f7
427 +++ b/efl_webview/lib/web_contents_view_delegate_xwalk.cc
429 +// Copyright (c) 2013 Intel Corporation. All rights reserved.
430 +// Use of this source code is governed by a BSD-style license that can be
431 +// found in the LICENSE file.
433 +#include "efl_webview/lib/web_contents_view_delegate_xwalk.h"
435 +#include <Elementary.h>
439 +WebContentsViewDelegateXWalk::WebContentsViewDelegateXWalk(
440 + content::WebContents* web_contents)
441 + : web_contents_(web_contents)
442 + , view_box_(NULL) {
445 +WebContentsViewDelegateXWalk::~WebContentsViewDelegateXWalk() {
448 +void WebContentsViewDelegateXWalk::Focus() {
451 + elm_object_focus_set(view_box_, EINA_TRUE);
454 +void WebContentsViewDelegateXWalk::ShowContextMenu(
455 + const content::ContextMenuParams& params,
456 + content::ContextMenuSourceType type) {
459 +content::WebDragDestDelegate*
460 + WebContentsViewDelegateXWalk::GetDragDestDelegate() {
464 +void WebContentsViewDelegateXWalk::SetViewContainerBox(Evas_Object* view_box) {
465 + view_box_ = view_box;
468 +} // namespace xwalk
469 diff --git a/efl_webview/lib/web_contents_view_delegate_xwalk.h b/efl_webview/lib/web_contents_view_delegate_xwalk.h
471 index 0000000..d5df813
473 +++ b/efl_webview/lib/web_contents_view_delegate_xwalk.h
475 +// Copyright (c) 2013 Intel Corporation. All rights reserved.
476 +// Use of this source code is governed by a BSD-style license that can be
477 +// found in the LICENSE file.
479 +#ifndef EFL_WEBVIEW_LIB_WEB_CONTENTS_VIEW_DELEGATE_XWALK_H_
480 +#define EFL_WEBVIEW_LIB_WEB_CONTENTS_VIEW_DELEGATE_XWALK_H_
482 +#include "base/compiler_specific.h"
483 +#include "content/public/browser/web_contents_view_delegate.h"
491 +class WebContentsViewDelegateXWalk : public content::WebContentsViewDelegate {
493 + explicit WebContentsViewDelegateXWalk(content::WebContents*);
494 + virtual ~WebContentsViewDelegateXWalk();
496 + // Overridden from WebContentsViewDelegate:
497 + virtual void ShowContextMenu(
498 + const content::ContextMenuParams& params,
499 + content::ContextMenuSourceType type) OVERRIDE;
500 + virtual content::WebDragDestDelegate* GetDragDestDelegate() OVERRIDE;
501 + virtual void Focus() OVERRIDE;
503 + void SetViewContainerBox(Evas_Object*);
506 + content::WebContents* web_contents_;
507 + Evas_Object* view_box_;
509 + DISALLOW_COPY_AND_ASSIGN(WebContentsViewDelegateXWalk);
512 +} // namespace xwalk
514 +#endif // EFL_WEBVIEW_LIB_WEB_CONTENTS_VIEW_DELEGATE_XWALK_H_
515 diff --git a/efl_webview/lib/webview.cc b/efl_webview/lib/webview.cc
516 index 33b00de..061d30c 100644
517 --- a/efl_webview/lib/webview.cc
518 +++ b/efl_webview/lib/webview.cc
520 #include "base/files/file_path.h"
521 #include "content/browser/web_contents/web_contents_view_efl.h"
522 #include "content/public/browser/web_contents.h"
523 -#include "content/public/browser/web_contents_delegate.h"
524 +#include "efl_webview/lib/web_contents_delegate_xwalk.h"
525 +#include "efl_webview/lib/web_contents_view_delegate_xwalk.h"
526 #include "efl_webview/lib/web_runtime_context.h"
527 #include "net/base/net_util.h"
532 -const int g_window_width = 800;
533 -const int g_window_height = 600;
535 -class WebContentsDelegateXWalk : public content::WebContentsDelegate
538 - explicit WebContentsDelegateXWalk(content::BrowserContext*);
539 - content::WebContents* WebContents() { return web_contents_.get(); }
542 - scoped_ptr<content::WebContents> web_contents_;
545 -WebContentsDelegateXWalk::WebContentsDelegateXWalk(
546 - content::BrowserContext* browser_context)
548 - content::WebContents::CreateParams create_params(browser_context, 0);
549 - create_params.initial_size = gfx::Size(g_window_width, g_window_height);
551 - web_contents_.reset(content::WebContents::Create(create_params));
552 - web_contents_->SetDelegate(this);
557 struct WebView::Private {
558 Evas_Object* root_window;
559 Evas_Object* view_box;
560 @@ -82,16 +57,21 @@ WebView::WebView(Evas_Object* root_window)
563 private_->root_window = root_window;
564 + private_->view_box = elm_box_add(private_->root_window);
565 + elm_object_focus_allow_set(private_->view_box, EINA_TRUE);
567 private_->context = WebRuntimeContext::current();
568 content::BrowserContext* browser_context =
569 private_->context->BrowserContext();
570 private_->webContentsDelegate.reset(
571 - new WebContentsDelegateXWalk(browser_context));
573 - private_->view_box = elm_box_add(private_->root_window);
574 - content::WebContentsView* content_view =
575 - private_->webContentsDelegate->WebContents()->GetView();
576 - static_cast<content::WebContentsViewEfl*>(content_view)->
577 + new WebContentsDelegateXWalk(browser_context, private_->view_box));
579 + content::WebContentsViewEfl* content_view =
580 + static_cast<content::WebContentsViewEfl*>(private_->
581 + webContentsDelegate->WebContents()->GetView());
582 + // FIXME: Don't pass elm_box to WebContentsViewEfl. Need focus handling of PreserveWindow evas object here.
583 + content_view->SetViewContainerBox(private_->view_box);
584 + static_cast<WebContentsViewDelegateXWalk*>(content_view->delegate())->
585 SetViewContainerBox(private_->view_box);
587 LoadURL(WebView::Private::s_startup_url);