OLD | NEW |
---|---|
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 Loading... | |
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 |
OLD | NEW |