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..ae9200baae571259d570ea11e9a329ff41e7bc3d 100644 |
--- a/third_party/WebKit/Source/modules/permissions/PermissionStatus.cpp |
+++ b/third_party/WebKit/Source/modules/permissions/PermissionStatus.cpp |
@@ -39,9 +39,14 @@ PermissionStatus::PermissionStatus(ExecutionContext* executionContext, |
: ActiveScriptWrappable(this), |
SuspendableObject(executionContext), |
m_status(status), |
- m_descriptor(std::move(descriptor)) {} |
+ m_descriptor(std::move(descriptor)), |
+ m_binding(this) { |
+ ThreadState::current()->registerPreFinalizer(this); |
haraken
2016/12/14 02:00:33
We removed this method. Now the registration is no
Reilly Grant (use Gerrit)
2016/12/15 23:13:25
Done.
|
+} |
+ |
+PermissionStatus::~PermissionStatus() {} |
-PermissionStatus::~PermissionStatus() { |
+void PermissionStatus::dispose() { |
stopListening(); |
} |
@@ -53,22 +58,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 +74,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 +88,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) { |
+ m_status = status; |
+ dispatchEvent(Event::create(EventTypeNames::change)); |
+ } |
+} |
+ |
DEFINE_TRACE(PermissionStatus) { |
EventTargetWithInlineData::trace(visitor); |
SuspendableObject::trace(visitor); |