Source/WebKit2/ChangeLog

 12011-08-03 Alexis Menard <alexis.menard@openbossa.org>
 2
 3 [Qt] Make navigation actions properly usable in QML.
 4 https://bugs.webkit.org/show_bug.cgi?id=65624
 5
 6 Add a new class that is exposed in QML to control the navigation
 7 like reload/stop/back/forward. Enums are not very QML friendly,
 8 it not possible to use enums that are not declared in the same class
 9 than the object exposed in QML, therefore it makes hard the sharing
 10 between the desktop and the touch views. In addition namespaced enums are
 11 even harder to support in QML. QWebNavigationController is
 12 not really meant to be used in C++ but it is exported for convenience
 13 reason (tests and MiniBrowser) so its API is not meant to be public but
 14 exposed in QML through properties and convenience slots. The QML code to use
 15 the navigation action in QML will look like "desktopView.navigation.reload();"
 16 or "if (desktopView.navigation.reloadAction.enabled) ...".
 17
 18 Reviewed by NOBODY (OOPS!).
 19
 20 * UIProcess/API/qt/WKView.h: To get the forward header generated
 21 * UIProcess/API/qt/qdesktopwebview.cpp:
 22 (QDesktopWebViewPrivate::QDesktopWebViewPrivate):
 23 (QDesktopWebView::navigationController):
 24 * UIProcess/API/qt/qdesktopwebview.h:
 25 * UIProcess/API/qt/qdesktopwebview_p.h:
 26 * UIProcess/API/qt/qmlplugin/plugin.cpp:
 27 (WebKit2QmlPlugin::registerTypes):
 28 * UIProcess/API/qt/qtouchwebpage.cpp:
 29 (QTouchWebPage::navigationController):
 30 (QTouchWebPagePrivate::QTouchWebPagePrivate):
 31 * UIProcess/API/qt/qtouchwebpage.h:
 32 * UIProcess/API/qt/qtouchwebpage_p.h:
 33 * UIProcess/API/qt/qwebnavigationcontroller.cpp: Added.
 34 (QWebNavigationControllerPrivate::QWebNavigationControllerPrivate):
 35 (QWebNavigationController::QWebNavigationController):
 36 (QWebNavigationController::~QWebNavigationController):
 37 (QWebNavigationController::backAction):
 38 (QWebNavigationController::forwardAction):
 39 (QWebNavigationController::stopAction):
 40 (QWebNavigationController::reloadAction):
 41 (QWebNavigationController::navigationAction):
 42 (QWebNavigationController::back):
 43 (QWebNavigationController::forward):
 44 (QWebNavigationController::stop):
 45 (QWebNavigationController::reload):
 46 * UIProcess/API/qt/qwebnavigationcontroller.h: Added.
 47 * UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp:
 48 (WebViewAbstraction::triggerNavigationAction):
 49 * UIProcess/API/qt/tests/qdesktopwebview/tst_qdesktopwebview.cpp:
 50 (tst_QDesktopWebView::navigationActionsStatusAtStartup):
 51 (LoadStartedCatcher::onLoadStarted):
 52 (tst_QDesktopWebView::stopActionEnabledAfterLoadStarted):
 53 * UIProcess/API/qt/tests/qtouchwebview/tst_qtouchwebview.cpp:
 54 (tst_QTouchWebView::navigationActionsStatusAtStartup):
 55 * WebKit2API.pri:
 56
1572011-08-03 Pavel Feldman <pfeldman@google.com>
258
359 Web Inspector: [Timeline] Hover on paint events and see rect outline around that area.
92286

Source/WebKit2/WebKit2API.pri

@@WEBKIT2_API_SOURCES = \
4949 $$SOURCE_DIR/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp \
5050 $$SOURCE_DIR/WebKit2/UIProcess/API/qt/qtouchwebview.cpp \
5151 $$SOURCE_DIR/WebKit2/UIProcess/API/qt/qweberror.cpp \
 52 $$SOURCE_DIR/WebKit2/UIProcess/API/qt/qwebnavigationcontroller.cpp \
5253 $$SOURCE_DIR/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp \
5354 $$SOURCE_DIR/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.cpp \
5455 $$SOURCE_DIR/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.cpp \

@@WEBKIT2_API_HEADERS += \
131132 $$SOURCE_DIR/WebKit2/UIProcess/API/qt/qweberror.h \
132133 $$SOURCE_DIR/WebKit2/UIProcess/API/qt/qweberror_p.h \
133134 $$SOURCE_DIR/WebKit2/UIProcess/API/qt/qwebkittypes.h \
 135 $$SOURCE_DIR/WebKit2/UIProcess/API/qt/qwebnavigationcontroller.h \
