| Index: content/browser/permissions/permission_service_impl.cc
|
| diff --git a/content/browser/permissions/permission_service_impl.cc b/content/browser/permissions/permission_service_impl.cc
|
| index 0fb9fb41bdbd576c1c7b525c89837e4edfd37ea2..bfcd6fd015a498c35315b9d68bf77ba5c25bddf9 100644
|
| --- a/content/browser/permissions/permission_service_impl.cc
|
| +++ b/content/browser/permissions/permission_service_impl.cc
|
| @@ -11,6 +11,7 @@
|
| #include "content/public/browser/browser_context.h"
|
| #include "content/public/browser/permission_manager.h"
|
| #include "content/public/browser/permission_type.h"
|
| +#include "url/origin.h"
|
|
|
| namespace content {
|
|
|
| @@ -73,13 +74,9 @@ PermissionServiceImpl::PendingRequest::~PendingRequest() {
|
|
|
| PermissionServiceImpl::PendingSubscription::PendingSubscription(
|
| PermissionType permission,
|
| - const GURL& origin,
|
| + const url::Origin& origin,
|
| const PermissionStatusCallback& callback)
|
| - : id(-1),
|
| - permission(permission),
|
| - origin(origin),
|
| - callback(callback) {
|
| -}
|
| + : id(-1), permission(permission), origin(origin), callback(callback) {}
|
|
|
| PermissionServiceImpl::PendingSubscription::~PendingSubscription() {
|
| if (!callback.is_null())
|
| @@ -108,7 +105,7 @@ void PermissionServiceImpl::OnConnectionError() {
|
|
|
| void PermissionServiceImpl::RequestPermission(
|
| mojom::PermissionName permission,
|
| - const mojo::String& origin,
|
| + const mojo::String& origin_string,
|
| const PermissionStatusCallback& callback) {
|
| // This condition is valid if the call is coming from a ChildThread instead of
|
| // a RenderFrame. Some consumers of the service run in Workers and some in
|
| @@ -119,21 +116,19 @@ void PermissionServiceImpl::RequestPermission(
|
| // permission status is returned.
|
| BrowserContext* browser_context = context_->GetBrowserContext();
|
| DCHECK(browser_context);
|
| + url::Origin origin(origin_string.get());
|
| if (!context_->render_frame_host() ||
|
| !browser_context->GetPermissionManager()) {
|
| - callback.Run(GetPermissionStatusFromName(permission, GURL(origin.get())));
|
| + callback.Run(GetPermissionStatusFromName(permission, origin));
|
| return;
|
| }
|
|
|
| int pending_request_id = pending_requests_.Add(new PendingRequest(
|
| base::Bind(&PermissionRequestResponseCallbackWrapper, callback), 1));
|
| int id = browser_context->GetPermissionManager()->RequestPermission(
|
| - PermissionNameToPermissionType(permission),
|
| - context_->render_frame_host(),
|
| - GURL(origin.get()),
|
| - base::Bind(&PermissionServiceImpl::OnRequestPermissionResponse,
|
| - weak_factory_.GetWeakPtr(),
|
| - pending_request_id));
|
| + PermissionNameToPermissionType(permission), context_->render_frame_host(),
|
| + origin, base::Bind(&PermissionServiceImpl::OnRequestPermissionResponse,
|
| + weak_factory_.GetWeakPtr(), pending_request_id));
|
|
|
| // Check if the request still exists. It might have been removed by the
|
| // callback if it was run synchronously.
|
| @@ -153,7 +148,7 @@ void PermissionServiceImpl::OnRequestPermissionResponse(
|
|
|
| void PermissionServiceImpl::RequestPermissions(
|
| mojo::Array<mojom::PermissionName> permissions,
|
| - const mojo::String& origin,
|
| + const mojo::String& origin_string,
|
| const PermissionsStatusCallback& callback) {
|
| if (permissions.is_null()) {
|
| callback.Run(mojo::Array<mojom::PermissionStatus>());
|
| @@ -169,12 +164,12 @@ void PermissionServiceImpl::RequestPermissions(
|
| // permission status is returned for each permission.
|
| BrowserContext* browser_context = context_->GetBrowserContext();
|
| DCHECK(browser_context);
|
| + const url::Origin origin(origin_string.get());
|
| if (!context_->render_frame_host() ||
|
| !browser_context->GetPermissionManager()) {
|
| mojo::Array<mojom::PermissionStatus> result(permissions.size());
|
| for (size_t i = 0; i < permissions.size(); ++i) {
|
| - result[i] =
|
| - GetPermissionStatusFromName(permissions[i], GURL(origin.get()));
|
| + result[i] = GetPermissionStatusFromName(permissions[i], origin);
|
| }
|
| callback.Run(std::move(result));
|
| return;
|
| @@ -187,12 +182,9 @@ void PermissionServiceImpl::RequestPermissions(
|
| int pending_request_id = pending_requests_.Add(
|
| new PendingRequest(callback, permissions.size()));
|
| int id = browser_context->GetPermissionManager()->RequestPermissions(
|
| - types,
|
| - context_->render_frame_host(),
|
| - GURL(origin.get()),
|
| + types, context_->render_frame_host(), origin,
|
| base::Bind(&PermissionServiceImpl::OnRequestPermissionsResponse,
|
| - weak_factory_.GetWeakPtr(),
|
| - pending_request_id));
|
| + weak_factory_.GetWeakPtr(), pending_request_id));
|
|
|
| // Check if the request still exists. It may have been removed by the
|
| // the response callback.
|
| @@ -243,19 +235,20 @@ void PermissionServiceImpl::CancelPendingOperations() {
|
|
|
| void PermissionServiceImpl::HasPermission(
|
| mojom::PermissionName permission,
|
| - const mojo::String& origin,
|
| + const mojo::String& origin_string,
|
| const PermissionStatusCallback& callback) {
|
| - callback.Run(GetPermissionStatusFromName(permission, GURL(origin.get())));
|
| + callback.Run(GetPermissionStatusFromName(permission,
|
| + url::Origin(origin_string.get())));
|
| }
|
|
|
| void PermissionServiceImpl::RevokePermission(
|
| mojom::PermissionName permission,
|
| - const mojo::String& origin,
|
| + const mojo::String& origin_string,
|
| const PermissionStatusCallback& callback) {
|
| - GURL origin_url(origin.get());
|
| + const url::Origin origin(origin_string.get());
|
| PermissionType permission_type = PermissionNameToPermissionType(permission);
|
| mojom::PermissionStatus status =
|
| - GetPermissionStatusFromType(permission_type, origin_url);
|
| + GetPermissionStatusFromType(permission_type, origin);
|
|
|
| // Resetting the permission should only be possible if the permission is
|
| // already granted.
|
| @@ -264,17 +257,17 @@ void PermissionServiceImpl::RevokePermission(
|
| return;
|
| }
|
|
|
| - ResetPermissionStatus(permission_type, origin_url);
|
| + ResetPermissionStatus(permission_type, origin);
|
|
|
| - callback.Run(GetPermissionStatusFromType(permission_type, origin_url));
|
| + callback.Run(GetPermissionStatusFromType(permission_type, origin));
|
| }
|
|
|
| void PermissionServiceImpl::GetNextPermissionChange(
|
| mojom::PermissionName permission,
|
| - const mojo::String& mojo_origin,
|
| + const mojo::String& origin_string,
|
| mojom::PermissionStatus last_known_status,
|
| const PermissionStatusCallback& callback) {
|
| - GURL origin(mojo_origin.get());
|
| + const url::Origin origin(origin_string.get());
|
| mojom::PermissionStatus current_status =
|
| GetPermissionStatusFromName(permission, origin);
|
| if (current_status != last_known_status) {
|
| @@ -298,50 +291,45 @@ void PermissionServiceImpl::GetNextPermissionChange(
|
| new PendingSubscription(permission_type, origin, callback);
|
| int pending_subscription_id = pending_subscriptions_.Add(subscription);
|
|
|
| - GURL embedding_origin = context_->GetEmbeddingOrigin();
|
| + const url::Origin embedding_origin = context_->GetEmbeddingOrigin();
|
| subscription->id =
|
| browser_context->GetPermissionManager()->SubscribePermissionStatusChange(
|
| - permission_type,
|
| - origin,
|
| - // If the embedding_origin is empty, we,ll use the |origin| instead.
|
| - embedding_origin.is_empty() ? origin : embedding_origin,
|
| + permission_type, origin,
|
| + embedding_origin.empty() ? origin : embedding_origin,
|
| base::Bind(&PermissionServiceImpl::OnPermissionStatusChanged,
|
| - weak_factory_.GetWeakPtr(),
|
| - pending_subscription_id));
|
| + weak_factory_.GetWeakPtr(), pending_subscription_id));
|
| }
|
|
|
| mojom::PermissionStatus PermissionServiceImpl::GetPermissionStatusFromName(
|
| mojom::PermissionName permission,
|
| - const GURL& origin) {
|
| + const url::Origin& origin) {
|
| return GetPermissionStatusFromType(PermissionNameToPermissionType(permission),
|
| origin);
|
| }
|
|
|
| mojom::PermissionStatus PermissionServiceImpl::GetPermissionStatusFromType(
|
| PermissionType type,
|
| - const GURL& origin) {
|
| + const url::Origin& origin) {
|
| BrowserContext* browser_context = context_->GetBrowserContext();
|
| DCHECK(browser_context);
|
| if (!browser_context->GetPermissionManager())
|
| return mojom::PermissionStatus::DENIED;
|
|
|
| - // If the embedding_origin is empty we'll use |origin| instead.
|
| - GURL embedding_origin = context_->GetEmbeddingOrigin();
|
| + const url::Origin embedding_origin = context_->GetEmbeddingOrigin();
|
| return browser_context->GetPermissionManager()->GetPermissionStatus(
|
| - type, origin, embedding_origin.is_empty() ? origin : embedding_origin);
|
| + type, origin, embedding_origin.empty() ? origin : embedding_origin);
|
| }
|
|
|
| void PermissionServiceImpl::ResetPermissionStatus(PermissionType type,
|
| - const GURL& origin) {
|
| + const url::Origin& origin) {
|
| BrowserContext* browser_context = context_->GetBrowserContext();
|
| DCHECK(browser_context);
|
| if (!browser_context->GetPermissionManager())
|
| return;
|
|
|
| - // If the embedding_origin is empty we'll use |origin| instead.
|
| - GURL embedding_origin = context_->GetEmbeddingOrigin();
|
| + const url::Origin embedding_origin = context_->GetEmbeddingOrigin();
|
| browser_context->GetPermissionManager()->ResetPermission(
|
| - type, origin, embedding_origin.is_empty() ? origin : embedding_origin);
|
| + type, origin, embedding_origin.empty() ? origin : embedding_origin);
|
| }
|
|
|
| void PermissionServiceImpl::OnPermissionStatusChanged(
|
|
|