diff options
author | Joerg Bornemann <joerg.bornemann@theqtcompany.com> | 2016-03-21 13:56:20 +0100 |
---|---|---|
committer | Joerg Bornemann <joerg.bornemann@theqtcompany.com> | 2016-03-31 08:36:39 +0000 |
commit | 665c422803e9d6767f9fa2fd69964c03a254167b (patch) | |
tree | e401df60592872c8c3c410b813946f1dbeb1f5a2 | |
parent | a444e05e3f638785d569201c56d92e109ad46ccb (diff) |
Fix CommandLine initialization on Windows
Chromium insists on getting the command line via the system call
GetCommandLineW. QCoreApplication already did that, and we want to pass
the already split argument vector to init CommandLine.
This way, the user can pass custom arguments to QGuiApplication, and
Chromium will pick those up correctly.
Task-number: QTBUG-51971
Change-Id: I85b2071fcd8e5781b13ec8d22dc00b1a0c71601b
Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
m--------- | src/3rdparty | 0 | ||||
-rw-r--r-- | src/core/web_engine_context.cpp | 27 |
2 files changed, 20 insertions, 7 deletions
diff --git a/src/3rdparty b/src/3rdparty -Subproject cbe3845eff59c2d1726ed3dc0f934f7f483a127 +Subproject 3b2b78caa761db2b7b25dc51c3dae8316f595db diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp index a8cab45c5..8845cedbe 100644 --- a/src/core/web_engine_context.cpp +++ b/src/core/web_engine_context.cpp @@ -203,21 +203,34 @@ WebEngineContext::WebEngineContext() , m_browserRunner(content::BrowserMainRunner::Create()) , m_globalQObject(new QObject()) { - QVector<QByteArray> args; - Q_FOREACH (const QString& arg, QCoreApplication::arguments()) - args << arg.toUtf8(); - - bool useEmbeddedSwitches = args.removeAll("--enable-embedded-switches"); + QStringList appArgs = QCoreApplication::arguments(); + bool useEmbeddedSwitches = appArgs.removeAll(QStringLiteral("--enable-embedded-switches")); #if defined(QTWEBENGINE_EMBEDDED_SWITCHES) - useEmbeddedSwitches = !args.removeAll("--disable-embedded-switches"); + useEmbeddedSwitches = !appArgs.removeAll(QStringLiteral("--disable-embedded-switches")); #endif +#if defined(Q_OS_WIN) + // We must initialize the command line with the UTF-16 arguments vector we got from + // QCoreApplication. CommandLine::Init ignores its arguments on Windows and calls + // GetCommandLineW() instead. + base::CommandLine::CreateEmpty(); + base::CommandLine* parsedCommandLine = base::CommandLine::ForCurrentProcess(); + base::CommandLine::StringVector argv; + argv.resize(appArgs.size()); + std::transform(appArgs.constBegin(), appArgs.constEnd(), argv.begin(), &toString16); + parsedCommandLine->InitFromArgv(argv); +#else + QVector<QByteArray> args; + Q_FOREACH (const QString& arg, appArgs) + args << arg.toUtf8(); + QVector<const char*> argv(args.size()); for (int i = 0; i < args.size(); ++i) argv[i] = args[i].constData(); base::CommandLine::Init(argv.size(), argv.constData()); - base::CommandLine* parsedCommandLine = base::CommandLine::ForCurrentProcess(); +#endif + parsedCommandLine->AppendSwitchPath(switches::kBrowserSubprocessPath, WebEngineLibraryInfo::getPath(content::CHILD_PROCESS_EXE)); parsedCommandLine->AppendSwitch(switches::kNoSandbox); parsedCommandLine->AppendSwitch(switches::kEnableDelegatedRenderer); |