From bbeaf3278de08da00f56aba3511951aaf6a8d233 Mon Sep 17 00:00:00 2001
From: Jocelyn Turcotte <jocelyn.turcotte@digia.com>
Date: Mon, 17 Jun 2013 18:58:06 +0200
Subject: [PATCH] Allow the API class to provide the page widget rendering
 implementation.

- Rename NativeViewQt to RenderWidgetHostViewQtDelegate to keep the
  context obvious.
- Use an interface to handle the parenting instead of the
  NativeViewContainerQt mechanism that was needed with the Shell.
---
 lib/lib.pro                                   |   4 +
 lib/qquickwebcontentsview.cpp                 |  39 +++-
 lib/qquickwebcontentsview.h                   |   3 +
 lib/qwebcontentsview.cpp                      |  21 +-
 lib/qwebcontentsview_p.h                      |   4 +-
 ...der_widget_host_view_qt_delegate_quick.cpp | 125 +++++++++++
 ...ender_widget_host_view_qt_delegate_quick.h |  59 +++++
 ...er_widget_host_view_qt_delegate_widget.cpp |  84 +++++++
 ...nder_widget_host_view_qt_delegate_widget.h |  41 ++++
 lib/web_contents_view_qt.h                    |  22 +-
 shared/native_view_container_qt.h             | 116 ----------
 shared/native_view_qt.cpp                     | 208 ------------------
 shared/native_view_qt.h                       |  97 --------
 shared/render_widget_host_view_qt.cpp         |  60 +++--
 shared/render_widget_host_view_qt.h           |   5 +-
 shared/render_widget_host_view_qt_delegate.h  |  21 ++
 shared/shared.pro                             |   6 +-
 17 files changed, 428 insertions(+), 487 deletions(-)
 create mode 100644 lib/render_widget_host_view_qt_delegate_quick.cpp
 create mode 100644 lib/render_widget_host_view_qt_delegate_quick.h
 create mode 100644 lib/render_widget_host_view_qt_delegate_widget.cpp
 create mode 100644 lib/render_widget_host_view_qt_delegate_widget.h
 delete mode 100644 shared/native_view_container_qt.h
 delete mode 100644 shared/native_view_qt.cpp
 delete mode 100644 shared/native_view_qt.h
 create mode 100644 shared/render_widget_host_view_qt_delegate.h

diff --git a/lib/lib.pro b/lib/lib.pro
index 54a35b226..e4f75a65c 100644
--- a/lib/lib.pro
+++ b/lib/lib.pro
@@ -23,6 +23,8 @@ SOURCES = \
         content_browser_client_qt.cpp \
         qquickwebcontentsview.cpp \
         qwebcontentsview.cpp \
+        render_widget_host_view_qt_delegate_quick.cpp \
+        render_widget_host_view_qt_delegate_widget.cpp \
         resource_context_qt.cpp \
         url_request_context_getter_qt.cpp \
         web_contents_delegate_qt.cpp \
@@ -34,6 +36,8 @@ HEADERS = \
         qquickwebcontentsview.h \
         qwebcontentsview.h \
         qwebcontentsview_p.h \
+        render_widget_host_view_qt_delegate_quick.h \
+        render_widget_host_view_qt_delegate_widget.h \
         resource_context_qt.h \
         url_request_context_getter_qt.h \
         web_contents_delegate_qt.h \
diff --git a/lib/qquickwebcontentsview.cpp b/lib/qquickwebcontentsview.cpp
index e540b0d32..ee68301b0 100644
--- a/lib/qquickwebcontentsview.cpp
+++ b/lib/qquickwebcontentsview.cpp
@@ -46,12 +46,12 @@
 
 #include "browser_context_qt.h"
 #include "content_browser_client_qt.h"
+#include "render_widget_host_view_qt_delegate_quick.h"
 #include "web_contents_delegate_qt.h"
 #include "web_contents_view_qt.h"
 #include "web_engine_context.h"
 
 #include <QUrl>
-#include <QQmlProperty>
 
 void QQuickWebContentsView::registerType()
 {
@@ -59,12 +59,15 @@ void QQuickWebContentsView::registerType()
     qmlRegisterType<QQuickWebContentsView>("QtWebEngine", 1, 0, "WebContentsView");
 }
 
-struct QQuickWebContentsViewPrivate
+class QQuickWebContentsViewPrivate : public WebContentsViewQtClient
 {
     QQuickWebContentsView *q_ptr;
     Q_DECLARE_PUBLIC(QQuickWebContentsView)
+public:
     QQuickWebContentsViewPrivate();
 
+    RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegate(content::RenderWidgetHostViewQt *view) Q_DECL_OVERRIDE;
+
     scoped_refptr<WebEngineContext> context;
     scoped_ptr<WebContentsDelegateQt> webContentsDelegate;
 };
@@ -75,18 +78,10 @@ QQuickWebContentsView::QQuickWebContentsView()
     d_ptr->q_ptr = this;
 
     Q_D(QQuickWebContentsView);
-    content::BrowserContext* browser_context = static_cast<ContentBrowserClientQt*>(content::GetContentClient()->browser())->browser_context();
-    d->webContentsDelegate.reset(new WebContentsDelegateQt(browser_context, NULL, MSG_ROUTING_NONE, gfx::Size()));
-
     WebContentsDelegateQt* delegate = d->webContentsDelegate.get();
     connect(delegate, SIGNAL(titleChanged(QString)), this, SIGNAL(titleChanged(QString)));
     connect(delegate, SIGNAL(urlChanged(QUrl)), this, SIGNAL(urlChanged()));
     connect(delegate, SIGNAL(loadingStateChanged()), this, SIGNAL(loadingStateChanged()));
-
-    WebContentsViewQt* content_view = static_cast<WebContentsViewQt*>(d->webContentsDelegate->web_contents()->GetView());
-    QQuickItem* windowContainer = content_view->windowContainer()->qQuickItem();
-    windowContainer->setParentItem(this);
-    QQmlProperty::write(windowContainer, QStringLiteral("anchors.fill"), QVariant::fromValue(this));
 }
 
 QQuickWebContentsView::~QQuickWebContentsView()
@@ -171,8 +166,32 @@ bool QQuickWebContentsView::canGoForward() const
     return d->webContentsDelegate->web_contents()->GetController().CanGoForward();
 }
 
