summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@theqtcompany.com>2016-03-21 13:56:20 +0100
committerJoerg Bornemann <joerg.bornemann@theqtcompany.com>2016-03-31 08:36:39 +0000
commit665c422803e9d6767f9fa2fd69964c03a254167b (patch)
treee401df60592872c8c3c410b813946f1dbeb1f5a2 /src
parenta444e05e3f638785d569201c56d92e109ad46ccb (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>
Diffstat (limited to 'src')
m---------src/3rdparty0
-rw-r--r--src/core/web_engine_context.cpp27
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);