XWalk WebView patchset, README and LICENSE files.
[platform/framework/web/xwalk_webview.git] / patchset / 0014-Use-WebContentsViewDelegate-GetNativeView-instead-of.patch
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().
6
7 An embeder already can pass a container view to WebContentsView via
8 WebContentsViewDelegate, but we added redundant SetViewContainerBox() to pass a
9 containter view.
10 This patch removes WebContentsViewEfl::SetViewContainerBox() and uses
11 WebContentsViewDelegate::GetNativeView().
12 ---
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(-)
26
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) {
32  
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) {
58    /*
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() {
62  }
63  
64  gfx::NativeView WebContentsViewEfl::GetNativeView() const {
65 -  return GetContentNativeView();
66 +  if (delegate_)
67 +    return delegate_->GetNativeView();
68 +  return NULL;
69  }
70  
71  gfx::NativeView WebContentsViewEfl::GetContentNativeView() const {
72 @@ -123,7 +124,14 @@ RenderWidgetHostView* WebContentsViewEfl::CreateViewForWidget(
73  
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();
79 +
80 +  // TODO: Connect EFL focus event to self
81 +  // InsertIntoContentArea(content_view);
82 +
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) {
89  }
90  
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());
97    }
98  }
99  
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
104 @@ -14,8 +14,6 @@
105  #include "content/port/browser/web_contents_view_port.h"
106  #include "content/public/browser/web_contents_observer.h"
107  
108 -#include <Evas.h>
109 -
110  namespace content {
111  
112  class WebContents;
113 @@ -83,9 +81,6 @@ class CONTENT_EXPORT WebContentsViewEfl
114    virtual void GotFocus() OVERRIDE;
115    virtual void TakeFocus(bool reverse) OVERRIDE;
116  
117 -  void SetViewContainerBox(Evas_Object* container_box) { view_container_box_ = container_box; }
118 -  Evas_Object* ViewContainerBox() { return view_container_box_; }
119 -
120   private:
121    void UpdateDragDest(RenderViewHost* new_host);
122  
123 @@ -93,8 +88,6 @@ class CONTENT_EXPORT WebContentsViewEfl
124  
125    scoped_ptr<WebContentsViewDelegate> delegate_;
126  
127 -  Evas_Object* view_container_box_;
128 -
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;
142  #endif
143  };
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),
154  #endif
155        headless_(false) {
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)
163    int content_width_;
164    int content_height_;
165 +  gfx::NativeView container_view_;
166  #elif defined(TOOLKIT_GTK)
167    GtkWidget* vbox_;
168  
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
173 @@ -12,14 +12,15 @@
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"
187  
188  namespace content {
189  
190 @@ -64,13 +65,17 @@ void Shell::PlatformSetContents() {
191    if (headless_)
192      return;
193  
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);
199  
200 -  elm_win_resize_object_add(window_, view_box);
201 +  elm_win_resize_object_add(window_, container_view_);
202 +  evas_object_show(container_view_);
203  
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_);
210  }
211  
212  void Shell::SizeTo(int width, int height) {
213 @@ -107,10 +112,7 @@ void Shell::OnMainWindowDel(void* data, Evas* evas, Evas_Object* object,
214  
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);
223    return true;
224  }
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);
236  #endif
237  
238   private:
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_;
245  #endif
246  
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
252 @@ -6,7 +6,6 @@
253  
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(
261  
262  ShellWebContentsViewDelegate::ShellWebContentsViewDelegate(
263      WebContents* web_contents)
264 -    : web_contents_(web_contents) {
265 +    : web_contents_(web_contents),
266 +      native_view_(NULL) {
267  }
268  
269  ShellWebContentsViewDelegate::~ShellWebContentsViewDelegate() {
270 @@ -51,10 +51,16 @@ WebDragDestDelegate* ShellWebContentsViewDelegate::GetDragDestDelegate() {
271  }
272  
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);
278 +  if (native_view_)
279 +    elm_object_focus_set(native_view_, EINA_TRUE);
280 +}
281 +
282 +gfx::NativeView ShellWebContentsViewDelegate::GetNativeView() const {
283 +  return native_view_;
284 +}
285 +
286 +void ShellWebContentsViewDelegate::SetNativeView(gfx::NativeView native_view) {
287 +  native_view_ = native_view;
288  }
289  
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) {
301  }
302  
303  WebContentsViewDelegateXWalk::~WebContentsViewDelegateXWalk() {
304  }
305  
306  void WebContentsViewDelegateXWalk::Focus() {
307 -  if (!view_box_)
308 +  if (!native_view_)
309      return;
310 -  elm_object_focus_set(view_box_, EINA_TRUE);
311 +  elm_object_focus_set(native_view_, EINA_TRUE);
312 +}
313 +
314 +gfx::NativeView WebContentsViewDelegateXWalk::GetNativeView() const {
315 +  return native_view_;
316  }
317  
318  void WebContentsViewDelegateXWalk::ShowContextMenu(
319 @@ -33,8 +37,8 @@ content::WebDragDestDelegate*
320    return NULL;
321  }
322  
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;
327  }
328  
329  }  // namespace xwalk
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;
339  
340 -  void SetViewContainerBox(Evas_Object*);
341 +  void SetNativeView(Evas_Object*);
342  
343   private:
344    content::WebContents* web_contents_;
345 -  Evas_Object* view_box_;
346 +  Evas_Object* native_view_;
347  
348    DISALLOW_COPY_AND_ASSIGN(WebContentsViewDelegateXWalk);
349  };
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_);
362  
363    LoadURL(WebViewPrivate::s_startup_url);
364  }
365 -- 
366 1.8.1.2
367