blob: a6fcca9147f97de0952d88931bc84c0c1cea77fa [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
dominicknd4e446a2016-09-13 07:44:138#include "base/macros.h"
Bret Sepulveda55f43dec2020-09-27 22:58:569#include "base/optional.h"
[email protected]efad90f2014-01-17 00:45:5410#include "base/strings/string16.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"
[email protected]d23cdeee2014-03-10 06:39:5314#include "url/gurl.h"
[email protected]efad90f2014-01-17 00:45:5415
estade292df4f82015-07-31 18:53:2516namespace gfx {
estade1e235b62017-02-15 01:40:3417struct VectorIcon;
estade292df4f82015-07-31 18:53:2518}
19
Clark DuVall484c2562020-01-23 22:05:0920namespace permissions {
21
tsergeant58defcfb2016-07-19 23:47:2822// Describes the interface a feature making permission requests should
23// implement. A class of this type is registered with the permission request
[email protected]efad90f2014-01-17 00:45:5424// manager to receive updates about the result of the permissions request
tsergeant58defcfb2016-07-19 23:47:2825// from the bubble or infobar. It should live until it is unregistered or until
[email protected]634e5982014-04-18 19:20:4826// RequestFinished is called.
[email protected]efad90f2014-01-17 00:45:5427// Note that no particular guarantees are made about what exact UI surface
28// is presented to the user. The delegate may be coalesced with other bubble
29// requests, or depending on the situation, not shown at all.
tsergeant58defcfb2016-07-19 23:47:2830class PermissionRequest {
[email protected]efad90f2014-01-17 00:45:5431 public:
estade20c051a92016-10-15 22:53:2232#if defined(OS_ANDROID)
33 // On Android, icons are represented with an IDR_ identifier.
34 typedef int IconId;
35#else
estade1e235b62017-02-15 01:40:3436 // On desktop, we use a vector icon.
37 typedef const gfx::VectorIcon& IconId;
estade20c051a92016-10-15 22:53:2238#endif
39
dominicknd4e446a2016-09-13 07:44:1340 PermissionRequest();
tsergeant58defcfb2016-07-19 23:47:2841 virtual ~PermissionRequest() {}
[email protected]efad90f2014-01-17 00:45:5442
[email protected]d23cdeee2014-03-10 06:39:5343 // The icon to use next to the message text fragment in the permission bubble.
estade20c051a92016-10-15 22:53:2244 virtual IconId GetIconId() const = 0;
[email protected]d23cdeee2014-03-10 06:39:5345
timlohaa3ce262017-06-01 05:29:4046#if defined(OS_ANDROID)
timlohaa3ce262017-06-01 05:29:4047 // Returns the full prompt text for this permission. This is currently only
48 // used on Android.
49 virtual base::string16 GetMessageText() const = 0;
Andy Paicua5972f32019-08-22 20:23:1850
51 // Returns the title of this permission as text when the permission request is
52 // displayed as a quiet prompt. Only used on Android. By default it returns
53 // the same value as |GetTitleText| unless overridden.
54 virtual base::string16 GetQuietTitleText() const;
55
56 // Returns the full prompt text for this permission as text when the
57 // permission request is displayed as a quiet prompt. Only used on Android. By
58 // default it returns the same value as |GetMessageText| unless overridden.
59 virtual base::string16 GetQuietMessageText() const;
timlohaa3ce262017-06-01 05:29:4060#endif
61
Olesia Marukhnof8a4bed82020-06-17 13:35:3162#if !defined(OS_ANDROID)
63 // Returns the short text for the chip button related to this permission.
Bret Sepulveda55f43dec2020-09-27 22:58:5664 virtual base::Optional<base::string16> GetChipText() const;
Olesia Marukhnof8a4bed82020-06-17 13:35:3165#endif
66
Marijn Kruisselbrink5d4f1b242019-05-23 00:45:2367 // Returns the shortened prompt text for this permission. The permission
68 // bubble may coalesce different requests, and if it does, this text will
69 // be displayed next to an image and indicate the user grants the permission.
[email protected]dd1ba692014-01-24 23:17:3770 virtual base::string16 GetMessageTextFragment() const = 0;
71
johnmefe4e96d2016-01-27 16:14:4172 // Get the origin on whose behalf this permission request is being made.
73 virtual GURL GetOrigin() const = 0;
[email protected]dd1ba692014-01-24 23:17:3774
[email protected]efad90f2014-01-17 00:45:5475 // Called when the user has granted the requested permission.
Ravjit Singh Uppalc73b5a62020-11-13 01:38:5276 // If is_one_time is true the permission will last until all tabs of a given
77 // |origin| are closed or navigated away from. The permission will
78 // automatically expire after 1 day.
79 virtual void PermissionGranted(bool is_one_time) = 0;
[email protected]efad90f2014-01-17 00:45:5480
81 // Called when the user has denied the requested permission.
82 virtual void PermissionDenied() = 0;
83
84 // Called when the user has cancelled the permission request. This
85 // corresponds to a denial, but is segregated in case the context needs to
86 // be able to distinguish between an active refusal or an implicit refusal.
87 virtual void Cancelled() = 0;
88
tsergeant58defcfb2016-07-19 23:47:2889 // The UI this request was associated with was answered by the user.
[email protected]e2ff17e2014-02-06 02:32:3390 // It is safe for the request to be deleted at this point -- it will receive
tsergeant58defcfb2016-07-19 23:47:2891 // no further message from the permission request system. This method will
[email protected]e2ff17e2014-02-06 02:32:3392 // eventually be called on every request which is not unregistered.
Anatoliy Potapchuk1c46f7e2020-01-23 13:31:0393 // It is ok to call this method without actually resolving the request via
94 // PermissionGranted(), PermissionDenied() or Canceled(). However, it will not
95 // resolve the javascript promise from the requesting origin.
[email protected]efad90f2014-01-17 00:45:5496 virtual void RequestFinished() = 0;
benwells46b02fa2016-04-20 02:37:0297
tsergeant58defcfb2016-07-19 23:47:2898 // Used to record UMA metrics for permission requests.
timloh102eac82017-07-21 03:55:0999 virtual PermissionRequestType GetPermissionRequestType() const = 0;
benwells471d1f12016-07-25 23:58:04100
101 // Used to record UMA for whether requests are associated with a user gesture.
102 // To keep things simple this metric is only recorded for the most popular
103 // request types.
104 virtual PermissionRequestGestureType GetGestureType() const;
dominicknd4e446a2016-09-13 07:44:13105
lshangada00c12016-10-17 04:51:10106 // Used on Android to determine what Android OS permissions are needed for
107 // this permission request.
108 virtual ContentSettingsType GetContentSettingsType() const;
109
dominicknd4e446a2016-09-13 07:44:13110 private:
dominicknd4e446a2016-09-13 07:44:13111 DISALLOW_COPY_AND_ASSIGN(PermissionRequest);
[email protected]efad90f2014-01-17 00:45:54112};
113
Clark DuVall484c2562020-01-23 22:05:09114} // namespace permissions
115
116#endif // COMPONENTS_PERMISSIONS_PERMISSION_REQUEST_H_