diff options
author | Alexandru Croitor <alexandru.croitor@theqtcompany.com> | 2016-04-28 13:52:23 +0200 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@theqtcompany.com> | 2016-05-04 06:47:08 +0000 |
commit | 4c2a17d80b9f980bf984b03a6a20aabd88a964b2 (patch) | |
tree | f3f836bbb265384bc68b9aa22339bfb7fd00b435 | |
parent | d107266cd403416d622948186968106a9cf78590 (diff) |
[Demobrowser] Fix command line option parsing.
Passing just command line options to Chromium prevents loading of the
initial startup url. This happens because the startup url is
overridden by the last command line argument, which happens to be a
Chromium option, thus an invalid URL.
Fix consists in iterating through the command line arguments, until
a non-option argument is found (doesn't start with a dash), and use
that as the startup URL.
Change-Id: Ibe2946b25b2e023c094a85e50d2ccbd5bfce2977
Reviewed-by: Kai Koehne <kai.koehne@qt.io>
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
-rw-r--r-- | examples/webenginewidgets/demobrowser/browserapplication.cpp | 29 | ||||
-rw-r--r-- | examples/webenginewidgets/demobrowser/browserapplication.h | 1 |
2 files changed, 21 insertions, 9 deletions
diff --git a/examples/webenginewidgets/demobrowser/browserapplication.cpp b/examples/webenginewidgets/demobrowser/browserapplication.cpp index 37bc05c34..dc071dabd 100644 --- a/examples/webenginewidgets/demobrowser/browserapplication.cpp +++ b/examples/webenginewidgets/demobrowser/browserapplication.cpp @@ -127,11 +127,7 @@ BrowserApplication::BrowserApplication(int &argc, char **argv) socket.connectToServer(serverName); if (socket.waitForConnected(500)) { QTextStream stream(&socket); - QStringList args = QCoreApplication::arguments(); - if (args.count() > 1) - stream << args.last(); - else - stream << QString(); + stream << getCommandLineUrlArgument(); stream.flush(); socket.waitForBytesWritten(); return; @@ -246,11 +242,13 @@ void BrowserApplication::postLaunch() // newMainWindow() needs to be called in main() for this to happen if (m_mainWindows.count() > 0) { - QStringList args = QCoreApplication::arguments(); - if (args.count() > 1) - mainWindow()->loadPage(args.last()); - else + const QString url = getCommandLineUrlArgument(); + if (!url.isEmpty()) { + mainWindow()->loadPage(url); + } else { mainWindow()->slotHome(); + } + } BrowserApplication::historyManager(); } @@ -397,6 +395,19 @@ void BrowserApplication::installTranslator(const QString &name) QApplication::installTranslator(translator); } +QString BrowserApplication::getCommandLineUrlArgument() const +{ + const QStringList args = QCoreApplication::arguments(); + if (args.count() > 1) { + const QString lastArg = args.last(); + const bool isValidUrl = QUrl::fromUserInput(lastArg).isValid(); + if (isValidUrl) + return lastArg; + } + + return QString(); +} + #if defined(Q_OS_OSX) bool BrowserApplication::event(QEvent* event) { diff --git a/examples/webenginewidgets/demobrowser/browserapplication.h b/examples/webenginewidgets/demobrowser/browserapplication.h index d473d9bc9..b9832531a 100644 --- a/examples/webenginewidgets/demobrowser/browserapplication.h +++ b/examples/webenginewidgets/demobrowser/browserapplication.h @@ -121,6 +121,7 @@ private slots: private: void clean(); void installTranslator(const QString &name); + QString getCommandLineUrlArgument() const; static HistoryManager *s_historyManager; static DownloadManager *s_downloadManager; |