Files
electron/shell/browser/hid/electron_hid_delegate.cc
electron-roller[bot] db0830e0f8 chore: bump chromium to 104.0.5112.39 (20-x-y) (#34425)
* chore: bump chromium in DEPS to 104.0.5098.0

* chore: bump chromium in DEPS to 104.0.5100.0

* chore: bump chromium in DEPS to 104.0.5102.0

* chore: bump chromium in DEPS to 104.0.5103.0

* chore: bump chromium in DEPS to 104.0.5104.0

* chore: bump chromium in DEPS to 104.0.5106.0

* chore: bump chromium in DEPS to 104.0.5108.0

* chore: bump chromium in DEPS to 104.0.5110.0

* chore: bump chromium in DEPS to 104.0.5112.0

* chore: bump chromium in DEPS to 104.0.5112.4

* 3651284: Use the entry settings object for window.open navigation

https://chromium-review.googlesource.com/c/chromium/src/+/3651284
(cherry picked from commit 6ff37a08f7)

* 3644598: Make RenderFrameHost used for notification permission decision

https://chromium-review.googlesource.com/c/chromium/src/+/3644598
(cherry picked from commit 46df809556)

* 3642842: Window Placement: Prototype Fullscreen Capability Delegation - Part 2

https://chromium-review.googlesource.com/c/chromium/src/+/3642842
(cherry picked from commit 2fe1bc3222)

* 3652785: [sandbox] Enable sandboxed pointers on sanitizer builds

https://chromium-review.googlesource.com/c/v8/v8/+/3652785
(cherry picked from commit ca8a3852f4)

* 3611967: webhid: Migrate HidDelegate to use BrowserContext and Origin

https://chromium-review.googlesource.com/c/chromium/src/+/3611967
(cherry picked from commit 18aac8e93e)

* 3665762: Remove RenderFrameHost::IsRenderFrameCreated from //content/.

https://chromium-review.googlesource.com/c/chromium/src/+/3665762
(cherry picked from commit 070ea1700b)

* 3659375: Fold x509_util_ios and most of x509_util_mac into x509_util_apple

https://chromium-review.googlesource.com/c/chromium/src/+/3659375
(cherry picked from commit 479647e0ac)

* 3656234: [CodeHealth] Remove uses of base::ListValue::Append() (Final, take 2)

https://chromium-review.googlesource.com/c/chromium/src/+/3656234
(cherry picked from commit e15d6110ed)

* chore: update patch indices

(cherry picked from commit 8d666da975)

* chore: fix lint

(cherry picked from commit f9a9aca456)

* 3644598: Make RenderFrameHost used for notification permission decision

https://chromium-review.googlesource.com/c/chromium/src/+/3644598
(cherry picked from commit 014c4b9212)

* webhid: Migrate HidDelegate to use BrowserContext and Origin

This is a temporary fix for  https://chromium-review.googlesource.com/c/chromium/src/+/3611967 to get the build compiling, but we need to either patch around  https://chromium-review.googlesource.com/c/chromium/src/+/3611967 or move our device permissioning to BrowserContext

(cherry picked from commit 322e9686da)

* chore: fix lint

(cherry picked from commit 12b886cc62)

* build: run electron/script/gen-libc++-filenames.js

fixes gn check

(cherry picked from commit 93cebfecb2)

* chore: disable flaking tests

(cherry picked from commit fd0bc08f44)

* 3652749: Delete GLRenderer and related classes

https://chromium-review.googlesource.com/c/chromium/src/+/3652749
(cherry picked from commit 43024a74c2)

* 3682394: Change pipes surrounding code references in comments to backticks

https://chromium-review.googlesource.com/c/chromium/src/+/3682394
(cherry picked from commit 41026ae4d0)

* chore: fixup patch indices

(cherry picked from commit fccfc1bb29)

* 3671199: Remove ContentMainDelegate::PostFieldTrialInitialization

https://chromium-review.googlesource.com/c/chromium/src/+/3671199
(cherry picked from commit 6392cfb595)

* 3607963: hid: Do not exclude HID device with no collections

https://chromium-review.googlesource.com/c/chromium/src/+/3607963
(cherry picked from commit 2d81975792)

* refactor: use ElectronBrowserContext instead of WebContents to persist devices

due to changes like https://chromium-review.googlesource.com/c/chromium/src/+/3611967,
we can no longer use WebContents to store device permissions so this commit
moves device permission storage to live in memory in ElectronBrowserContext
instead.

(cherry picked from commit 2f95568bfd)

* 3557253: Deprecate some signature checks

https://chromium-review.googlesource.com/c/v8/v8/+/3557253
(cherry picked from commit da4f0dbd1b)

* 3680781: Add policy for Renderer App Container.

https://chromium-review.googlesource.com/c/chromium/src/+/3680781
(cherry picked from commit cb901ce489)

* chore: update patch indices

(cherry picked from commit 40c6295a5b)

* 3675465: Update NetLog network service API to use mojom::DictionaryValue.

https://chromium-review.googlesource.com/c/chromium/src/+/3675465
(cherry picked from commit 55a58418e6)

* fix: add patch for DCHECK in fullscreen test

(cherry picked from commit c65280306d)

* build: fix nan build

(cherry picked from commit c06ea18698)

* build: make the nan spec runner work on macOS

(cherry picked from commit a22950b126)

* chore: update patches

(cherry picked from commit 7375148f93)

* chore: update patches

* 3693745: Delete base::LowerCaseEqualsASCII()

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/3693745
(cherry picked from commit ed192f5c9b)

* 3653285: Remove OS X 10.11 and macOS 10.12 code from chrome/

https://chromium-review.googlesource.com/c/chromium/src/+/3653285

* 3687395: Remove DictionaryValue::HasKey().

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/3687395
(cherry picked from commit 2a6804db60)

* 3691014: Prevent unsafe narrowing: ui/accessibility, part 2

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/3691014
(cherry picked from commit fca99a5cf9)

* 3560567: [MSC] Porting GenerateStreams clients to handle stream vectors.

https://chromium-review.googlesource.com/c/chromium/src/+/3560567

* 3684873: [Bluetooth][Win/Linux] Add bluetooth pair confirmation prompt

https://chromium-review.googlesource.com/c/chromium/src/+/3684873

* chore: missing includes in desktop_notification_controller

(cherry picked from commit 574fb7933d)

* 3685951: Reland "Make sure screen object is created once in tests."

https://chromium-review.googlesource.com/c/chromium/src/+/3685951

* fixup: Reland "Make sure screen object is created once in tests."

* chore: bump chromium in DEPS to 104.0.5110.0

* chore: update patches

* Revert "3560567: [MSC] Porting GenerateStreams clients to handle stream vectors."

This reverts commit c9c1c534056404be22a2d81ae6df4d184654fa35.

* Revert "3691014: Prevent unsafe narrowing: ui/accessibility, part 2"

This reverts commit 08f7a35765fde0467ef44d773e943cf5998619ae.

* 3687671: [v8] Freeze flags after initialization

https://chromium-review.googlesource.com/c/chromium/src/+/3687671

* fixup: 3687671: [v8] Freeze flags after initialization

* chore: bump chromium in DEPS to 104.0.5112.14

* chore: update patches

* 3691014: Prevent unsafe narrowing: ui/accessibility, part 2

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/3691014
(cherry picked from commit fca99a5cf9)
(cherry picked from commit 08f7a35765fde0467ef44d773e943cf5998619ae)

* 3560567: [MSC] Porting GenerateStreams clients to handle stream vectors.

https://chromium-review.googlesource.com/c/chromium/src/+/3560567
(cherry picked from commit c9c1c534056404be22a2d81ae6df4d184654fa35)

* 3669226: Remove printing PostTask usage of IO thread

https://chromium-review.googlesource.com/c/chromium/src/+/3669226

* chore: document breaking change

(cherry picked from commit d0991597c2)

* chore: update patches

* chore: remove deprecated AccessorSignatures

https://github.com/nodejs/nan/pull/941

* Revert "fixup: 3687671: [v8] Freeze flags after initialization"

This reverts commit a473727f39267327c7a77ec5056edd36b7c5b403.

* Revert "3687671: [v8] Freeze flags after initialization"

This reverts commit 7a8404be3c9d48a2e7ce877d749362f4754a9f17.

* 3687671: [v8] Freeze flags after initialization

https://chromium-review.googlesource.com/c/chromium/src/+/3687671
(cherry picked from commit f4c53302ea)

* 52026: Do not allow md4 or md5 based signatures in X.509 certificates.

https://boringssl-review.googlesource.com/c/boringssl/+/52026

* chore: bump chromium in DEPS to 104.0.5112.20

* chore: update patches

patches/chromium/chore_expose_v8_initialization_isolate_callbacks.patch
is no longer needed because it was upstreamed via:
2527943: Allow static access to WasmCodeGeneration callback

https://chromium-review.googlesource.com/c/chromium/src/+/2527943

* 3560567: [MSC] Porting GenerateStreams clients to handle stream vectors.

Ref: https://chromium-review.googlesource.com/c/chromium/src/+/3560567
(cherry picked from commit 797c3a1656)

* fixup! 3560567: [MSC] Porting GenerateStreams clients to handle stream vectors.

(cherry picked from commit 9741ab73cf)

* fixup! 3560567: [MSC] Porting GenerateStreams clients to handle stream vectors.

(cherry picked from commit 558ed59d86)

* chore: bump chromium in DEPS to 104.0.5112.29

* chore: update patches

* chore: bump chromium in DEPS to 104.0.5112.39

* chore: update patches

* chore: update patches

* Trigger Build

* 3695382: [ext-code-space] Fix CodeRange allocation logic

https://chromium-review.googlesource.com/c/v8/v8/+/3695382

fixes https://bugs.chromium.org/p/v8/issues/detail?id=12942

* 3695382: [ext-code-space] Fix CodeRange allocation logic

 https://chromium-review.googlesource.com/c/v8/v8/+/3695382

* chore: update patches

Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com>
Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
Co-authored-by: John Kleinschmidt <jkleinsc@electronjs.org>
Co-authored-by: Charles Kerr <charles@charleskerr.com>
Co-authored-by: Samuel Attard <sattard@salesforce.com>
Co-authored-by: Keeley Hammond <khammond@slack-corp.com>
Co-authored-by: VerteDinde <keeleymhammond@gmail.com>
Co-authored-by: Jeremy Rose <japthorp@slack-corp.com>
Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com>
2022-07-12 08:22:53 -04:00

178 lines
6.2 KiB
C++

// Copyright (c) 2021 Microsoft, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "shell/browser/hid/electron_hid_delegate.h"
#include <string>
#include <utility>
#include "base/command_line.h"
#include "content/public/browser/web_contents.h"
#include "services/device/public/cpp/hid/hid_switches.h"
#include "shell/browser/electron_permission_manager.h"
#include "shell/browser/hid/hid_chooser_context.h"
#include "shell/browser/hid/hid_chooser_context_factory.h"
#include "shell/browser/hid/hid_chooser_controller.h"
#include "shell/browser/web_contents_permission_helper.h"
#include "third_party/blink/public/common/permissions/permission_utils.h"
namespace {
electron::HidChooserContext* GetChooserContext(
content::BrowserContext* browser_context) {
return electron::HidChooserContextFactory::GetForBrowserContext(
browser_context);
}
} // namespace
namespace electron {
ElectronHidDelegate::ElectronHidDelegate() = default;
ElectronHidDelegate::~ElectronHidDelegate() = default;
std::unique_ptr<content::HidChooser> ElectronHidDelegate::RunChooser(
content::RenderFrameHost* render_frame_host,
std::vector<blink::mojom::HidDeviceFilterPtr> filters,
std::vector<blink::mojom::HidDeviceFilterPtr> exclusion_filters,
content::HidChooser::Callback callback) {
DCHECK(render_frame_host);
auto* chooser_context =
GetChooserContext(render_frame_host->GetBrowserContext());
if (!device_observation_.IsObserving())
device_observation_.Observe(chooser_context);
HidChooserController* controller = ControllerForFrame(render_frame_host);
if (controller) {
DeleteControllerForFrame(render_frame_host);
}
AddControllerForFrame(render_frame_host, std::move(filters),
std::move(exclusion_filters), std::move(callback));
// Return a nullptr because the return value isn't used for anything, eg
// there is no mechanism to cancel navigator.hid.requestDevice(). The return
// value is simply used in Chromium to cleanup the chooser UI once the serial
// service is destroyed.
return nullptr;
}
bool ElectronHidDelegate::CanRequestDevicePermission(
content::BrowserContext* browser_context,
const url::Origin& origin) {
base::DictionaryValue details;
details.SetString("securityOrigin", origin.GetURL().spec());
auto* permission_manager = static_cast<ElectronPermissionManager*>(
browser_context->GetPermissionControllerDelegate());
return permission_manager->CheckPermissionWithDetails(
static_cast<blink::PermissionType>(
WebContentsPermissionHelper::PermissionType::HID),
nullptr, origin.GetURL(), &details);
}
bool ElectronHidDelegate::HasDevicePermission(
content::BrowserContext* browser_context,
const url::Origin& origin,
const device::mojom::HidDeviceInfo& device) {
return GetChooserContext(browser_context)
->HasDevicePermission(origin, device);
}
void ElectronHidDelegate::RevokeDevicePermission(
content::BrowserContext* browser_context,
const url::Origin& origin,
const device::mojom::HidDeviceInfo& device) {
return GetChooserContext(browser_context)
->RevokeDevicePermission(origin, device);
}
device::mojom::HidManager* ElectronHidDelegate::GetHidManager(
content::BrowserContext* browser_context) {
return GetChooserContext(browser_context)->GetHidManager();
}
void ElectronHidDelegate::AddObserver(content::BrowserContext* browser_context,
Observer* observer) {
observer_list_.AddObserver(observer);
auto* chooser_context = GetChooserContext(browser_context);
if (!device_observation_.IsObserving())
device_observation_.Observe(chooser_context);
}
void ElectronHidDelegate::RemoveObserver(
content::HidDelegate::Observer* observer) {
observer_list_.RemoveObserver(observer);
}
const device::mojom::HidDeviceInfo* ElectronHidDelegate::GetDeviceInfo(
content::BrowserContext* browser_context,
const std::string& guid) {
auto* chooser_context = GetChooserContext(browser_context);
return chooser_context->GetDeviceInfo(guid);
}
bool ElectronHidDelegate::IsFidoAllowedForOrigin(
content::BrowserContext* browser_context,
const url::Origin& origin) {
return base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kDisableHidBlocklist);
}
void ElectronHidDelegate::OnDeviceAdded(
const device::mojom::HidDeviceInfo& device_info) {
for (auto& observer : observer_list_)
observer.OnDeviceAdded(device_info);
}
void ElectronHidDelegate::OnDeviceRemoved(
const device::mojom::HidDeviceInfo& device_info) {
for (auto& observer : observer_list_)
observer.OnDeviceRemoved(device_info);
}
void ElectronHidDelegate::OnDeviceChanged(
const device::mojom::HidDeviceInfo& device_info) {
for (auto& observer : observer_list_)
observer.OnDeviceChanged(device_info);
}
void ElectronHidDelegate::OnHidManagerConnectionError() {
device_observation_.Reset();
for (auto& observer : observer_list_)
observer.OnHidManagerConnectionError();
}
void ElectronHidDelegate::OnHidChooserContextShutdown() {
device_observation_.Reset();
}
HidChooserController* ElectronHidDelegate::ControllerForFrame(
content::RenderFrameHost* render_frame_host) {
auto mapping = controller_map_.find(render_frame_host);
return mapping == controller_map_.end() ? nullptr : mapping->second.get();
}
HidChooserController* ElectronHidDelegate::AddControllerForFrame(
content::RenderFrameHost* render_frame_host,
std::vector<blink::mojom::HidDeviceFilterPtr> filters,
std::vector<blink::mojom::HidDeviceFilterPtr> exclusion_filters,
content::HidChooser::Callback callback) {
auto* web_contents =
content::WebContents::FromRenderFrameHost(render_frame_host);
auto controller = std::make_unique<HidChooserController>(
render_frame_host, std::move(filters), std::move(exclusion_filters),
std::move(callback), web_contents, weak_factory_.GetWeakPtr());
controller_map_.insert(
std::make_pair(render_frame_host, std::move(controller)));
return ControllerForFrame(render_frame_host);
}
void ElectronHidDelegate::DeleteControllerForFrame(
content::RenderFrameHost* render_frame_host) {
controller_map_.erase(render_frame_host);
}
} // namespace electron