Chromium Code Reviews| 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 b7a35d9fbf858918d16ffaf125246d4d2cb2a893..0a59923754c1be5e7970a72149840c2d198bd196 100644 |
| --- a/third_party/WebKit/Source/modules/permissions/PermissionStatus.cpp |
| +++ b/third_party/WebKit/Source/modules/permissions/PermissionStatus.cpp |
| @@ -39,9 +39,12 @@ PermissionStatus::PermissionStatus(ExecutionContext* executionContext, |
| : ActiveScriptWrappable(this), |
| SuspendableObject(executionContext), |
| m_status(status), |
| - m_descriptor(std::move(descriptor)) {} |
| + m_descriptor(std::move(descriptor)), |
| + m_binding(this) {} |
| -PermissionStatus::~PermissionStatus() { |
| +PermissionStatus::~PermissionStatus() {} |
|
mlamouri (slow - plz ping)
2016/12/19 13:37:45
= default;
Reilly Grant (use Gerrit)
2016/12/19 22:23:59
Done.
|
| + |
| +void PermissionStatus::dispose() { |
| stopListening(); |
| } |
| @@ -53,22 +56,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() { |
| @@ -83,20 +72,6 @@ void PermissionStatus::contextDestroyed() { |
| stopListening(); |
| } |
| -void PermissionStatus::startListening() { |
| - DCHECK(!m_service); |
| - connectToPermissionService(getExecutionContext(), mojo::GetProxy(&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 +86,29 @@ String PermissionStatus::state() const { |
| return "denied"; |
| } |
| +void PermissionStatus::startListening() { |
| + DCHECK(!m_binding.is_bound()); |
| + mojom::blink::PermissionObserverPtr observer; |
| + m_binding.Bind(mojo::GetProxy(&observer)); |
| + |
| + mojom::blink::PermissionServicePtr service; |
| + connectToPermissionService(getExecutionContext(), mojo::GetProxy(&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) { |
|
mlamouri (slow - plz ping)
2016/12/19 13:37:45
You should ideally prefer early returns:
```
if (m
Reilly Grant (use Gerrit)
2016/12/19 22:23:59
Done.
|
| + m_status = status; |
| + dispatchEvent(Event::create(EventTypeNames::change)); |
| + } |
| +} |
| + |
| DEFINE_TRACE(PermissionStatus) { |
| EventTargetWithInlineData::trace(visitor); |
| SuspendableObject::trace(visitor); |