| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "content/public/browser/browser_context.h" | 11 #include "content/public/browser/browser_context.h" |
| 12 #include "content/public/browser/permission_manager.h" | 12 #include "content/public/browser/permission_manager.h" |
| 13 #include "content/public/browser/permission_type.h" | 13 #include "content/public/browser/permission_type.h" |
| 14 | 14 |
| 15 namespace content { | 15 namespace content { |
| 16 | 16 |
| 17 namespace { | 17 namespace { |
| 18 | 18 |
| 19 PermissionType PermissionNameToPermissionType(PermissionName name) { | 19 PermissionType PermissionNameToPermissionType(PermissionName name) { |
| 20 switch(name) { | 20 switch(name) { |
| 21 case PERMISSION_NAME_GEOLOCATION: | 21 case PermissionName::GEOLOCATION: |
| 22 return PermissionType::GEOLOCATION; | 22 return PermissionType::GEOLOCATION; |
| 23 case PERMISSION_NAME_NOTIFICATIONS: | 23 case PermissionName::NOTIFICATIONS: |
| 24 return PermissionType::NOTIFICATIONS; | 24 return PermissionType::NOTIFICATIONS; |
| 25 case PERMISSION_NAME_PUSH_NOTIFICATIONS: | 25 case PermissionName::PUSH_NOTIFICATIONS: |
| 26 return PermissionType::PUSH_MESSAGING; | 26 return PermissionType::PUSH_MESSAGING; |
| 27 case PERMISSION_NAME_MIDI: | 27 case PermissionName::MIDI: |
| 28 return PermissionType::MIDI; | 28 return PermissionType::MIDI; |
| 29 case PERMISSION_NAME_MIDI_SYSEX: | 29 case PermissionName::MIDI_SYSEX: |
| 30 return PermissionType::MIDI_SYSEX; | 30 return PermissionType::MIDI_SYSEX; |
| 31 case PERMISSION_NAME_PROTECTED_MEDIA_IDENTIFIER: | 31 case PermissionName::PROTECTED_MEDIA_IDENTIFIER: |
| 32 return PermissionType::PROTECTED_MEDIA_IDENTIFIER; | 32 return PermissionType::PROTECTED_MEDIA_IDENTIFIER; |
| 33 case PERMISSION_NAME_DURABLE_STORAGE: | 33 case PermissionName::DURABLE_STORAGE: |
| 34 return PermissionType::DURABLE_STORAGE; | 34 return PermissionType::DURABLE_STORAGE; |
| 35 case PERMISSION_NAME_AUDIO_CAPTURE: | 35 case PermissionName::AUDIO_CAPTURE: |
| 36 return PermissionType::AUDIO_CAPTURE; | 36 return PermissionType::AUDIO_CAPTURE; |
| 37 case PERMISSION_NAME_VIDEO_CAPTURE: | 37 case PermissionName::VIDEO_CAPTURE: |
| 38 return PermissionType::VIDEO_CAPTURE; | 38 return PermissionType::VIDEO_CAPTURE; |
| 39 } | 39 } |
| 40 | 40 |
| 41 NOTREACHED(); | 41 NOTREACHED(); |
| 42 return PermissionType::NUM; | 42 return PermissionType::NUM; |
| 43 } | 43 } |
| 44 | 44 |
| 45 // This function allows the usage of the the multiple request map | 45 // This function allows the usage of the the multiple request map |
| 46 // with single requests. | 46 // with single requests. |
| 47 void PermissionRequestResponseCallbackWrapper( | 47 void PermissionRequestResponseCallbackWrapper( |
| (...skipping 12 matching lines...) Expand all Loading... |
| 60 request_count(request_count) { | 60 request_count(request_count) { |
| 61 } | 61 } |
| 62 | 62 |
| 63 PermissionServiceImpl::PendingRequest::~PendingRequest() { | 63 PermissionServiceImpl::PendingRequest::~PendingRequest() { |
| 64 if (callback.is_null()) | 64 if (callback.is_null()) |
| 65 return; | 65 return; |
| 66 | 66 |
| 67 mojo::Array<PermissionStatus> result = | 67 mojo::Array<PermissionStatus> result = |
| 68 mojo::Array<PermissionStatus>::New(request_count); | 68 mojo::Array<PermissionStatus>::New(request_count); |
| 69 for (int i = 0; i < request_count; ++i) | 69 for (int i = 0; i < request_count; ++i) |
| 70 result[i] = PERMISSION_STATUS_DENIED; | 70 result[i] = PermissionStatus::DENIED; |
| 71 callback.Run(std::move(result)); | 71 callback.Run(std::move(result)); |
| 72 } | 72 } |
| 73 | 73 |
| 74 PermissionServiceImpl::PendingSubscription::PendingSubscription( | 74 PermissionServiceImpl::PendingSubscription::PendingSubscription( |
| 75 PermissionType permission, | 75 PermissionType permission, |
| 76 const GURL& origin, | 76 const GURL& origin, |
| 77 const PermissionStatusCallback& callback) | 77 const PermissionStatusCallback& callback) |
| 78 : id(-1), | 78 : id(-1), |
| 79 permission(permission), | 79 permission(permission), |
| 80 origin(origin), | 80 origin(origin), |
| 81 callback(callback) { | 81 callback(callback) { |
| 82 } | 82 } |
| 83 | 83 |
| 84 PermissionServiceImpl::PendingSubscription::~PendingSubscription() { | 84 PermissionServiceImpl::PendingSubscription::~PendingSubscription() { |
| 85 if (!callback.is_null()) | 85 if (!callback.is_null()) |
| 86 callback.Run(PERMISSION_STATUS_ASK); | 86 callback.Run(PermissionStatus::ASK); |
| 87 } | 87 } |
| 88 | 88 |
| 89 PermissionServiceImpl::PermissionServiceImpl( | 89 PermissionServiceImpl::PermissionServiceImpl( |
| 90 PermissionServiceContext* context, | 90 PermissionServiceContext* context, |
| 91 mojo::InterfaceRequest<PermissionService> request) | 91 mojo::InterfaceRequest<PermissionService> request) |
| 92 : context_(context), | 92 : context_(context), |
| 93 binding_(this, std::move(request)), | 93 binding_(this, std::move(request)), |
| 94 weak_factory_(this) { | 94 weak_factory_(this) { |
| 95 binding_.set_connection_error_handler( | 95 binding_.set_connection_error_handler( |
| 96 base::Bind(&PermissionServiceImpl::OnConnectionError, | 96 base::Bind(&PermissionServiceImpl::OnConnectionError, |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 PermissionName permission, | 254 PermissionName permission, |
| 255 const mojo::String& origin, | 255 const mojo::String& origin, |
| 256 const PermissionStatusCallback& callback) { | 256 const PermissionStatusCallback& callback) { |
| 257 GURL origin_url(origin); | 257 GURL origin_url(origin); |
| 258 PermissionType permission_type = PermissionNameToPermissionType(permission); | 258 PermissionType permission_type = PermissionNameToPermissionType(permission); |
| 259 PermissionStatus status = GetPermissionStatusFromType(permission_type, | 259 PermissionStatus status = GetPermissionStatusFromType(permission_type, |
| 260 origin_url); | 260 origin_url); |
| 261 | 261 |
| 262 // Resetting the permission should only be possible if the permission is | 262 // Resetting the permission should only be possible if the permission is |
| 263 // already granted. | 263 // already granted. |
| 264 if (status != PERMISSION_STATUS_GRANTED) { | 264 if (status != PermissionStatus::GRANTED) { |
| 265 callback.Run(status); | 265 callback.Run(status); |
| 266 return; | 266 return; |
| 267 } | 267 } |
| 268 | 268 |
| 269 ResetPermissionStatus(permission_type, origin_url); | 269 ResetPermissionStatus(permission_type, origin_url); |
| 270 | 270 |
| 271 callback.Run(GetPermissionStatusFromType(permission_type, origin_url)); | 271 callback.Run(GetPermissionStatusFromType(permission_type, origin_url)); |
| 272 } | 272 } |
| 273 | 273 |
| 274 void PermissionServiceImpl::GetNextPermissionChange( | 274 void PermissionServiceImpl::GetNextPermissionChange( |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 316 PermissionName permission, const GURL& origin) { | 316 PermissionName permission, const GURL& origin) { |
| 317 return GetPermissionStatusFromType(PermissionNameToPermissionType(permission), | 317 return GetPermissionStatusFromType(PermissionNameToPermissionType(permission), |
| 318 origin); | 318 origin); |
| 319 } | 319 } |
| 320 | 320 |
| 321 PermissionStatus PermissionServiceImpl::GetPermissionStatusFromType( | 321 PermissionStatus PermissionServiceImpl::GetPermissionStatusFromType( |
| 322 PermissionType type, const GURL& origin) { | 322 PermissionType type, const GURL& origin) { |
| 323 BrowserContext* browser_context = context_->GetBrowserContext(); | 323 BrowserContext* browser_context = context_->GetBrowserContext(); |
| 324 DCHECK(browser_context); | 324 DCHECK(browser_context); |
| 325 if (!browser_context->GetPermissionManager()) | 325 if (!browser_context->GetPermissionManager()) |
| 326 return PERMISSION_STATUS_DENIED; | 326 return PermissionStatus::DENIED; |
| 327 | 327 |
| 328 // If the embedding_origin is empty we'll use |origin| instead. | 328 // If the embedding_origin is empty we'll use |origin| instead. |
| 329 GURL embedding_origin = context_->GetEmbeddingOrigin(); | 329 GURL embedding_origin = context_->GetEmbeddingOrigin(); |
| 330 return browser_context->GetPermissionManager()->GetPermissionStatus( | 330 return browser_context->GetPermissionManager()->GetPermissionStatus( |
| 331 type, origin, embedding_origin.is_empty() ? origin : embedding_origin); | 331 type, origin, embedding_origin.is_empty() ? origin : embedding_origin); |
| 332 } | 332 } |
| 333 | 333 |
| 334 void PermissionServiceImpl::ResetPermissionStatus(PermissionType type, | 334 void PermissionServiceImpl::ResetPermissionStatus(PermissionType type, |
| 335 const GURL& origin) { | 335 const GURL& origin) { |
| 336 BrowserContext* browser_context = context_->GetBrowserContext(); | 336 BrowserContext* browser_context = context_->GetBrowserContext(); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 359 | 359 |
| 360 PermissionStatusCallback callback = subscription->callback; | 360 PermissionStatusCallback callback = subscription->callback; |
| 361 | 361 |
| 362 subscription->callback.reset(); | 362 subscription->callback.reset(); |
| 363 pending_subscriptions_.Remove(pending_subscription_id); | 363 pending_subscriptions_.Remove(pending_subscription_id); |
| 364 | 364 |
| 365 callback.Run(status); | 365 callback.Run(status); |
| 366 } | 366 } |
| 367 | 367 |
| 368 } // namespace content | 368 } // namespace content |
| OLD | NEW |