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

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

Issue 2573573002: Switch PermissionStatus events to an observer model. (Closed)
Patch Set: Rebased. Created 4 years 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 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);

Powered by Google App Engine
This is Rietveld 408576698