134136 $$SOURCE_DIR/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleBackForwardList.h \
135137 $$SOURCE_DIR/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleBackForwardListItem.h \
136138 $$SOURCE_DIR/WebKit2/WebProcess/InjectedBundle/API/c/WKBundleHitTestResult.h \
92285

Source/WebKit2/UIProcess/API/qt/WKView.h

2424#include <WebKit2/qdesktopwebview.h>
2525#include <WebKit2/qtouchwebview.h>
2626#include <WebKit2/qtouchwebpage.h>
 27#include <WebKit2/qwebnavigationcontroller.h>
2728
2829#endif /* WKView_h */
92285

Source/WebKit2/UIProcess/API/qt/qdesktopwebview.cpp

@@QDesktopWebViewPrivate::QDesktopWebViewP
4141 : q(q)
4242 , page(this, contextRef ? new QWKContext(contextRef) : defaultWKContext(), pageGroupRef)
4343 , isCrashed(false)
 44 , navigationController(0)
4445{
4546}
4647

@@QString QDesktopWebView::title() const
208209 return d->page.title();
209210}
210211
211 QAction* QDesktopWebView::navigationAction(QtWebKit::NavigationAction which) const
 212QWebNavigationController* QDesktopWebView::navigationController() const
212213{
213  return d->page.navigationAction(which);
 214 if (!d->navigationController)
 215 d->navigationController = new QWebNavigationController(&d->page);
 216 return d->navigationController;
214217}
215218
216219static void paintCrashedPage(QPainter* painter, const QRectF& rect)
92285

Source/WebKit2/UIProcess/API/qt/qdesktopwebview.h

2929
3030class QDesktopWebViewPrivate;
3131class QWebError;
 32class QWebNavigationController;
3233
3334QT_BEGIN_NAMESPACE
3435class QFocusEvent;

@@class QWEBKIT_EXPORT QDesktopWebView : p
5253 Q_PROPERTY(QString title READ title NOTIFY titleChanged)
5354 Q_PROPERTY(QUrl url READ url NOTIFY urlChanged)
5455 Q_PROPERTY(int loadProgress READ loadProgress NOTIFY loadProgressChanged)
55 
56  Q_ENUMS(NavigationAction)
 56 Q_PROPERTY(QWebNavigationController* navigation READ navigationController CONSTANT)
5757
5858public:
59 
6059 QDesktopWebView(QSGItem* parent = 0);
6160 virtual ~QDesktopWebView();
6261

@@public:
6463 QString title() const;
6564 int loadProgress() const;
6665
67  Q_INVOKABLE QAction* navigationAction(QtWebKit::NavigationAction which) const;
 66 QWebNavigationController* navigationController() const;
6867
6968public Q_SLOTS:
7069 void load(const QUrl&);
92285

Source/WebKit2/UIProcess/API/qt/qdesktopwebview_p.h

2222#define qdesktopwebview_p_h
2323
2424#include "qdesktopwebpageproxy.h"
 25#include "qwebnavigationcontroller.h"
2526#include "ViewInterface.h"
2627
2728class QDesktopWebView;

@@public:
3738 QDesktopWebPageProxy page;
3839
3940 bool isCrashed;
 41 QWebNavigationController* navigationController;
4042
4143private:
4244 /* Implementation of ViewInterface */
92285

Source/WebKit2/UIProcess/API/qt/qtouchwebpage.cpp

@@void QTouchWebPage::geometryChanged(cons
122122 d->page->setDrawingAreaSize(newGeometry.size().toSize());
123123}
124124
125 QAction* QTouchWebPage::navigationAction(QtWebKit::NavigationAction which)
 125QWebNavigationController* QTouchWebPage::navigationController() const
126126{
127  return d->page->navigationAction(which);
 127 if (!d->navigationController)
 128 d->navigationController = new QWebNavigationController(d->page);
 129 return d->navigationController;
128130}
129131
130132QTouchWebPagePrivate::QTouchWebPagePrivate(QTouchWebPage* view)
131133 : q(view)
132134 , page(0)
 135 , navigationController(0)
133136{
134137}
135138
92285

Source/WebKit2/UIProcess/API/qt/qtouchwebpage.h

3030class QTouchWebPagePrivate;
3131class QTouchWebPageProxy;
3232class QWebError;
 33class QWebNavigationController;
