Chromium Code Reviews| 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 |