1 From 43ebc6ad31d9467c443ee9e5ed9ccf8423cca1b5 Mon Sep 17 00:00:00 2001
2 From: Dongseong Hwang <dongseong.hwang@intel.com>
3 Date: Wed, 31 Jul 2013 15:51:45 +0300
4 Subject: [PATCH 14/33] Use WebContentsViewDelegate::GetNativeView() instead of
5 making redundant WebContentsViewEfl::SetViewContainerBox().
7 An embeder already can pass a container view to WebContentsView via
8 WebContentsViewDelegate, but we added redundant SetViewContainerBox() to pass a
10 This patch removes WebContentsViewEfl::SetViewContainerBox() and uses
11 WebContentsViewDelegate::GetNativeView().
13 .../renderer_host/render_widget_host_view_efl.cc | 9 ++++++---
14 .../browser/web_contents/web_contents_view_efl.cc | 21 ++++++++++++++-------
15 .../browser/web_contents/web_contents_view_efl.h | 7 -------
16 .../public/browser/web_contents_view_delegate.h | 1 +
17 content/shell/shell.cc | 2 ++
18 content/shell/shell.h | 1 +
19 content/shell/shell_efl.cc | 22 ++++++++++++----------
20 content/shell/shell_web_contents_view_delegate.h | 5 +++++
21 .../shell/shell_web_contents_view_delegate_efl.cc | 18 ++++++++++++------
22 .../lib/web_contents_view_delegate_xwalk.cc | 14 +++++++++-----
23 efl_webview/lib/web_contents_view_delegate_xwalk.h | 5 +++--
24 efl_webview/lib/webview.cc | 3 +--
25 12 files changed, 66 insertions(+), 42 deletions(-)
27 diff --git a/content/browser/renderer_host/render_widget_host_view_efl.cc b/content/browser/renderer_host/render_widget_host_view_efl.cc
28 index 76b19f3..67dc2dd 100644
29 --- a/content/browser/renderer_host/render_widget_host_view_efl.cc
30 +++ b/content/browser/renderer_host/render_widget_host_view_efl.cc
31 @@ -200,9 +200,12 @@ bool RenderWidgetHostViewEfl::OnMessageReceived(const IPC::Message& message) {
33 void RenderWidgetHostViewEfl::InitAsChild(
34 gfx::NativeView parent_view) {
35 - preserve_window_.reset(gfx::PreserveWindow::Create(this, evas_object_evas_get(parent_view)));
36 - evas_object_size_hint_align_set(preserve_window_->SmartObject(), EVAS_HINT_FILL, EVAS_HINT_FILL);
37 - evas_object_size_hint_weight_set(preserve_window_->SmartObject(), EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
38 + preserve_window_.reset(gfx::PreserveWindow::Create(
39 + this, evas_object_evas_get(parent_view)));
40 + evas_object_size_hint_align_set(preserve_window_->SmartObject(),
41 + EVAS_HINT_FILL, EVAS_HINT_FILL);
42 + evas_object_size_hint_weight_set(preserve_window_->SmartObject(),
43 + EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
44 evas_object_show(preserve_window_->SmartObject());
45 evas_object_box_append(parent_view, preserve_window_->SmartObject());
46 compositing_surface_ = preserve_window_->EmbeddedXWindow();
47 diff --git a/content/browser/web_contents/web_contents_view_efl.cc b/content/browser/web_contents/web_contents_view_efl.cc
48 index 6e22d05..7c8a43a 100644
49 --- a/content/browser/web_contents/web_contents_view_efl.cc
50 +++ b/content/browser/web_contents/web_contents_view_efl.cc
51 @@ -40,8 +40,7 @@ WebContentsViewEfl::WebContentsViewEfl(
52 WebContentsImpl* web_contents,
53 WebContentsViewDelegate* delegate)
54 : web_contents_(web_contents),
55 - delegate_(delegate),
56 - view_container_box_(0) {
57 + delegate_(delegate) {
59 * TODO: Connect the evas smart callback signals for size changes to
60 * callback functions in this file.
61 @@ -59,7 +58,9 @@ WebContentsViewEfl::~WebContentsViewEfl() {
64 gfx::NativeView WebContentsViewEfl::GetNativeView() const {
65 - return GetContentNativeView();
67 + return delegate_->GetNativeView();
71 gfx::NativeView WebContentsViewEfl::GetContentNativeView() const {
72 @@ -123,7 +124,14 @@ RenderWidgetHostView* WebContentsViewEfl::CreateViewForWidget(
74 RenderWidgetHostView* view =
75 RenderWidgetHostView::CreateViewForWidget(render_widget_host);
76 - view->InitAsChild(view_container_box_);
77 + view->InitAsChild(GetNativeView());
78 + // gfx::NativeView content_view = view->GetNativeView();
80 + // TODO: Connect EFL focus event to self
81 + // InsertIntoContentArea(content_view);
83 + // We don't want to change any state in this class for swapped out RVHs
84 + // because they will not be visible at this time.
85 if (render_widget_host->IsRenderView()) {
86 RenderViewHost* rvh = RenderViewHost::From(render_widget_host);
87 if (!static_cast<RenderViewHostImpl*>(rvh)->is_swapped_out())
88 @@ -152,9 +160,8 @@ void WebContentsViewEfl::RenderViewCreated(RenderViewHost* host) {
91 void WebContentsViewEfl::RenderViewDeleted(RenderViewHost* render_view_host) {
92 - if (view_container_box_ && render_view_host->GetView()) {
93 - gfx::NativeView native_view = render_view_host->GetView()->GetNativeView();
94 - evas_object_box_remove(view_container_box_, native_view);
95 + if (GetNativeView() && GetContentNativeView()) {
96 + evas_object_box_remove(GetNativeView(), GetContentNativeView());
100 diff --git a/content/browser/web_contents/web_contents_view_efl.h b/content/browser/web_contents/web_contents_view_efl.h
101 index 91aab48..6266de6 100644
102 --- a/content/browser/web_contents/web_contents_view_efl.h
103 +++ b/content/browser/web_contents/web_contents_view_efl.h
105 #include "content/port/browser/web_contents_view_port.h"
106 #include "content/public/browser/web_contents_observer.h"
113 @@ -83,9 +81,6 @@ class CONTENT_EXPORT WebContentsViewEfl
114 virtual void GotFocus() OVERRIDE;
115 virtual void TakeFocus(bool reverse) OVERRIDE;
117 - void SetViewContainerBox(Evas_Object* container_box) { view_container_box_ = container_box; }
118 - Evas_Object* ViewContainerBox() { return view_container_box_; }
121 void UpdateDragDest(RenderViewHost* new_host);
123 @@ -93,8 +88,6 @@ class CONTENT_EXPORT WebContentsViewEfl
125 scoped_ptr<WebContentsViewDelegate> delegate_;
127 - Evas_Object* view_container_box_;
129 // The size we want the view to be. We keep this in a separate variable
130 // because resizing in GTK+ is async.
131 gfx::Size requested_size_;
132 diff --git a/content/public/browser/web_contents_view_delegate.h b/content/public/browser/web_contents_view_delegate.h
133 index aec9701..5d92ff4 100644
134 --- a/content/public/browser/web_contents_view_delegate.h
135 +++ b/content/public/browser/web_contents_view_delegate.h
136 @@ -82,6 +82,7 @@ class CONTENT_EXPORT WebContentsViewDelegate {
137 CreateRenderWidgetHostViewDelegate(
138 RenderWidgetHost* render_widget_host) = 0;
139 #elif defined(TOOLKIT_EFL)
140 + virtual gfx::NativeView GetNativeView() const = 0;
141 virtual void Focus() = 0;
144 diff --git a/content/shell/shell.cc b/content/shell/shell.cc
145 index 9e6576e..94c7e28 100644
146 --- a/content/shell/shell.cc
147 +++ b/content/shell/shell.cc
148 @@ -49,6 +49,8 @@ Shell::Shell(WebContents* web_contents)
149 url_edit_view_(NULL),
150 #if defined(OS_WIN) && !defined(USE_AURA)
151 default_edit_wnd_proc_(0),
152 +#elif defined(TOOLKIT_EFL)
153 + container_view_(NULL),
156 const CommandLine& command_line = *CommandLine::ForCurrentProcess();
157 diff --git a/content/shell/shell.h b/content/shell/shell.h
158 index 2d9ba10..a108c7d 100644
159 --- a/content/shell/shell.h
160 +++ b/content/shell/shell.h
161 @@ -237,6 +237,7 @@ class Shell : public WebContentsDelegate,
162 #elif defined(TOOLKIT_EFL)
165 + gfx::NativeView container_view_;
166 #elif defined(TOOLKIT_GTK)
169 diff --git a/content/shell/shell_efl.cc b/content/shell/shell_efl.cc
170 index e4ec4e5..f847113 100644
171 --- a/content/shell/shell_efl.cc
172 +++ b/content/shell/shell_efl.cc
174 #include "base/logging.h"
175 #include "base/strings/string_piece.h"
176 #include "base/utf_string_conversions.h"
177 +#include "content/browser/web_contents/web_contents_view_efl.h"
178 #include "content/public/browser/browser_context.h"
179 #include "content/public/browser/native_web_keyboard_event.h"
180 #include "content/public/browser/web_contents.h"
181 #include "content/public/browser/web_contents_view.h"
182 -#include "content/browser/web_contents/web_contents_view_efl.h"
183 #include "content/public/common/renderer_preferences.h"
184 #include "content/shell/shell_browser_context.h"
185 #include "content/shell/shell_content_browser_client.h"
186 +#include "content/shell/shell_web_contents_view_delegate.h"
190 @@ -64,13 +65,17 @@ void Shell::PlatformSetContents() {
194 - Evas_Object* view_box = elm_box_add(window_);
195 - evas_object_size_hint_weight_set(view_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
196 + container_view_ = elm_box_add(window_);
197 + evas_object_size_hint_weight_set(container_view_,
198 + EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
200 - elm_win_resize_object_add(window_, view_box);
201 + elm_win_resize_object_add(window_, container_view_);
202 + evas_object_show(container_view_);
204 - WebContentsView* content_view = web_contents_->GetView();
205 - static_cast<WebContentsViewEfl*>(content_view)->SetViewContainerBox(view_box);
206 + content::WebContentsViewEfl* content_view =
207 + static_cast<content::WebContentsViewEfl*>(web_contents_->GetView());
208 + static_cast<ShellWebContentsViewDelegate*>(content_view->delegate())->
209 + SetNativeView(container_view_);
212 void Shell::SizeTo(int width, int height) {
213 @@ -107,10 +112,7 @@ 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 + elm_object_focus_next(container_view_,
222 reverse ? ELM_FOCUS_PREVIOUS : ELM_FOCUS_NEXT);
225 diff --git a/content/shell/shell_web_contents_view_delegate.h b/content/shell/shell_web_contents_view_delegate.h
226 index 8352438..cb93fbf 100644
227 --- a/content/shell/shell_web_contents_view_delegate.h
228 +++ b/content/shell/shell_web_contents_view_delegate.h
229 @@ -48,6 +48,9 @@ class ShellWebContentsViewDelegate : public WebContentsViewDelegate {
230 virtual void TakeFocus(bool reverse) OVERRIDE;
231 virtual void SizeChanged(const gfx::Size& size) OVERRIDE;
232 void MenuItemSelected(int selection);
233 +#elif defined(TOOLKIT_EFL)
234 + virtual gfx::NativeView GetNativeView() const OVERRIDE;
235 + void SetNativeView(gfx::NativeView);
239 @@ -76,6 +79,8 @@ class ShellWebContentsViewDelegate : public WebContentsViewDelegate {
240 OnDeleteMenuActivated);
241 CHROMEGTK_CALLBACK_0(ShellWebContentsViewDelegate, void,
242 OnInspectMenuActivated);
243 +#elif defined(TOOLKIT_EFL)
244 + gfx::NativeView native_view_;
247 DISALLOW_COPY_AND_ASSIGN(ShellWebContentsViewDelegate);
248 diff --git a/content/shell/shell_web_contents_view_delegate_efl.cc b/content/shell/shell_web_contents_view_delegate_efl.cc
249 index 60aaa16..0720a5c 100644
250 --- a/content/shell/shell_web_contents_view_delegate_efl.cc
251 +++ b/content/shell/shell_web_contents_view_delegate_efl.cc
254 #include <Elementary.h>
255 #include "base/command_line.h"
256 -#include "content/browser/web_contents/web_contents_view_efl.h"
257 #include "content/public/browser/render_process_host.h"
258 #include "content/public/browser/render_view_host.h"
259 #include "content/public/browser/render_widget_host_view.h"
260 @@ -33,7 +32,8 @@ WebContentsViewDelegate* CreateShellWebContentsViewDelegate(
262 ShellWebContentsViewDelegate::ShellWebContentsViewDelegate(
263 WebContents* web_contents)
264 - : web_contents_(web_contents) {
265 + : web_contents_(web_contents),
266 + native_view_(NULL) {
269 ShellWebContentsViewDelegate::~ShellWebContentsViewDelegate() {
270 @@ -51,10 +51,16 @@ WebDragDestDelegate* ShellWebContentsViewDelegate::GetDragDestDelegate() {
273 void ShellWebContentsViewDelegate::Focus() {
274 - WebContentsView* content_view = web_contents_->GetView();
275 - Evas_Object* view_box =
276 - static_cast<WebContentsViewEfl*>(content_view)->ViewContainerBox();
277 - elm_object_focus_set(view_box, EINA_TRUE);
279 + elm_object_focus_set(native_view_, EINA_TRUE);
282 +gfx::NativeView ShellWebContentsViewDelegate::GetNativeView() const {
283 + return native_view_;
286 +void ShellWebContentsViewDelegate::SetNativeView(gfx::NativeView native_view) {
287 + native_view_ = native_view;
290 } // namespace content
291 diff --git a/efl_webview/lib/web_contents_view_delegate_xwalk.cc b/efl_webview/lib/web_contents_view_delegate_xwalk.cc
292 index 40b59f7..7160227 100644
293 --- a/efl_webview/lib/web_contents_view_delegate_xwalk.cc
294 +++ b/efl_webview/lib/web_contents_view_delegate_xwalk.cc
295 @@ -11,16 +11,20 @@ namespace xwalk {
296 WebContentsViewDelegateXWalk::WebContentsViewDelegateXWalk(
297 content::WebContents* web_contents)
298 : web_contents_(web_contents)
299 - , view_box_(NULL) {
300 + , native_view_(NULL) {
303 WebContentsViewDelegateXWalk::~WebContentsViewDelegateXWalk() {
306 void WebContentsViewDelegateXWalk::Focus() {
310 - elm_object_focus_set(view_box_, EINA_TRUE);
311 + elm_object_focus_set(native_view_, EINA_TRUE);
314 +gfx::NativeView WebContentsViewDelegateXWalk::GetNativeView() const {
315 + return native_view_;
318 void WebContentsViewDelegateXWalk::ShowContextMenu(
319 @@ -33,8 +37,8 @@ content::WebDragDestDelegate*
323 -void WebContentsViewDelegateXWalk::SetViewContainerBox(Evas_Object* view_box) {
324 - view_box_ = view_box;
325 +void WebContentsViewDelegateXWalk::SetNativeView(Evas_Object* native_view) {
326 + native_view_ = native_view;
330 diff --git a/efl_webview/lib/web_contents_view_delegate_xwalk.h b/efl_webview/lib/web_contents_view_delegate_xwalk.h
331 index d5df813..ef0fa59 100644
332 --- a/efl_webview/lib/web_contents_view_delegate_xwalk.h
333 +++ b/efl_webview/lib/web_contents_view_delegate_xwalk.h
334 @@ -25,12 +25,13 @@ class WebContentsViewDelegateXWalk : public content::WebContentsViewDelegate {
335 content::ContextMenuSourceType type) OVERRIDE;
336 virtual content::WebDragDestDelegate* GetDragDestDelegate() OVERRIDE;
337 virtual void Focus() OVERRIDE;
338 + virtual gfx::NativeView GetNativeView() const OVERRIDE;
340 - void SetViewContainerBox(Evas_Object*);
341 + void SetNativeView(Evas_Object*);
344 content::WebContents* web_contents_;
345 - Evas_Object* view_box_;
346 + Evas_Object* native_view_;
348 DISALLOW_COPY_AND_ASSIGN(WebContentsViewDelegateXWalk);
350 diff --git a/efl_webview/lib/webview.cc b/efl_webview/lib/webview.cc
351 index ae886e7..bb48b59 100644
352 --- a/efl_webview/lib/webview.cc
353 +++ b/efl_webview/lib/webview.cc
354 @@ -150,9 +150,8 @@ WebViewPrivate::WebViewPrivate(Evas_Object* view_object)
355 content::WebContentsViewEfl* content_view =
356 static_cast<content::WebContentsViewEfl*>(web_contents_delegate_->
357 WebContents()->GetView());
358 - content_view->SetViewContainerBox(view_object_);
359 static_cast<WebContentsViewDelegateXWalk*>(content_view->delegate())->
360 - SetViewContainerBox(view_object_);
361 + SetNativeView(view_object_);
363 LoadURL(WebViewPrivate::s_startup_url);