summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJocelyn Turcotte <jocelyn.turcotte@digia.com>2013-11-15 16:50:46 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-11-18 14:53:15 +0100
commita867d7673b9770fafa42907fffb5886d5f8d4c9c (patch)
treef90601ab2db8337aa8f0c7870d3e582c3f543ed8
parentec7b2ee70a8b2db7fb87f50671a001ddd54697b0 (diff)
Add a WebEngine.experimental QtQuick plugin library.
Bring this QtWebKit concept to our API as well to contain APIs that we aren't comfortable adding to the supported-forever group yet and allow trying them out unofficially for an undetermined number of releases first. Change-Id: I52c8655dfd2996ea461ac6c00de975002827a4c3 Reviewed-by: Andras Becsi <andras.becsi@digia.com> Reviewed-by: Arvid Nilsson <anilsson@blackberry.com> Reviewed-by: Zeno Albisser <zeno.albisser@digia.com>
-rw-r--r--lib/quick/plugin/experimental/experimental.pro13
-rw-r--r--lib/quick/plugin/experimental/plugin.cpp77
-rw-r--r--lib/quick/plugin/experimental/qmldir3
-rw-r--r--lib/quick/qquickwebengineview.cpp14
-rw-r--r--lib/quick/qquickwebengineview_p.h2
-rw-r--r--lib/quick/qquickwebengineview_p_p.h18
-rw-r--r--qtwebengine.pro10
7 files changed, 134 insertions, 3 deletions
diff --git a/lib/quick/plugin/experimental/experimental.pro b/lib/quick/plugin/experimental/experimental.pro
new file mode 100644
index 000000000..7ccfdaa76
--- /dev/null
+++ b/lib/quick/plugin/experimental/experimental.pro
@@ -0,0 +1,13 @@
+CXX_MODULE = qml
+TARGET = qtwebengineexperimentalplugin
+TARGETPATH = QtWebEngine/experimental
+IMPORT_VERSION = 1.0
+
+QT += webengine qml quick
+QT_PRIVATE += webengine-private qml-private quick-private gui-private core-private
+
+INCLUDEPATH += $$QTWEBENGINE_ROOT/lib $$QTWEBENGINE_ROOT/lib/quick
+
+SOURCES = plugin.cpp
+
+load(qml_plugin)
diff --git a/lib/quick/plugin/experimental/plugin.cpp b/lib/quick/plugin/experimental/plugin.cpp
new file mode 100644
index 000000000..08d482508
--- /dev/null
+++ b/lib/quick/plugin/experimental/plugin.cpp
@@ -0,0 +1,77 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtQml/qqmlextensionplugin.h>
+
+#include "qquickwebengineview_p.h"
+#include "qquickwebengineview_p_p.h"
+
+QT_BEGIN_NAMESPACE
+
+class QQuickWebEngineViewExperimentalExtension : public QObject {
+ Q_OBJECT
+ Q_PROPERTY(QQuickWebEngineViewExperimental* experimental READ experimental CONSTANT FINAL)
+public:
+ QQuickWebEngineViewExperimentalExtension(QObject *parent = 0) : QObject(parent) { }
+ QQuickWebEngineViewExperimental* experimental() { return static_cast<QQuickWebEngineView*>(parent())->d_func()->experimental(); }
+};
+
+class QtWebEngineExperimentalPlugin : public QQmlExtensionPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface/1.0")
+public:
+ virtual void registerTypes(const char *uri)
+ {
+ qWarning("\nWARNING: This project is using the experimental QML API extensions for QtWebEngine and is therefore tied to a specific QtWebEngine release.\n"
+ "WARNING: The experimental API will change from version to version, or even be removed. You have been warned!\n");
+
+ Q_ASSERT(QLatin1String(uri) == QLatin1String("QtWebEngine.experimental"));
+
+ qmlRegisterExtendedType<QQuickWebEngineView, QQuickWebEngineViewExperimentalExtension>(uri, 1, 0, "WebEngineView");
+ qmlRegisterUncreatableType<QQuickWebEngineViewExperimental>(uri, 1, 0, "WebEngineViewExperimental",
+ QObject::tr("Cannot create a separate instance of WebEngineViewExperimental"));
+ }
+};
+
+QT_END_NAMESPACE
+
+#include "plugin.moc"
diff --git a/lib/quick/plugin/experimental/qmldir b/lib/quick/plugin/experimental/qmldir
new file mode 100644
index 000000000..56ad22e70
--- /dev/null
+++ b/lib/quick/plugin/experimental/qmldir
@@ -0,0 +1,3 @@
+module QtWebEngine.experimental
+plugin qtwebengineexperimentalplugin
+typeinfo plugins.qmltypes
diff --git a/lib/quick/qquickwebengineview.cpp b/lib/quick/qquickwebengineview.cpp
index 970033a22..4cfff0102 100644
--- a/lib/quick/qquickwebengineview.cpp
+++ b/lib/quick/qquickwebengineview.cpp
@@ -51,12 +51,18 @@ QT_BEGIN_NAMESPACE
QQuickWebEngineViewPrivate::QQuickWebEngineViewPrivate()
: adapter(new WebContentsAdapter(qApp->property("QQuickWebEngineView_DisableHardwareAcceleration").toBool() ? SoftwareRenderingMode : HardwareAccelerationMode))
+ , e(new QQuickWebEngineViewExperimental(this))
, loadProgress(0)
, inspectable(false)
{
adapter->initialize(this);
}
+QQuickWebEngineViewExperimental *QQuickWebEngineViewPrivate::experimental() const
+{
+ return e;
+}
+
RenderWidgetHostViewQtDelegate *QQuickWebEngineViewPrivate::CreateRenderWidgetHostViewQtDelegate(RenderWidgetHostViewQtDelegateClient *client, RenderingMode mode)
{
#if (QT_VERSION >= QT_VERSION_CHECK(5, 2, 0))
@@ -134,6 +140,8 @@ void QQuickWebEngineViewPrivate::close()
QQuickWebEngineView::QQuickWebEngineView(QQuickItem *parent)
: QQuickItem(*(new QQuickWebEngineViewPrivate), parent)
{
+ Q_D(const QQuickWebEngineView);
+ d->e->q_ptr = this;
}
QQuickWebEngineView::~QQuickWebEngineView()
@@ -239,4 +247,10 @@ void QQuickWebEngineView::geometryChanged(const QRectF &newGeometry, const QRect
}
}
+QQuickWebEngineViewExperimental::QQuickWebEngineViewExperimental(QQuickWebEngineViewPrivate *viewPrivate)
+ : q_ptr(0)
+ , d_ptr(viewPrivate)
+{
+}
+
QT_END_NAMESPACE
diff --git a/lib/quick/qquickwebengineview_p.h b/lib/quick/qquickwebengineview_p.h
index 270ad779c..943ce0804 100644
--- a/lib/quick/qquickwebengineview_p.h
+++ b/lib/quick/qquickwebengineview_p.h
@@ -93,6 +93,8 @@ protected:
private:
Q_DECLARE_PRIVATE(QQuickWebEngineView)
+ friend class QQuickWebEngineViewExperimental;
+ friend class QQuickWebEngineViewExperimentalExtension;
};
QT_END_NAMESPACE
diff --git a/lib/quick/qquickwebengineview_p_p.h b/lib/quick/qquickwebengineview_p_p.h
index 541022538..e7c87ce1d 100644
--- a/lib/quick/qquickwebengineview_p_p.h
+++ b/lib/quick/qquickwebengineview_p_p.h
@@ -53,12 +53,27 @@ class WebContentsAdapter;
QT_BEGIN_NAMESPACE
class QQuickWebEngineView;
+class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineViewExperimental : public QObject {
+ Q_OBJECT
+public:
+
+private:
+ QQuickWebEngineViewExperimental(QQuickWebEngineViewPrivate* viewPrivate);
+ QQuickWebEngineView *q_ptr;
+ QQuickWebEngineViewPrivate *d_ptr;
+
+ Q_DECLARE_PRIVATE(QQuickWebEngineView)
+ Q_DECLARE_PUBLIC(QQuickWebEngineView)
+};
+
class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineViewPrivate : public QQuickItemPrivate, public WebContentsAdapterClient
{
public:
Q_DECLARE_PUBLIC(QQuickWebEngineView)
QQuickWebEngineViewPrivate();
+ QQuickWebEngineViewExperimental *experimental() const;
+
virtual RenderWidgetHostViewQtDelegate* CreateRenderWidgetHostViewQtDelegate(RenderWidgetHostViewQtDelegateClient *client, RenderingMode) Q_DECL_OVERRIDE;
virtual void titleChanged(const QString&) Q_DECL_OVERRIDE;
virtual void urlChanged(const QUrl&) Q_DECL_OVERRIDE;
@@ -74,6 +89,7 @@ public:
virtual bool javascriptDialog(JavascriptDialogType type, const QString &message, const QString &defaultValue = QString(), QString *result = 0) Q_DECL_OVERRIDE { return false; }
QExplicitlySharedDataPointer<WebContentsAdapter> adapter;
+ QQuickWebEngineViewExperimental *e;
QUrl icon;
int loadProgress;
bool inspectable;
@@ -81,4 +97,6 @@ public:
QT_END_NAMESPACE
+QML_DECLARE_TYPE(QQuickWebEngineViewExperimental)
+
#endif // QQUICKWEBENGINEVIEW_P_P_H
diff --git a/qtwebengine.pro b/qtwebengine.pro
index b640e5414..71396207a 100644
--- a/qtwebengine.pro
+++ b/qtwebengine.pro
@@ -18,12 +18,15 @@ webengine_lib.depends = build
quick_plugin_lib.subdir = lib/quick/plugin
quick_plugin_lib.target = sub-quick-plugin-lib
quick_plugin_lib.depends = webengine_lib
+quick_experimental_plugin_lib.subdir = lib/quick/plugin/experimental
+quick_experimental_plugin_lib.target = sub-quick-experimental-plugin-lib
+quick_experimental_plugin_lib.depends = webengine_lib
widgets_lib.subdir = lib/widgets
widgets_lib.target = sub-widgets-lib
widgets_lib.depends = build
-sub_examples.depends = quick_plugin_lib
-sub_tests.depends = quick_plugin_lib
+sub_examples.depends = quick_plugin_lib quick_experimental_plugin_lib
+sub_tests.depends = quick_plugin_lib quick_experimental_plugin_lib
# This is where we use the generated gypi files and run gyp_qtwebengine
build.depends = resources shared lib process
@@ -35,7 +38,8 @@ SUBDIRS += qmake_extras \
process \
build \
webengine_lib \
- quick_plugin_lib
+ quick_plugin_lib \
+ quick_experimental_plugin_lib
qtHaveModule(widgets) {
SUBDIRS += widgets_lib