summaryrefslogtreecommitdiff
path: root/chromium/content/browser/hid/hid_service.cc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-12 14:27:29 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2020-10-13 09:35:20 +0000
commitc30a6232df03e1efbd9f3b226777b07e087a1122 (patch)
treee992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/content/browser/hid/hid_service.cc
parent7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff)
downloadqtwebengine-chromium-85-based.tar.gz
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057 Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/content/browser/hid/hid_service.cc')
-rw-r--r--chromium/content/browser/hid/hid_service.cc55
1 files changed, 55 insertions, 0 deletions
diff --git a/chromium/content/browser/hid/hid_service.cc b/chromium/content/browser/hid/hid_service.cc
index 6c7da06458d..e182c460387 100644
--- a/chromium/content/browser/hid/hid_service.cc
+++ b/chromium/content/browser/hid/hid_service.cc
@@ -7,7 +7,9 @@
#include <utility>
#include "base/bind.h"
+#include "base/bind_helpers.h"
#include "base/callback.h"
+#include "base/debug/stack_trace.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/browser/content_browser_client.h"
#include "content/public/browser/hid_chooser.h"
@@ -24,9 +26,17 @@ HidService::HidService(RenderFrameHost* render_frame_host,
: FrameServiceBase(render_frame_host, std::move(receiver)) {
watchers_.set_disconnect_handler(base::BindRepeating(
&HidService::OnWatcherConnectionError, base::Unretained(this)));
+
+ HidDelegate* delegate = GetContentClient()->browser()->GetHidDelegate();
+ if (delegate)
+ delegate->AddObserver(render_frame_host, this);
}
HidService::~HidService() {
+ HidDelegate* delegate = GetContentClient()->browser()->GetHidDelegate();
+ if (delegate)
+ delegate->RemoveObserver(render_frame_host(), this);
+
// The remaining watchers will be closed from this end.
if (!watchers_.empty())
DecrementActiveFrameCount();
@@ -55,6 +65,11 @@ void HidService::Create(
new HidService(render_frame_host, std::move(receiver));
}
+void HidService::RegisterClient(
+ device::mojom::HidManagerClientAssociatedPtrInfo client) {
+ clients_.Add(std::move(client));
+}
+
void HidService::GetDevices(GetDevicesCallback callback) {
GetContentClient()
->browser()
@@ -114,6 +129,46 @@ void HidService::DecrementActiveFrameCount() {
web_contents_impl->DecrementHidActiveFrameCount();
}
+void HidService::OnDeviceAdded(
+ const device::mojom::HidDeviceInfo& device_info) {
+ if (!GetContentClient()->browser()->GetHidDelegate()->HasDevicePermission(
+ WebContents::FromRenderFrameHost(render_frame_host()), origin(),
+ device_info)) {
+ return;
+ }
+
+ for (auto& client : clients_)
+ client->DeviceAdded(device_info.Clone());
+}
+
+void HidService::OnDeviceRemoved(
+ const device::mojom::HidDeviceInfo& device_info) {
+ if (!GetContentClient()->browser()->GetHidDelegate()->HasDevicePermission(
+ WebContents::FromRenderFrameHost(render_frame_host()), origin(),
+ device_info)) {
+ return;
+ }
+
+ for (auto& client : clients_)
+ client->DeviceRemoved(device_info.Clone());
+}
+
+void HidService::OnHidManagerConnectionError() {
+ // Close the connection with Blink.
+ clients_.Clear();
+}
+
+void HidService::OnPermissionRevoked(const url::Origin& requesting_origin,
+ const url::Origin& embedding_origin) {
+ if (requesting_origin_ != requesting_origin ||
+ embedding_origin_ != embedding_origin) {
+ return;
+ }
+
+ // TODO(mattreynolds): Close connection between Blink and the device if the
+ // device lost permission.
+}
+
void HidService::FinishGetDevices(
GetDevicesCallback callback,
std::vector<device::mojom::HidDeviceInfoPtr> devices) {