summaryrefslogtreecommitdiff
path: root/chromium/content/browser/permissions
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/browser/permissions')
-rw-r--r--chromium/content/browser/permissions/permission_controller_impl.cc20
-rw-r--r--chromium/content/browser/permissions/permission_controller_impl.h13
-rw-r--r--chromium/content/browser/permissions/permission_service_context.cc13
-rw-r--r--chromium/content/browser/permissions/permission_service_context.h7
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_;
};