Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(211)

Side by Side Diff: content/browser/permissions/permission_service_impl.cc

Issue 990303002: Implement PermissionService::GetNextPermissionChange. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@permission_impl
Patch Set: review comments Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/permissions/permission_service_impl.h" 5 #include "content/browser/permissions/permission_service_impl.h"
6 6
7 #include "content/public/browser/content_browser_client.h" 7 #include "content/public/browser/content_browser_client.h"
8 8
9 namespace content { 9 namespace content {
10 10
11 namespace { 11 namespace {
12 12
13 PermissionType PermissionNameToPermissionType(PermissionName name) { 13 PermissionType PermissionNameToPermissionType(PermissionName name) {
14 switch(name) { 14 switch(name) {
15 case PERMISSION_NAME_GEOLOCATION: 15 case PERMISSION_NAME_GEOLOCATION:
16 return PERMISSION_GEOLOCATION; 16 return PERMISSION_GEOLOCATION;
17 case PERMISSION_NAME_NOTIFICATIONS:
18 return PERMISSION_NOTIFICATIONS;
19 case PERMISSION_NAME_PUSH_NOTIFICATIONS:
20 return PERMISSION_PUSH_MESSAGING;
17 case PERMISSION_NAME_MIDI_SYSEX: 21 case PERMISSION_NAME_MIDI_SYSEX:
18 return PERMISSION_MIDI_SYSEX; 22 return PERMISSION_MIDI_SYSEX;
19 case PERMISSION_NAME_NOTIFICATIONS:
20 return PERMISSION_NOTIFICATIONS;
21 case PERMISSION_NAME_PROTECTED_MEDIA_IDENTIFIER: 23 case PERMISSION_NAME_PROTECTED_MEDIA_IDENTIFIER:
22 return PERMISSION_PROTECTED_MEDIA_IDENTIFIER; 24 return PERMISSION_PROTECTED_MEDIA_IDENTIFIER;
23 } 25 }
24 26
25 NOTREACHED(); 27 NOTREACHED();
26 return PERMISSION_NUM; 28 return PERMISSION_NUM;
27 } 29 }
28 30
29 } // anonymous namespace 31 } // anonymous namespace
30 32
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 107
106 pending_requests_.Clear(); 108 pending_requests_.Clear();
107 } 109 }
108 110
109 void PermissionServiceImpl::HasPermission( 111 void PermissionServiceImpl::HasPermission(
110 PermissionName permission, 112 PermissionName permission,
111 const mojo::String& origin, 113 const mojo::String& origin,
112 const mojo::Callback<void(PermissionStatus)>& callback) { 114 const mojo::Callback<void(PermissionStatus)>& callback) {
113 DCHECK(context_->GetBrowserContext()); 115 DCHECK(context_->GetBrowserContext());
114 116
115 callback.Run(GetPermissionStatus(PermissionNameToPermissionType(permission), 117 callback.Run(GetPermissionStatusFromName(permission, GURL(origin)));
116 GURL(origin)));
117 } 118 }
118 119
119 void PermissionServiceImpl::RevokePermission( 120 void PermissionServiceImpl::RevokePermission(
120 PermissionName permission, 121 PermissionName permission,
121 const mojo::String& origin, 122 const mojo::String& origin,
122 const mojo::Callback<void(PermissionStatus)>& callback) { 123 const mojo::Callback<void(PermissionStatus)>& callback) {
123 GURL origin_url(origin); 124 GURL origin_url(origin);
124 PermissionType permission_type = PermissionNameToPermissionType(permission); 125 PermissionType permission_type = PermissionNameToPermissionType(permission);
125 PermissionStatus status = GetPermissionStatus(permission_type, origin_url); 126 PermissionStatus status = GetPermissionStatusFromType(permission_type,
127 origin_url);
126 128
127 // Resetting the permission should only be possible if the permission is 129 // Resetting the permission should only be possible if the permission is
128 // already granted. 130 // already granted.
129 if (status != PERMISSION_STATUS_GRANTED) { 131 if (status != PERMISSION_STATUS_GRANTED) {
130 callback.Run(status); 132 callback.Run(status);
131 return; 133 return;
132 } 134 }
133 135
134 ResetPermissionStatus(permission_type, origin_url); 136 ResetPermissionStatus(permission_type, origin_url);
135 137
136 callback.Run(GetPermissionStatus(permission_type, origin_url)); 138 callback.Run(GetPermissionStatusFromType(permission_type, origin_url));
137 } 139 }
138 140
139 PermissionStatus PermissionServiceImpl::GetPermissionStatus(PermissionType type, 141 void PermissionServiceImpl::GetNextPermissionChange(
140 GURL origin) { 142 PermissionName permission,
143 const mojo::String& origin,
144 PermissionStatus last_known_status,
145 const mojo::Callback<void(PermissionStatus)>& callback) {
146 PermissionStatus current_status =
147 GetPermissionStatusFromName(permission, GURL(origin));
148 if (current_status != last_known_status) {
149 callback.Run(current_status);
150 return;
151 }
152
153 int* subscription_id = new int();
154
155 GURL embedding_origin = context_->GetEmbeddingOrigin();
156 *subscription_id =
157 GetContentClient()->browser()->SubscribePermissionStatusChange(
158 PermissionNameToPermissionType(permission),
159 context_->GetBrowserContext(),
160 GURL(origin),
161 // If the embedding_origin is empty, we,ll use the |origin| instead.
162 embedding_origin.is_empty() ? GURL(origin) : embedding_origin,
163 base::Bind(&PermissionServiceImpl::OnPermissionStatusChanged,
164 weak_factory_.GetWeakPtr(),
165 callback,
166 base::Owned(subscription_id)));
167 }
168
169 PermissionStatus PermissionServiceImpl::GetPermissionStatusFromName(
170 PermissionName permission, const GURL& origin) {
171 return GetPermissionStatusFromType(PermissionNameToPermissionType(permission),
172 origin);
173 }
174
175 PermissionStatus PermissionServiceImpl::GetPermissionStatusFromType(
176 PermissionType type, const GURL& origin) {
141 // If the embedding_origin is empty we'll use |origin| instead. 177 // If the embedding_origin is empty we'll use |origin| instead.
142 GURL embedding_origin = context_->GetEmbeddingOrigin(); 178 GURL embedding_origin = context_->GetEmbeddingOrigin();
143 return GetContentClient()->browser()->GetPermissionStatus( 179 return GetContentClient()->browser()->GetPermissionStatus(
144 type, context_->GetBrowserContext(), origin, 180 type, context_->GetBrowserContext(), origin,
145 embedding_origin.is_empty() ? origin : embedding_origin); 181 embedding_origin.is_empty() ? origin : embedding_origin);
146 } 182 }
147 183
148 void PermissionServiceImpl::ResetPermissionStatus(PermissionType type, 184 void PermissionServiceImpl::ResetPermissionStatus(PermissionType type,
149 GURL origin) { 185 const GURL& origin) {
150 // If the embedding_origin is empty we'll use |origin| instead. 186 // If the embedding_origin is empty we'll use |origin| instead.
151 GURL embedding_origin = context_->GetEmbeddingOrigin(); 187 GURL embedding_origin = context_->GetEmbeddingOrigin();
152 GetContentClient()->browser()->ResetPermission( 188 GetContentClient()->browser()->ResetPermission(
153 type, context_->GetBrowserContext(), origin, 189 type, context_->GetBrowserContext(), origin,
154 embedding_origin.is_empty() ? origin : embedding_origin); 190 embedding_origin.is_empty() ? origin : embedding_origin);
155 } 191 }
156 192
193 void PermissionServiceImpl::OnPermissionStatusChanged(
194 const mojo::Callback<void(PermissionStatus)>& callback,
195 int* subscription_id,
Bernhard Bauer 2015/03/23 10:20:43 Could you make this const int*?
196 PermissionStatus status) {
197 GetContentClient()->browser()->UnsubscribePermissionStatusChange(
198 context_->GetBrowserContext(),
199 *subscription_id);
200
201 callback.Run(status);
202 }
203
157 } // namespace content 204 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698