+void QQuickWebContentsView::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
+{
+    QQuickItem::geometryChanged(newGeometry, oldGeometry);
+
+    Q_FOREACH(QQuickItem *child, childItems()) {
+        Q_ASSERT(qobject_cast<RenderWidgetHostViewQtDelegateQuick *>(child));
+        child->setSize(newGeometry.size());
+    }
+}
+
 QQuickWebContentsViewPrivate::QQuickWebContentsViewPrivate()
     // This has to be the first thing we do.
     : context(WebEngineContext::current())
 {
+    content::BrowserContext* browser_context = static_cast<ContentBrowserClientQt*>(content::GetContentClient()->browser())->browser_context();
+    webContentsDelegate.reset(new WebContentsDelegateQt(browser_context, NULL, MSG_ROUTING_NONE, gfx::Size()));
+
+    WebContentsViewQt* contents_view = static_cast<WebContentsViewQt*>(webContentsDelegate->web_contents()->GetView());
+    contents_view->SetClient(this);
+}
+
+RenderWidgetHostViewQtDelegate *QQuickWebContentsViewPrivate::CreateRenderWidgetHostViewQtDelegate(content::RenderWidgetHostViewQt *view)
+{
+    Q_Q(QQuickWebContentsView);
+    // Parent the RWHV directly, this might have to be changed to handle popups and fullscreen.
+    RenderWidgetHostViewQtDelegateQuick *viewDelegate = new RenderWidgetHostViewQtDelegateQuick(view, q);
+    viewDelegate->setSize(QSizeF(q->width(), q->height()));
+    return viewDelegate;
 }
diff --git a/lib/qquickwebcontentsview.h b/lib/qquickwebcontentsview.h
index 81459c490..2c19bce0a 100644
--- a/lib/qquickwebcontentsview.h
+++ b/lib/qquickwebcontentsview.h
@@ -79,6 +79,9 @@ Q_SIGNALS:
     void urlChanged();
     void loadingStateChanged();
 
+protected:
+    void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry);
+
 private:
     Q_DECLARE_PRIVATE(QQuickWebContentsView)
     // Hides QObject::d_ptr allowing us to use the convenience macros.
diff --git a/lib/qwebcontentsview.cpp b/lib/qwebcontentsview.cpp
index 3f6c69990..c8f5535dd 100644
--- a/lib/qwebcontentsview.cpp
+++ b/lib/qwebcontentsview.cpp
@@ -46,6 +46,7 @@
 
 #include "browser_context_qt.h"
 #include "content_browser_client_qt.h"
+#include "render_widget_host_view_qt_delegate_widget.h"
 #include "web_contents_delegate_qt.h"
 #include "web_contents_view_qt.h"
 #include "web_engine_context.h"
@@ -60,9 +61,6 @@ QWebContentsView::QWebContentsView()
     d_ptr->q_ptr = this;
 
     Q_D(QWebContentsView);
-    content::BrowserContext* browser_context = static_cast<ContentBrowserClientQt*>(content::GetContentClient()->browser())->browser_context();
-    d->webContentsDelegate.reset(new WebContentsDelegateQt(browser_context, NULL, MSG_ROUTING_NONE, gfx::Size()));
-
     QVBoxLayout *layout = new QVBoxLayout;
     layout->setContentsMargins(0, 0, 0, 0);
     setLayout(layout);
@@ -71,9 +69,6 @@ QWebContentsView::QWebContentsView()
     connect(delegate, SIGNAL(titleChanged(const QString&)), this, SIGNAL(titleChanged(const QString&)));
     connect(delegate, SIGNAL(urlChanged(const QUrl&)), this, SIGNAL(urlChanged(const QUrl&)));
     connect(delegate, SIGNAL(loadingStateChanged()), d, SLOT(loadingStateChanged()));
-
-    WebContentsViewQt* content_view = static_cast<WebContentsViewQt*>(d->webContentsDelegate->web_contents()->GetView());
-    layout->addLayout(content_view->windowContainer()->widget());
 }
 
 QWebContentsView::~QWebContentsView()
@@ -145,6 +140,11 @@ QWebContentsViewPrivate::QWebContentsViewPrivate()
     : context(WebEngineContext::current())
     , m_isLoading(false)
 {
+    content::BrowserContext* browser_context = static_cast<ContentBrowserClientQt*>(content::GetContentClient()->browser())->browser_context();
+    webContentsDelegate.reset(new WebContentsDelegateQt(browser_context, NULL, MSG_ROUTING_NONE, gfx::Size()));
+
+    WebContentsViewQt* contents_view = static_cast<WebContentsViewQt*>(webContentsDelegate->web_contents()->GetView());
+    contents_view->SetClient(this);
 }
 
 void QWebContentsViewPrivate::loadingStateChanged()
@@ -159,3 +159,12 @@ void QWebContentsViewPrivate::loadingStateChanged()
             Q_EMIT q->loadFinished(true);
     }
 }
+
+RenderWidgetHostViewQtDelegate *QWebContentsViewPrivate::CreateRenderWidgetHostViewQtDelegate(content::RenderWidgetHostViewQt *view)
+{
+    Q_Q(QWebContentsView);
+    RenderWidgetHostViewQtDelegateWidget *viewDelegate = new RenderWidgetHostViewQtDelegateWidget(view, q);
+    // Parent the RWHV directly, this might have to be changed to handle popups and fullscreen.
+    q->layout()->addWidget(viewDelegate);
+    return viewDelegate;
+}
diff --git a/lib/qwebcontentsview_p.h b/lib/qwebcontentsview_p.h
index 9d2190ee2..c2009c7ac 100644
--- a/lib/qwebcontentsview_p.h
+++ b/lib/qwebcontentsview_p.h
@@ -51,7 +51,7 @@
 #include <QScopedPointer>
 #include <QObject>
 