3334
3435namespace WebKit {
3536 class TouchViewInterface;

@@class QWEBKIT_EXPORT QTouchWebPage : pub
4041 Q_PROPERTY(QString title READ title NOTIFY titleChanged)
4142 Q_PROPERTY(QUrl url READ url NOTIFY urlChanged)
4243 Q_PROPERTY(int loadProgress READ loadProgress NOTIFY loadProgressChanged)
 44 Q_PROPERTY(QWebNavigationController* navigation READ navigationController CONSTANT)
4345
4446public:
4547 QTouchWebPage(QSGItem* parent = 0);

@@public:
5254 Q_INVOKABLE QString title() const;
5355 int loadProgress() const;
5456
55  QAction* navigationAction(QtWebKit::NavigationAction which);
 57 QWebNavigationController* navigationController() const;
5658
5759 virtual void paint(QPainter*);
5860 virtual bool event(QEvent*);
92285

Source/WebKit2/UIProcess/API/qt/qtouchwebpage_p.h

2323
2424#include <QMenu>
2525#include "qtouchwebpage.h"
 26#include "qwebnavigationcontroller.h"
2627
2728class QRectF;
2829class QString;

@@public:
4243
4344 QTouchWebPage* const q;
4445 QTouchWebPageProxy* page;
 46 QWebNavigationController* navigationController;
4547};
4648
4749#endif /* qtouchwebpage_p_h */
92285

Source/WebKit2/UIProcess/API/qt/qwebnavigationcontroller.cpp

 1/*
 2 * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies)
 3 *
 4 * This library is free software; you can redistribute it and/or
 5 * modify it under the terms of the GNU Library General Public
 6 * License as published by the Free Software Foundation; either
 7 * version 2 of the License, or (at your option) any later version.
 8 *
 9 * This program is distributed in the hope that it will be useful,
 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 12 * Library General Public License for more details.
 13 *
 14 * You should have received a copy of the GNU Library General Public License
 15 * along with this program; see the file COPYING.LIB. If not, write to
 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 17 * Boston, MA 02110-1301, USA.
 18 *
 19 */
 20
 21#include "config.h"
 22
 23#include "qwebnavigationcontroller.h"
 24
 25#include "QtWebPageProxy.h"
 26#include "qwebkittypes.h"
 27
 28class QWebNavigationControllerPrivate {
 29public:
 30 QWebNavigationControllerPrivate(QtWebPageProxy* pageProxy)
 31 : pageProxy(pageProxy)
 32 {
 33
 34 }
 35
 36 QtWebPageProxy* pageProxy;
 37};
 38
 39QWebNavigationController::QWebNavigationController(QtWebPageProxy* pageProxy)
 40 : d(new QWebNavigationControllerPrivate(pageProxy))
 41{
 42}
 43
 44QWebNavigationController::~QWebNavigationController()
 45{
 46 delete d;
 47}
 48
 49QAction* QWebNavigationController::backAction() const
 50{
 51 return d->pageProxy->navigationAction(QtWebKit::Back);
 52}
 53
 54QAction* QWebNavigationController::forwardAction() const
 55{
 56 return d->pageProxy->navigationAction(QtWebKit::Forward);
 57}
 58
 59QAction* QWebNavigationController::stopAction() const
 60{
 61 return d->pageProxy->navigationAction(QtWebKit::Stop);
 62}
 63
 64QAction* QWebNavigationController::reloadAction() const
 65{
 66 return d->pageProxy->navigationAction(QtWebKit::Reload);
 67}
 68
 69QAction* QWebNavigationController::navigationAction(QtWebKit::NavigationAction which) const
 70{
 71 return d->pageProxy->navigationAction(which);
 72}
 73
 74void QWebNavigationController::back()
 75{
 76 d->pageProxy->navigationAction(QtWebKit::Back)->trigger();
 77}
 78
 79void QWebNavigationController::forward()
 80{
 81 d->pageProxy->navigationAction(QtWebKit::Forward)->trigger();
 82}
 83
 84void QWebNavigationController::stop()
 85{
 86 d->pageProxy->navigationAction(QtWebKit::Stop)->trigger();
 87}
 88
 89void QWebNavigationController::reload()
 90{
 91 d->pageProxy->navigationAction(QtWebKit::Reload)->trigger();
 92}
0

