blob: 7e4bb06d2b36179b545a0ddd24e17fb456ce7e1e [file] [log] [blame]
Andy Paicu0a6d4b502023-08-29 15:13:091// Copyright 2023 The Chromium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef COMPONENTS_PERMISSIONS_PERMISSION_REQUEST_DATA_H_
6#define COMPONENTS_PERMISSIONS_PERMISSION_REQUEST_DATA_H_
7
Arthur Sonzognic571efb2024-01-26 20:26:188#include <optional>
9
Andy Paicu0a6d4b502023-08-29 15:13:0910#include "components/permissions/permission_request_id.h"
11#include "components/permissions/request_type.h"
Florian Jacky7f3e3ca1b2025-05-05 16:19:2012#include "components/permissions/resolvers/permission_resolver.h"
Andy Paicu0a6d4b502023-08-29 15:13:0913#include "third_party/blink/public/mojom/permissions/permission_status.mojom.h"
14#include "ui/gfx/geometry/rect.h"
15#include "url/gurl.h"
16
17namespace content {
18struct PermissionRequestDescription;
19}
20
21namespace permissions {
22
23class PermissionContextBase;
24
25// Holds information about `permissions::PermissionRequest`
26struct PermissionRequestData {
27 PermissionRequestData(
28 PermissionContextBase* context,
29 const PermissionRequestID& id,
30 const content::PermissionRequestDescription& request_description,
Florian Jacky7f3e3ca1b2025-05-05 16:19:2031 const GURL& canonical_requesting_origin,
32 const GURL& embedding_origin = GURL(),
33 int request_description_permission_index = 0);
Andy Paicu0a6d4b502023-08-29 15:13:0934
35 PermissionRequestData(PermissionContextBase* context,
36 const PermissionRequestID& id,
37 bool user_gesture,
38 const GURL& requesting_origin,
39 const GURL& embedding_origin = GURL());
40
Florian Jacky7f3e3ca1b2025-05-05 16:19:2041 PermissionRequestData(
42 std::unique_ptr<permissions::PermissionResolver> resolver,
43 bool user_gesture,
44 const GURL& requesting_origin,
45 const GURL& embedding_origin = GURL());
Andy Paicu0a6d4b502023-08-29 15:13:0946
47 PermissionRequestData& operator=(const PermissionRequestData&) = delete;
48 PermissionRequestData(const PermissionRequestData&) = delete;
49
50 PermissionRequestData& operator=(PermissionRequestData&&);
51 PermissionRequestData(PermissionRequestData&&);
52
53 ~PermissionRequestData();
54
55 PermissionRequestData& WithRequestingOrigin(const GURL& origin) {
56 requesting_origin = origin;
57 return *this;
58 }
59
60 PermissionRequestData& WithEmbeddingOrigin(const GURL& origin) {
61 embedding_origin = origin;
62 return *this;
63 }
64
Florian Jacky7f3e3ca1b2025-05-05 16:19:2065 // The request type if it exists.
Arthur Sonzognic571efb2024-01-26 20:26:1866 std::optional<RequestType> request_type;
Andy Paicu0a6d4b502023-08-29 15:13:0967
Florian Jacky7f3e3ca1b2025-05-05 16:19:2068 // The permission resolver associated with the request.
69 std::unique_ptr<permissions::PermissionResolver> resolver;
70
Andy Paicu0a6d4b502023-08-29 15:13:0971 // Uniquely identifier of particular permission request.
72 PermissionRequestID id;
73
74 // Indicates the request is initiated by a user gesture.
75 bool user_gesture;
76
77 // Indicates the request is initiated from an embedded permission element.
78 bool embedded_permission_element_initiated;
79
80 // The origin on whose behalf this permission request is being made.
81 GURL requesting_origin;
82
83 // The origin of embedding frame (generally is the top level frame).
84 GURL embedding_origin;
85
86 // Anchor element position (in screen coordinates), gennerally when the
87 // permission request is made from permission element. Used to calculate
88 // position where the secondary prompt UI is expected to be shown.
Arthur Sonzognic571efb2024-01-26 20:26:1889 std::optional<gfx::Rect> anchor_element_position;
Bryant Chandlereff3f1b2024-01-12 16:42:4090
91 std::vector<std::string> requested_audio_capture_device_ids;
92 std::vector<std::string> requested_video_capture_device_ids;
Andy Paicu0a6d4b502023-08-29 15:13:0993};
94
95} // namespace permissions
96
97#endif // COMPONENTS_PERMISSIONS_PERMISSION_REQUEST_DATA_H_