-class QWebContentsViewPrivate : public QObject
+class QWebContentsViewPrivate : public QObject, public WebContentsViewQtClient
 {
     QWebContentsView *q_ptr;
     Q_DECLARE_PUBLIC(QWebContentsView)
@@ -59,6 +59,8 @@ class QWebContentsViewPrivate : public QObject
 public:
     QWebContentsViewPrivate();
 
+    RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegate(content::RenderWidgetHostViewQt *view) Q_DECL_OVERRIDE;
+
 public Q_SLOTS:
     void loadingStateChanged();
 
diff --git a/lib/render_widget_host_view_qt_delegate_quick.cpp b/lib/render_widget_host_view_qt_delegate_quick.cpp
new file mode 100644
index 000000000..754e68239
--- /dev/null
+++ b/lib/render_widget_host_view_qt_delegate_quick.cpp
@@ -0,0 +1,125 @@
+#include "render_widget_host_view_qt_delegate_quick.h"
+
+#include "shared/backing_store_qt.h"
+#include "shared/render_widget_host_view_qt.h"
+#include <QQuickWindow>
+#include <QWindow>
+
+RenderWidgetHostViewQtDelegateQuick::RenderWidgetHostViewQtDelegateQuick(content::RenderWidgetHostViewQt* view, QQuickItem *parent)
+    : QQuickPaintedItem(parent)
+    , m_backingStore(0)
+    , m_view(view)
+{
+    setFocus(true);
+    setAcceptedMouseButtons(Qt::AllButtons);
+}
+
+QRectF RenderWidgetHostViewQtDelegateQuick::screenRect() const
+{
+    QPointF pos = mapToScene(QPointF(0,0));
+    return QRectF(pos.x(), pos.y(), width(), height());
+}
+
+void RenderWidgetHostViewQtDelegateQuick::show()
+{
+    setVisible(true);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::hide()
+{
+    setVisible(false);
+}
+
+bool RenderWidgetHostViewQtDelegateQuick::isVisible() const
+{
+    return QQuickPaintedItem::isVisible();
+}
+
+QWindow* RenderWidgetHostViewQtDelegateQuick::window() const
+{
+    return QQuickPaintedItem::window();
+}
+
+void RenderWidgetHostViewQtDelegateQuick::update(const QRect& rect)
+{
+    QQuickPaintedItem::update(rect);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::paint(QPainter *painter)
+{
+    if (!m_backingStore)
+        return;
+
+    m_backingStore->paintToTarget(painter, boundingRect());
+}
+
+void RenderWidgetHostViewQtDelegateQuick::setBackingStore(BackingStoreQt* backingStore)
+{
+    m_backingStore = backingStore;
+    if (m_backingStore)
+        m_backingStore->resize(QSize(width(), height()));
+}
+
+QSGNode * RenderWidgetHostViewQtDelegateQuick::updatePaintNode(QSGNode * oldNode, UpdatePaintNodeData * data)
+{
+    return QQuickPaintedItem::updatePaintNode(oldNode, data);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry)
+{
+    QQuickPaintedItem::geometryChanged(newGeometry, oldGeometry);
+
+    resizeBackingStore();
+}
+
+void RenderWidgetHostViewQtDelegateQuick::resizeBackingStore()
+{
+    if (m_backingStore)
+        m_backingStore->resize(QSize(width(), height()));
+}
+
+void RenderWidgetHostViewQtDelegateQuick::focusInEvent(QFocusEvent *event)
+{
+    m_view->handleFocusEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::focusOutEvent(QFocusEvent *event)
+{
+    m_view->handleFocusEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::mousePressEvent(QMouseEvent *event)
+{
+    setFocus(true);
+    m_view->handleMouseEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::mouseMoveEvent(QMouseEvent *event)
+{
+    m_view->handleMouseEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::mouseReleaseEvent(QMouseEvent *event)
+{
+    m_view->handleMouseEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::mouseDoubleClickEvent(QMouseEvent *event)
+{
+    m_view->handleMouseEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::keyPressEvent(QKeyEvent *event)
+{
+    m_view->handleKeyEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::keyReleaseEvent(QKeyEvent *event)
+{
+    m_view->handleKeyEvent(event);
+}
+
+void RenderWidgetHostViewQtDelegateQuick::wheelEvent(QWheelEvent *event)
+{
+    m_view->handleWheelEvent(event);
+}
diff --git a/lib/render_widget_host_view_qt_delegate_quick.h b/lib/render_widget_host_view_qt_delegate_quick.h
new file mode 100644
index 000000000..20725c621
--- /dev/null
+++ b/lib/render_widget_host_view_qt_delegate_quick.h
@@ -0,0 +1,59 @@
+#ifndef RENDER_WIDGET_HOST_VIEW_QT_DELEGATE_QUICK_H
+#define RENDER_WIDGET_HOST_VIEW_QT_DELEGATE_QUICK_H
+
+#include "shared/render_widget_host_view_qt_delegate.h"
+
+#include <QQuickPaintedItem>
+
+class BackingStoreQt;
+class QWindow;
+class QQuickItem;
+class QFocusEvent;
+class QMouseEvent;
+class QKeyEvent;
+class QWheelEvent;
+
+namespace content {
+    class RenderWidgetHostViewQt;
+}
+
+class RenderWidgetHostViewQtDelegateQuick : public QQuickPaintedItem, public RenderWidgetHostViewQtDelegate
+{
+    Q_OBJECT
+public:
+    RenderWidgetHostViewQtDelegateQuick(content::RenderWidgetHostViewQt* view, QQuickItem *parent = 0);
+
+    virtual void setBackingStore(BackingStoreQt* backingStore);
+    virtual QRectF screenRect() const;
+    virtual void show();
+    virtual void hide();
+    virtual bool isVisible() const;
+    virtual QWindow* window() const;
+    virtual void update(const QRect& rect = QRect());
+
+    void paint(QPainter *painter);
+
+    void focusInEvent(QFocusEvent*);
+    void focusOutEvent(QFocusEvent*);
+    void mousePressEvent(QMouseEvent*);
+    void mouseMoveEvent(QMouseEvent*);
+    void mouseReleaseEvent(QMouseEvent*);
+    void mouseDoubleClickEvent(QMouseEvent*);
+    void keyPressEvent(QKeyEvent*);
+    void keyReleaseEvent(QKeyEvent*);
+    void wheelEvent(QWheelEvent*);
+
+protected Q_SLOTS:
+    void resizeBackingStore();
+
+protected:
+    QSGNode* updatePaintNode(QSGNode * oldNode, UpdatePaintNodeData * data);
+    void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry);
+
+private:
+    BackingStoreQt* m_backingStore;
+    content::RenderWidgetHostViewQt *m_view;
+
+};
+
+#endif
diff --git a/lib/render_widget_host_view_qt_delegate_widget.cpp b/lib/render_widget_host_view_qt_delegate_widget.cpp
new file mode 100644
index 000000000..8be1d308f
--- /dev/null
+++ b/lib/render_widget_host_view_qt_delegate_widget.cpp
@@ -0,0 +1,84 @@
+#include "render_widget_host_view_qt_delegate_widget.h"
+
+#include "shared/backing_store_qt.h"
+#include "shared/render_widget_host_view_qt.h"
+
+#include <QResizeEvent>
+#include <QPaintEvent>
+
+RenderWidgetHostViewQtDelegateWidget::RenderWidgetHostViewQtDelegateWidget(content::RenderWidgetHostViewQt* view, QWidget *parent)
+    : QWidget(parent)
+    , m_painter(0)
+    , m_backingStore(0)
+    , m_view(view)
+{
+    setFocusPolicy(Qt::ClickFocus);
+    setAttribute(Qt::WA_OpaquePaintEvent);
+}
+
+QRectF RenderWidgetHostViewQtDelegateWidget::screenRect() const
+{
+    return QRectF(x(), y(), width(), height());
+}
+
+void RenderWidgetHostViewQtDelegateWidget::show()
+{
+    QWidget::show();
+}
+
+void RenderWidgetHostViewQtDelegateWidget::hide()
+{
+    QWidget::hide();
+}
+
+
+bool RenderWidgetHostViewQtDelegateWidget::isVisible() const
+{
+    return QWidget::isVisible();
+}
+
+QWindow* RenderWidgetHostViewQtDelegateWidget::window() const
+{
+    return QWidget::windowHandle();
+}
+
+void RenderWidgetHostViewQtDelegateWidget::update(const QRect& rect)
+{
+    QWidget::update(rect);
+}
+
+void RenderWidgetHostViewQtDelegateWidget::setBackingStore(BackingStoreQt* backingStore)
+{
+    m_backingStore = backingStore;
+    if (m_backingStore)
+        m_backingStore->resize(size());
+}
+
+void RenderWidgetHostViewQtDelegateWidget::paintEvent(QPaintEvent * event)
+{
+    if (!m_backingStore)
+        return;
+    QPainter painter(this);
+    m_backingStore->paintToTarget(&painter, event->rect());
+}
+
+QPainter* RenderWidgetHostViewQtDelegateWidget::painter()
+{
+    if (!m_painter)
+        m_painter = new QPainter(this);
+    return m_painter;
+}
+
+void RenderWidgetHostViewQtDelegateWidget::resizeEvent(QResizeEvent *resizeEvent)
+{
+    if (m_backingStore)
+        m_backingStore->resize(resizeEvent->size());
+    QWidget::update();
+}
+
+bool RenderWidgetHostViewQtDelegateWidget::event(QEvent *event)
+{
+    if (!m_view || !m_view->handleEvent(event))
+        return QWidget::event(event);
+    return true;
+}
diff --git a/lib/render_widget_host_view_qt_delegate_widget.h b/lib/render_widget_host_view_qt_delegate_widget.h
new file mode 100644
index 000000000..9087ba017
--- /dev/null
+++ b/lib/render_widget_host_view_qt_delegate_widget.h
@@ -0,0 +1,41 @@
+#ifndef RENDER_WIDGET_HOST_VIEW_QT_DELEGATE_WIDGET_H
+#define RENDER_WIDGET_HOST_VIEW_QT_DELEGATE_WIDGET_H
+
+#include "shared/render_widget_host_view_qt_delegate.h"
+
+#include <QWidget>
+
+class BackingStoreQt;
+class QWindow;
+
+namespace content {
+    class RenderWidgetHostViewQt;
+}
+
+class RenderWidgetHostViewQtDelegateWidget : public QWidget, public RenderWidgetHostViewQtDelegate
+{
+public:
+    RenderWidgetHostViewQtDelegateWidget(content::RenderWidgetHostViewQt* view, QWidget *parent = 0);
+
+    virtual void setBackingStore(BackingStoreQt* backingStore);
+    virtual QRectF screenRect() const;
+    virtual void show();
+    virtual void hide();
+    virtual bool isVisible() const;
+    virtual QWindow* window() const;
+    virtual void update(const QRect& rect = QRect());
+
+    QPainter* painter();
+
+protected:
+    void paintEvent(QPaintEvent * event);
+    bool event(QEvent *event);
+    void resizeEvent(QResizeEvent *resizeEvent);
+
+private:
+    BackingStoreQt* m_backingStore;
+    QPainter* m_painter;
+    content::RenderWidgetHostViewQt *m_view;
+};
+
+#endif
diff --git a/lib/web_contents_view_qt.h b/lib/web_contents_view_qt.h
index 46e7fe7a9..d20f8fec6 100644
--- a/lib/web_contents_view_qt.h
+++ b/lib/web_contents_view_qt.h
@@ -49,7 +49,12 @@
 #include "content/port/browser/web_contents_view_port.h"
 
 #include "shared/render_widget_host_view_qt.h"
-#include "shared/native_view_container_qt.h"
+
+class WebContentsViewQtClient {
+public:
+    virtual ~WebContentsViewQtClient() { }
+    virtual RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegate(content::RenderWidgetHostViewQt *view) = 0;
+};
 
 class WebContentsViewQt
     : public content::WebContentsViewPort
@@ -57,13 +62,16 @@ class WebContentsViewQt
 {
 public:
     WebContentsViewQt(content::WebContents* web_contents)
-        : m_windowContainer(new NativeViewContainerQt)
+        : m_client(0)
     { }
 
-    content::RenderWidgetHostView* CreateViewForWidget(content::RenderWidgetHost* render_widget_host)
+    void SetClient(WebContentsViewQtClient* client) { m_client = client; }
+
+    virtual content::RenderWidgetHostView *CreateViewForWidget(content::RenderWidgetHost* render_widget_host)
     {
-        content::RenderWidgetHostView* view = content::RenderWidgetHostView::CreateViewForWidget(render_widget_host);
-        view->InitAsChild(reinterpret_cast<gfx::NativeView>(m_windowContainer));
+        content::RenderWidgetHostViewQt *view = new content::RenderWidgetHostViewQt(render_widget_host);
+        RenderWidgetHostViewQtDelegate *viewDelegate = m_client->CreateRenderWidgetHostViewQtDelegate(view);
+        view->SetDelegate(viewDelegate);
 
         return view;
     }
@@ -107,10 +115,8 @@ public:
     virtual void ShowPopupMenu(const gfx::Rect& bounds, int item_height, double item_font_size, int selected_item,
                                 const std::vector<WebMenuItem>& items, bool right_aligned, bool allow_multiple_selection) { QT_NOT_YET_IMPLEMENTED }
 
-    NativeViewContainerQt* windowContainer() { return m_windowContainer; }
-
 private:
-    NativeViewContainerQt* m_windowContainer;
+    WebContentsViewQtClient* m_client;
 };
 
 #endif
diff --git a/shared/native_view_container_qt.h b/shared/native_view_container_qt.h
deleted file mode 100644
index 185a5b826..000000000
--- a/shared/native_view_container_qt.h
+++ /dev/null
@@ -1,116 +0,0 @@
-#ifndef NATIVE_VIEW_CONTAINER_QT_H
-#define NATIVE_VIEW_CONTAINER_QT_H
-
-#include "native_view_qt.h"
-
-#include <QWindow>
-#include <QVBoxLayout>
-#include <QQuickItem>
-
-class NativeViewContainerQt : public QObject
-{
-    Q_OBJECT
-public:
-    NativeViewContainerQt()
-        : m_embeddable(0)
-        , m_currentQQuickNativeView(0)
-        , m_currentQWidgetNativeView(0)
-        , m_isQQuick(true)
-    {
-    }
-
-    QQuickItem* qQuickItem()
-    {
-        if (!m_embeddable) {
-            QQuickItem* embeddable = new QQuickItem;
-            m_isQQuick = true;
-            connect(embeddable, SIGNAL(widthChanged()), this, SLOT(resized()));
-            connect(embeddable, SIGNAL(heightChanged()), this, SLOT(resized()));
-            m_embeddable = embeddable;
-        }
-
-        return static_cast<QQuickItem*>(m_embeddable);
-    }
-
-    QVBoxLayout* widget()
-    {
-        if (!m_embeddable) {
-            m_isQQuick = false;
-            QVBoxLayout *l = new QVBoxLayout;
-            l->setContentsMargins(0, 0, 0, 0);
-            m_embeddable = l;
-        }
-        return static_cast<QVBoxLayout*>(m_embeddable);
-    }
-
-    void setWidth(qreal width)
-    {
-        if (m_isQQuick && m_currentQQuickNativeView) {
-            m_currentQQuickNativeView->setWidth(width);
-            m_currentQQuickNativeView->setContentsSize(QSize(width, m_currentQQuickNativeView->height()));
-            qQuickItem()->setWidth(width);
-        }
-    }
-
-    void setHeight(qreal height)
-    {
-        if (m_isQQuick && m_currentQQuickNativeView) {
-            m_currentQQuickNativeView->setHeight(height);
-            m_currentQQuickNativeView->setContentsSize(QSize(m_currentQQuickNativeView->width(), height));
-            qQuickItem()->setHeight(height);
-        }
-    }
-
-    NativeViewQt* createNativeView(content::RenderWidgetHostViewQt* renderWidgetHostView)
-    {
-        if (m_isQQuick) {
-            insert(new QQuickNativeView(renderWidgetHostView));
-            connect(m_currentQQuickNativeView, SIGNAL(destroyed(QObject*)), this, SLOT(destroyedNativeView(QObject*)));
-            return m_currentQQuickNativeView;
-        }
-
-        insert(new QWidgetNativeView(renderWidgetHostView));
-        return m_currentQWidgetNativeView;
-    }
-
-protected:
-    void insert(QWidgetNativeView* nativeView)
-    {
-        widget()->removeWidget(m_currentQWidgetNativeView);
-        widget()->addWidget(nativeView);
-        m_currentQWidgetNativeView = nativeView;
-    }
-
-    void insert(QQuickNativeView* nativeView)
-    {
-        if (m_currentQQuickNativeView)
-            m_currentQQuickNativeView->setParentItem(0);
-
-        nativeView->setParentItem(qQuickItem());
-        m_currentQQuickNativeView = nativeView;
-        setWidth(qQuickItem()->width());
-        setHeight(qQuickItem()->height());
-    }
-
-public Q_SLOTS:
-    void resized()
-    {
-        int w = static_cast<unsigned int>(qQuickItem()->width());
-        int h = static_cast<unsigned int>(qQuickItem()->height());
-        if (m_currentQQuickNativeView)
-            m_currentQQuickNativeView->resize(w, h);
-    }
-
-    void destroyedNativeView(QObject* nativeView)
-    {
-        m_currentQQuickNativeView = 0;
-    }
-
-private:
-    QObject* m_embeddable;
-    QWidgetNativeView* m_currentQWidgetNativeView;
-    QQuickNativeView* m_currentQQuickNativeView;
-    bool m_isQQuick;
-};
-
-#endif
diff --git a/shared/native_view_qt.cpp b/shared/native_view_qt.cpp
deleted file mode 100644
index 1a5716549..000000000
--- a/shared/native_view_qt.cpp
+++ /dev/null
@@ -1,208 +0,0 @@
-#include "native_view_qt.h"
-
-#include "backing_store_qt.h"
-#include "render_widget_host_view_qt.h"
-#include <QResizeEvent>
-#include <QShowEvent>
-#include <QPaintEvent>
-#include <QQuickWindow>
-#include <QWindow>
-
-QWidgetNativeView::QWidgetNativeView(content::RenderWidgetHostViewQt* view, QWidget *parent)
-    : QWidget(parent)
-    , m_painter(0)
-    , m_backingStore(0)
-    , m_view(view)
-{
-    setFocusPolicy(Qt::ClickFocus);
-    setAttribute(Qt::WA_OpaquePaintEvent);
-}
-
-QRectF QWidgetNativeView::screenRect() const
-{
-    return QRectF(x(), y(), width(), height());
-}
-
-void QWidgetNativeView::show()
-{
-    QWidget::show();
-}
-
-void QWidgetNativeView::hide()
-{
-    QWidget::hide();
-}
-
-
-bool QWidgetNativeView::isVisible() const
-{
-    return QWidget::isVisible();
-}
-
-QWindow* QWidgetNativeView::window() const
-{
-    return QWidget::windowHandle();
-}
-
-void QWidgetNativeView::update(const QRect& rect)
-{
-    QWidget::update(rect);
-}
-
-void QWidgetNativeView::setBackingStore(BackingStoreQt* backingStore)
-{
-    m_backingStore = backingStore;
-    if (m_backingStore)
-        m_backingStore->resize(size());
-}
-
-void QWidgetNativeView::paintEvent(QPaintEvent * event)
-{
-    if (!m_backingStore)
-        return;
-    QPainter painter(this);
-    m_backingStore->paintToTarget(&painter, event->rect());
-}
-
-QPainter* QWidgetNativeView::painter()
-{
-    if (!m_painter)
-        m_painter = new QPainter(this);
-    return m_painter;
-}
-
-void QWidgetNativeView::resizeEvent(QResizeEvent *resizeEvent)
-{
-    if (m_backingStore)
-        m_backingStore->resize(resizeEvent->size());
-    QWidget::update();
-}
-
-bool QWidgetNativeView::event(QEvent *event)
-{
-    if (!m_view || !m_view->handleEvent(event))
-        return QWidget::event(event);
-    return true;
-}
-
-QQuickNativeView::QQuickNativeView(content::RenderWidgetHostViewQt* view, QQuickItem *parent)
-    : QQuickPaintedItem(parent)
-    , m_backingStore(0)
-    , m_view(view)
-{
-    setFocus(true);
-    setAcceptedMouseButtons(Qt::AllButtons);
-}
-
-QRectF QQuickNativeView::screenRect() const
-{
-    QPointF pos = mapToScene(QPointF(0,0));
-    return QRectF(pos.x(), pos.y(), width(), height());
-}
-
-void QQuickNativeView::show()
-{
-    setVisible(true);
-}
-
-void QQuickNativeView::hide()
-{
-    setVisible(true);
-}
-
-bool QQuickNativeView::isVisible() const
-{
-    return QQuickPaintedItem::isVisible();
-}
-
-QWindow* QQuickNativeView::window() const
-{
-    return QQuickPaintedItem::window();
-}
-
-void QQuickNativeView::update(const QRect& rect)
-{
-    QQuickPaintedItem::update(rect);
-}
-
-void QQuickNativeView::paint(QPainter *painter)
-{
-    if (!m_backingStore)
-        return;
-
-    m_backingStore->paintToTarget(painter, boundingRect());
-}
-
-void QQuickNativeView::setBackingStore(BackingStoreQt* backingStore)
-{
-    m_backingStore = backingStore;
-    if (m_backingStore)
-        m_backingStore->resize(QSize(width(), height()));
-}
-
-QSGNode * QQuickNativeView::updatePaintNode(QSGNode * oldNode, UpdatePaintNodeData * data)
-{
-    return QQuickPaintedItem::updatePaintNode(oldNode, data);
-}
-
-void QQuickNativeView::resizeBackingStore()
-{
-    if (m_backingStore)
-        m_backingStore->resize(QSize(width(), height()));
-}
-
-void QQuickNativeView::resize(int width, int height)
-{
-    resetWidth();
-    resetHeight();
-    setWidth(width);
-    setHeight(height);
-    resizeBackingStore();
-    update();
-}
-
-void QQuickNativeView::focusInEvent(QFocusEvent *event)
-{
-    m_view->handleFocusEvent(event);
-}
-
-void QQuickNativeView::focusOutEvent(QFocusEvent *event)
-{
-    m_view->handleFocusEvent(event);
-}
-
-void QQuickNativeView::mousePressEvent(QMouseEvent *event)
-{
-    setFocus(true);
-    m_view->handleMouseEvent(event);
-}
-
-void QQuickNativeView::mouseMoveEvent(QMouseEvent *event)
-{
-    m_view->handleMouseEvent(event);
-}
-
-void QQuickNativeView::mouseReleaseEvent(QMouseEvent *event)
-{
-    m_view->handleMouseEvent(event);
-}
-
-void QQuickNativeView::mouseDoubleClickEvent(QMouseEvent *event)
-{
-    m_view->handleMouseEvent(event);
-}
-
-void QQuickNativeView::keyPressEvent(QKeyEvent *event)
-{
-    m_view->handleKeyEvent(event);
-}
-
-void QQuickNativeView::keyReleaseEvent(QKeyEvent *event)
-{
-    m_view->handleKeyEvent(event);
-}
-
-void QQuickNativeView::wheelEvent(QWheelEvent *event)
-{
-    m_view->handleWheelEvent(event);
-}
diff --git a/shared/native_view_qt.h b/shared/native_view_qt.h
deleted file mode 100644
index 6a15701e8..000000000
--- a/shared/native_view_qt.h
+++ /dev/null
@@ -1,97 +0,0 @@
-#ifndef NATIVE_VIEW_QT_H
-#define NATIVE_VIEW_QT_H
-
-
-#include <QWidget>
-#include <QQuickPaintedItem>
-
-class BackingStoreQt;
-class QWindow;
-class QQuickItem;
-class QFocusEvent;
-class QMouseEvent;
-class QKeyEvent;
-class QWheelEvent;
-
-namespace content {
-	class RenderWidgetHostViewQt;
-}
-
-class NativeViewQt {
-public:
-    virtual ~NativeViewQt() {}
-    virtual void setBackingStore(BackingStoreQt* backingStore) = 0;
-    virtual QRectF screenRect() const = 0;
-    virtual void show() = 0;
-    virtual void hide() = 0;
-    virtual bool isVisible() const = 0;
-    virtual QWindow* window() const = 0;
-    virtual void update(const QRect& rect = QRect()) = 0;
-};
-
-class QWidgetNativeView : public QWidget, public NativeViewQt
-{
-public:
-    QWidgetNativeView(content::RenderWidgetHostViewQt* view, QWidget *parent = 0);
-
-    virtual void setBackingStore(BackingStoreQt* backingStore);
-    virtual QRectF screenRect() const;
-    virtual void show();
-    virtual void hide();
-    virtual bool isVisible() const;
-    virtual QWindow* window() const;
-    virtual void update(const QRect& rect = QRect());
-
-    QPainter* painter();
-
-protected:
-	void paintEvent(QPaintEvent * event);
-    bool event(QEvent *event);
-    void resizeEvent(QResizeEvent *resizeEvent);
-
-private:
-    BackingStoreQt* m_backingStore;
-    QPainter* m_painter;
-    content::RenderWidgetHostViewQt *m_view;
-};
-
-class QQuickNativeView : public QQuickPaintedItem, public NativeViewQt
-{
-    Q_OBJECT
-public:
-    QQuickNativeView(content::RenderWidgetHostViewQt* view, QQuickItem *parent = 0);
-
-    virtual void setBackingStore(BackingStoreQt* backingStore);
-    virtual QRectF screenRect() const;
-    virtual void show();
-    virtual void hide();
-    virtual bool isVisible() const;
-    virtual QWindow* window() const;
-    virtual void update(const QRect& rect = QRect());
-
-    void paint(QPainter *painter);
-    void resize(int width, int height);
-
-    void focusInEvent(QFocusEvent*);
-    void focusOutEvent(QFocusEvent*);
-    void mousePressEvent(QMouseEvent*);
-    void mouseMoveEvent(QMouseEvent*);
-    void mouseReleaseEvent(QMouseEvent*);
-    void mouseDoubleClickEvent(QMouseEvent*);
-    void keyPressEvent(QKeyEvent*);
-    void keyReleaseEvent(QKeyEvent*);
-    void wheelEvent(QWheelEvent*);
-
-protected Q_SLOTS:
-    void resizeBackingStore();
-
-protected:
-    QSGNode* updatePaintNode(QSGNode * oldNode, UpdatePaintNodeData * data);
-
-private:
-    BackingStoreQt* m_backingStore;
-    content::RenderWidgetHostViewQt *m_view;
-
-};
-
-#endif
diff --git a/shared/render_widget_host_view_qt.cpp b/shared/render_widget_host_view_qt.cpp
index 46a710591..759667000 100644
--- a/shared/render_widget_host_view_qt.cpp
+++ b/shared/render_widget_host_view_qt.cpp
@@ -42,9 +42,8 @@
 #include "render_widget_host_view_qt.h"
 
 #include "backing_store_qt.h"
+#include "render_widget_host_view_qt_delegate.h"
 #include "web_event_factory.h"
-#include "native_view_container_qt.h"
-#include "native_view_qt.h"
 
 #include "content/browser/renderer_host/render_view_host_impl.h"
 #include "content/common/gpu/gpu_messages.h"
@@ -77,9 +76,9 @@ static void GetScreenInfoFromNativeWindow(QWindow* window, WebKit::WebScreenInfo
 
 namespace content {
 
-RenderWidgetHostView* RenderWidgetHostView::CreateViewForWidget(
-    RenderWidgetHost* widget) {
-  return new RenderWidgetHostViewQt(widget);
+RenderWidgetHostView* RenderWidgetHostView::CreateViewForWidget(RenderWidgetHost*) {
+    // WebContentsViewQt should take care of this directly.
+    Q_ASSERT(false);
 }
 
 // static
@@ -90,7 +89,7 @@ void RenderWidgetHostViewPort::GetDefaultScreenInfo(WebKit::WebScreenInfo* resul
 
 RenderWidgetHostViewQt::RenderWidgetHostViewQt(content::RenderWidgetHost* widget)
     : m_host(content::RenderWidgetHostImpl::From(widget))
-    , m_view(0)
+    , m_delegate(0)
     , about_to_validate_and_paint_(false)
 {
     m_host->SetView(this);
@@ -128,28 +127,19 @@ bool RenderWidgetHostViewQt::handleEvent(QEvent* event) {
 
 content::BackingStore *RenderWidgetHostViewQt::AllocBackingStore(const gfx::Size &size)
 {
-    if (m_view)
-        return new BackingStoreQt(m_host, size, new QWindow);
-    return 0;
+    return new BackingStoreQt(m_host, size, new QWindow);
 }
 
 void RenderWidgetHostViewQt::InitAsChild(gfx::NativeView parent_view)
 {
-    NativeViewContainerQt* container = reinterpret_cast<NativeViewContainerQt*>(parent_view);
-    m_view = container->createNativeView(this);
-    bool force_create = !m_host->empty();
-    BackingStoreQt* backing_store = static_cast<BackingStoreQt*>(m_host->GetBackingStore(force_create));
-    m_view->setBackingStore(backing_store);
 }
 
 void RenderWidgetHostViewQt::InitAsPopup(content::RenderWidgetHostView*, const gfx::Rect&)
 {
-    // m_view = new RasterWindow(this);
 }
 
 void RenderWidgetHostViewQt::InitAsFullscreen(content::RenderWidgetHostView*)
 {
-    // m_view = new RasterWindow(this);
 }
 
 content::RenderWidgetHost* RenderWidgetHostViewQt::GetRenderWidgetHost() const
@@ -164,7 +154,7 @@ void RenderWidgetHostViewQt::SetSize(const gfx::Size& size)
     // int width = std::min(size.width(), kMaxWindowWidth);
     // int height = std::min(size.height(), kMaxWindowHeight);
     // if (IsPopup())
-        // m_view->resize(width,height);
+        // m_delegate->resize(width,height);
 
     if (m_requestedSize.width() != width ||
         m_requestedSize.height() != height) {
@@ -178,7 +168,7 @@ void RenderWidgetHostViewQt::SetBounds(const gfx::Rect& rect)
 {
     // This is called when webkit has sent us a Move message.
     // if (IsPopup())
-        // m_view->setGeometry(rect.x(), rect.y(), rect.width(), rect.height());
+        // m_delegate->setGeometry(rect.x(), rect.y(), rect.width(), rect.height());
     SetSize(rect.size());
 }
 
@@ -204,12 +194,12 @@ gfx::NativeViewAccessible RenderWidgetHostViewQt::GetNativeViewAccessible()
 // Set focus to the associated View component.
 void RenderWidgetHostViewQt::Focus()
 {
-    // m_view->setFocus(Qt::MouseFocusReason);
+    // m_delegate->setFocus(Qt::MouseFocusReason);
 }
 
 bool RenderWidgetHostViewQt::HasFocus() const
 {
-    // return m_view->hasFocus();
+    // return m_delegate->hasFocus();
     return true;
 }
 
@@ -220,23 +210,23 @@ bool RenderWidgetHostViewQt::IsSurfaceAvailableForCopy() const
 
 void RenderWidgetHostViewQt::Show()
 {
-    m_view->show();
+    m_delegate->show();
 }
 
 void RenderWidgetHostViewQt::Hide()
 {
-    m_view->hide();
+    m_delegate->hide();
 }
 
 bool RenderWidgetHostViewQt::IsShowing()
 {
-    return m_view->isVisible();
+    return m_delegate->isVisible();
 }
 
 // Retrieve the bounds of the View, in screen coordinates.
 gfx::Rect RenderWidgetHostViewQt::GetViewBounds() const
 {
-    QRectF p = m_view->screenRect();
+    QRectF p = m_delegate->screenRect();
     return gfx::Rect(p.x(), p.y(), p.width(), p.height());
 }
 
@@ -281,7 +271,7 @@ gfx::NativeView RenderWidgetHostViewQt::BuildInputMethodsGtkMenu()
 
 void RenderWidgetHostViewQt::WasShown()
 {
-    if (m_view->isVisible())
+    if (m_delegate->isVisible())
         return;
 
     m_host->WasShown();
@@ -289,7 +279,7 @@ void RenderWidgetHostViewQt::WasShown()
 
 void RenderWidgetHostViewQt::WasHidden()
 {
-    if (!m_view->isVisible())
+    if (!m_delegate->isVisible())
         return;
 
     m_host->WasHidden();
@@ -334,7 +324,7 @@ void RenderWidgetHostViewQt::ImeCompositionRangeChanged(const ui::Range&, const
 
 void RenderWidgetHostViewQt::DidUpdateBackingStore(const gfx::Rect& scroll_rect, const gfx::Vector2d& scroll_delta, const std::vector<gfx::Rect>& copy_rects)
 {
-    if (!m_view || !m_view->isVisible())
+    if (!m_delegate->isVisible())
         return;
 
     if (about_to_validate_and_paint_)
@@ -361,8 +351,8 @@ void RenderWidgetHostViewQt::RenderViewGone(base::TerminationStatus, int)
 
 void RenderWidgetHostViewQt::Destroy()
 {
-    delete m_view;
-    m_view = 0;
+    delete m_delegate;
+    m_delegate = 0;
 }
 
 void RenderWidgetHostViewQt::SetTooltipText(const string16&)
@@ -436,7 +426,7 @@ bool RenderWidgetHostViewQt::HasAcceleratedSurface(const gfx::Size&)
 
 void RenderWidgetHostViewQt::GetScreenInfo(WebKit::WebScreenInfo* results)
 {
-    QWindow* window = m_view->window();
+    QWindow* window = m_delegate->window();
     if (!window)
         return;
     GetScreenInfoFromNativeWindow(window, results);
@@ -444,10 +434,10 @@ void RenderWidgetHostViewQt::GetScreenInfo(WebKit::WebScreenInfo* results)
 
 gfx::Rect RenderWidgetHostViewQt::GetBoundsInRootWindow()
 {
-    if (!m_view || !m_view->window())
+    if (!m_delegate->window())
         return gfx::Rect();
 
-    QRect r = m_view->window()->frameGeometry();
+    QRect r = m_delegate->window()->frameGeometry();
     return gfx::Rect(r.x(), r.y(), r.width(), r.height());
 }
 
@@ -479,10 +469,10 @@ void RenderWidgetHostViewQt::Paint(const gfx::Rect& damage_rect)
     // Calling GetBackingStore maybe have changed |invalid_rect_|...
     about_to_validate_and_paint_ = false;
 
-    if (backing_store && m_view) {
-        m_view->setBackingStore(backing_store);
+    if (backing_store) {
+        m_delegate->setBackingStore(backing_store);
         QRect r(invalid_rect_.x(), invalid_rect_.y(), invalid_rect_.width(), invalid_rect_.height());
-        m_view->update(r);
+        m_delegate->update(r);
     }
 }
 
diff --git a/shared/render_widget_host_view_qt.h b/shared/render_widget_host_view_qt.h
index fce2144df..79b9921ae 100644
--- a/shared/render_widget_host_view_qt.h
+++ b/shared/render_widget_host_view_qt.h
@@ -56,7 +56,7 @@ class QFocusEvent;
 class QKeyEvent;
 class QMouseEvent;
 class QWheelEvent;
-class NativeViewQt;
+class RenderWidgetHostViewQtDelegate;
 
 namespace content {
 
@@ -67,6 +67,7 @@ public:
     RenderWidgetHostViewQt(content::RenderWidgetHost* widget);
     ~RenderWidgetHostViewQt();
 
+    void SetDelegate(RenderWidgetHostViewQtDelegate* delegate) { m_delegate = delegate; }
     bool handleEvent(QEvent* event);
 
     virtual content::BackingStore *AllocBackingStore(const gfx::Size &size);
@@ -136,7 +137,7 @@ private:
     bool IsPopup() const;
 
     content::RenderWidgetHostImpl *m_host;
-    NativeViewQt *m_view;
+    RenderWidgetHostViewQtDelegate *m_delegate;
     gfx::Size m_requestedSize;
 
     // This is true when we are currently painting and thus should handle extra
diff --git a/shared/render_widget_host_view_qt_delegate.h b/shared/render_widget_host_view_qt_delegate.h
new file mode 100644
index 000000000..c01d7d942
--- /dev/null
+++ b/shared/render_widget_host_view_qt_delegate.h
@@ -0,0 +1,21 @@
+#ifndef RENDER_WIDGET_HOST_VIEW_QT_DELEGATE_H
+#define RENDER_WIDGET_HOST_VIEW_QT_DELEGATE_H
+
+#include <QRect>
+
+class BackingStoreQt;
+class QWindow;
+
+class RenderWidgetHostViewQtDelegate {
+public:
+    virtual ~RenderWidgetHostViewQtDelegate() {}
+    virtual void setBackingStore(BackingStoreQt* backingStore) = 0;
+    virtual QRectF screenRect() const = 0;
+    virtual void show() = 0;
+    virtual void hide() = 0;
+    virtual bool isVisible() const = 0;
+    virtual QWindow* window() const = 0;
+    virtual void update(const QRect& rect = QRect()) = 0;
+};
+
+#endif
diff --git a/shared/shared.pro b/shared/shared.pro
index 33c5d4051..053dacc4b 100644
--- a/shared/shared.pro
+++ b/shared/shared.pro
@@ -23,13 +23,11 @@ QT += widgets quick
 SOURCES = \
         backing_store_qt.cpp \
         render_widget_host_view_qt.cpp \
-        web_event_factory.cpp \
-        native_view_qt.cpp
+        web_event_factory.cpp
 
 HEADERS = \
         backing_store_qt.h \
-        native_view_container_qt.h \
-        native_view_qt.h \
         render_widget_host_view_qt.h \
+        render_widget_host_view_qt_delegate.h \
         web_event_factory.h
 
-- 
GitLab