Source/WebKit2/UIProcess/API/qt/qwebnavigationcontroller.h

 1/*
 2 * Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies)
 3 *
 4 * This library is free software; you can redistribute it and/or
 5 * modify it under the terms of the GNU Library General Public
 6 * License as published by the Free Software Foundation; either
 7 * version 2 of the License, or (at your option) any later version.
 8 *
 9 * This program is distributed in the hope that it will be useful,
 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 12 * Library General Public License for more details.
 13 *
 14 * You should have received a copy of the GNU Library General Public License
 15 * along with this program; see the file COPYING.LIB. If not, write to
 16 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 17 * Boston, MA 02110-1301, USA.
 18 *
 19 */
 20
 21#ifndef qwebnavigationcontroller_h
 22#define qwebnavigationcontroller_h
 23
 24
 25#include "qwebkitglobal.h"
 26#include "qwebkittypes.h"
 27#include <QtCore/QObject>
 28
 29QT_BEGIN_NAMESPACE
 30class QAction;
 31QT_END_NAMESPACE
 32
 33class QtWebPageProxy;
 34class QWebNavigationControllerPrivate;
 35
 36class QWEBKIT_EXPORT QWebNavigationController : public QObject {
 37 Q_OBJECT
 38 Q_PROPERTY(QAction* backAction READ backAction CONSTANT)
 39 Q_PROPERTY(QAction* forwardAction READ forwardAction CONSTANT)
 40 Q_PROPERTY(QAction* stopAction READ stopAction CONSTANT)
 41 Q_PROPERTY(QAction* reloadAction READ reloadAction CONSTANT)
 42public:
 43 QWebNavigationController(QtWebPageProxy*);
 44 ~QWebNavigationController();
 45
 46 QAction* backAction() const;
 47 QAction* forwardAction() const;
 48 QAction* stopAction() const;
 49 QAction* reloadAction() const;
 50
 51 QAction* navigationAction(QtWebKit::NavigationAction which) const;
 52
 53public slots:
 54 void back();
 55 void forward();
 56 void stop();
 57 void reload();
 58
 59private:
 60 QWebNavigationControllerPrivate* d;
 61};
 62
 63#endif // qwebnavigationcontroller_h
0

Source/WebKit2/UIProcess/API/qt/qmlplugin/plugin.cpp

2020#include "qdesktopwebview.h"
2121#include "qtouchwebpage.h"
2222#include "qtouchwebview.h"
 23#include "qwebnavigationcontroller.h"
2324
2425#include <QtDeclarative/qdeclarative.h>
2526#include <QtDeclarative/qdeclarativeextensionplugin.h>

@@public:
3435 Q_ASSERT(QLatin1String(uri) == QLatin1String("QtWebKit.experimental"));
3536 qmlRegisterType<QDesktopWebView>(uri, 5, 0, "DesktopWebView");
3637 qmlRegisterType<QTouchWebView>(uri, 5, 0, "TouchWebView");
 38 qmlRegisterUncreatableType<QWebNavigationController>(uri, 5, 0, "NavigationController", QObject::tr("Cannot create separate instance of NavigationController"));
3739 qmlRegisterUncreatableType<QTouchWebPage>(uri, 5, 0, "TouchWebPage", QObject::tr("Cannot create separate instance of TouchWebPage, use TouchWebView"));
3840 }
3941};
92285

Source/WebKit2/UIProcess/API/qt/tests/commonviewtests/webviewabstraction.cpp

2020#include <QAction>
2121#include <QApplication>
2222#include <QDesktopWidget>
 23#include <qwebnavigationcontroller.h>
2324#include "webviewabstraction.h"
2425
2526WebViewAbstraction::WebViewAbstraction()

@@int WebViewAbstraction::loadProgress() c
9899
99100void WebViewAbstraction::triggerNavigationAction(QtWebKit::NavigationAction which)
100101{
101  QAction* touchAction = touchWebView()->page()->navigationAction(which);
 102 QAction* touchAction = touchWebView()->page()->navigationController()->navigationAction(which);
102103 touchAction->trigger();
103  QAction* desktopAction = desktopWebView()->navigationAction(which);
 104 QAction* desktopAction = desktopWebView()->navigationController()->navigationAction(which);
104105 desktopAction->trigger();
105106}
106107
92285

Source/WebKit2/UIProcess/API/qt/tests/qdesktopwebview/tst_qdesktopwebview.cpp

2121#include <QScopedPointer>
2222#include <QtTest/QtTest>
2323#include <qdesktopwebview.h>
 24#include <qwebnavigationcontroller.h>
2425#include "../testwindow.h"
2526#include "../util.h"
2627

