blob: 5b5d0ad18d7bc0bf0a94755b13767d5fbdd7c8b9 [file] [log] [blame]
[email protected]efad90f2014-01-17 00:45:541// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Clark DuVall484c2562020-01-23 22:05:095#ifndef COMPONENTS_PERMISSIONS_PERMISSION_REQUEST_H_
6#define COMPONENTS_PERMISSIONS_PERMISSION_REQUEST_H_
[email protected]efad90f2014-01-17 00:45:547
Jan Wilken Dörriead587c32021-03-11 14:09:278#include <string>
9
dominicknd4e446a2016-09-13 07:44:1310#include "base/macros.h"
Clark DuVall484c2562020-01-23 22:05:0911#include "build/build_config.h"
lshangada00c12016-10-17 04:51:1012#include "components/content_settings/core/common/content_settings_types.h"
Andy Paicu4a88f422020-11-12 18:21:3913#include "components/permissions/permission_request_enums.h"
Anton Bikineev1156b5f2021-05-15 22:35:3614#include "third_party/abseil-cpp/absl/types/optional.h"
[email protected]d23cdeee2014-03-10 06:39:5315#include "url/gurl.h"
[email protected]efad90f2014-01-17 00:45:5416
Clark DuVall484c2562020-01-23 22:05:0917namespace permissions {
Bret Sepulveda362cce42021-01-13 18:47:5418enum class RequestType;
Clark DuVall484c2562020-01-23 22:05:0919
tsergeant58defcfb2016-07-19 23:47:2820// Describes the interface a feature making permission requests should
21// implement. A class of this type is registered with the permission request
[email protected]efad90f2014-01-17 00:45:5422// manager to receive updates about the result of the permissions request
tsergeant58defcfb2016-07-19 23:47:2823// from the bubble or infobar. It should live until it is unregistered or until
[email protected]634e5982014-04-18 19:20:4824// RequestFinished is called.
[email protected]efad90f2014-01-17 00:45:5425// Note that no particular guarantees are made about what exact UI surface
26// is presented to the user. The delegate may be coalesced with other bubble
27// requests, or depending on the situation, not shown at all.
tsergeant58defcfb2016-07-19 23:47:2828class PermissionRequest {
[email protected]efad90f2014-01-17 00:45:5429 public:
dominicknd4e446a2016-09-13 07:44:1330 PermissionRequest();
tsergeant58defcfb2016-07-19 23:47:2831 virtual ~PermissionRequest() {}
[email protected]efad90f2014-01-17 00:45:5432
Bret Sepulveda362cce42021-01-13 18:47:5433 // The type of this request.
34 virtual RequestType GetRequestType() const = 0;
[email protected]d23cdeee2014-03-10 06:39:5335
Bret Sepulvedad7e4d442021-04-20 13:46:4136 // Whether |this| and |other_request| are duplicates and therefore don't both
37 // need to be shown in the UI.
38 virtual bool IsDuplicateOf(PermissionRequest* other_request) const;
39
timlohaa3ce262017-06-01 05:29:4040#if defined(OS_ANDROID)
timlohaa3ce262017-06-01 05:29:4041 // Returns the full prompt text for this permission. This is currently only
42 // used on Android.
Jan Wilken Dörriefa241ba2021-03-11 17:57:0143 virtual std::u16string GetMessageText() const = 0;
timlohaa3ce262017-06-01 05:29:4044#endif
45
Olesia Marukhnof8a4bed82020-06-17 13:35:3146#if !defined(OS_ANDROID)
47 // Returns the short text for the chip button related to this permission.
Anton Bikineev1156b5f2021-05-15 22:35:3648 virtual absl::optional<std::u16string> GetChipText() const;
Olesia Marukhnof8a4bed82020-06-17 13:35:3149
Marijn Kruisselbrink5d4f1b242019-05-23 00:45:2350 // Returns the shortened prompt text for this permission. The permission
51 // bubble may coalesce different requests, and if it does, this text will
52 // be displayed next to an image and indicate the user grants the permission.
Jan Wilken Dörriefa241ba2021-03-11 17:57:0153 virtual std::u16string GetMessageTextFragment() const = 0;
Bret Sepulvedad7e4d442021-04-20 13:46:4154#endif
[email protected]dd1ba692014-01-24 23:17:3755
johnmefe4e96d2016-01-27 16:14:4156 // Get the origin on whose behalf this permission request is being made.
57 virtual GURL GetOrigin() const = 0;
[email protected]dd1ba692014-01-24 23:17:3758
[email protected]efad90f2014-01-17 00:45:5459 // Called when the user has granted the requested permission.
Ravjit Singh Uppalc73b5a62020-11-13 01:38:5260 // If is_one_time is true the permission will last until all tabs of a given
61 // |origin| are closed or navigated away from. The permission will
62 // automatically expire after 1 day.
63 virtual void PermissionGranted(bool is_one_time) = 0;
[email protected]efad90f2014-01-17 00:45:5464
65 // Called when the user has denied the requested permission.
66 virtual void PermissionDenied() = 0;
67
68 // Called when the user has cancelled the permission request. This
69 // corresponds to a denial, but is segregated in case the context needs to
70 // be able to distinguish between an active refusal or an implicit refusal.
71 virtual void Cancelled() = 0;
72
tsergeant58defcfb2016-07-19 23:47:2873 // The UI this request was associated with was answered by the user.
[email protected]e2ff17e2014-02-06 02:32:3374 // It is safe for the request to be deleted at this point -- it will receive
tsergeant58defcfb2016-07-19 23:47:2875 // no further message from the permission request system. This method will
[email protected]e2ff17e2014-02-06 02:32:3376 // eventually be called on every request which is not unregistered.
Anatoliy Potapchuk1c46f7e2020-01-23 13:31:0377 // It is ok to call this method without actually resolving the request via
78 // PermissionGranted(), PermissionDenied() or Canceled(). However, it will not
79 // resolve the javascript promise from the requesting origin.
[email protected]efad90f2014-01-17 00:45:5480 virtual void RequestFinished() = 0;
benwells46b02fa2016-04-20 02:37:0281
benwells471d1f12016-07-25 23:58:0482 // Used to record UMA for whether requests are associated with a user gesture.
83 // To keep things simple this metric is only recorded for the most popular
84 // request types.
85 virtual PermissionRequestGestureType GetGestureType() const;
dominicknd4e446a2016-09-13 07:44:1386
lshangada00c12016-10-17 04:51:1087 // Used on Android to determine what Android OS permissions are needed for
88 // this permission request.
89 virtual ContentSettingsType GetContentSettingsType() const;
90
dominicknd4e446a2016-09-13 07:44:1391 private:
dominicknd4e446a2016-09-13 07:44:1392 DISALLOW_COPY_AND_ASSIGN(PermissionRequest);
[email protected]efad90f2014-01-17 00:45:5493};
94
Clark DuVall484c2562020-01-23 22:05:0995} // namespace permissions
96
97#endif // COMPONENTS_PERMISSIONS_PERMISSION_REQUEST_H_