diff options
Diffstat (limited to 'chromium/content/browser/permissions')
4 files changed, 33 insertions, 20 deletions
diff --git a/chromium/content/browser/permissions/permission_controller_impl.cc b/chromium/content/browser/permissions/permission_controller_impl.cc index ddd6656e035..3a6e38178c1 100644 --- a/chromium/content/browser/permissions/permission_controller_impl.cc +++ b/chromium/content/browser/permissions/permission_controller_impl.cc @@ -133,7 +133,8 @@ struct PermissionControllerImpl::Subscription { int render_frame_id = -1; int render_process_id = -1; base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback; - int delegate_subscription_id; + // This is default-initialized to an invalid ID. + PermissionControllerDelegate::SubscriptionId delegate_subscription_id; }; PermissionControllerImpl::~PermissionControllerImpl() { @@ -389,7 +390,8 @@ void PermissionControllerImpl::OnDelegatePermissionStatusChange( subscription->callback.Run(status); } -int PermissionControllerImpl::SubscribePermissionStatusChange( +PermissionControllerImpl::SubscriptionId +PermissionControllerImpl::SubscribePermissionStatusChange( PermissionType permission, RenderFrameHost* render_frame_host, const GURL& requesting_origin, @@ -423,22 +425,22 @@ int PermissionControllerImpl::SubscribePermissionStatusChange( base::BindRepeating( &PermissionControllerImpl::OnDelegatePermissionStatusChange, base::Unretained(this), subscription.get())); - } else { - subscription->delegate_subscription_id = kNoPendingOperation; } - return subscriptions_.Add(std::move(subscription)); + + auto id = subscription_id_generator_.GenerateNextId(); + subscriptions_.AddWithID(std::move(subscription), id); + return id; } void PermissionControllerImpl::UnsubscribePermissionStatusChange( - int subscription_id) { + SubscriptionId subscription_id) { Subscription* subscription = subscriptions_.Lookup(subscription_id); if (!subscription) return; PermissionControllerDelegate* delegate = browser_context_->GetPermissionControllerDelegate(); - if (delegate && - subscription->delegate_subscription_id != kNoPendingOperation) { - delegate->UnsubscribePermissionStatusChange( + if (delegate) { + delegate->UnsubscribePermissionStatusChange( subscription->delegate_subscription_id); } subscriptions_.Remove(subscription_id); diff --git a/chromium/content/browser/permissions/permission_controller_impl.h b/chromium/content/browser/permissions/permission_controller_impl.h index 7ebf3c48a0e..d85788867f7 100644 --- a/chromium/content/browser/permissions/permission_controller_impl.h +++ b/chromium/content/browser/permissions/permission_controller_impl.h @@ -72,18 +72,19 @@ class CONTENT_EXPORT PermissionControllerImpl : public PermissionController { const GURL& requesting_origin, const GURL& embedding_origin); - int SubscribePermissionStatusChange( + SubscriptionId SubscribePermissionStatusChange( PermissionType permission, RenderFrameHost* render_frame_host, const GURL& requesting_origin, const base::RepeatingCallback<void(blink::mojom::PermissionStatus)>& callback); - void UnsubscribePermissionStatusChange(int subscription_id); + void UnsubscribePermissionStatusChange(SubscriptionId subscription_id); private: struct Subscription; - using SubscriptionsMap = base::IDMap<std::unique_ptr<Subscription>>; + using SubscriptionsMap = + base::IDMap<std::unique_ptr<Subscription>, SubscriptionId>; using SubscriptionsStatusMap = base::flat_map<SubscriptionsMap::KeyType, blink::mojom::PermissionStatus>; @@ -98,7 +99,13 @@ class CONTENT_EXPORT PermissionControllerImpl : public PermissionController { const base::Optional<url::Origin>& origin); DevToolsPermissionOverrides devtools_permission_overrides_; + + // Note that SubscriptionId is distinct from + // PermissionControllerDelegate::SubscriptionId, and the concrete ID values + // may be different as well. SubscriptionsMap subscriptions_; + SubscriptionId::Generator subscription_id_generator_; + BrowserContext* browser_context_; DISALLOW_COPY_AND_ASSIGN(PermissionControllerImpl); diff --git a/chromium/content/browser/permissions/permission_service_context.cc b/chromium/content/browser/permissions/permission_service_context.cc index c3ab81294ed..cb409a27cd0 100644 --- a/chromium/content/browser/permissions/permission_service_context.cc +++ b/chromium/content/browser/permissions/permission_service_context.cc @@ -32,7 +32,7 @@ class PermissionServiceContext::PermissionSubscription { PermissionSubscription& operator=(const PermissionSubscription&) = delete; ~PermissionSubscription() { - DCHECK_NE(id_, 0); + DCHECK(id_); BrowserContext* browser_context = context_->GetBrowserContext(); if (browser_context) { PermissionControllerImpl::FromBrowserContext(browser_context) @@ -41,7 +41,7 @@ class PermissionServiceContext::PermissionSubscription { } void OnConnectionError() { - DCHECK_NE(id_, 0); + DCHECK(id_); context_->ObserverHadConnectionError(id_); } @@ -49,12 +49,12 @@ class PermissionServiceContext::PermissionSubscription { observer_->OnPermissionStatusChange(status); } - void set_id(int id) { id_ = id; } + void set_id(PermissionController::SubscriptionId id) { id_ = id; } private: PermissionServiceContext* const context_; mojo::Remote<blink::mojom::PermissionObserver> observer_; - int id_ = 0; + PermissionController::SubscriptionId id_; }; PermissionServiceContext::PermissionServiceContext( @@ -108,7 +108,7 @@ void PermissionServiceContext::CreateSubscription( } GURL requesting_origin(origin.Serialize()); - int subscription_id = + auto subscription_id = PermissionControllerImpl::FromBrowserContext(browser_context) ->SubscribePermissionStatusChange( permission_type, render_frame_host_, requesting_origin, @@ -119,7 +119,8 @@ void PermissionServiceContext::CreateSubscription( subscriptions_[subscription_id] = std::move(subscription); } -void PermissionServiceContext::ObserverHadConnectionError(int subscription_id) { +void PermissionServiceContext::ObserverHadConnectionError( + PermissionController::SubscriptionId subscription_id) { size_t erased = subscriptions_.erase(subscription_id); DCHECK_EQ(1u, erased); } diff --git a/chromium/content/browser/permissions/permission_service_context.h b/chromium/content/browser/permissions/permission_service_context.h index 4f93be504fd..0680c70c8ee 100644 --- a/chromium/content/browser/permissions/permission_service_context.h +++ b/chromium/content/browser/permissions/permission_service_context.h @@ -9,6 +9,7 @@ #include <unordered_map> #include "content/common/content_export.h" +#include "content/public/browser/permission_controller.h" #include "content/public/browser/permission_type.h" #include "content/public/browser/web_contents_observer.h" #include "mojo/public/cpp/bindings/pending_receiver.h" @@ -52,7 +53,8 @@ class CONTENT_EXPORT PermissionServiceContext : public WebContentsObserver { mojo::PendingRemote<blink::mojom::PermissionObserver> observer); // Called when the connection to a PermissionObserver has an error. - void ObserverHadConnectionError(int subscription_id); + void ObserverHadConnectionError( + PermissionController::SubscriptionId subscription_id); // May return nullptr during teardown, or when showing an interstitial. BrowserContext* GetBrowserContext() const; @@ -78,7 +80,8 @@ class CONTENT_EXPORT PermissionServiceContext : public WebContentsObserver { RenderFrameHost* const render_frame_host_; RenderProcessHost* const render_process_host_; mojo::UniqueReceiverSet<blink::mojom::PermissionService> services_; - std::unordered_map<int, std::unique_ptr<PermissionSubscription>> + std::unordered_map<PermissionController::SubscriptionId, + std::unique_ptr<PermissionSubscription>> subscriptions_; }; |