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); |