summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2016-04-04 15:13:31 +0200
committerKai Koehne <kai.koehne@theqtcompany.com>2016-04-05 11:41:08 +0000
commit3e9a6407bbbc5f83eb8bd56c5c1d899dba9bc56f (patch)
treeb525366744fc29fd0f5ed0e28681e430866b6e52 /src
parent9da7a0649cfa65c784e86cf3496b188c9d8d15c4 (diff)
Implement CheckMediaAccessPermission
Fixes access of label of MediaStream tracks Also fixes the logged error: WebContentsDelegate::CheckMediaAccessPermission: Not supported. Change-Id: I3fee9ccd9e8b2e5cbd6b707336cc61425a44ba31 Task-number: QTBUG-52216 Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r--src/core/browser_context_adapter.cpp5
-rw-r--r--src/core/browser_context_adapter.h3
-rw-r--r--src/core/permission_manager_qt.cpp6
-rw-r--r--src/core/permission_manager_qt.h1
-rw-r--r--src/core/web_contents_adapter.cpp5
-rw-r--r--src/core/web_contents_delegate_qt.cpp14
-rw-r--r--src/core/web_contents_delegate_qt.h1
7 files changed, 35 insertions, 0 deletions
diff --git a/src/core/browser_context_adapter.cpp b/src/core/browser_context_adapter.cpp
index d394cd302..7f9363c06 100644
--- a/src/core/browser_context_adapter.cpp
+++ b/src/core/browser_context_adapter.cpp
@@ -405,6 +405,11 @@ void BrowserContextAdapter::permissionRequestReply(const QUrl &origin, Permissio
static_cast<PermissionManagerQt*>(browserContext()->GetPermissionManager())->permissionRequestReply(origin, type, reply);
}
+bool BrowserContextAdapter::checkPermission(const QUrl &origin, PermissionType type)
+{
+ return static_cast<PermissionManagerQt*>(browserContext()->GetPermissionManager())->checkPermission(origin, type);
+}
+
QString BrowserContextAdapter::httpAcceptLanguageWithoutQualities() const
{
const QStringList list = m_httpAcceptLanguage.split(QLatin1Char(','));
diff --git a/src/core/browser_context_adapter.h b/src/core/browser_context_adapter.h
index 97a4dca4a..a388e9a0c 100644
--- a/src/core/browser_context_adapter.h
+++ b/src/core/browser_context_adapter.h
@@ -127,6 +127,8 @@ public:
GeolocationPermission = 1,
// Reserved:
// NotificationPermission = 2,
+ AudioCapturePermission = 3,
+ VideoCapturePermission = 4,
};
HttpCacheType httpCacheType() const;
@@ -152,6 +154,7 @@ public:
UserScriptControllerHost *userScriptController();
void permissionRequestReply(const QUrl &origin, PermissionType type, bool reply);
+ bool checkPermission(const QUrl &origin, PermissionType type);
QString httpAcceptLanguageWithoutQualities() const;
QString httpAcceptLanguage() const;
diff --git a/src/core/permission_manager_qt.cpp b/src/core/permission_manager_qt.cpp
index b322e507e..a4b763464 100644
--- a/src/core/permission_manager_qt.cpp
+++ b/src/core/permission_manager_qt.cpp
@@ -91,6 +91,12 @@ void PermissionManagerQt::permissionRequestReply(const QUrl &origin, BrowserCont
}
}
+bool PermissionManagerQt::checkPermission(const QUrl &origin, BrowserContextAdapter::PermissionType type)
+{
+ QPair<QUrl, BrowserContextAdapter::PermissionType> key(origin, type);
+ return m_permissions.contains(key) && m_permissions[key];
+}
+
void PermissionManagerQt::RequestPermission(content::PermissionType permission,
content::RenderFrameHost *frameHost,
int request_id,
diff --git a/src/core/permission_manager_qt.h b/src/core/permission_manager_qt.h
index 6dfc60c39..8d03f275e 100644
--- a/src/core/permission_manager_qt.h
+++ b/src/core/permission_manager_qt.h
@@ -54,6 +54,7 @@ public:
typedef BrowserContextAdapter::PermissionType PermissionType;
void permissionRequestReply(const QUrl &origin, PermissionType type, bool reply);
+ bool checkPermission(const QUrl &origin, PermissionType type);
// content::PermissionManager implementation:
void RequestPermission(
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp
index 608dbf7e7..cd6505df5 100644
--- a/src/core/web_contents_adapter.cpp
+++ b/src/core/web_contents_adapter.cpp
@@ -844,6 +844,11 @@ void WebContentsAdapter::wasHidden()
void WebContentsAdapter::grantMediaAccessPermission(const QUrl &securityOrigin, WebContentsAdapterClient::MediaRequestFlags flags)
{
Q_D(WebContentsAdapter);
+ // Let the permission manager remember the reply.
+ if (flags & WebContentsAdapterClient::MediaAudioCapture)
+ d->browserContextAdapter->permissionRequestReply(securityOrigin, BrowserContextAdapter::AudioCapturePermission, true);
+ if (flags & WebContentsAdapterClient::MediaVideoCapture)
+ d->browserContextAdapter->permissionRequestReply(securityOrigin, BrowserContextAdapter::VideoCapturePermission, true);
MediaCaptureDevicesDispatcher::GetInstance()->handleMediaAccessPermissionResponse(d->webContents.get(), securityOrigin, flags);
}
diff --git a/src/core/web_contents_delegate_qt.cpp b/src/core/web_contents_delegate_qt.cpp
index e3903c902..bf12537d1 100644
--- a/src/core/web_contents_delegate_qt.cpp
+++ b/src/core/web_contents_delegate_qt.cpp
@@ -438,4 +438,18 @@ void WebContentsDelegateQt::BeforeUnloadFired(content::WebContents *tab, bool pr
m_viewClient->windowCloseRejected();
}
+bool WebContentsDelegateQt::CheckMediaAccessPermission(content::WebContents *web_contents, const GURL& security_origin, content::MediaStreamType type)
+{
+ switch (type) {
+ case content::MEDIA_DEVICE_AUDIO_CAPTURE:
+ return m_viewClient->browserContextAdapter()->checkPermission(toQt(security_origin), BrowserContextAdapter::AudioCapturePermission);
+ case content::MEDIA_DEVICE_VIDEO_CAPTURE:
+ return m_viewClient->browserContextAdapter()->checkPermission(toQt(security_origin), BrowserContextAdapter::VideoCapturePermission);
+ default:
+ LOG(INFO) << "WebContentsDelegateQt::CheckMediaAccessPermission: "
+ << "Unsupported media stream type checked" << type;
+ return false;
+ }
+}
+
} // namespace QtWebEngineCore
diff --git a/src/core/web_contents_delegate_qt.h b/src/core/web_contents_delegate_qt.h
index c971c75e8..7ead8dc7c 100644
--- a/src/core/web_contents_delegate_qt.h
+++ b/src/core/web_contents_delegate_qt.h
@@ -96,6 +96,7 @@ public:
virtual void HideValidationMessage(content::WebContents *web_contents) Q_DECL_OVERRIDE;
virtual void MoveValidationMessage(content::WebContents *web_contents, const gfx::Rect &anchor_in_root_view) Q_DECL_OVERRIDE;
void BeforeUnloadFired(content::WebContents* tab, bool proceed, bool* proceed_to_fire_unload) Q_DECL_OVERRIDE;
+ bool CheckMediaAccessPermission(content::WebContents *web_contents, const GURL& security_origin, content::MediaStreamType type) Q_DECL_OVERRIDE;
// WebContentsObserver overrides
virtual void RenderFrameDeleted(content::RenderFrameHost *render_frame_host) Q_DECL_OVERRIDE;