summaryrefslogtreecommitdiffstats
path: root/WebKitTools/DumpRenderTree/qt
diff options
context:
space:
mode:
authorKristian Monsen <kristianm@google.com>2010-09-08 12:18:00 +0100
committerKristian Monsen <kristianm@google.com>2010-09-11 12:08:58 +0100
commit5ddde30071f639962dd557c453f2ad01f8f0fd00 (patch)
tree775803c4ab35af50aa5f5472cd1fb95fe9d5152d /WebKitTools/DumpRenderTree/qt
parent3e63d9b33b753ca86d0765d1b3d711114ba9e34f (diff)
downloadexternal_webkit-5ddde30071f639962dd557c453f2ad01f8f0fd00.zip
external_webkit-5ddde30071f639962dd557c453f2ad01f8f0fd00.tar.gz
external_webkit-5ddde30071f639962dd557c453f2ad01f8f0fd00.tar.bz2
Merge WebKit at r66666 : Initial merge by git.
Change-Id: I57dedeb49859adc9c539e760f0e749768c66626f
Diffstat (limited to 'WebKitTools/DumpRenderTree/qt')
-rw-r--r--WebKitTools/DumpRenderTree/qt/DumpRenderTree.pro1
-rw-r--r--WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp105
-rw-r--r--WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.h18
-rw-r--r--WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp8
-rw-r--r--WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h4
-rw-r--r--WebKitTools/DumpRenderTree/qt/main.cpp14
6 files changed, 114 insertions, 36 deletions
diff --git a/WebKitTools/DumpRenderTree/qt/DumpRenderTree.pro b/WebKitTools/DumpRenderTree/qt/DumpRenderTree.pro
index 63554b2..5b81901 100644
--- a/WebKitTools/DumpRenderTree/qt/DumpRenderTree.pro
+++ b/WebKitTools/DumpRenderTree/qt/DumpRenderTree.pro
@@ -6,7 +6,6 @@ BASEDIR = $$PWD/../
isEmpty(OUTPUT_DIR): OUTPUT_DIR = ../../..
include(../../../WebKit.pri)
-INCLUDEPATH += /usr/include/freetype2
INCLUDEPATH += ../../..
INCLUDEPATH += ../../../JavaScriptCore
INCLUDEPATH += ../../../JavaScriptCore/ForwardingHeaders
diff --git a/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp b/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp
index 4a57d1d..00ccdb5 100644
--- a/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp
+++ b/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.cpp
@@ -159,7 +159,7 @@ WebPage::WebPage(QObject* parent, DumpRenderTree* drt)
connect(this, SIGNAL(requestPermissionFromUser(QWebFrame*, QWebPage::PermissionDomain)), this, SLOT(requestPermission(QWebFrame*, QWebPage::PermissionDomain)));
connect(this, SIGNAL(checkPermissionFromUser(QWebFrame*, QWebPage::PermissionDomain, QWebPage::PermissionPolicy&)), this, SLOT(checkPermission(QWebFrame*, QWebPage::PermissionDomain, QWebPage::PermissionPolicy&)));
- connect(this, SIGNAL(cancelRequestsForPermissionFromUser(QWebFrame*, QWebPage::PermissionDomain)), this, SLOT(cancelRequestsForPermissionFromUser(QWebFrame*, QWebPage::PermissionDomain)));
+ connect(this, SIGNAL(cancelRequestsForPermission(QWebFrame*, QWebPage::PermissionDomain)), this, SLOT(cancelPermission(QWebFrame*, QWebPage::PermissionDomain)));
}
WebPage::~WebPage()
@@ -202,6 +202,8 @@ void WebPage::resetSettings()
QWebSettings::setMaximumPagesInCache(0); // reset to default
settings()->setUserStyleSheetUrl(QUrl()); // reset to default
+
+ m_pendingGeolocationRequests.clear();
}
QWebPage *WebPage::createWindow(QWebPage::WebWindowType)
@@ -224,6 +226,15 @@ void WebPage::requestPermission(QWebFrame* frame, QWebPage::PermissionDomain dom
if (!m_drt->layoutTestController()->ignoreReqestForPermission())
setUserPermission(frame, domain, PermissionGranted);
break;
+ case GeolocationPermissionDomain:
+ if (m_drt->layoutTestController()->isGeolocationPermissionSet())
+ if (m_drt->layoutTestController()->geolocationPermission())
+ setUserPermission(frame, domain, PermissionGranted);
+ else
+ setUserPermission(frame, domain, PermissionDenied);
+ else
+ m_pendingGeolocationRequests.append(frame);
+ break;
default:
break;
}
@@ -243,8 +254,35 @@ void WebPage::checkPermission(QWebFrame* frame, QWebPage::PermissionDomain domai
}
}
-void WebPage::cancelRequestsForPermission(QWebFrame*, QWebPage::PermissionDomain)
+void WebPage::cancelPermission(QWebFrame* frame, QWebPage::PermissionDomain domain)
+{
+ switch (domain) {
+ case GeolocationPermissionDomain:
+ m_pendingGeolocationRequests.removeOne(frame);
+ break;
+ default:
+ break;
+ }
+}
+
+void WebPage::permissionSet(QWebPage::PermissionDomain domain)
{
+ switch (domain) {
+ case GeolocationPermissionDomain:
+ {
+ Q_ASSERT(m_drt->layoutTestController()->isGeolocationPermissionSet());
+ foreach (QWebFrame* frame, m_pendingGeolocationRequests)
+ if (m_drt->layoutTestController()->geolocationPermission())
+ setUserPermission(frame, domain, PermissionGranted);
+ else
+ setUserPermission(frame, domain, PermissionDenied);
+
+ m_pendingGeolocationRequests.clear();
+ break;
+ }
+ default:
+ break;
+ }
}
static QString urlSuitableForTestResult(const QString& url)
@@ -367,11 +405,6 @@ QObject* WebPage::createPlugin(const QString& classId, const QUrl& url, const QS
#endif
}
-bool WebPage::allowGeolocationRequest(QWebFrame *)
-{
- return m_drt->layoutTestController()->geolocationPermission();
-}
-
void WebPage::setViewGeometry(const QRect& rect)
{
if (WebViewGraphicsBased* v = qobject_cast<WebViewGraphicsBased*>(view()))
@@ -391,7 +424,7 @@ DumpRenderTree::DumpRenderTree()
: m_dumpPixels(false)
, m_stdin(0)
, m_enableTextOutput(false)
- , m_singleFileMode(false)
+ , m_standAloneMode(false)
, m_graphicsBased(false)
, m_persistentStoragePath(QString(getenv("DUMPRENDERTREE_TEMP")))
{
@@ -431,6 +464,9 @@ DumpRenderTree::DumpRenderTree()
connect(m_controller, SIGNAL(showPage()), this, SLOT(showPage()));
connect(m_controller, SIGNAL(hidePage()), this, SLOT(hidePage()));
+ // async geolocation permission set by controller
+ connect(m_controller, SIGNAL(geolocationPermissionSet()), this, SLOT(geolocationPermissionSet()));
+
connect(m_controller, SIGNAL(done()), this, SLOT(dump()));
m_eventSender = new EventSender(m_page);
m_textInputController = new TextInputController(m_page);
@@ -605,6 +641,40 @@ void DumpRenderTree::readLine()
processLine(QString::fromLocal8Bit(line.constData(), line.length()));
}
+void DumpRenderTree::processArgsLine(const QStringList &args)
+{
+ setStandAloneMode(true);
+
+ for (int i = 1; i < args.size(); ++i)
+ if (!args.at(i).startsWith('-'))
+ m_standAloneModeTestList.append(args[i]);
+
+ QFileInfo firstEntry(m_standAloneModeTestList.first());
+ if (firstEntry.isDir()) {
+ QDir folderEntry(m_standAloneModeTestList.first());
+ QStringList supportedExt;
+ // Check for all supported extensions (from Scripts/webkitpy/layout_tests/layout_package/test_files.py).
+ supportedExt << "*.html" << "*.shtml" << "*.xml" << "*.xhtml" << "*.xhtmlmp" << "*.pl" << "*.php" << "*.svg";
+ m_standAloneModeTestList = folderEntry.entryList(supportedExt, QDir::Files);
+ for (int i = 0; i < m_standAloneModeTestList.size(); ++i)
+ m_standAloneModeTestList[i] = folderEntry.absoluteFilePath(m_standAloneModeTestList[i]);
+ }
+
+ processLine(m_standAloneModeTestList.first());
+ m_standAloneModeTestList.removeFirst();
+
+ connect(this, SIGNAL(ready()), this, SLOT(loadNextTestInStandAloneMode()));
+}
+
+void DumpRenderTree::loadNextTestInStandAloneMode()
+{
+ if (m_standAloneModeTestList.isEmpty())
+ emit quit();
+
+ processLine(m_standAloneModeTestList.first());
+ m_standAloneModeTestList.removeFirst();
+}
+
void DumpRenderTree::processLine(const QString &input)
{
QString line = input;
@@ -636,14 +706,9 @@ void DumpRenderTree::processLine(const QString &input)
fi = QFileInfo(currentDir, line.prepend(QLatin1String("LayoutTests/")));
if (!fi.exists()) {
- if (isSingleFileMode())
- emit quit();
- else
- emit ready();
-
+ emit ready();
return;
}
-
}
open(QUrl::fromLocalFile(fi.absoluteFilePath()));
@@ -834,7 +899,7 @@ void DumpRenderTree::dump()
QWebFrame *mainFrame = m_page->mainFrame();
- if (isSingleFileMode()) {
+ if (isStandAloneMode()) {
QString markup = mainFrame->toHtml();
fprintf(stdout, "Source:\n\n%s\n", markup.toUtf8().constData());
}
@@ -922,10 +987,7 @@ void DumpRenderTree::dump()
fflush(stdout);
fflush(stderr);
- if (isSingleFileMode())
- emit quit();
- else
- emit ready();
+ emit ready();
}
void DumpRenderTree::titleChanged(const QString &s)
@@ -999,6 +1061,11 @@ int DumpRenderTree::windowCount() const
return windows.count() + 1;
}
+void DumpRenderTree::geolocationPermissionSet()
+{
+ m_page->permissionSet(QWebPage::GeolocationPermissionDomain);
+}
+
void DumpRenderTree::switchFocus(bool focused)
{
QFocusEvent event((focused) ? QEvent::FocusIn : QEvent::FocusOut, Qt::ActiveWindowFocusReason);
diff --git a/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.h b/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.h
index de0c6c5..3d34443 100644
--- a/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.h
+++ b/WebKitTools/DumpRenderTree/qt/DumpRenderTreeQt.h
@@ -79,9 +79,6 @@ public:
void setTextOutputEnabled(bool enable) { m_enableTextOutput = enable; }
bool isTextOutputEnabled() { return m_enableTextOutput; }
- void setSingleFileMode(bool flag) { m_singleFileMode = flag; }
- bool isSingleFileMode() { return m_singleFileMode; }
-
void setGraphicsBased(bool flag) { m_graphicsBased = flag; }
bool isGraphicsBased() { return m_graphicsBased; }
@@ -106,6 +103,7 @@ public:
#if defined(Q_WS_X11)
static void initializeFonts();
#endif
+ void processArgsLine(const QStringList&);
public Q_SLOTS:
void initJSObjects();
@@ -128,8 +126,13 @@ private Q_SLOTS:
void showPage();
void hidePage();
void dryRunPrint(QWebFrame*);
+ void loadNextTestInStandAloneMode();
+ void geolocationPermissionSet();
private:
+ void setStandAloneMode(bool flag) { m_standAloneMode = flag; }
+ bool isStandAloneMode() { return m_standAloneMode; }
+
QString dumpFramesAsText(QWebFrame* frame);
QString dumpBackForwardList(QWebPage* page);
QString dumpFrameScrollPosition(QWebFrame* frame);
@@ -137,6 +140,7 @@ private:
bool m_dumpPixels;
QString m_expectedHash;
+ QStringList m_standAloneModeTestList;
WebPage *m_page;
QWidget* m_mainView;
@@ -150,7 +154,7 @@ private:
QList<QObject*> windows;
bool m_enableTextOutput;
- bool m_singleFileMode;
+ bool m_standAloneMode;
bool m_graphicsBased;
QString m_persistentStoragePath;
};
@@ -188,12 +192,13 @@ public:
QObject* createPlugin(const QString&, const QUrl&, const QStringList&, const QStringList&);
+ void permissionSet(QWebPage::PermissionDomain domain);
+
public slots:
bool shouldInterruptJavaScript() { return false; }
- bool allowGeolocationRequest(QWebFrame *frame);
void requestPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
void checkPermission(QWebFrame* frame, QWebPage::PermissionDomain domain, QWebPage::PermissionPolicy& policy);
- void cancelRequestsForPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
+ void cancelPermission(QWebFrame* frame, QWebPage::PermissionDomain domain);
protected:
bool acceptNavigationRequest(QWebFrame* frame, const QNetworkRequest& request, NavigationType type);
@@ -204,6 +209,7 @@ private slots:
private:
QWebInspector* m_webInspector;
+ QList<QWebFrame*> m_pendingGeolocationRequests;
DumpRenderTree *m_drt;
};
diff --git a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
index 74baf37..b783141 100644
--- a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
+++ b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.cpp
@@ -68,6 +68,8 @@ void LayoutTestController::reset()
m_userStyleSheetEnabled = false;
m_desktopNotificationAllowedOrigins.clear();
m_ignoreDesktopNotification = false;
+ m_isGeolocationPermissionSet = false;
+ m_geolocationPermission = false;
DumpRenderTreeSupportQt::dumpEditingCallbacks(false);
DumpRenderTreeSupportQt::dumpFrameLoader(false);
@@ -715,6 +717,12 @@ void LayoutTestController::setMockDeviceOrientation(bool canProvideAlpha, double
void LayoutTestController::setGeolocationPermission(bool allow)
{
+ setGeolocationPermissionCommon(allow);
+ emit geolocationPermissionSet();
+}
+
+void LayoutTestController::setGeolocationPermissionCommon(bool allow)
+{
m_isGeolocationPermissionSet = true;
m_geolocationPermission = allow;
}
diff --git a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h
index 207e093..7e58f44 100644
--- a/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h
+++ b/WebKitTools/DumpRenderTree/qt/LayoutTestControllerQt.h
@@ -85,6 +85,7 @@ signals:
void showPage();
void hidePage();
+ void geolocationPermissionSet();
public slots:
void maybeDump(bool ok);
@@ -239,6 +240,9 @@ private slots:
void processWork();
private:
+ void setGeolocationPermissionCommon(bool allow);
+
+private:
bool m_hasDumped;
bool m_textDump;
bool m_dumpBackForwardList;
diff --git a/WebKitTools/DumpRenderTree/qt/main.cpp b/WebKitTools/DumpRenderTree/qt/main.cpp
index 7d1c08c..8349d73 100644
--- a/WebKitTools/DumpRenderTree/qt/main.cpp
+++ b/WebKitTools/DumpRenderTree/qt/main.cpp
@@ -143,7 +143,8 @@ int main(int argc, char* argv[])
QStringList args = app.arguments();
if (args.count() < 2) {
- qDebug() << "Usage: DumpRenderTree [-v|--pixel-tests] filename";
+ qDebug() << "Usage: DumpRenderTree [-v|--pixel-tests] filename [filename2..n]";
+ qDebug() << "Or folder containing test files: DumpRenderTree [-v|--pixel-tests] dirpath";
exit(0);
}
@@ -161,15 +162,8 @@ int main(int argc, char* argv[])
if (args.contains(QLatin1String("-"))) {
QObject::connect(&dumper, SIGNAL(ready()), &dumper, SLOT(readLine()), Qt::QueuedConnection);
QTimer::singleShot(0, &dumper, SLOT(readLine()));
- } else {
- dumper.setSingleFileMode(true);
- for (int i = 1; i < args.size(); ++i) {
- if (!args.at(i).startsWith('-')) {
- dumper.processLine(args.at(i));
- break;
- }
- }
- }
+ } else
+ dumper.processArgsLine(args);
return app.exec();