@@inline QDesktopWebView* tst_QDesktopWebV
6364
6465void tst_QDesktopWebView::navigationActionsStatusAtStartup()
6566{
66  QAction* backAction = webView()->navigationAction(QtWebKit::Back);
 67 QAction* backAction = webView()->navigationController()->backAction();
6768 QVERIFY(backAction);
6869 QCOMPARE(backAction->isEnabled(), false);
6970
70  QAction* forwardAction = webView()->navigationAction(QtWebKit::Forward);
 71 QAction* forwardAction = webView()->navigationController()->forwardAction();
7172 QVERIFY(forwardAction);
7273 QCOMPARE(forwardAction->isEnabled(), false);
7374
74  QAction* stopAction = webView()->navigationAction(QtWebKit::Stop);
 75 QAction* stopAction = webView()->navigationController()->stopAction();
7576 QVERIFY(stopAction);
7677 QCOMPARE(stopAction->isEnabled(), false);
7778
78  QAction* reloadAction = webView()->navigationAction(QtWebKit::Reload);
 79 QAction* reloadAction = webView()->navigationController()->reloadAction();
7980 QVERIFY(reloadAction);
8081 QCOMPARE(reloadAction->isEnabled(), false);
8182}

@@public slots:
9495 {
9596 QMetaObject::invokeMethod(this, "finished", Qt::QueuedConnection);
9697
97  QAction* stopAction = m_webView->navigationAction(QtWebKit::Stop);
 98 QAction* stopAction = m_webView->navigationController()->stopAction();
9899 QVERIFY(stopAction);
99100 QCOMPARE(stopAction->isEnabled(), true);
100101 }

@@private:
108109
109110void tst_QDesktopWebView::stopActionEnabledAfterLoadStarted()
110111{
111  QAction* stopAction = webView()->navigationAction(QtWebKit::Stop);
 112 QAction* stopAction = webView()->navigationController()->stopAction();
112113 QVERIFY(stopAction);
113114 QCOMPARE(stopAction->isEnabled(), false);
114115
92285

Source/WebKit2/UIProcess/API/qt/tests/qtouchwebview/tst_qtouchwebview.cpp

2121#include <QtTest/QtTest>
2222#include <qtouchwebpage.h>
2323#include <qtouchwebview.h>
 24#include <qwebnavigationcontroller.h>
2425#include "../testwindow.h"
2526#include "../util.h"
2627

@@void tst_QTouchWebView::accessPage()
7475
7576void tst_QTouchWebView::navigationActionsStatusAtStartup()
7677{
77  QAction* backAction = webView()->page()->navigationAction(QtWebKit::Back);
 78 QAction* backAction = webView()->page()->navigationController()->backAction();
7879 QVERIFY(backAction);
7980 QCOMPARE(backAction->isEnabled(), false);
8081
81  QAction* forwardAction = webView()->page()->navigationAction(QtWebKit::Forward);
 82 QAction* forwardAction = webView()->page()->navigationController()->forwardAction();
8283 QVERIFY(forwardAction);
8384 QCOMPARE(forwardAction->isEnabled(), false);
8485
85  QAction* stopAction = webView()->page()->navigationAction(QtWebKit::Stop);
 86 QAction* stopAction = webView()->page()->navigationController()->stopAction();
8687 QVERIFY(stopAction);
8788 QCOMPARE(stopAction->isEnabled(), false);
8889
89  QAction* reloadAction = webView()->page()->navigationAction(QtWebKit::Reload);
 90 QAction* reloadAction = webView()->page()->navigationController()->reloadAction();
9091 QVERIFY(reloadAction);
9192 QCOMPARE(reloadAction->isEnabled(), false);
9293}
92285

Tools/ChangeLog

 12011-08-03 Alexis Menard <alexis.menard@openbossa.org>
 2
 3 [Qt] Make navigation actions properly usable in QML.
 4 https://bugs.webkit.org/show_bug.cgi?id=65624
 5
 6 Fix compilation after the introduction of QWebNavigationController.
 7
 8 Reviewed by NOBODY (OOPS!).
 9
 10 * MiniBrowser/qt/BrowserView.cpp:
 11 (BrowserView::navigationAction):
 12
1132011-08-03 Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
214
315 [Qt] Fix running qmltests for WK2 in the bot
92286

Tools/MiniBrowser/qt/BrowserView.cpp

3434#include <qdesktopwebview.h>
3535#include <qtouchwebview.h>
3636#include <qtouchwebpage.h>
 37#include <qwebnavigationcontroller.h>
3738
3839BrowserView::BrowserView(bool useTouchWebView, QWidget* parent)
3940 : QSGCanvas(parent)

@@QDesktopWebView* BrowserView::desktopWeb
8889QAction* BrowserView::navigationAction(QtWebKit::NavigationAction which) const
8990{
9091 if (desktopWebView())
91  return desktopWebView()->navigationAction(which);
 92 return desktopWebView()->navigationController()->navigationAction(which);
9293 if (touchWebView())
93  return touchWebView()->page()->navigationAction(which);
 94 return touchWebView()->page()->navigationController()->navigationAction(which);
9495 Q_ASSERT(false);
9596 return 0;
9697}
92285