Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(53)

Unified Diff: third_party/WebKit/Source/modules/permissions/PermissionStatus.cpp

Issue 2573573002: Switch PermissionStatus events to an observer model. (Closed)
Patch Set: Rebased. Created 3 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/modules/permissions/PermissionStatus.cpp
diff --git a/third_party/WebKit/Source/modules/permissions/PermissionStatus.cpp b/third_party/WebKit/Source/modules/permissions/PermissionStatus.cpp
index 41e71aedb0f60245f88d0beba2ff5a17b468ba79..a3b2b99c745ecdd665497d556725a849162e80cb 100644
--- a/third_party/WebKit/Source/modules/permissions/PermissionStatus.cpp
+++ b/third_party/WebKit/Source/modules/permissions/PermissionStatus.cpp
@@ -38,9 +38,12 @@ PermissionStatus::PermissionStatus(ExecutionContext* executionContext,
MojoPermissionDescriptor descriptor)
: SuspendableObject(executionContext),
m_status(status),
- m_descriptor(std::move(descriptor)) {}
+ m_descriptor(std::move(descriptor)),
+ m_binding(this) {}
-PermissionStatus::~PermissionStatus() {
+PermissionStatus::~PermissionStatus() = default;
+
+void PermissionStatus::dispose() {
stopListening();
}
@@ -52,22 +55,8 @@ ExecutionContext* PermissionStatus::getExecutionContext() const {
return SuspendableObject::getExecutionContext();
}
-void PermissionStatus::permissionChanged(MojoPermissionStatus status) {
- if (m_status == status)
- return;
-
- m_status = status;
- dispatchEvent(Event::create(EventTypeNames::change));
-
- m_service->GetNextPermissionChange(
- m_descriptor->Clone(), getExecutionContext()->getSecurityOrigin(),
- m_status,
- convertToBaseCallback(WTF::bind(&PermissionStatus::permissionChanged,
- wrapWeakPersistent(this))));
-}
-
bool PermissionStatus::hasPendingActivity() const {
- return m_service;
+ return m_binding.is_bound();
}
void PermissionStatus::resume() {
@@ -82,21 +71,6 @@ void PermissionStatus::contextDestroyed() {
stopListening();
}
-void PermissionStatus::startListening() {
- DCHECK(!m_service);
- connectToPermissionService(getExecutionContext(),
- mojo::MakeRequest(&m_service));
- m_service->GetNextPermissionChange(
- m_descriptor->Clone(), getExecutionContext()->getSecurityOrigin(),
- m_status,
- convertToBaseCallback(WTF::bind(&PermissionStatus::permissionChanged,
- wrapWeakPersistent(this))));
-}
-
-void PermissionStatus::stopListening() {
- m_service.reset();
-}
-
String PermissionStatus::state() const {
switch (m_status) {
case MojoPermissionStatus::GRANTED:
@@ -111,6 +85,31 @@ String PermissionStatus::state() const {
return "denied";
}
+void PermissionStatus::startListening() {
+ DCHECK(!m_binding.is_bound());
+ mojom::blink::PermissionObserverPtr observer;
+ m_binding.Bind(mojo::MakeRequest(&observer));
+
+ mojom::blink::PermissionServicePtr service;
+ connectToPermissionService(getExecutionContext(),
+ mojo::MakeRequest(&service));
+ service->AddPermissionObserver(m_descriptor->Clone(),
+ getExecutionContext()->getSecurityOrigin(),
+ m_status, std::move(observer));
+}
+
+void PermissionStatus::stopListening() {
+ m_binding.Close();
+}
+
+void PermissionStatus::OnPermissionStatusChange(MojoPermissionStatus status) {
+ if (m_status == status)
+ return;
+
+ m_status = status;
+ dispatchEvent(Event::create(EventTypeNames::change));
+}
+
DEFINE_TRACE(PermissionStatus) {
EventTargetWithInlineData::trace(visitor);
SuspendableObject::trace(visitor);

Powered by Google App Engine
This is Rietveld 408576698