1d0825bca7fe65beaee391d30da42e937db621564Steve Block/* 2d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies) 3d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2009 Girish Ramakrishnan <girish@forwardbias.in> 4d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2006 George Staikos <staikos@kde.org> 5d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2006 Dirk Mueller <mueller@kde.org> 6d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2006 Zack Rusin <zack@kde.org> 7d0825bca7fe65beaee391d30da42e937db621564Steve Block * Copyright (C) 2006 Simon Hausmann <hausmann@kde.org> 8d0825bca7fe65beaee391d30da42e937db621564Steve Block * 9d0825bca7fe65beaee391d30da42e937db621564Steve Block * All rights reserved. 10d0825bca7fe65beaee391d30da42e937db621564Steve Block * 11d0825bca7fe65beaee391d30da42e937db621564Steve Block * Redistribution and use in source and binary forms, with or without 12d0825bca7fe65beaee391d30da42e937db621564Steve Block * modification, are permitted provided that the following conditions 13d0825bca7fe65beaee391d30da42e937db621564Steve Block * are met: 14d0825bca7fe65beaee391d30da42e937db621564Steve Block * 1. Redistributions of source code must retain the above copyright 15d0825bca7fe65beaee391d30da42e937db621564Steve Block * notice, this list of conditions and the following disclaimer. 16d0825bca7fe65beaee391d30da42e937db621564Steve Block * 2. Redistributions in binary form must reproduce the above copyright 17d0825bca7fe65beaee391d30da42e937db621564Steve Block * notice, this list of conditions and the following disclaimer in the 18d0825bca7fe65beaee391d30da42e937db621564Steve Block * documentation and/or other materials provided with the distribution. 19d0825bca7fe65beaee391d30da42e937db621564Steve Block * 20d0825bca7fe65beaee391d30da42e937db621564Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 21d0825bca7fe65beaee391d30da42e937db621564Steve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22d0825bca7fe65beaee391d30da42e937db621564Steve Block * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23d0825bca7fe65beaee391d30da42e937db621564Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 24d0825bca7fe65beaee391d30da42e937db621564Steve Block * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25d0825bca7fe65beaee391d30da42e937db621564Steve Block * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26d0825bca7fe65beaee391d30da42e937db621564Steve Block * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 27d0825bca7fe65beaee391d30da42e937db621564Steve Block * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 28d0825bca7fe65beaee391d30da42e937db621564Steve Block * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 29d0825bca7fe65beaee391d30da42e937db621564Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 30d0825bca7fe65beaee391d30da42e937db621564Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31d0825bca7fe65beaee391d30da42e937db621564Steve Block */ 32d0825bca7fe65beaee391d30da42e937db621564Steve Block 33db14019a23d96bc8a444b6576a5da8bd1cfbc8b0Steve Block#include "launcherwindow.h" 34d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "urlloader.h" 35d0825bca7fe65beaee391d30da42e937db621564Steve Block 36dd8bb3de4f353a81954234999f1fea748aee2ea9Ben MurdochWindowOptions windowOptions; 37dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch 382bde8e466a4451c7319e3a072d118917957d6554Steve Block 392bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <QDir> 402bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <QFile> 412bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <QFileInfo> 422bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <QFontDatabase> 432bde8e466a4451c7319e3a072d118917957d6554Steve Block 442bde8e466a4451c7319e3a072d118917957d6554Steve Block 452bde8e466a4451c7319e3a072d118917957d6554Steve Block#if defined(Q_WS_X11) 462bde8e466a4451c7319e3a072d118917957d6554Steve Block#include <fontconfig/fontconfig.h> 472bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 482bde8e466a4451c7319e3a072d118917957d6554Steve Block 492bde8e466a4451c7319e3a072d118917957d6554Steve Block 502bde8e466a4451c7319e3a072d118917957d6554Steve Block#if defined(Q_WS_X11) 512bde8e466a4451c7319e3a072d118917957d6554Steve Block// Very similar to WebCore::DumpRenderTree::initializeFonts(); 522bde8e466a4451c7319e3a072d118917957d6554Steve Block// Duplicated here so that QtTestBrowser would display contents 532bde8e466a4451c7319e3a072d118917957d6554Steve Block// with the same fonts as run-webkit-tests/DumpRenderTree. 542bde8e466a4451c7319e3a072d118917957d6554Steve Blockstatic void initTestFonts() 552bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 562bde8e466a4451c7319e3a072d118917957d6554Steve Block static int numFonts = -1; 572bde8e466a4451c7319e3a072d118917957d6554Steve Block 582bde8e466a4451c7319e3a072d118917957d6554Steve Block // Some test cases may add or remove application fonts (via @font-face). 592bde8e466a4451c7319e3a072d118917957d6554Steve Block // Make sure to re-initialize the font set if necessary. 602bde8e466a4451c7319e3a072d118917957d6554Steve Block FcFontSet* appFontSet = FcConfigGetFonts(0, FcSetApplication); 612bde8e466a4451c7319e3a072d118917957d6554Steve Block if (appFontSet && numFonts >= 0 && appFontSet->nfont == numFonts) 622bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 632bde8e466a4451c7319e3a072d118917957d6554Steve Block 642bde8e466a4451c7319e3a072d118917957d6554Steve Block QByteArray fontDir = getenv("WEBKIT_TESTFONTS"); 652bde8e466a4451c7319e3a072d118917957d6554Steve Block if (fontDir.isEmpty() || !QDir(fontDir).exists()) { 662bde8e466a4451c7319e3a072d118917957d6554Steve Block fprintf(stderr, 672bde8e466a4451c7319e3a072d118917957d6554Steve Block "\n\n" 682bde8e466a4451c7319e3a072d118917957d6554Steve Block "----------------------------------------------------------------------\n" 692bde8e466a4451c7319e3a072d118917957d6554Steve Block "WEBKIT_TESTFONTS environment variable is not set correctly.\n" 702bde8e466a4451c7319e3a072d118917957d6554Steve Block "This variable has to point to the directory containing the fonts\n" 712bde8e466a4451c7319e3a072d118917957d6554Steve Block "you can clone from git://gitorious.org/qtwebkit/testfonts.git\n" 722bde8e466a4451c7319e3a072d118917957d6554Steve Block "----------------------------------------------------------------------\n" 732bde8e466a4451c7319e3a072d118917957d6554Steve Block ); 742bde8e466a4451c7319e3a072d118917957d6554Steve Block exit(1); 752bde8e466a4451c7319e3a072d118917957d6554Steve Block } 762bde8e466a4451c7319e3a072d118917957d6554Steve Block // Looks for qt/fonts.conf relative to the directory of the QtTestBrowser 772bde8e466a4451c7319e3a072d118917957d6554Steve Block // executable. 782bde8e466a4451c7319e3a072d118917957d6554Steve Block QString configFileString = QCoreApplication::applicationDirPath(); 792bde8e466a4451c7319e3a072d118917957d6554Steve Block configFileString += "/../../../Tools/DumpRenderTree/qt/fonts.conf"; 802bde8e466a4451c7319e3a072d118917957d6554Steve Block QByteArray configFileArray = configFileString.toUtf8(); 812bde8e466a4451c7319e3a072d118917957d6554Steve Block FcConfig* config = FcConfigCreate(); 822bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!FcConfigParseAndLoad (config, (FcChar8*) configFileArray.data(), true)) 832bde8e466a4451c7319e3a072d118917957d6554Steve Block qFatal("Couldn't load font configuration file"); 842bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!FcConfigAppFontAddDir (config, (FcChar8*) fontDir.data())) 852bde8e466a4451c7319e3a072d118917957d6554Steve Block qFatal("Couldn't add font dir!"); 862bde8e466a4451c7319e3a072d118917957d6554Steve Block FcConfigSetCurrent(config); 872bde8e466a4451c7319e3a072d118917957d6554Steve Block 882bde8e466a4451c7319e3a072d118917957d6554Steve Block appFontSet = FcConfigGetFonts(config, FcSetApplication); 892bde8e466a4451c7319e3a072d118917957d6554Steve Block numFonts = appFontSet->nfont; 902bde8e466a4451c7319e3a072d118917957d6554Steve Block} 912bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 922bde8e466a4451c7319e3a072d118917957d6554Steve Block 93d0825bca7fe65beaee391d30da42e937db621564Steve Blockint launcherMain(const QApplication& app) 94d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 952bde8e466a4451c7319e3a072d118917957d6554Steve Block#ifdef Q_WS_X11 962bde8e466a4451c7319e3a072d118917957d6554Steve Block if (windowOptions.useTestFonts) 972bde8e466a4451c7319e3a072d118917957d6554Steve Block initTestFonts(); 982bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 992bde8e466a4451c7319e3a072d118917957d6554Steve Block 100d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifndef NDEBUG 101d0825bca7fe65beaee391d30da42e937db621564Steve Block int retVal = app.exec(); 102dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block DumpRenderTreeSupportQt::garbageCollectorCollect(); 103d0825bca7fe65beaee391d30da42e937db621564Steve Block QWebSettings::clearMemoryCaches(); 104d0825bca7fe65beaee391d30da42e937db621564Steve Block return retVal; 105d0825bca7fe65beaee391d30da42e937db621564Steve Block#else 106d0825bca7fe65beaee391d30da42e937db621564Steve Block return app.exec(); 107d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 108d0825bca7fe65beaee391d30da42e937db621564Steve Block} 109d0825bca7fe65beaee391d30da42e937db621564Steve Block 1105e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockclass LauncherApplication : public QApplication { 1115e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block Q_OBJECT 112d0825bca7fe65beaee391d30da42e937db621564Steve Block 1135e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockpublic: 1145e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block LauncherApplication(int& argc, char** argv); 1155e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QStringList urls() const { return m_urls; } 1165e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block bool isRobotized() const { return m_isRobotized; } 117bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen int robotTimeout() const { return m_robotTimeoutSeconds; } 118bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen int robotExtraTime() const { return m_robotExtraTimeSeconds; } 1195e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 1205e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockprivate: 1215e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block void handleUserOptions(); 1225e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block void applyDefaultSettings(); 123d0825bca7fe65beaee391d30da42e937db621564Steve Block 1245e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockprivate: 1255e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block bool m_isRobotized; 126bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen int m_robotTimeoutSeconds; 127bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen int m_robotExtraTimeSeconds; 1285e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QStringList m_urls; 1295e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block}; 1305e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 1315e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockvoid LauncherApplication::applyDefaultSettings() 1325e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{ 1335e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QWebSettings::setMaximumPagesInCache(4); 134d0825bca7fe65beaee391d30da42e937db621564Steve Block 135d0825bca7fe65beaee391d30da42e937db621564Steve Block QWebSettings::setObjectCacheCapacities((16*1024*1024) / 8, (16*1024*1024) / 8, 16*1024*1024); 136d0825bca7fe65beaee391d30da42e937db621564Steve Block 137d0825bca7fe65beaee391d30da42e937db621564Steve Block QWebSettings::globalSettings()->setAttribute(QWebSettings::PluginsEnabled, true); 138d0825bca7fe65beaee391d30da42e937db621564Steve Block QWebSettings::globalSettings()->setAttribute(QWebSettings::DeveloperExtrasEnabled, true); 139d0825bca7fe65beaee391d30da42e937db621564Steve Block QWebSettings::enablePersistentStorage(); 1405e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block} 141d0825bca7fe65beaee391d30da42e937db621564Steve Block 1425e2bc6953fe6923165b8a5d7679939693a1d58d6Steve BlockLauncherApplication::LauncherApplication(int& argc, char** argv) 143dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block : QApplication(argc, argv, QApplication::GuiServer) 1445e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block , m_isRobotized(false) 145bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen , m_robotTimeoutSeconds(0) 146bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen , m_robotExtraTimeSeconds(0) 1475e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{ 148d0825bca7fe65beaee391d30da42e937db621564Steve Block // To allow QWebInspector's configuration persistence 1495e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block setOrganizationName("Nokia"); 150e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block setApplicationName("QtTestBrowser"); 1515e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block setApplicationVersion("0.1"); 152d0825bca7fe65beaee391d30da42e937db621564Steve Block 1535e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block applyDefaultSettings(); 154d0825bca7fe65beaee391d30da42e937db621564Steve Block 1555e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block handleUserOptions(); 1565e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block} 1575e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 1588a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockstatic void requiresGraphicsView(const QString& option) 1595e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{ 160dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch if (windowOptions.useGraphicsView) 1618a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return; 1628a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block appQuit(1, QString("%1 only works in combination with the -graphicsbased option").arg(option)); 1635e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block} 1645e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 1655e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockvoid LauncherApplication::handleUserOptions() 1665e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{ 1675e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QStringList args = arguments(); 1685e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QFileInfo program(args.at(0)); 169e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block QString programName("QtTestBrowser"); 1705e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block if (program.exists()) 1715e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block programName = program.baseName(); 1725e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 1735e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QList<QString> updateModes(enumToKeys(QGraphicsView::staticMetaObject, 1745e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block "ViewportUpdateMode", "ViewportUpdate")); 1755e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 1768a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (args.contains("-help")) { 1775e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block qDebug() << "Usage:" << programName.toLatin1().data() 1788a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block << "[-graphicsbased]" 179dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block << "[-no-compositing]" 1802bde8e466a4451c7319e3a072d118917957d6554Steve Block#if defined(QT_CONFIGURED_WITH_OPENGL) 1812bde8e466a4451c7319e3a072d118917957d6554Steve Block << "[-gl-viewport]" 1822bde8e466a4451c7319e3a072d118917957d6554Steve Block << "[-webgl]" 1832bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 1848a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block << QString("[-viewport-update-mode %1]").arg(formatKeys(updateModes)).toLatin1().data() 1858a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block << "[-cache-webview]" 1862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch << "[-maximize]" 1878a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block << "[-show-fps]" 1885e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block << "[-r list]" 189bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen << "[-robot-timeout seconds]" 190bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen << "[-robot-extra-time seconds]" 191dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block << "[-inspector-url location]" 192dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block << "[-tiled-backing-store]" 193dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block << "[-resizes-to-contents]" 194cad810f21b803229eb11403f9209855525a25d57Steve Block << "[-local-storage-enabled]" 195cad810f21b803229eb11403f9209855525a25d57Steve Block << "[-offline-storage-database-enabled]" 196cad810f21b803229eb11403f9209855525a25d57Steve Block << "[-offline-web-application-cache-enabled]" 197cad810f21b803229eb11403f9209855525a25d57Steve Block << "[-set-offline-storage-default-quota maxSize]" 1982bde8e466a4451c7319e3a072d118917957d6554Steve Block#if defined(Q_WS_X11) 1992bde8e466a4451c7319e3a072d118917957d6554Steve Block << "[-use-test-fonts]" 2002bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 2012bde8e466a4451c7319e3a072d118917957d6554Steve Block << "[-print-loaded-urls]" 2025e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block << "URLs"; 2038a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block appQuit(0); 2045e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block } 2055e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 206e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block const bool defaultForAnimations = args.contains("-default-animations"); 207e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (args.contains("-graphicsbased") || defaultForAnimations) 208dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch windowOptions.useGraphicsView = true; 2095e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 210dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (args.contains("-no-compositing")) { 211dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block requiresGraphicsView("-no-compositing"); 212dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch windowOptions.useCompositing = false; 2138a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 2145e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 2158a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (args.contains("-show-fps")) { 2168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block requiresGraphicsView("-show-fps"); 217dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch windowOptions.showFrameRate = true; 2188a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 2195e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 220e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (args.contains("-cache-webview") || defaultForAnimations) { 2218a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block requiresGraphicsView("-cache-webview"); 222dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch windowOptions.cacheWebView = true; 2238a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block } 2245e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 225dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (args.contains("-tiled-backing-store")) { 226dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block requiresGraphicsView("-tiled-backing-store"); 227dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch windowOptions.useTiledBackingStore = true; 228dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 229dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 230dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (args.contains("-resizes-to-contents")) { 231dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block requiresGraphicsView("-resizes-to-contents"); 232dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch windowOptions.resizesToContents = true; 233dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 234cad810f21b803229eb11403f9209855525a25d57Steve Block 235cad810f21b803229eb11403f9209855525a25d57Steve Block if (args.contains("-local-storage-enabled")) 2362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block windowOptions.useLocalStorage = true; 237cad810f21b803229eb11403f9209855525a25d57Steve Block 2382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (args.contains("-maximize")) 2392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch windowOptions.startMaximized = true; 2402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 241cad810f21b803229eb11403f9209855525a25d57Steve Block if (args.contains("-offline-storage-database-enabled")) 2422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block windowOptions.useOfflineStorageDatabase = true; 243cad810f21b803229eb11403f9209855525a25d57Steve Block 244cad810f21b803229eb11403f9209855525a25d57Steve Block if (args.contains("-offline-web-application-cache-enabled")) 2452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block windowOptions.useOfflineWebApplicationCache = true; 246cad810f21b803229eb11403f9209855525a25d57Steve Block 247cad810f21b803229eb11403f9209855525a25d57Steve Block int setOfflineStorageDefaultQuotaIndex = args.indexOf("-set-offline-storage-default-quota"); 248cad810f21b803229eb11403f9209855525a25d57Steve Block if (setOfflineStorageDefaultQuotaIndex != -1) { 2492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block unsigned int maxSize = takeOptionValue(&args, setOfflineStorageDefaultQuotaIndex).toUInt(); 2502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block windowOptions.offlineStorageDefaultQuotaSize = maxSize; 251cad810f21b803229eb11403f9209855525a25d57Steve Block } 252cad810f21b803229eb11403f9209855525a25d57Steve Block 253e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (defaultForAnimations) 254e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block windowOptions.viewportUpdateMode = QGraphicsView::BoundingRectViewportUpdate; 255e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 2568a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block QString arg1("-viewport-update-mode"); 2578a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block int modeIndex = args.indexOf(arg1); 2588a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (modeIndex != -1) { 2598a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block requiresGraphicsView(arg1); 2608a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 2618a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block QString mode = takeOptionValue(&args, modeIndex); 2628a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (mode.isEmpty()) 2638a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block appQuit(1, QString("%1 needs a value of one of [%2]").arg(arg1).arg(formatKeys(updateModes))); 2648a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block int idx = updateModes.indexOf(mode); 2658a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (idx == -1) 2668a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block appQuit(1, QString("%1 value has to be one of [%2]").arg(arg1).arg(formatKeys(updateModes))); 2678a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 268dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch windowOptions.viewportUpdateMode = static_cast<QGraphicsView::ViewportUpdateMode>(idx); 2695e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block } 270e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#ifdef QT_CONFIGURED_WITH_OPENGL 271e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (args.contains("-gl-viewport") || defaultForAnimations) { 272e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block requiresGraphicsView("-gl-viewport"); 273e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block windowOptions.useQGLWidgetViewport = true; 274e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block } 2752bde8e466a4451c7319e3a072d118917957d6554Steve Block 2762bde8e466a4451c7319e3a072d118917957d6554Steve Block if (args.contains("-webgl")) { 2772bde8e466a4451c7319e3a072d118917957d6554Steve Block requiresGraphicsView("-webgl"); 2782bde8e466a4451c7319e3a072d118917957d6554Steve Block windowOptions.useWebGL = true; 2792bde8e466a4451c7319e3a072d118917957d6554Steve Block } 280e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#endif 2815e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 2822bde8e466a4451c7319e3a072d118917957d6554Steve Block#if defined(Q_WS_X11) 2832bde8e466a4451c7319e3a072d118917957d6554Steve Block if (args.contains("-use-test-fonts")) 2842bde8e466a4451c7319e3a072d118917957d6554Steve Block windowOptions.useTestFonts = true; 2852bde8e466a4451c7319e3a072d118917957d6554Steve Block#endif 2862bde8e466a4451c7319e3a072d118917957d6554Steve Block 2872bde8e466a4451c7319e3a072d118917957d6554Steve Block if (args.contains("-print-loaded-urls")) 2882bde8e466a4451c7319e3a072d118917957d6554Steve Block windowOptions.printLoadedUrls = true; 2892bde8e466a4451c7319e3a072d118917957d6554Steve Block 290dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block QString inspectorUrlArg("-inspector-url"); 291dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int inspectorUrlIndex = args.indexOf(inspectorUrlArg); 292dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (inspectorUrlIndex != -1) 293dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch windowOptions.inspectorUrl = takeOptionValue(&args, inspectorUrlIndex); 294dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 295bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen QString remoteInspectorPortArg("-remote-inspector-port"); 296bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen int remoteInspectorPortIndex = args.indexOf(remoteInspectorPortArg); 297bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (remoteInspectorPortIndex != -1) 298bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen windowOptions.remoteInspectorPort = takeOptionValue(&args, remoteInspectorPortIndex).toInt(); 299bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 3005e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block int robotIndex = args.indexOf("-r"); 3015e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block if (robotIndex != -1) { 3028a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block QString listFile = takeOptionValue(&args, robotIndex); 3038a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (listFile.isEmpty()) 3048a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block appQuit(1, "-r needs a list file to start in robotized mode"); 3058a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (!QFile::exists(listFile)) 3068a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block appQuit(1, "The list file supplied to -r does not exist."); 3078a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 3088a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block m_isRobotized = true; 3098a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block m_urls = QStringList(listFile); 310bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen } else { 311bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen int lastArg = args.lastIndexOf(QRegExp("^-.*")); 312bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_urls = (lastArg != -1) ? args.mid(++lastArg) : args.mid(1); 3135e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block } 3145e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 315bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen int robotTimeoutIndex = args.indexOf("-robot-timeout"); 316bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (robotTimeoutIndex != -1) 317bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_robotTimeoutSeconds = takeOptionValue(&args, robotTimeoutIndex).toInt(); 318bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 319bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen int robotExtraTimeIndex = args.indexOf("-robot-extra-time"); 320bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (robotExtraTimeIndex != -1) 321bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen m_robotExtraTimeSeconds = takeOptionValue(&args, robotExtraTimeIndex).toInt(); 3225e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block} 3235e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 3245e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 3255e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockint main(int argc, char **argv) 3265e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{ 3275e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block LauncherApplication app(argc, argv); 3285e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 3295e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block if (app.isRobotized()) { 3308a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block LauncherWindow* window = new LauncherWindow(); 331bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen UrlLoader loader(window->page()->mainFrame(), app.urls().at(0), app.robotTimeout(), app.robotExtraTime()); 332d0825bca7fe65beaee391d30da42e937db621564Steve Block loader.loadNext(); 333d0825bca7fe65beaee391d30da42e937db621564Steve Block window->show(); 3345e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block return launcherMain(app); 3355e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block } 336d0825bca7fe65beaee391d30da42e937db621564Steve Block 3375e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block QStringList urls = app.urls(); 338d0825bca7fe65beaee391d30da42e937db621564Steve Block 3395e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block if (urls.isEmpty()) { 340bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen QString defaultIndexFile = QString("%1/%2").arg(QDir::homePath()).arg(QLatin1String("index.html")); 341bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (QFile(defaultIndexFile).exists()) 342bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen urls.append(QString("file://") + defaultIndexFile); 3435e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block else 3445e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block urls.append(""); 3455e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block } 3465e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 3475e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block LauncherWindow* window = 0; 3485e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block foreach (QString url, urls) { 349dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block LauncherWindow* newWindow; 3505e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block if (!window) 351dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch newWindow = window = new LauncherWindow(&windowOptions); 3525e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block else 353dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block newWindow = window->newWindow(); 354dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 355dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block newWindow->load(url); 356d0825bca7fe65beaee391d30da42e937db621564Steve Block } 3575e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 3585e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block window->show(); 3595e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block return launcherMain(app); 360d0825bca7fe65beaee391d30da42e937db621564Steve Block} 3615e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 3625e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "main.moc" 363