22
22
#include "content/public/browser/permission_type.h"
23
23
#include "content/public/common/permission_status.mojom.h"
25
#include "shared/browser/oxide_browser_context.h"
25
27
#include "oxide_permission_request_dispatcher.h"
28
#include "oxide_permission_request_response.h"
29
#include "oxide_temporary_saved_permission_context.h"
35
content::PermissionStatus ToPermissionStatus(
36
PermissionRequestResponse response) {
37
return response == PERMISSION_REQUEST_RESPONSE_ALLOW ?
38
content::PERMISSION_STATUS_GRANTED :
39
content::PERMISSION_STATUS_DENIED;
42
content::PermissionStatus ToPermissionStatus(
43
TemporarySavedPermissionStatus status) {
45
case TEMPORARY_SAVED_PERMISSION_STATUS_ALLOWED:
46
return content::PERMISSION_STATUS_GRANTED;
47
case TEMPORARY_SAVED_PERMISSION_STATUS_DENIED:
48
return content::PERMISSION_STATUS_DENIED;
49
case TEMPORARY_SAVED_PERMISSION_STATUS_ASK:
50
return content::PERMISSION_STATUS_ASK;
53
return content::PERMISSION_STATUS_DENIED;
57
bool IsPermissionTypeSupported(content::PermissionType permission) {
59
case content::PermissionType::GEOLOCATION:
66
TemporarySavedPermissionType ToTemporarySavedPermissionType(
67
content::PermissionType permission) {
69
case content::PermissionType::GEOLOCATION:
70
return TEMPORARY_SAVED_PERMISSION_TYPE_GEOLOCATION;
73
// XXX(chrisccoulson): Perhaps we need __builtin_unreachable here?
74
return static_cast<TemporarySavedPermissionType>(-1);
78
TemporarySavedPermissionStatus ToTemporarySavedPermissionStatus(
79
PermissionRequestResponse response) {
80
DCHECK_NE(response, PERMISSION_REQUEST_RESPONSE_CANCEL);
81
return response == PERMISSION_REQUEST_RESPONSE_ALLOW ?
82
TEMPORARY_SAVED_PERMISSION_STATUS_ALLOWED :
83
TEMPORARY_SAVED_PERMISSION_STATUS_DENIED;
31
86
void RespondToGeolocationPermissionRequest(
32
const base::Callback<void(content::PermissionStatus)>& callback,
33
content::PermissionStatus result) {
34
if (result == content::PERMISSION_STATUS_GRANTED) {
87
const PermissionRequestCallback& callback,
88
PermissionRequestResponse response) {
89
if (response == PERMISSION_REQUEST_RESPONSE_ALLOW) {
35
90
content::GeolocationProvider::GetInstance()
36
91
->UserDidOptIntoLocationServices();
41
base::Callback<void(content::PermissionStatus)> WrapCallback(
42
const base::Callback<void(content::PermissionStatus)>& callback,
43
content::PermissionType permission) {
93
callback.Run(response);
96
void RespondToPermissionRequest(
97
const base::Callback<void(content::PermissionStatus)>& callback,
98
content::PermissionType permission,
99
BrowserContext* context,
100
const GURL& requesting_origin,
101
const GURL& embedding_origin,
102
PermissionRequestResponse response) {
103
callback.Run(ToPermissionStatus(response));
105
if (response == PERMISSION_REQUEST_RESPONSE_CANCEL) {
109
context->GetTemporarySavedPermissionContext()->SetPermissionStatus(
110
ToTemporarySavedPermissionType(permission),
113
ToTemporarySavedPermissionStatus(response));
116
const PermissionRequestCallback WrapCallback(
117
const base::Callback<void(content::PermissionStatus)>& callback,
118
content::PermissionType permission,
119
BrowserContext* context,
120
const GURL& requesting_origin,
121
const GURL& embedding_origin) {
122
const PermissionRequestCallback wrapped_callback =
123
base::Bind(&RespondToPermissionRequest,
126
// The owner of PermissionRequestDispatcher keeps |context|
127
// alive. The request will be cancelled by
128
// PermissionRequestDispatcher when it is destroyed, so it's
129
// ok to not have a strong reference here
130
base::Unretained(context),
44
133
switch (permission) {
45
134
case content::PermissionType::GEOLOCATION:
46
return base::Bind(&RespondToGeolocationPermissionRequest, callback);
135
return base::Bind(&RespondToGeolocationPermissionRequest,
138
return wrapped_callback;
62
152
const GURL& requesting_origin,
63
153
bool user_gesture,
64
154
const base::Callback<void(content::PermissionStatus)>& callback) {
155
if (!IsPermissionTypeSupported(permission)) {
156
callback.Run(content::PERMISSION_STATUS_DENIED);
160
GURL embedding_origin = web_contents->GetLastCommittedURL().GetOrigin();
162
TemporarySavedPermissionStatus status =
163
context_->GetTemporarySavedPermissionContext()->GetPermissionStatus(
164
ToTemporarySavedPermissionType(permission),
167
if (status != TEMPORARY_SAVED_PERMISSION_STATUS_ASK) {
168
callback.Run(ToPermissionStatus(status));
65
172
PermissionRequestDispatcher* dispatcher =
66
173
PermissionRequestDispatcher::FromWebContents(web_contents);
67
174
if (!dispatcher) {
95
204
content::PermissionType permission,
96
205
const GURL& requesting_origin,
97
206
const GURL& embedding_origin) {
98
return content::PERMISSION_STATUS_DENIED;
207
if (!IsPermissionTypeSupported(permission)) {
208
return content::PERMISSION_STATUS_DENIED;
211
return ToPermissionStatus(
212
context_->GetTemporarySavedPermissionContext()->GetPermissionStatus(
213
ToTemporarySavedPermissionType(permission),
101
218
void PermissionManager::ResetPermission(content::PermissionType permission,
102
219
const GURL& requesting_origin,
103
const GURL& embedding_origin) {}
220
const GURL& embedding_origin) {
105
224
void PermissionManager::RegisterPermissionUsage(
106
225
content::PermissionType permission,