summaryrefslogtreecommitdiffstats
path: root/src/core
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-05-28 09:55:20 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-05-28 09:55:20 +0200
commit5087a4eaa32e08fe59f1f5b71dc21dda0876a759 (patch)
tree234e059dbe9226f242ca15b063952ad37e4f54da /src/core
parent6eadb2f2588b240b5fcda38e1f68a49a4690eb6b (diff)
parentf2db8f1988a3767d4f35aa4724d4e168e80dad59 (diff)
Merge remote-tracking branch 'origin/5.15' into dev
Diffstat (limited to 'src/core')
-rw-r--r--src/core/compositor/chromium_gpu_helper.cpp16
-rw-r--r--src/core/compositor/chromium_gpu_helper.h16
-rw-r--r--src/core/compositor/delegated_frame_node.cpp17
-rw-r--r--src/core/content_client_qt.cpp8
-rw-r--r--src/core/extensions/component_extension_resource_manager_qt.cpp19
-rw-r--r--src/core/file_picker_controller.cpp72
-rw-r--r--src/core/gn_run.pro5
-rw-r--r--src/core/permission_manager_qt.cpp26
-rw-r--r--src/core/permission_manager_qt.h11
-rw-r--r--src/core/profile_adapter.cpp2
-rw-r--r--src/core/profile_adapter.h8
-rw-r--r--src/core/web_contents_adapter.cpp8
-rw-r--r--src/core/web_contents_adapter.h2
-rw-r--r--src/core/web_contents_delegate_qt.cpp3
14 files changed, 122 insertions, 91 deletions
diff --git a/src/core/compositor/chromium_gpu_helper.cpp b/src/core/compositor/chromium_gpu_helper.cpp
index 71d0f3687..1ddbf75e5 100644
--- a/src/core/compositor/chromium_gpu_helper.cpp
+++ b/src/core/compositor/chromium_gpu_helper.cpp
@@ -57,9 +57,7 @@
#include "content/gpu/gpu_child_thread.h"
#include "gpu/ipc/service/gpu_channel_manager.h"
-#ifdef Q_OS_QNX
-#include "content/common/gpu/stream_texture_qnx.h"
-#endif
+#include <QtGlobal> // We need this for Q_UNUSED
scoped_refptr<base::SingleThreadTaskRunner> gpu_task_runner()
{
@@ -87,15 +85,3 @@ void ProgressFlingIfNeeded(content::RenderWidgetHost *host, const base::TimeTick
{
content::RenderWidgetHostImpl::From(host)->ProgressFlingIfNeeded(current_time);
}
-
-#ifdef Q_OS_QNX
-EGLStreamData eglstream_connect_consumer(gpu::Texture *tex)
-{
- EGLStreamData egl_stream;
- content::StreamTexture* image = static_cast<content::StreamTexture *>(tex->GetLevelImage(GL_TEXTURE_EXTERNAL_OES, 0));
- if (image) {
- image->ConnectConsumerIfNeeded(&egl_stream.egl_display, &egl_stream.egl_str_handle);
- }
- return egl_stream;
-}
-#endif
diff --git a/src/core/compositor/chromium_gpu_helper.h b/src/core/compositor/chromium_gpu_helper.h
index 4086d12ab..e692b9b85 100644
--- a/src/core/compositor/chromium_gpu_helper.h
+++ b/src/core/compositor/chromium_gpu_helper.h
@@ -40,8 +40,6 @@
#ifndef CHROMIUM_GPU_HELPER_H
#define CHROMIUM_GPU_HELPER_H
-#include <QtGlobal> // We need this for the Q_OS_QNX define.
-
#include "base/memory/scoped_refptr.h"
namespace base {
@@ -72,18 +70,4 @@ unsigned int service_id(gpu::TextureBase *tex);
void ProgressFlingIfNeeded(content::RenderWidgetHost *host, const base::TimeTicks &current_time);
-#ifdef Q_OS_QNX
-typedef void* EGLDisplay;
-typedef void* EGLStreamKHR;
-
-struct EGLStreamData {
- EGLDisplay egl_display;
- EGLStreamKHR egl_str_handle;
-
- EGLStreamData(): egl_display(NULL), egl_str_handle(NULL) {}
-};
-
-EGLStreamData eglstream_connect_consumer(gpu::Texture *tex);
-#endif
-
#endif // CHROMIUM_GPU_HELPER_H
diff --git a/src/core/compositor/delegated_frame_node.cpp b/src/core/compositor/delegated_frame_node.cpp
index c20069558..de79ba514 100644
--- a/src/core/compositor/delegated_frame_node.cpp
+++ b/src/core/compositor/delegated_frame_node.cpp
@@ -142,9 +142,6 @@ private:
#if defined(USE_OZONE)
bool m_ownsTexture;
#endif
-#ifdef Q_OS_QNX
- EGLStreamData m_eglStreamData;
-#endif
friend class DelegatedFrameNode;
};
#endif // QT_CONFIG(opengl)
@@ -467,20 +464,6 @@ void MailboxTexture::bind()
if (m_fence)
m_fence->wait();
glBindTexture(m_target, m_textureId);
-#ifdef Q_OS_QNX
- if (m_target == GL_TEXTURE_EXTERNAL_OES) {
- static bool resolved = false;
- static PFNEGLSTREAMCONSUMERACQUIREKHRPROC eglStreamConsumerAcquire = 0;
-
- if (!resolved) {
- QOpenGLContext *context = QOpenGLContext::currentContext();
- eglStreamConsumerAcquire = (PFNEGLSTREAMCONSUMERACQUIREKHRPROC)context->getProcAddress("eglStreamConsumerAcquireKHR");
- resolved = true;
- }
- if (eglStreamConsumerAcquire)
- eglStreamConsumerAcquire(m_eglStreamData.egl_display, m_eglStreamData.egl_str_handle);
- }
-#endif
}
#endif // QT_CONFIG(opengl)
diff --git a/src/core/content_client_qt.cpp b/src/core/content_client_qt.cpp
index 80eb9ceb1..083e10f2a 100644
--- a/src/core/content_client_qt.cpp
+++ b/src/core/content_client_qt.cpp
@@ -54,7 +54,7 @@
#include "ui/base/layout.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
-
+#include "services/service_manager/embedder/switches.h"
#include "type_conversion.h"
#include <QCoreApplication>
@@ -68,9 +68,7 @@
#include "third_party/widevine/cdm/widevine_cdm_common.h"
#if BUILDFLAG(ENABLE_WIDEVINE) && !BUILDFLAG(ENABLE_WIDEVINE_CDM_COMPONENT)
#define WIDEVINE_CDM_AVAILABLE_NOT_COMPONENT
-namespace switches {
-const char kCdmWidevinePath[] = "widevine-path";
-}
+
// File name of the CDM on different platforms.
const char kWidevineCdmFileName[] =
#if defined(OS_MACOSX)
@@ -287,7 +285,7 @@ static bool IsWidevineAvailable(base::FilePath *cdm_path,
content::CdmCapability *capability)
{
QStringList pluginPaths;
- const base::CommandLine::StringType widevine_argument = base::CommandLine::ForCurrentProcess()->GetSwitchValueNative(switches::kCdmWidevinePath);
+ const base::CommandLine::StringType widevine_argument = base::CommandLine::ForCurrentProcess()->GetSwitchValueNative(service_manager::switches::kCdmWidevinePath);
if (!widevine_argument.empty())
pluginPaths << QtWebEngineCore::toQt(widevine_argument);
else {
diff --git a/src/core/extensions/component_extension_resource_manager_qt.cpp b/src/core/extensions/component_extension_resource_manager_qt.cpp
index bb1dd045c..1f58de151 100644
--- a/src/core/extensions/component_extension_resource_manager_qt.cpp
+++ b/src/core/extensions/component_extension_resource_manager_qt.cpp
@@ -92,12 +92,27 @@ const ui::TemplateReplacements *ComponentExtensionResourceManagerQt::GetTemplate
void ComponentExtensionResourceManagerQt::AddComponentResourceEntries(const GritResourceMap *entries, size_t size)
{
+ base::FilePath gen_folder_path = base::FilePath().AppendASCII("@out_folder@/gen/chrome/browser/resources/");
+ gen_folder_path = gen_folder_path.NormalizePathSeparators();
+
for (size_t i = 0; i < size; ++i) {
base::FilePath resource_path = base::FilePath().AppendASCII(entries[i].name);
resource_path = resource_path.NormalizePathSeparators();
- DCHECK(!base::Contains(path_to_resource_id_, resource_path));
- path_to_resource_id_[resource_path] = entries[i].value;
+
+ if (!gen_folder_path.IsParent(resource_path)) {
+ DCHECK(!base::Contains(path_to_resource_id_, resource_path));
+ path_to_resource_id_[resource_path] = entries[i].value;
+ } else {
+ // If the resource is a generated file, strip the generated folder's path,
+ // so that it can be served from a normal URL (as if it were not
+ // generated).
+ base::FilePath effective_path =
+ base::FilePath().AppendASCII(resource_path.AsUTF8Unsafe().substr(
+ gen_folder_path.value().length()));
+ DCHECK(!base::Contains(path_to_resource_id_, effective_path));
+ path_to_resource_id_[effective_path] = entries[i].value;
+ }
}
}
diff --git a/src/core/file_picker_controller.cpp b/src/core/file_picker_controller.cpp
index 3c81a977c..01a6d0746 100644
--- a/src/core/file_picker_controller.cpp
+++ b/src/core/file_picker_controller.cpp
@@ -39,9 +39,8 @@
#include "file_picker_controller.h"
#include "type_conversion.h"
-#if defined(OS_WIN)
+
#include "base/files/file_path.h"
-#endif
#include "content/browser/renderer_host/render_view_host_impl.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/browser/file_select_listener.h"
@@ -72,27 +71,64 @@ void FilePickerController::accepted(const QStringList &files)
for (const QString &urlString : files) {
// We accept strings on both absolute-path and file-URL form:
- if (QDir::isAbsolutePath(urlString)) {
- QString absolutePath = QDir::fromNativeSeparators(urlString);
-#if defined(OS_WIN)
- if (absolutePath.at(0).isLetter() && absolutePath.at(1) == QLatin1Char(':') && !base::FilePath::IsSeparator(absolutePath.at(2).toLatin1()))
- qWarning("Ignoring invalid item in FilePickerController::accepted(QStringList): %s", qPrintable(urlString));
- else
+ if (toFilePath(urlString).IsAbsolute()) {
+ stringList.append(urlString);
+ continue;
+ }
+
+ if (urlString.startsWith("file:")) {
+ base::FilePath filePath = toFilePath(urlString).NormalizePathSeparators();
+ std::vector<base::FilePath::StringType> pathComponents;
+ // Splits the file URL into host name, path and file name.
+ filePath.GetComponents(&pathComponents);
+
+ QString absolutePath;
+#if !defined(OS_WIN)
+ absolutePath = "/";
#endif
- stringList.append(absolutePath);
- } else {
- QUrl url(urlString, QUrl::StrictMode);
- if (url.isLocalFile() && QDir::isAbsolutePath(url.toLocalFile())) {
- QString absolutePath = url.toLocalFile();
+
+ QString scheme = toQt(pathComponents[0]);
+ if (scheme.size() > 5) {
#if defined(OS_WIN)
- if (absolutePath.at(0).isLetter() && absolutePath.at(1) == QLatin1Char(':') && !base::FilePath::IsSeparator(absolutePath.at(2).toLatin1()))
+ // There is no slash at the end of the file scheme and it is valid on Windows: file:C:/
+ if (scheme.at(5).isLetter() && scheme.at(6) != ':') {
+ absolutePath += scheme.at(5) + ":/";
+ } else {
+#endif
qWarning("Ignoring invalid item in FilePickerController::accepted(QStringList): %s", qPrintable(urlString));
- else
+ continue;
+#if defined(OS_WIN)
+ }
+#endif
+ }
+
+ // Non-local file and UNC Path validation: file://path/file
+ if (base::FilePath::IsSeparator(urlString.at(5).toLatin1())
+ && base::FilePath::IsSeparator(urlString.at(6).toLatin1())
+ && !base::FilePath::IsSeparator(urlString.at(7).toLatin1())) {
+#if defined(OS_WIN)
+ if (urlString.at(8) != ':' && pathComponents.size() > 2) {
+ absolutePath += "//";
+#else
+ if (pathComponents.size() > 2) {
+ absolutePath += "/";
#endif
- stringList.append(absolutePath);
- } else
- qWarning("Ignoring invalid item in FilePickerController::accepted(QStringList): %s", qPrintable(urlString));
+ } else {
+ qWarning("Ignoring invalid item in FilePickerController::accepted(QStringList): %s", qPrintable(urlString));
+ continue;
+ }
+ }
+
+ // Build absolute path from file URI componenets.
+ for (int j = 1; j < pathComponents.size(); j++)
+ absolutePath += toQt(pathComponents[j]) + (j != pathComponents.size()-1 ? "/" : "");
+
+ if (toFilePath(absolutePath).IsAbsolute()) {
+ stringList.append(absolutePath);
+ continue;
+ }
}
+ qWarning("Ignoring invalid item in FilePickerController::accepted(QStringList): %s", qPrintable(urlString));
}
FilePickerController::filesSelectedInChooser(stringList);
diff --git a/src/core/gn_run.pro b/src/core/gn_run.pro
index 4f1ccce43..f72efc8d5 100644
--- a/src/core/gn_run.pro
+++ b/src/core/gn_run.pro
@@ -61,3 +61,8 @@ build_pass|!debug_and_release {
notParallel.target = .NOTPARALLEL
QMAKE_EXTRA_TARGETS += notParallel
}
+
+build_pass:CONFIG(debug, debug|release) {
+ TARGET = gn_run_debug
+}
+
diff --git a/src/core/permission_manager_qt.cpp b/src/core/permission_manager_qt.cpp
index 2f9543769..862a1c262 100644
--- a/src/core/permission_manager_qt.cpp
+++ b/src/core/permission_manager_qt.cpp
@@ -102,6 +102,18 @@ static bool canRequestPermissionFor(ProfileAdapter::PermissionType type)
return false;
}
+static blink::mojom::PermissionStatus toBlink(ProfileAdapter::PermissionState reply)
+{
+ switch (reply) {
+ case ProfileAdapter::AskPermission:
+ return blink::mojom::PermissionStatus::ASK;
+ case ProfileAdapter::AllowedPermission:
+ return blink::mojom::PermissionStatus::GRANTED;
+ case ProfileAdapter::DeniedPermission:
+ return blink::mojom::PermissionStatus::DENIED;
+ }
+}
+
PermissionManagerQt::PermissionManagerQt()
: m_requestIdCount(0)
, m_subscriberIdCount(0)
@@ -112,7 +124,7 @@ PermissionManagerQt::~PermissionManagerQt()
{
}
-void PermissionManagerQt::permissionRequestReply(const QUrl &url, ProfileAdapter::PermissionType type, bool reply)
+void PermissionManagerQt::permissionRequestReply(const QUrl &url, ProfileAdapter::PermissionType type, ProfileAdapter::PermissionState reply)
{
// Normalize the QUrl to GURL origin form.
const GURL gorigin = toGurl(url).GetOrigin();
@@ -120,9 +132,12 @@ void PermissionManagerQt::permissionRequestReply(const QUrl &url, ProfileAdapter
if (origin.isEmpty())
return;
QPair<QUrl, ProfileAdapter::PermissionType> key(origin, type);
- m_permissions[key] = reply;
- blink::mojom::PermissionStatus status = reply ? blink::mojom::PermissionStatus::GRANTED : blink::mojom::PermissionStatus::DENIED;
- {
+ if (reply == ProfileAdapter::AskPermission)
+ m_permissions.remove(key);
+ else
+ m_permissions[key] = (reply == ProfileAdapter::AllowedPermission);
+ blink::mojom::PermissionStatus status = toBlink(reply);
+ if (reply != ProfileAdapter::AskPermission) {
auto it = m_requests.begin();
while (it != m_requests.end()) {
if (it->origin == origin && it->type == type) {
@@ -137,6 +152,9 @@ void PermissionManagerQt::permissionRequestReply(const QUrl &url, ProfileAdapter
it.second.callback.Run(status);
}
+ if (reply == ProfileAdapter::AskPermission)
+ return;
+
auto it = m_multiRequests.begin();
while (it != m_multiRequests.end()) {
if (it->origin == origin) {
diff --git a/src/core/permission_manager_qt.h b/src/core/permission_manager_qt.h
index 6ab071237..e046174df 100644
--- a/src/core/permission_manager_qt.h
+++ b/src/core/permission_manager_qt.h
@@ -54,10 +54,9 @@ class PermissionManagerQt : public content::PermissionControllerDelegate {
public:
PermissionManagerQt();
~PermissionManagerQt();
- typedef ProfileAdapter::PermissionType PermissionType;
- void permissionRequestReply(const QUrl &origin, PermissionType type, bool reply);
- bool checkPermission(const QUrl &origin, PermissionType type);
+ void permissionRequestReply(const QUrl &origin, ProfileAdapter::PermissionType type, ProfileAdapter::PermissionState reply);
+ bool checkPermission(const QUrl &origin, ProfileAdapter::PermissionType type);
// content::PermissionManager implementation:
int RequestPermission(
@@ -99,10 +98,10 @@ public:
void UnsubscribePermissionStatusChange(int subscription_id) override;
private:
- QHash<QPair<QUrl, PermissionType>, bool> m_permissions;
+ QHash<QPair<QUrl, ProfileAdapter::PermissionType>, bool> m_permissions;
struct Request {
int id;
- PermissionType type;
+ ProfileAdapter::PermissionType type;
QUrl origin;
base::OnceCallback<void(blink::mojom::PermissionStatus)> callback;
};
@@ -113,7 +112,7 @@ private:
base::OnceCallback<void(const std::vector<blink::mojom::PermissionStatus>&)> callback;
};
struct Subscription {
- PermissionType type;
+ ProfileAdapter::PermissionType type;
QUrl origin;
base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback;
};
diff --git a/src/core/profile_adapter.cpp b/src/core/profile_adapter.cpp
index b87591c97..4557ad7a4 100644
--- a/src/core/profile_adapter.cpp
+++ b/src/core/profile_adapter.cpp
@@ -543,7 +543,7 @@ UserResourceControllerHost *ProfileAdapter::userResourceController()
return m_userResourceController.data();
}
-void ProfileAdapter::permissionRequestReply(const QUrl &origin, PermissionType type, bool reply)
+void ProfileAdapter::permissionRequestReply(const QUrl &origin, PermissionType type, PermissionState reply)
{
static_cast<PermissionManagerQt*>(profile()->GetPermissionControllerDelegate())->permissionRequestReply(origin, type, reply);
}
diff --git a/src/core/profile_adapter.h b/src/core/profile_adapter.h
index 1e5a3e21f..efd56e50e 100644
--- a/src/core/profile_adapter.h
+++ b/src/core/profile_adapter.h
@@ -164,6 +164,12 @@ public:
ClipboardWrite = 6,
};
+ enum PermissionState {
+ AskPermission = 0,
+ AllowedPermission = 1,
+ DeniedPermission = 2
+ };
+
HttpCacheType httpCacheType() const;
void setHttpCacheType(ProfileAdapter::HttpCacheType);
@@ -187,7 +193,7 @@ public:
const QList<QByteArray> customUrlSchemes() const;
UserResourceControllerHost *userResourceController();
- void permissionRequestReply(const QUrl &origin, PermissionType type, bool reply);
+ void permissionRequestReply(const QUrl &origin, PermissionType type, PermissionState reply);
bool checkPermission(const QUrl &origin, PermissionType type);
QString httpAcceptLanguageWithoutQualities() const;
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index 0f2f21f83..ef482ef08 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -1360,15 +1360,15 @@ void WebContentsAdapter::grantMediaAccessPermission(const QUrl &securityOrigin,
CHECK_INITIALIZED();
// Let the permission manager remember the reply.
if (flags & WebContentsAdapterClient::MediaAudioCapture)
- m_profileAdapter->permissionRequestReply(securityOrigin, ProfileAdapter::AudioCapturePermission, true);
+ m_profileAdapter->permissionRequestReply(securityOrigin, ProfileAdapter::AudioCapturePermission, ProfileAdapter::AllowedPermission);
if (flags & WebContentsAdapterClient::MediaVideoCapture)
- m_profileAdapter->permissionRequestReply(securityOrigin, ProfileAdapter::VideoCapturePermission, true);
+ m_profileAdapter->permissionRequestReply(securityOrigin, ProfileAdapter::VideoCapturePermission, ProfileAdapter::AllowedPermission);
MediaCaptureDevicesDispatcher::GetInstance()->handleMediaAccessPermissionResponse(m_webContents.get(), securityOrigin, flags);
}
-void WebContentsAdapter::runFeatureRequestCallback(const QUrl &securityOrigin, ProfileAdapter::PermissionType feature, bool allowed)
+void WebContentsAdapter::grantFeaturePermission(const QUrl &securityOrigin, ProfileAdapter::PermissionType feature, ProfileAdapter::PermissionState allowed)
{
- CHECK_INITIALIZED();
+ Q_ASSERT(m_profileAdapter);
m_profileAdapter->permissionRequestReply(securityOrigin, feature, allowed);
}
diff --git a/src/core/web_contents_adapter.h b/src/core/web_contents_adapter.h
index 66808ce5e..d833314f2 100644
--- a/src/core/web_contents_adapter.h
+++ b/src/core/web_contents_adapter.h
@@ -196,7 +196,7 @@ public:
void grantMediaAccessPermission(const QUrl &securityOrigin, WebContentsAdapterClient::MediaRequestFlags flags);
void grantMouseLockPermission(const QUrl &securityOrigin, bool granted);
void handlePendingMouseLockPermission();
- void runFeatureRequestCallback(const QUrl &securityOrigin, ProfileAdapter::PermissionType feature, bool allowed);
+ void grantFeaturePermission(const QUrl &securityOrigin, ProfileAdapter::PermissionType feature, ProfileAdapter::PermissionState allowed);
void setBackgroundColor(const QColor &color);
QAccessibleInterface *browserAccessible();
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index bf0254e82..63f52433e 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -251,8 +251,9 @@ void WebContentsDelegateQt::AddNewContents(content::WebContents* source, std::un
void WebContentsDelegateQt::CloseContents(content::WebContents *source)
{
- m_viewClient->close();
GetJavaScriptDialogManager(source)->CancelDialogs(source, /* whatever?: */false);
+ // Must be the last call because close() might trigger the destruction of this object.
+ m_viewClient->close();
}
void WebContentsDelegateQt::LoadProgressChanged(double progress)