summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBalazs Engedy <engedy@chromium.org>2021-03-31 07:47:19 +0000
committerMichael BrĂ¼ning <michael.bruning@qt.io>2021-04-16 16:28:27 +0000
commit53a608aff9c39b18cbcaf6cc9784420410fa587f (patch)
tree9b834ca3f59e2fa0f18a761937026a19fe143aab
parent6764c29f7c5aaf9ecbe6532f9e2b845604c926a5 (diff)
[Backport] CVE-2021-21201: Use after free in permissions
Partial backport of patch originally reviewed on https://chromium-review.googlesource.com/c/chromium/src/+/2791431: Use IDType for permission change subscriptions. Bug: 1025683 Change-Id: I3b44ba7833138e8a657a4192e1a36c978695db32 Reviewed-by: Richard Coles <torne@chromium.org> Reviewed-by: Yuchen Liu <yucliu@chromium.org> Reviewed-by: Nasko Oskov <nasko@chromium.org> Reviewed-by: Andrey Kosyakov <caseq@chromium.org> Reviewed-by: Fabrice de Gans-Riberi <fdegans@chromium.org> Reviewed-by: Arthur Sonzogni <arthursonzogni@chromium.org> Reviewed-by: Illia Klimov <elklm@google.com> Auto-Submit: Balazs Engedy <engedy@chromium.org> Commit-Queue: Balazs Engedy <engedy@chromium.org> Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
-rw-r--r--chromium/components/permissions/permission_manager.cc16
-rw-r--r--chromium/components/permissions/permission_manager.h8
-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
-rw-r--r--chromium/content/browser/renderer_host/media/media_stream_manager.cc16
-rw-r--r--chromium/content/browser/renderer_host/media/media_stream_manager.h16
-rw-r--r--chromium/content/public/browser/permission_controller.h23
-rw-r--r--chromium/content/public/browser/permission_controller_delegate.h36
-rw-r--r--chromium/fuchsia/engine/browser/web_engine_permission_delegate.cc11
-rw-r--r--chromium/fuchsia/engine/browser/web_engine_permission_delegate.h5
-rw-r--r--chromium/headless/lib/browser/headless_permission_manager.cc7
-rw-r--r--chromium/headless/lib/browser/headless_permission_manager.h5
14 files changed, 129 insertions, 67 deletions
diff --git a/chromium/components/permissions/permission_manager.cc b/chromium/components/permissions/permission_manager.cc
index d5ed9f78abb..9146f6f2761 100644
--- a/chromium/components/permissions/permission_manager.cc
+++ b/chromium/components/permissions/permission_manager.cc
@@ -536,14 +536,14 @@ bool PermissionManager::IsPermissionOverridableByDevTools(
origin->GetURL());
}
-int PermissionManager::SubscribePermissionStatusChange(
+PermissionManager::SubscriptionId PermissionManager::SubscribePermissionStatusChange(
PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
base::RepeatingCallback<void(PermissionStatus)> callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (is_shutting_down_)
- return 0;
+ return SubscriptionId();
if (subscriptions_.IsEmpty())
PermissionsClient::Get()
@@ -580,16 +580,20 @@ int PermissionManager::SubscribePermissionStatusChange(
subscription->callback =
base::BindRepeating(&SubscriptionCallbackWrapper, std::move(callback));
- return subscriptions_.Add(std::move(subscription));
+ auto id = subscription_id_generator_.GenerateNextId();
+ subscriptions_.AddWithID(std::move(subscription), id);
+ return id;
}
-void PermissionManager::UnsubscribePermissionStatusChange(int subscription_id) {
+void PermissionManager::UnsubscribePermissionStatusChange(
+ SubscriptionId subscription_id) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (is_shutting_down_)
return;
- // Whether |subscription_id| is known will be checked by the Remove() call.
- subscriptions_.Remove(subscription_id);
+ if (subscriptions_.Lookup(subscription_id)) {
+ subscriptions_.Remove(subscription_id);
+ }
if (subscriptions_.IsEmpty()) {
PermissionsClient::Get()
diff --git a/chromium/components/permissions/permission_manager.h b/chromium/components/permissions/permission_manager.h
index d11fb4b2c4a..03ca801a7ae 100644
--- a/chromium/components/permissions/permission_manager.h
+++ b/chromium/components/permissions/permission_manager.h
@@ -114,13 +114,13 @@ class PermissionManager : public KeyedService,
bool IsPermissionOverridableByDevTools(
content::PermissionType permission,
const base::Optional<url::Origin>& origin) override;
- int SubscribePermissionStatusChange(
+ SubscriptionId SubscribePermissionStatusChange(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback)
override;
- void UnsubscribePermissionStatusChange(int subscription_id) override;
+ void UnsubscribePermissionStatusChange(SubscriptionId subscription_id) override;
// TODO(raymes): Rather than exposing this, use the denial reason from
// GetPermissionStatus in callers to determine whether a permission is
@@ -153,7 +153,8 @@ class PermissionManager : public KeyedService,
class PermissionResponseCallback;
struct Subscription;
- using SubscriptionsMap = base::IDMap<std::unique_ptr<Subscription>>;
+ using SubscriptionsMap =
+ base::IDMap<std::unique_ptr<Subscription>, SubscriptionId>;
PermissionContextBase* GetPermissionContext(ContentSettingsType type);
@@ -186,6 +187,7 @@ class PermissionManager : public KeyedService,
content::BrowserContext* browser_context_;
PendingRequestsMap pending_requests_;
SubscriptionsMap subscriptions_;
+ SubscriptionId::Generator subscription_id_generator_;
PermissionContextMap permission_contexts_;
using ContentSettingsTypeOverrides =
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_;
};
diff --git a/chromium/content/browser/renderer_host/media/media_stream_manager.cc b/chromium/content/browser/renderer_host/media/media_stream_manager.cc
index 884eb393ba0..c627d893110 100644
--- a/chromium/content/browser/renderer_host/media/media_stream_manager.cc
+++ b/chromium/content/browser/renderer_host/media/media_stream_manager.cc
@@ -668,9 +668,9 @@ class MediaStreamManager::DeviceRequest {
std::string tab_capture_device_id;
- int audio_subscription_id = PermissionControllerImpl::kNoPendingOperation;
+ PermissionController::SubscriptionId audio_subscription_id;
- int video_subscription_id = PermissionControllerImpl::kNoPendingOperation;
+ PermissionController::SubscriptionId video_subscription_id;
private:
std::vector<MediaRequestState> state_;
@@ -2686,8 +2686,8 @@ void MediaStreamManager::SubscribeToPermissionControllerOnUIThread(
if (!controller)
return;
- int audio_subscription_id = PermissionControllerImpl::kNoPendingOperation;
- int video_subscription_id = PermissionControllerImpl::kNoPendingOperation;
+ PermissionController::SubscriptionId audio_subscription_id;
+ PermissionController::SubscriptionId video_subscription_id;
if (is_audio_request) {
// It is safe to bind base::Unretained(this) because MediaStreamManager is
@@ -2729,8 +2729,8 @@ void MediaStreamManager::SetPermissionSubscriptionIDs(
const std::string& label,
int requesting_process_id,
int requesting_frame_id,
- int audio_subscription_id,
- int video_subscription_id) {
+ PermissionController::SubscriptionId audio_subscription_id,
+ PermissionController::SubscriptionId video_subscription_id) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
DeviceRequest* const request = FindRequest(label);
@@ -2757,8 +2757,8 @@ void MediaStreamManager::SetPermissionSubscriptionIDs(
void MediaStreamManager::UnsubscribeFromPermissionControllerOnUIThread(
int requesting_process_id,
int requesting_frame_id,
- int audio_subscription_id,
- int video_subscription_id) {
+ PermissionController::SubscriptionId audio_subscription_id,
+ PermissionController::SubscriptionId video_subscription_id) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
PermissionControllerImpl* controller =
diff --git a/chromium/content/browser/renderer_host/media/media_stream_manager.h b/chromium/content/browser/renderer_host/media/media_stream_manager.h
index 045e5f5c00d..7898abfbf99 100644
--- a/chromium/content/browser/renderer_host/media/media_stream_manager.h
+++ b/chromium/content/browser/renderer_host/media/media_stream_manager.h
@@ -50,6 +50,7 @@
#include "content/public/browser/desktop_media_id.h"
#include "content/public/browser/media_request_state.h"
#include "content/public/browser/media_stream_request.h"
+#include "content/public/browser/permission_controller.h"
#include "media/base/video_facing.h"
#include "third_party/blink/public/common/mediastream/media_devices.h"
#include "third_party/blink/public/common/mediastream/media_stream_controls.h"
@@ -557,19 +558,20 @@ class CONTENT_EXPORT MediaStreamManager
// Store the subscription ids on a DeviceRequest in order to allow
// unsubscribing when the request is deleted.
- void SetPermissionSubscriptionIDs(const std::string& label,
- int requesting_process_id,
- int requesting_frame_id,
- int audio_subscription_id,
- int video_subscription_id);
+ void SetPermissionSubscriptionIDs(
+ const std::string& label,
+ int requesting_process_id,
+ int requesting_frame_id,
+ PermissionController::SubscriptionId audio_subscription_id,
+ PermissionController::SubscriptionId video_subscription_id);
// Unsubscribe from following permission updates for the two specified
// subscription IDs. Called when a request is deleted.
static void UnsubscribeFromPermissionControllerOnUIThread(
int requesting_process_id,
int requesting_frame_id,
- int audio_subscription_id,
- int video_subscription_id);
+ PermissionController::SubscriptionId audio_subscription_id,
+ PermissionController::SubscriptionId video_subscription_id);
// Callback that the PermissionController calls when a permission is updated.
void PermissionChangedCallback(int requesting_process_id,
diff --git a/chromium/content/public/browser/permission_controller.h b/chromium/content/public/browser/permission_controller.h
index b9b42def49b..77fe96a1c33 100644
--- a/chromium/content/public/browser/permission_controller.h
+++ b/chromium/content/public/browser/permission_controller.h
@@ -6,6 +6,7 @@
#define CONTENT_PUBLIC_BROWSER_PERMISSION_CONTROLLER_H_
#include "base/supports_user_data.h"
+#include "base/util/type_safety/id_type.h"
#include "content/common/content_export.h"
#include "content/public/browser/permission_type.h"
#include "third_party/blink/public/mojom/permissions/permission_status.mojom.h"
@@ -20,8 +21,13 @@ class RenderFrameHost;
class CONTENT_EXPORT PermissionController
: public base::SupportsUserData::Data {
public:
- // Constant retured when registering and subscribing if
- // cancelling/unsubscribing at a later stage would have no effect.
+ // Identifier for an active subscription. This is intentionally a distinct
+ // type from PermissionControllerDelegate::SubscriptionId as the concrete
+ // identifier values may be different.
+ using SubscriptionId = util::IdType64<PermissionController>;
+
+ // Constant returned when requesting a permission if cancelling at a later
+ // stage would have no effect.
static const int kNoPendingOperation = -1;
~PermissionController() override {}
@@ -48,4 +54,17 @@ class CONTENT_EXPORT PermissionController
} // namespace content
+namespace std {
+
+template <>
+struct hash<content::PermissionController::SubscriptionId> {
+ std::size_t operator()(
+ const content::PermissionController::SubscriptionId& v) const {
+ content::PermissionController::SubscriptionId::Hasher hasher;
+ return hasher(v);
+ }
+};
+
+} // namespace std
+
#endif // CONTENT_PUBLIC_BROWSER_PERMISSION_CONTROLLER_H_
diff --git a/chromium/content/public/browser/permission_controller_delegate.h b/chromium/content/public/browser/permission_controller_delegate.h
index e47de2a278e..82a1d4f0efd 100644
--- a/chromium/content/public/browser/permission_controller_delegate.h
+++ b/chromium/content/public/browser/permission_controller_delegate.h
@@ -5,6 +5,7 @@
#ifndef CONTENT_PUBLIC_BROWSER_PERMISSION_CONTROLLER_DELEGATE_H_
#define CONTENT_PUBLIC_BROWSER_PERMISSION_CONTROLLER_DELEGATE_H_
+#include "base/util/type_safety/id_type.h"
#include "content/common/content_export.h"
#include "content/public/browser/devtools_permission_overrides.h"
#include "third_party/blink/public/mojom/permissions/permission_status.mojom.h"
@@ -18,6 +19,10 @@ class RenderFrameHost;
class CONTENT_EXPORT PermissionControllerDelegate {
public:
using PermissionOverrides = DevToolsPermissionOverrides::PermissionOverrides;
+
+ // Identifier for an active subscription.
+ using SubscriptionId = util::IdType64<PermissionControllerDelegate>;
+
virtual ~PermissionControllerDelegate() = default;
// Requests a permission on behalf of a frame identified by
@@ -80,21 +85,21 @@ class CONTENT_EXPORT PermissionControllerDelegate {
// Runs the given |callback| whenever the |permission| associated with the
// given RenderFrameHost changes. A nullptr should be passed if the request
- // is from a worker. Returns the subscription_id to be used to unsubscribe.
- // Can be kNoPendingOperation if the subscribe was not successful.
- virtual int SubscribePermissionStatusChange(
+ // is from a worker. Returns the ID to be used to unsubscribe, which can be
+ // `is_null()` if the subscribe was not successful.
+ virtual SubscriptionId SubscribePermissionStatusChange(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
base::RepeatingCallback<void(blink::mojom::PermissionStatus)>
callback) = 0;
- // Unregisters from permission status change notifications.
- // The |subscription_id| must match the value returned by the
- // SubscribePermissionStatusChange call. Unsubscribing
- // an already unsubscribed |subscription_id| or providing the
- // |subscription_id| kNoPendingOperation is a no-op.
- virtual void UnsubscribePermissionStatusChange(int subscription_id) = 0;
+ // Unregisters from permission status change notifications. The
+ // |subscription_id| must match the value returned by the
+ // SubscribePermissionStatusChange call. Unsubscribing an already
+ // unsubscribed |subscription_id| or an `is_null()` ID is a no-op.
+ virtual void UnsubscribePermissionStatusChange(
+ SubscriptionId subscription_id) = 0;
// Manually overrides default permission settings of delegate, if overrides
// are tracked by the delegate. This method should only be called by the
@@ -116,4 +121,17 @@ class CONTENT_EXPORT PermissionControllerDelegate {
} // namespace content
+namespace std {
+
+template <>
+struct hash<content::PermissionControllerDelegate::SubscriptionId> {
+ std::size_t operator()(
+ const content::PermissionControllerDelegate::SubscriptionId& v) const {
+ content::PermissionControllerDelegate::SubscriptionId::Hasher hasher;
+ return hasher(v);
+ }
+};
+
+} // namespace std
+
#endif // CONTENT_PUBLIC_BROWSER_PERMISSION_CONTROLLER_DELEGATE_H_
diff --git a/chromium/fuchsia/engine/browser/web_engine_permission_delegate.cc b/chromium/fuchsia/engine/browser/web_engine_permission_delegate.cc
index 98592f05b6d..c18b8be7cdf 100644
--- a/chromium/fuchsia/engine/browser/web_engine_permission_delegate.cc
+++ b/chromium/fuchsia/engine/browser/web_engine_permission_delegate.cc
@@ -83,20 +83,21 @@ WebEnginePermissionDelegate::GetPermissionStatusForFrame(
permission, url::Origin::Create(requesting_origin));
}
-int WebEnginePermissionDelegate::SubscribePermissionStatusChange(
+WebEnginePermissionDelegate::SubscriptionId
+WebEnginePermissionDelegate::SubscribePermissionStatusChange(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback) {
// TODO(crbug.com/1063094): Implement permission status subscription. It's
// used in blink to emit PermissionStatus.onchange notifications.
- NOTIMPLEMENTED() << ": " << static_cast<int>(permission);
- return content::PermissionController::kNoPendingOperation;
+ NOTIMPLEMENTED_LOG_ONCE() << ": " << static_cast<int>(permission);
+ return SubscriptionId();
}
void WebEnginePermissionDelegate::UnsubscribePermissionStatusChange(
- int subscription_id) {
+ SubscriptionId subscription_id) {
// TODO(crbug.com/1063094): Implement permission status subscription. It's
// used in blink to emit PermissionStatus.onchange notifications.
- NOTREACHED();
+ NOTIMPLEMENTED_LOG_ONCE();
}
diff --git a/chromium/fuchsia/engine/browser/web_engine_permission_delegate.h b/chromium/fuchsia/engine/browser/web_engine_permission_delegate.h
index 036207b75d3..c39989b471c 100644
--- a/chromium/fuchsia/engine/browser/web_engine_permission_delegate.h
+++ b/chromium/fuchsia/engine/browser/web_engine_permission_delegate.h
@@ -45,13 +45,14 @@ class WebEnginePermissionDelegate
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin) override;
- int SubscribePermissionStatusChange(
+ SubscriptionId SubscribePermissionStatusChange(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback)
override;
- void UnsubscribePermissionStatusChange(int subscription_id) override;
+ void UnsubscribePermissionStatusChange(
+ SubscriptionId subscription_id) override;
};
#endif // FUCHSIA_ENGINE_BROWSER_WEB_ENGINE_PERMISSION_DELEGATE_H_
diff --git a/chromium/headless/lib/browser/headless_permission_manager.cc b/chromium/headless/lib/browser/headless_permission_manager.cc
index 5d4d609fc0c..359ecdc4b72 100644
--- a/chromium/headless/lib/browser/headless_permission_manager.cc
+++ b/chromium/headless/lib/browser/headless_permission_manager.cc
@@ -71,15 +71,16 @@ HeadlessPermissionManager::GetPermissionStatusForFrame(
return blink::mojom::PermissionStatus::ASK;
}
-int HeadlessPermissionManager::SubscribePermissionStatusChange(
+HeadlessPermissionManager::SubscriptionId
+HeadlessPermissionManager::SubscribePermissionStatusChange(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback) {
- return content::PermissionController::kNoPendingOperation;
+ return SubscriptionId();
}
void HeadlessPermissionManager::UnsubscribePermissionStatusChange(
- int subscription_id) {}
+ SubscriptionId subscription_id) {}
} // namespace headless
diff --git a/chromium/headless/lib/browser/headless_permission_manager.h b/chromium/headless/lib/browser/headless_permission_manager.h
index 4b83309ab3a..ac30670cb38 100644
--- a/chromium/headless/lib/browser/headless_permission_manager.h
+++ b/chromium/headless/lib/browser/headless_permission_manager.h
@@ -46,13 +46,14 @@ class HeadlessPermissionManager : public content::PermissionControllerDelegate {
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin) override;
- int SubscribePermissionStatusChange(
+ SubscriptionId SubscribePermissionStatusChange(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback)
override;
- void UnsubscribePermissionStatusChange(int subscription_id) override;
+ void UnsubscribePermissionStatusChange(
+ SubscriptionId subscription_id) override;
private:
content::BrowserContext* browser_context_;