8c89137ecd
* chore: bump chromium in DEPS to 122.0.6180.0 * chore: update render_widget_host_view_base.patch Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5079532 minor manual changes to match upstream changes * chore: update printing.patch Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5094777 Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5054299 Update patch to upstream changes in print_view_manager_base.cc. CC @codebytere for 👀 * chore: update feat_add_onclose_to_messageport.patch Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5083156 no manual changes; patch applied with fuzz 1 * chore: update build_do_not_depend_on_packed_resource_integrity.patch Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5087072 minor manual changes to match upstream changes * chore: update port_autofill_colors_to_the_color_pipeline.patch Xref: https://chromium-review.googlesource.com/c/chromium/src/+/4960481 no manual changes; patch applied with fuzz 2 * chore: update revert_api_dcheck-fail_when_we_reenter_v8_while_terminating.patch Xref: https://chromium-review.googlesource.com/c/v8/v8/+/5076902 Xref: https://chromium-review.googlesource.com/c/v8/v8/+/5096253 The `bailout_value` variable, which allowed us to fail gracefully in these macros, has been removed upstream. This raises the temperature on https://github.com/electron/electron/issues/40741 ... Since we don't have a bailout value, return a default-constructed instance of whatever the return type is of the function that invokes the macro. * Remove performActionOnRemotePage Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5068017 It appears it is not used by anything within Chromium or outside. * perf: in SubmenuButton ctor, move() the PressedCallback Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5066872 The copy construtor is more expensive and has been removed upstream * chore: update constructor call for ElectronExtensionsRendererClient::dispatcher_ Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5055146 * chore: handle CAPTURED_SURFACE_CONTROL in Converter<blink::PermissionType>::ToV8() Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5096614 * chore: e patches all * chore: bump chromium to 122.0.6181.0 * chore: e patches all * refactor: Add lookup for per-RenderFrame SpellCheckProvider Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5075094 Previously we could pass a routing ID into the spellcheck methods. This ID arg has been replaced with a SpellCheckHost& arg. We can get the SpellCheckHost from an accessor in SpellCheckProvider, which was already being created on a per-render-frame basis in RenderClientBase. This commit adds a RenderFrame-to-SpellCheckProvider accessor in RenderClientBase so that it can be used to get that needed SpellCheckHost. * chore: make lint happy * chore: restore the will_cause_resize arg to WebContents::ExitFullscreen Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5074445 Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5031312 upstream reverted this change * chore: bump chromium in DEPS to 122.0.6182.0 * chore: update patches * chore: fix virtual function names that were renamed upstream Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5115241 * chore: handle new blink::PermissionType::SMART_CARD in PermissionType converter Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5049989 * chore: node script/gen-libc++-filenames.js * fixup! chore: update build_do_not_depend_on_packed_resource_integrity.patch * chore: remove revert_api_dcheck-fail_when_we_reenter_v8_while_terminating.patch The previous experiment of removing the DCHECK in 35093783 was a huge failure. We either need to either: A) use upstream as-is and fix the DCHECK failure, or B) revert https://chromium-review.googlesource.com/c/v8/v8/+/5076902 too C) find some other workaround This commit is the first half of option A, removing the patch to use upstream as-is. * chore: bump chromium in DEPS to 122.0.6184.0 * chore: bump chromium in DEPS to 122.0.6186.0 * chore; update mas_avoid_private_macos_api_usage.patch.patch Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5085619 minor manual changes to match upstream changes * chore: update build_do_not_depend_on_packed_resource_integrity.patch Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5120922 minor manual changes to match upstream changes * chore: update fix_move_autopipsettingshelper_behind_branding_buildflag.patch Xref: https://chromium-review.googlesource.com/c/chromium/src/+/5041595 no manual changes; patch applied with fuzz 1 * chore: e patches all * chore: add refactor_update_node-platform_to_match_v8-platform_api_changes.patch * chore: bump chromium in DEPS to 122.0.6188.0 * chore: bump chromium in DEPS to 122.0.6190.0 * chore: bump chromium in DEPS to 122.0.6192.0 * chore: bump chromium in DEPS to 122.0.6194.0 * Remove an unnecessary DCHECK which causes Lacros to crash. https://chromium-review.googlesource.com/c/chromium/src/+/5124880 * [FixIt Week] Add shared regular profile function that includes ash https://chromium-review.googlesource.com/c/chromium/src/+/5100709 * Simplify the PrintManagerHost::ScriptedPrint() call https://chromium-review.googlesource.com/c/chromium/src/+/5019703 * [local compile hints] Add tests https://chromium-review.googlesource.com/c/chromium/src/+/5024173 * chore: update patches * fixup! chore: add refactor_update_node-platform_to_match_v8-platform_api_changes.patch * chore: node script/gen-libc++-filenames.js * Remove //ui/ozone/buildflags.h https://chromium-review.googlesource.com/c/chromium/src/+/5119048 * fixup! Remove //ui/ozone/buildflags.h * fixup! Remove //ui/ozone/buildflags.h * chore: update patches * fixup! refactor: Add lookup for per-RenderFrame SpellCheckProvider * fixup! Remove //ui/ozone/buildflags.h * Add permission policy verification in PermissionControllerImpl https://chromium-review.googlesource.com/c/chromium/src/+/5059112 * fix: ensure spellcheck interface is registered for frame * [exceptions] Unify pending and scheduled exceptions https://chromium-review.googlesource.com/c/v8/v8/+/5050065 * fix: dchecks in node.js tests * fix: try adding termination check * chore: document breaking iframe change --------- Co-authored-by: electron-roller[bot] <84116207+electron-roller[bot]@users.noreply.github.com> Co-authored-by: Charles Kerr <charles@charleskerr.com> Co-authored-by: PatchUp <73610968+patchup[bot]@users.noreply.github.com> Co-authored-by: deepak1556 <hop2deep@gmail.com> Co-authored-by: Shelley Vohr <shelley.vohr@gmail.com>
172 lines
7.1 KiB
C++
172 lines
7.1 KiB
C++
// Copyright (c) 2016 GitHub, Inc.
|
|
// Use of this source code is governed by the MIT license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef ELECTRON_SHELL_BROWSER_ELECTRON_PERMISSION_MANAGER_H_
|
|
#define ELECTRON_SHELL_BROWSER_ELECTRON_PERMISSION_MANAGER_H_
|
|
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include "base/containers/id_map.h"
|
|
#include "base/functional/callback.h"
|
|
#include "content/public/browser/permission_controller_delegate.h"
|
|
#include "gin/dictionary.h"
|
|
#include "shell/browser/electron_browser_context.h"
|
|
#include "shell/common/gin_helper/dictionary.h"
|
|
|
|
namespace base {
|
|
class Value;
|
|
} // namespace base
|
|
|
|
namespace content {
|
|
class WebContents;
|
|
}
|
|
|
|
namespace electron {
|
|
|
|
class ElectronPermissionManager : public content::PermissionControllerDelegate {
|
|
public:
|
|
ElectronPermissionManager();
|
|
~ElectronPermissionManager() override;
|
|
|
|
// disable copy
|
|
ElectronPermissionManager(const ElectronPermissionManager&) = delete;
|
|
ElectronPermissionManager& operator=(const ElectronPermissionManager&) =
|
|
delete;
|
|
|
|
using USBProtectedClasses = std::vector<uint8_t>;
|
|
|
|
using StatusCallback =
|
|
base::OnceCallback<void(blink::mojom::PermissionStatus)>;
|
|
using StatusesCallback = base::OnceCallback<void(
|
|
const std::vector<blink::mojom::PermissionStatus>&)>;
|
|
using PairCallback = base::OnceCallback<void(base::Value::Dict)>;
|
|
using RequestHandler = base::RepeatingCallback<void(content::WebContents*,
|
|
blink::PermissionType,
|
|
StatusCallback,
|
|
const base::Value&)>;
|
|
using CheckHandler =
|
|
base::RepeatingCallback<bool(content::WebContents*,
|
|
blink::PermissionType,
|
|
const GURL& requesting_origin,
|
|
const base::Value&)>;
|
|
|
|
using DeviceCheckHandler =
|
|
base::RepeatingCallback<bool(const v8::Local<v8::Object>&)>;
|
|
|
|
using ProtectedUSBHandler = base::RepeatingCallback<USBProtectedClasses(
|
|
const v8::Local<v8::Object>&)>;
|
|
|
|
using BluetoothPairingHandler =
|
|
base::RepeatingCallback<void(gin_helper::Dictionary, PairCallback)>;
|
|
|
|
void RequestPermissionWithDetails(blink::PermissionType permission,
|
|
content::RenderFrameHost* render_frame_host,
|
|
const GURL& requesting_origin,
|
|
bool user_gesture,
|
|
base::Value::Dict details,
|
|
StatusCallback response_callback);
|
|
|
|
// Handler to dispatch permission requests in JS.
|
|
void SetPermissionRequestHandler(const RequestHandler& handler);
|
|
void SetPermissionCheckHandler(const CheckHandler& handler);
|
|
void SetDevicePermissionHandler(const DeviceCheckHandler& handler);
|
|
void SetProtectedUSBHandler(const ProtectedUSBHandler& handler);
|
|
void SetBluetoothPairingHandler(const BluetoothPairingHandler& handler);
|
|
|
|
void CheckBluetoothDevicePair(gin_helper::Dictionary details,
|
|
PairCallback pair_callback) const;
|
|
|
|
bool CheckPermissionWithDetails(blink::PermissionType permission,
|
|
content::RenderFrameHost* render_frame_host,
|
|
const GURL& requesting_origin,
|
|
base::Value::Dict details) const;
|
|
|
|
bool CheckDevicePermission(blink::PermissionType permission,
|
|
const url::Origin& origin,
|
|
const base::Value& object,
|
|
ElectronBrowserContext* browser_context) const;
|
|
|
|
void GrantDevicePermission(blink::PermissionType permission,
|
|
const url::Origin& origin,
|
|
const base::Value& object,
|
|
ElectronBrowserContext* browser_context) const;
|
|
|
|
void RevokeDevicePermission(blink::PermissionType permission,
|
|
const url::Origin& origin,
|
|
const base::Value& object,
|
|
ElectronBrowserContext* browser_context) const;
|
|
|
|
USBProtectedClasses CheckProtectedUSBClasses(
|
|
const USBProtectedClasses& classes) const;
|
|
|
|
protected:
|
|
void OnPermissionResponse(int request_id,
|
|
int permission_id,
|
|
blink::mojom::PermissionStatus status);
|
|
|
|
// content::PermissionControllerDelegate:
|
|
void RequestPermissions(
|
|
content::RenderFrameHost* render_frame_host,
|
|
const content::PermissionRequestDescription& request_description,
|
|
StatusesCallback callback) override;
|
|
void ResetPermission(blink::PermissionType permission,
|
|
const GURL& requesting_origin,
|
|
const GURL& embedding_origin) override;
|
|
blink::mojom::PermissionStatus GetPermissionStatus(
|
|
blink::PermissionType permission,
|
|
const GURL& requesting_origin,
|
|
const GURL& embedding_origin) override;
|
|
void RequestPermissionsFromCurrentDocument(
|
|
content::RenderFrameHost* render_frame_host,
|
|
const content::PermissionRequestDescription& request_description,
|
|
base::OnceCallback<
|
|
void(const std::vector<blink::mojom::PermissionStatus>&)> callback)
|
|
override;
|
|
content::PermissionResult GetPermissionResultForOriginWithoutContext(
|
|
blink::PermissionType permission,
|
|
const url::Origin& requesting_origin,
|
|
const url::Origin& embedding_origin) override;
|
|
blink::mojom::PermissionStatus GetPermissionStatusForCurrentDocument(
|
|
blink::PermissionType permission,
|
|
content::RenderFrameHost* render_frame_host) override;
|
|
blink::mojom::PermissionStatus GetPermissionStatusForWorker(
|
|
blink::PermissionType permission,
|
|
content::RenderProcessHost* render_process_host,
|
|
const GURL& worker_origin) override;
|
|
blink::mojom::PermissionStatus GetPermissionStatusForEmbeddedRequester(
|
|
blink::PermissionType permission,
|
|
content::RenderFrameHost* render_frame_host,
|
|
const url::Origin& requesting_origin) override;
|
|
SubscriptionId SubscribeToPermissionStatusChange(
|
|
blink::PermissionType permission,
|
|
content::RenderProcessHost* render_process_host,
|
|
content::RenderFrameHost* render_frame_host,
|
|
const GURL& requesting_origin,
|
|
base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback)
|
|
override;
|
|
void UnsubscribeFromPermissionStatusChange(SubscriptionId id) override;
|
|
|
|
private:
|
|
class PendingRequest;
|
|
using PendingRequestsMap = base::IDMap<std::unique_ptr<PendingRequest>>;
|
|
|
|
void RequestPermissionsWithDetails(
|
|
content::RenderFrameHost* render_frame_host,
|
|
const content::PermissionRequestDescription& request_description,
|
|
base::Value::Dict details,
|
|
StatusesCallback callback);
|
|
|
|
RequestHandler request_handler_;
|
|
CheckHandler check_handler_;
|
|
DeviceCheckHandler device_permission_handler_;
|
|
ProtectedUSBHandler protected_usb_handler_;
|
|
BluetoothPairingHandler bluetooth_pairing_handler_;
|
|
|
|
PendingRequestsMap pending_requests_;
|
|
};
|
|
|
|
} // namespace electron
|
|
|
|
#endif // ELECTRON_SHELL_BROWSER_ELECTRON_PERMISSION_MANAGER_H_
|