summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndras Becsi <andras.becsi@theqtcompany.com>2014-12-01 13:24:25 +0100
committerAndras Becsi <andras.becsi@theqtcompany.com>2014-12-01 14:28:00 +0100
commit9316b8c27c4d63ee755517fb4670268424200b3c (patch)
treea9818fd5a8798ec56add7cd622fb13cee525557a /src
parentad46ffd2e74b17cd7e7b8a7d73590696cc8febce (diff)
parent03a52863226aeb774721db610ba831808b30836a (diff)
Merge remote-tracking branch 'origin/5.4' into dev
Conflicts: src/core/access_token_store_qt.cpp src/core/access_token_store_qt.h src/core/content_browser_client_qt.cpp Change-Id: Id319ad0d87ce071e63d9c6c22b4fc35523ddfa74
Diffstat (limited to 'src')
-rw-r--r--src/core/Info_mac.plist20
-rw-r--r--src/core/access_token_store_qt.cpp36
-rw-r--r--src/core/access_token_store_qt.h40
-rw-r--r--src/core/config/embedded_linux.pri1
-rw-r--r--src/core/content_browser_client_qt.cpp13
-rw-r--r--src/core/content_browser_client_qt.h2
-rw-r--r--src/core/core.pro27
-rw-r--r--src/core/core_module.pro66
-rw-r--r--src/core/gyp_run.pro5
-rw-r--r--src/core/render_widget_host_view_qt.cpp10
-rw-r--r--src/core/renderer/content_renderer_client_qt.h4
-rw-r--r--src/core/renderer/qt_render_view_observer.h4
-rw-r--r--src/core/resources/repack_locales.gypi2
-rw-r--r--src/core/resources/resources.gyp23
-rw-r--r--src/core/web_engine_context.cpp4
-rw-r--r--src/core/web_engine_library_info.cpp56
-rw-r--r--src/process/process.pro36
-rw-r--r--src/webengine/api/qquickwebenginesettings.cpp1
-rw-r--r--src/webenginewidgets/doc/src/qtwebenginewidgets.qdoc6
19 files changed, 309 insertions, 47 deletions
diff --git a/src/core/Info_mac.plist b/src/core/Info_mac.plist
new file mode 100644
index 000000000..58362c810
--- /dev/null
+++ b/src/core/Info_mac.plist
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundlePackageType</key>
+ <string>FMWK</string>
+ <key>CFBundleShortVersionString</key>
+ <string>@SHORT_VERSION@</string>
+ <key>CFBundleVersion</key>
+ <string>@FULL_VERSION@</string>
+ <key>CFBundleGetInfoString</key>
+ <string>Created by Qt/QMake</string>
+ <key>CFBundleSignature</key>
+ <string>@TYPEINFO@</string>
+ <key>CFBundleExecutable</key>
+ <string>@LIBRARY@</string>
+ <key>CFBundleIdentifier</key>
+ <string>org.qt-project.Qt.QtWebEngineCore</string>
+</dict>
+</plist>
diff --git a/src/core/access_token_store_qt.cpp b/src/core/access_token_store_qt.cpp
index b007d372f..791d628ba 100644
--- a/src/core/access_token_store_qt.cpp
+++ b/src/core/access_token_store_qt.cpp
@@ -1,3 +1,39 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
diff --git a/src/core/access_token_store_qt.h b/src/core/access_token_store_qt.h
index 4fbbde5f0..9493da774 100644
--- a/src/core/access_token_store_qt.h
+++ b/src/core/access_token_store_qt.h
@@ -1,6 +1,38 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWebEngine module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPLv3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or later as published by the Free
+** Software Foundation and appearing in the file LICENSE.GPL included in
+** the packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 2.0 requirements will be
+** met: http://www.gnu.org/licenses/gpl-2.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
#ifndef ACCESS_TOKEN_STORE_QT_H
#define ACCESS_TOKEN_STORE_QT_H
@@ -19,12 +51,12 @@ class URLRequestContextGetter;
class AccessTokenStoreQt : public content::AccessTokenStore {
public:
AccessTokenStoreQt();
+ ~AccessTokenStoreQt();
virtual void LoadAccessTokens(const LoadAccessTokensCallbackType& request) Q_DECL_OVERRIDE;
virtual void SaveAccessToken(const GURL& serverUrl, const base::string16& accessToken) Q_DECL_OVERRIDE;
private:
- virtual ~AccessTokenStoreQt();
void performWorkOnUIThread();
void respondOnOriginatingThread(const LoadAccessTokensCallbackType& callback);
diff --git a/src/core/config/embedded_linux.pri b/src/core/config/embedded_linux.pri
index dc6a5f612..4000625c6 100644
--- a/src/core/config/embedded_linux.pri
+++ b/src/core/config/embedded_linux.pri
@@ -46,6 +46,7 @@ GYP_CONFIG += \
use_pulseaudio=0 \
use_system_harfbuzz=0 \
use_system_icu=1 \
+ icu_use_data_file_flag=0 \
use_x11=0 \
v8_use_snapshot=false \
want_separate_host_toolset=1 \
diff --git a/src/core/content_browser_client_qt.cpp b/src/core/content_browser_client_qt.cpp
index 2ebd3cfad..1c0c75bad 100644
--- a/src/core/content_browser_client_qt.cpp
+++ b/src/core/content_browser_client_qt.cpp
@@ -66,6 +66,7 @@
#include "media_capture_devices_dispatcher.h"
#include "resource_dispatcher_host_delegate_qt.h"
#include "web_contents_delegate_qt.h"
+#include "access_token_store_qt.h"
#include <QGuiApplication>
#include <QOpenGLContext>
@@ -336,13 +337,6 @@ content::MediaObserver *ContentBrowserClientQt::GetMediaObserver()
return MediaCaptureDevicesDispatcher::GetInstance();
}
-content::AccessTokenStore *ContentBrowserClientQt::CreateAccessTokenStore()
-{
- // We return a dumb in-memory AccessTokenStore implementation for now
- // since this is not null-checked before it's used in the content layer.
- return new AccessTokenStoreQt;
-}
-
void ContentBrowserClientQt::OverrideWebkitPrefs(content::RenderViewHost *rvh, const GURL &url, WebPreferences *web_prefs)
{
Q_UNUSED(url);
@@ -350,6 +344,11 @@ void ContentBrowserClientQt::OverrideWebkitPrefs(content::RenderViewHost *rvh, c
static_cast<WebContentsDelegateQt*>(webContents->GetDelegate())->overrideWebPreferences(webContents, web_prefs);
}
+content::AccessTokenStore *ContentBrowserClientQt::CreateAccessTokenStore()
+{
+ return new AccessTokenStoreQt;
+}
+
net::URLRequestContextGetter* ContentBrowserClientQt::CreateRequestContext(content::BrowserContext* browser_context, content::ProtocolHandlerMap* protocol_handlers, content::URLRequestInterceptorScopedVector request_interceptors)
{
return static_cast<BrowserContextQt*>(browser_context)->CreateRequestContext(protocol_handlers);
diff --git a/src/core/content_browser_client_qt.h b/src/core/content_browser_client_qt.h
index 985624cd9..879546994 100644
--- a/src/core/content_browser_client_qt.h
+++ b/src/core/content_browser_client_qt.h
@@ -96,7 +96,7 @@ public:
, base::Closure* cancelCallback) Q_DECL_OVERRIDE;
content::LocationProvider* OverrideSystemLocationProvider() Q_DECL_OVERRIDE;
- virtual net::URLRequestContextGetter *CreateRequestContext(content::BrowserContext *content_browser_context, content::ProtocolHandlerMap *protocol_handlers, content::URLRequestInterceptorScopedVector request_interceptorss) Q_DECL_OVERRIDE;
+ virtual net::URLRequestContextGetter *CreateRequestContext(content::BrowserContext *browser_context, content::ProtocolHandlerMap *protocol_handlers, content::URLRequestInterceptorScopedVector request_interceptorss) Q_DECL_OVERRIDE;
void enableInspector(bool enable, content::BrowserContext *browser_context);
diff --git a/src/core/core.pro b/src/core/core.pro
index 927f8bab4..cf00f39cb 100644
--- a/src/core/core.pro
+++ b/src/core/core.pro
@@ -28,30 +28,3 @@ SUBDIRS += core_gyp_generator \
gyp_run.depends += gyp_configure_host gyp_configure_target
SUBDIRS += gyp_configure_host gyp_configure_target
}
-
-REPACK_DIR = $$OUT_PWD/$$getConfigDir()/gen/repack
-locales.files = "$$REPACK_DIR/qtwebengine_locales/*"
-locales.CONFIG += no_check_exist
-locales.path = $$[QT_INSTALL_TRANSLATIONS]/qtwebengine_locales
-resources.files = $$REPACK_DIR/qtwebengine_resources.pak
-resources.CONFIG += no_check_exist
-resources.path = $$[QT_INSTALL_DATA]
-
-PLUGIN_EXTENSION = .so
-PLUGIN_PREFIX = lib
-macx: PLUGIN_PREFIX =
-win32 {
- PLUGIN_EXTENSION = .dll
- PLUGIN_PREFIX =
-}
-
-icu.files = $$OUT_PWD/$$getConfigDir()/icudtl.dat
-icu.CONFIG += no_check_exist
-icu.path = $$[QT_INSTALL_DATA]
-
-plugins.files = $$OUT_PWD/$$getConfigDir()/$${PLUGIN_PREFIX}ffmpegsumo$${PLUGIN_EXTENSION}
-plugins.CONFIG += no_check_exist
-plugins.path = $$[QT_INSTALL_PLUGINS]/qtwebengine
-
-INSTALLS += icu locales resources plugins
-
diff --git a/src/core/core_module.pro b/src/core/core_module.pro
index 04ce090e1..1a7b0878f 100644
--- a/src/core/core_module.pro
+++ b/src/core/core_module.pro
@@ -7,11 +7,58 @@ qtHaveModule(positioning):QT += positioning
QT += qml quick
QT_PRIVATE += quick-private gui-private core-private
+# Needed to set a CFBundleIdentifier
+QMAKE_INFO_PLIST = Info_mac.plist
+
# Look for linking information produced by gyp for our target according to core_generated.gyp
!include($$OUT_PWD/$$getConfigDir()/$${TARGET}_linking.pri) {
error("Could not find the linking information that gyp should have generated.")
}
+REPACK_DIR = $$OUT_PWD/$$getConfigDir()/gen/repack
+# Duplicated from resources/resources.gyp
+LOCALE_LIST = am ar bg bn ca cs da de el en-GB en-US es-419 es et fa fi fil fr gu he hi hr hu id it ja kn ko lt lv ml mr ms nb nl pl pt-BR pt-PT ro ru sk sl sr sv sw ta te th tr uk vi zh-CN zh-TW
+for(LOC, LOCALE_LIST) {
+ locales.files += $$REPACK_DIR/qtwebengine_locales/$${LOC}.pak
+}
+resources.files = $$REPACK_DIR/qtwebengine_resources.pak
+
+PLUGIN_EXTENSION = .so
+PLUGIN_PREFIX = lib
+osx: PLUGIN_PREFIX =
+win32 {
+ PLUGIN_EXTENSION = .dll
+ PLUGIN_PREFIX =
+}
+icu.files = $$OUT_PWD/$$getConfigDir()/icudtl.dat
+
+plugins.files = $$OUT_PWD/$$getConfigDir()/$${PLUGIN_PREFIX}ffmpegsumo$${PLUGIN_EXTENSION}
+
+!debug_and_release|!build_all|CONFIG(release, debug|release):contains(QT_CONFIG, qt_framework) {
+ locales.version = Versions
+ locales.path = Resources/qtwebengine_locales
+ resources.version = Versions
+ resources.path = Resources
+ icu.version = Versions
+ icu.path = Resources
+ plugins.version = Versions
+ plugins.path = Libraries
+ # No files, this prepares the bundle Helpers symlink, process.pro will create the directories
+ qtwebengineprocessplaceholder.version = Versions
+ qtwebengineprocessplaceholder.path = Helpers
+ QMAKE_BUNDLE_DATA += icu locales resources plugins qtwebengineprocessplaceholder
+} else {
+ locales.CONFIG += no_check_exist
+ locales.path = $$[QT_INSTALL_TRANSLATIONS]/qtwebengine_locales
+ resources.CONFIG += no_check_exist
+ resources.path = $$[QT_INSTALL_DATA]
+ icu.CONFIG += no_check_exist
+ icu.path = $$[QT_INSTALL_DATA]
+ plugins.CONFIG += no_check_exist
+ plugins.path = $$[QT_INSTALL_PLUGINS]/qtwebengine
+ INSTALLS += icu locales resources plugins
+}
+
# We distribute the module binary but headers are only available in-tree.
CONFIG += no_module_headers
load(qt_module)
@@ -23,3 +70,22 @@ CONFIG -= bsymbolic_functions
contains(QT_CONFIG, egl): CONFIG += egl
linux: contains(QT_CONFIG, separate_debug_info): QMAKE_POST_LINK="cd $(DESTDIR) && $(STRIP) --strip-unneeded $(TARGET)"
+
+!contains(QT_CONFIG, qt_framework): contains(QT_CONFIG, private_tests) {
+ ICU_TARGET = $$shell_path($$[QT_INSTALL_DATA]/icudtl.dat)
+ ICU_FILE = $$shell_path($$OUT_PWD/$$getConfigDir()/icudtl.dat)
+ icu_rule.target = $$ICU_TARGET
+ unix: icu_rule.commands = if [ -e $$ICU_FILE ] ; then $$QMAKE_COPY $$ICU_FILE $$ICU_TARGET ; fi
+ win32: icu_rule.commands = if exist $$ICU_FILE ( $$QMAKE_COPY $$ICU_FILE $$ICU_TARGET )
+
+ PLUGIN_DIR = $$shell_path($$[QT_INSTALL_PLUGINS]/qtwebengine)
+ PLUGIN_TARGET = $$shell_path($$PLUGIN_DIR/$${PLUGIN_PREFIX}ffmpegsumo$${PLUGIN_EXTENSION})
+ PLUGIN_FILE = $$shell_path($$OUT_PWD/$$getConfigDir()/$${PLUGIN_PREFIX}ffmpegsumo$${PLUGIN_EXTENSION})
+ plugins_rule.target = $$PLUGIN_TARGET
+ unix: plugins_rule.commands = $$QMAKE_MKDIR $$PLUGIN_DIR && if [ -e $$PLUGIN_FILE ] ; then $$QMAKE_COPY $$PLUGIN_FILE $$PLUGIN_TARGET ; fi
+ win32: plugins_rule.commands = (if not exist $$PLUGIN_DIR ( $$QMAKE_MKDIR $$PLUGIN_DIR )) && \
+ if exist $$PLUGIN_FILE ( $$QMAKE_COPY $$PLUGIN_FILE $$PLUGIN_TARGET )
+
+ QMAKE_EXTRA_TARGETS += icu_rule plugins_rule
+ PRE_TARGETDEPS += $$ICU_TARGET $$PLUGIN_TARGET
+}
diff --git a/src/core/gyp_run.pro b/src/core/gyp_run.pro
index 137b600b9..8d4d77351 100644
--- a/src/core/gyp_run.pro
+++ b/src/core/gyp_run.pro
@@ -87,6 +87,11 @@ contains(QT_ARCH, "i386"): GYP_ARGS += "-D target_arch=ia32"
contains(WEBENGINE_CONFIG, proprietary_codecs): GYP_ARGS += "-Dproprietary_codecs=1 -Dffmpeg_branding=Chrome -Duse_system_ffmpeg=0"
+!contains(QT_CONFIG, qt_framework): contains(QT_CONFIG, private_tests) {
+ GYP_ARGS += "-D qt_install_data=\"$$[QT_INSTALL_DATA]\""
+ GYP_ARGS += "-D qt_install_translations=\"$$[QT_INSTALL_TRANSLATIONS]\""
+}
+
!build_pass {
message("Running gyp_qtwebengine \"$$OUT_PWD\" $${GYP_ARGS}...")
!system("python $$QTWEBENGINE_ROOT/tools/buildscripts/gyp_qtwebengine \"$$OUT_PWD\" $${GYP_ARGS}"): error("-- running gyp_qtwebengine failed --")
diff --git a/src/core/render_widget_host_view_qt.cpp b/src/core/render_widget_host_view_qt.cpp
index 99c954595..fec9caabc 100644
--- a/src/core/render_widget_host_view_qt.cpp
+++ b/src/core/render_widget_host_view_qt.cpp
@@ -133,6 +133,12 @@ static inline ui::GestureProvider::Config QtGestureProviderConfig() {
return config;
}
+static inline bool compareTouchPoints(const QTouchEvent::TouchPoint &lhs, const QTouchEvent::TouchPoint &rhs)
+{
+ // TouchPointPressed < TouchPointMoved < TouchPointReleased
+ return lhs.state() < rhs.state();
+}
+
class MotionEventQt : public ui::MotionEvent {
public:
MotionEventQt(const QList<QTouchEvent::TouchPoint> &touchPoints, const base::TimeTicks &eventTime, Action action, int index = -1)
@@ -983,6 +989,10 @@ void RenderWidgetHostViewQt::handleTouchEvent(QTouchEvent *ev)
if (ev->type() == QEvent::TouchBegin)
m_sendMotionActionDown = true;
+ // Make sure that ACTION_POINTER_DOWN is delivered before ACTION_MOVE,
+ // and ACTION_MOVE before ACTION_POINTER_UP.
+ std::sort(touchPoints.begin(), touchPoints.end(), compareTouchPoints);
+
for (int i = 0; i < touchPoints.size(); ++i) {
ui::MotionEvent::Action action;
switch (touchPoints[i].state()) {
diff --git a/src/core/renderer/content_renderer_client_qt.h b/src/core/renderer/content_renderer_client_qt.h
index 4e3c70cf8..7103bc29b 100644
--- a/src/core/renderer/content_renderer_client_qt.h
+++ b/src/core/renderer/content_renderer_client_qt.h
@@ -33,6 +33,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
+#ifndef CONTENT_RENDERER_CLIENT_QT_H
+#define CONTENT_RENDERER_CLIENT_QT_H
#include "content/public/renderer/content_renderer_client.h"
@@ -61,3 +63,5 @@ public:
private:
QScopedPointer<visitedlink::VisitedLinkSlave> m_visitedLinkSlave;
};
+
+#endif // CONTENT_RENDERER_CLIENT_QT_H
diff --git a/src/core/renderer/qt_render_view_observer.h b/src/core/renderer/qt_render_view_observer.h
index fed5852e4..94f8baa40 100644
--- a/src/core/renderer/qt_render_view_observer.h
+++ b/src/core/renderer/qt_render_view_observer.h
@@ -33,6 +33,8 @@
** $QT_END_LICENSE$
**
****************************************************************************/
+#ifndef QT_RENDER_VIEW_OBSERVER_H
+#define QT_RENDER_VIEW_OBSERVER_H
#include "content/public/renderer/render_view_observer.h"
@@ -52,3 +54,5 @@ private:
DISALLOW_COPY_AND_ASSIGN(QtRenderViewObserver);
};
+
+#endif // QT_RENDER_VIEW_OBSERVER_H
diff --git a/src/core/resources/repack_locales.gypi b/src/core/resources/repack_locales.gypi
index ca3507912..d24da1b5d 100644
--- a/src/core/resources/repack_locales.gypi
+++ b/src/core/resources/repack_locales.gypi
@@ -13,7 +13,7 @@
'<!@pymod_do_main(repack_locales -i -p <(OS) -s <(SHARED_INTERMEDIATE_DIR) -x <(repack_output_dir) <(repack_extra_flags) <(locales))'
],
'outputs': [
- '<!@pymod_do_main(repack_locales -o -p <(OS) -s <(SHARED_INTERMEDIATE_DIR) -x <(repack_output_dir) <(locales))'
+ '<@(locale_files)'
],
'action': [
'<@(repack_locales_script)',
diff --git a/src/core/resources/resources.gyp b/src/core/resources/resources.gyp
index f07facca6..835a87cdf 100644
--- a/src/core/resources/resources.gyp
+++ b/src/core/resources/resources.gyp
@@ -9,6 +9,9 @@
'sk', 'sl', 'sr', 'sv', 'sw', 'ta', 'te', 'th', 'tr', 'uk',
'vi', 'zh-CN', 'zh-TW',
],
+ 'locale_files': ['<!@pymod_do_main(repack_locales -o -p <(OS) -s <(SHARED_INTERMEDIATE_DIR) -x <(SHARED_INTERMEDIATE_DIR) <(locales))'],
+ 'qt_install_data%': '',
+ 'qt_install_translations%': '',
},
'dependencies': [
'<(chromium_src_dir)/webkit/webkit_resources.gyp:webkit_strings',
@@ -29,7 +32,25 @@
'action_name': 'repack_locales',
'includes': [ 'repack_locales.gypi' ],
},
- ]
+ ],
+ 'conditions': [
+ ['qt_install_data != ""', {
+ 'copies': [
+ {
+ 'destination': '<(qt_install_data)',
+ 'files': [ '<(SHARED_INTERMEDIATE_DIR)/repack/qtwebengine_resources.pak' ],
+ },
+ ],
+ }],
+ ['qt_install_translations != ""', {
+ 'copies': [
+ {
+ 'destination': '<(qt_install_translations)/qtwebengine_locales',
+ 'files': [ '<@(locale_files)' ],
+ },
+ ],
+ }],
+ ],
}
]
}
diff --git a/src/core/web_engine_context.cpp b/src/core/web_engine_context.cpp
index df68c1822..b17ee124c 100644
--- a/src/core/web_engine_context.cpp
+++ b/src/core/web_engine_context.cpp
@@ -183,7 +183,11 @@ WebEngineContext::WebEngineContext()
#if defined(OS_WIN)
parsedCommandLine->AppendSwitch(switches::kDisableD3D11);
+ // ANGLE doesn't support multi-threading, doing texture upload from the GPU thread
+ // hasn't been causing problems yet but doing rendering there is conflicting with
+ // Qt's rendering of the scene graph.
parsedCommandLine->AppendSwitch(switches::kDisableExperimentalWebGL);
+ parsedCommandLine->AppendSwitch(switches::kDisableAccelerated2dCanvas);
#endif
#if defined(QTWEBENGINE_MOBILE_SWITCHES)
diff --git a/src/core/web_engine_library_info.cpp b/src/core/web_engine_library_info.cpp
index 4cdf3813e..026f4db83 100644
--- a/src/core/web_engine_library_info.cpp
+++ b/src/core/web_engine_library_info.cpp
@@ -92,6 +92,39 @@ QString location(QLibraryInfo::LibraryLocation path)
return QLibraryInfo::location(path);
}
+#if defined(OS_MACOSX)
+static inline CFBundleRef frameworkBundle()
+{
+ return CFBundleGetBundleWithIdentifier(CFSTR("org.qt-project.Qt.QtWebEngineCore"));
+}
+
+static QString getPath(CFBundleRef frameworkBundle)
+{
+ QString path;
+ if (frameworkBundle) {
+ CFURLRef bundleUrl = CFBundleCopyBundleURL(frameworkBundle);
+ CFStringRef bundlePath = CFURLCopyFileSystemPath(bundleUrl, kCFURLPOSIXPathStyle);
+ path = QString::fromCFString(bundlePath);
+ CFRelease(bundlePath);
+ CFRelease(bundleUrl);
+ }
+ return path;
+}
+
+static QString getResourcesPath(CFBundleRef frameworkBundle)
+{
+ QString path;
+ if (frameworkBundle) {
+ CFURLRef resourcesRelativeUrl = CFBundleCopyResourcesDirectoryURL(frameworkBundle);
+ CFStringRef resourcesRelativePath = CFURLCopyFileSystemPath(resourcesRelativeUrl, kCFURLPOSIXPathStyle);
+ path = getPath(frameworkBundle) % QLatin1Char('/') % QString::fromCFString(resourcesRelativePath);
+ CFRelease(resourcesRelativePath);
+ CFRelease(resourcesRelativeUrl);
+ }
+ return path;
+}
+#endif
+
QString subProcessPath()
{
static bool initialized = false;
@@ -100,14 +133,19 @@ QString subProcessPath()
#else
static QString processBinary (QLatin1String(QTWEBENGINEPROCESS_NAME));
#endif
+#if defined(OS_MACOSX) && defined(QT_MAC_FRAMEWORK_BUILD)
+ static QString processPath (getPath(frameworkBundle())
+ % QStringLiteral("/Helpers/" QTWEBENGINEPROCESS_NAME ".app/Contents/MacOS/" QTWEBENGINEPROCESS_NAME));
+#else
static QString processPath (location(QLibraryInfo::LibraryExecutablesPath)
% QDir::separator() % processBinary);
+#endif
if (!initialized) {
// Allow overriding at runtime for the time being.
const QByteArray fromEnv = qgetenv("QTWEBENGINEPROCESS_PATH");
if (!fromEnv.isEmpty())
processPath = QString::fromLatin1(fromEnv);
- if (processPath.isEmpty() || !QFileInfo(processPath).exists()) {
+ if (!QFileInfo(processPath).exists()) {
qWarning("QtWebEngineProcess not found at location %s. Trying fallback path...", qPrintable(processPath));
processPath = QCoreApplication::applicationDirPath() % QDir::separator() % processBinary;
}
@@ -121,12 +159,20 @@ QString subProcessPath()
QString pluginsPath()
{
+#if defined(OS_MACOSX) && defined(QT_MAC_FRAMEWORK_BUILD)
+ return getPath(frameworkBundle()) % QLatin1String("/Libraries");
+#else
return location(QLibraryInfo::PluginsPath) % QDir::separator() % QLatin1String("qtwebengine");
+#endif
}
QString localesPath()
{
+#if defined(OS_MACOSX) && defined(QT_MAC_FRAMEWORK_BUILD)
+ return getResourcesPath(frameworkBundle()) % QLatin1String("/qtwebengine_locales");
+#else
return location(QLibraryInfo::TranslationsPath) % QLatin1String("/qtwebengine_locales");
+#endif
}
QString fallbackDir() {
@@ -155,7 +201,11 @@ base::FilePath WebEngineLibraryInfo::getPath(int key)
QString directory;
switch (key) {
case QT_RESOURCES_PAK:
+#if defined(OS_MACOSX) && defined(QT_MAC_FRAMEWORK_BUILD)
+ return toFilePath(getResourcesPath(frameworkBundle()) % QLatin1String("/qtwebengine_resources.pak"));
+#else
return toFilePath(location(QLibraryInfo::DataPath) % QLatin1String("/qtwebengine_resources.pak"));
+#endif
case base::FILE_EXE:
case content::CHILD_PROCESS_EXE:
return toFilePath(subProcessPath());
@@ -171,7 +221,11 @@ base::FilePath WebEngineLibraryInfo::getPath(int key)
directory = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
break;
case base::DIR_QT_LIBRARY_DATA:
+#if defined(OS_MACOSX) && defined(QT_MAC_FRAMEWORK_BUILD)
+ return toFilePath(getResourcesPath(frameworkBundle()));
+#else
return toFilePath(location(QLibraryInfo::DataPath));
+#endif
#if defined(OS_ANDROID)
case base::DIR_SOURCE_ROOT:
case base::DIR_ANDROID_EXTERNAL_STORAGE:
diff --git a/src/process/process.pro b/src/process/process.pro
index a9f5d183f..ad1575c81 100644
--- a/src/process/process.pro
+++ b/src/process/process.pro
@@ -1,16 +1,42 @@
TARGET = $$QTWEBENGINEPROCESS_NAME
TEMPLATE = app
-QT_PRIVATE += webenginecore
+load(qt_build_paths)
+contains(QT_CONFIG, qt_framework) {
+ # Deploy the QtWebEngineProcess app bundle into the QtWebEngineCore framework.
+ DESTDIR = $$MODULE_BASE_OUTDIR/lib/QtWebEngineCore.framework/Versions/5/Helpers
-CONFIG -= app_bundle
+ # FIXME: We can remove those steps in Qt 5.5 once @rpath works
+ # "QT += webenginecore" would pull all dependencies that we'd also need to update
+ # with install_name_tool on OSX, but we only need access to the private
+ # QtWebEngine::processMain. qtAddModule will take care of finding where
+ # the library is without pulling additional librarie.
+ QT = core
+ qtAddModule(webenginecore, LIBS)
+ CONFIG -= link_prl
+ QMAKE_POST_LINK = \
+ "xcrun install_name_tool -change " \
+ "`xcrun otool -X -L $(TARGET) | grep QtWebEngineCore | cut -d ' ' -f 1` " \
+ "@executable_path/../../../../QtWebEngineCore " \
+ "$(TARGET); " \
+ "xcrun install_name_tool -change " \
+ "`xcrun otool -X -L $(TARGET) | grep QtCore | cut -d ' ' -f 1` " \
+ "@executable_path/../../../../../../../QtCore.framework/QtCore " \
+ "$(TARGET) "
+} else {
+ CONFIG -= app_bundle
+ DESTDIR = $$MODULE_BASE_OUTDIR/libexec
-load(qt_build_paths)
-DESTDIR = $$MODULE_BASE_OUTDIR/libexec
+ QT_PRIVATE += webenginecore
+}
INCLUDEPATH += ../core
SOURCES = main.cpp
-target.path = $$[QT_INSTALL_LIBEXECS]
+contains(QT_CONFIG, qt_framework) {
+ target.path = $$[QT_INSTALL_LIBS]/QtWebEngineCore.framework/Versions/5/Helpers
+} else {
+ target.path = $$[QT_INSTALL_LIBEXECS]
+}
INSTALLS += target
diff --git a/src/webengine/api/qquickwebenginesettings.cpp b/src/webengine/api/qquickwebenginesettings.cpp
index 03a812bae..e46b1a80d 100644
--- a/src/webengine/api/qquickwebenginesettings.cpp
+++ b/src/webengine/api/qquickwebenginesettings.cpp
@@ -85,6 +85,7 @@ QQuickWebEngineSettings *QQuickWebEngineSettings::globalSettings()
QQuickWebEngineSettings::~QQuickWebEngineSettings()
{
+ allSettings->removeAll(this->d_func());
}
bool QQuickWebEngineSettings::autoLoadImages() const
diff --git a/src/webenginewidgets/doc/src/qtwebenginewidgets.qdoc b/src/webenginewidgets/doc/src/qtwebenginewidgets.qdoc
index 3f6e888f3..d440dd06a 100644
--- a/src/webenginewidgets/doc/src/qtwebenginewidgets.qdoc
+++ b/src/webenginewidgets/doc/src/qtwebenginewidgets.qdoc
@@ -117,6 +117,12 @@
\li \l {Qt WebEngine Widgets C++ Classes}
\endlist
+ \section1 Examples
+
+ \list
+ \li \l {Qt WebEngine Widgets Examples}
+ \endlist
+
\section1 License Information
This is a snapshot of the integration of Chromium into Qt.