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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/permissions/PermissionStatus.h" 5 #include "modules/permissions/PermissionStatus.h"
6 6
7 #include "bindings/core/v8/ScriptPromiseResolver.h" 7 #include "bindings/core/v8/ScriptPromiseResolver.h"
8 #include "core/dom/Document.h" 8 #include "core/dom/Document.h"
9 #include "core/events/Event.h" 9 #include "core/events/Event.h"
10 #include "modules/EventTargetModulesNames.h" 10 #include "modules/EventTargetModulesNames.h"
(...skipping 21 matching lines...) Expand all
32 permissionStatus->startListening(); 32 permissionStatus->startListening();
33 return permissionStatus; 33 return permissionStatus;
34 } 34 }
35 35
36 PermissionStatus::PermissionStatus(ExecutionContext* executionContext, 36 PermissionStatus::PermissionStatus(ExecutionContext* executionContext,
37 MojoPermissionStatus status, 37 MojoPermissionStatus status,
38 MojoPermissionDescriptor descriptor) 38 MojoPermissionDescriptor descriptor)
39 : ActiveScriptWrappable(this), 39 : ActiveScriptWrappable(this),
40 SuspendableObject(executionContext), 40 SuspendableObject(executionContext),
41 m_status(status), 41 m_status(status),
42 m_descriptor(std::move(descriptor)) {} 42 m_descriptor(std::move(descriptor)),
43 m_binding(this) {
44 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.
45 }
43 46
44 PermissionStatus::~PermissionStatus() { 47 PermissionStatus::~PermissionStatus() {}
48
49 void PermissionStatus::dispose() {
45 stopListening(); 50 stopListening();
46 } 51 }
47 52
48 const AtomicString& PermissionStatus::interfaceName() const { 53 const AtomicString& PermissionStatus::interfaceName() const {
49 return EventTargetNames::PermissionStatus; 54 return EventTargetNames::PermissionStatus;
50 } 55 }
51 56
52 ExecutionContext* PermissionStatus::getExecutionContext() const { 57 ExecutionContext* PermissionStatus::getExecutionContext() const {
53 return SuspendableObject::getExecutionContext(); 58 return SuspendableObject::getExecutionContext();
54 } 59 }
55 60
56 void PermissionStatus::permissionChanged(MojoPermissionStatus status) {
57 if (m_status == status)
58 return;
59
60 m_status = status;
61 dispatchEvent(Event::create(EventTypeNames::change));
62
63 m_service->GetNextPermissionChange(
64 m_descriptor->Clone(), getExecutionContext()->getSecurityOrigin(),
65 m_status,
66 convertToBaseCallback(WTF::bind(&PermissionStatus::permissionChanged,
67 wrapWeakPersistent(this))));
68 }
69
70 bool PermissionStatus::hasPendingActivity() const { 61 bool PermissionStatus::hasPendingActivity() const {
71 return m_service; 62 return m_binding.is_bound();
72 } 63 }
73 64
74 void PermissionStatus::resume() { 65 void PermissionStatus::resume() {
75 startListening(); 66 startListening();
76 } 67 }
77 68
78 void PermissionStatus::suspend() { 69 void PermissionStatus::suspend() {
79 stopListening(); 70 stopListening();
80 } 71 }
81 72
82 void PermissionStatus::contextDestroyed() { 73 void PermissionStatus::contextDestroyed() {
83 stopListening(); 74 stopListening();
84 } 75 }
85 76
86 void PermissionStatus::startListening() {
87 DCHECK(!m_service);
88 connectToPermissionService(getExecutionContext(), mojo::GetProxy(&m_service));
89 m_service->GetNextPermissionChange(
90 m_descriptor->Clone(), getExecutionContext()->getSecurityOrigin(),
91 m_status,
92 convertToBaseCallback(WTF::bind(&PermissionStatus::permissionChanged,
93 wrapWeakPersistent(this))));
94 }
95
96 void PermissionStatus::stopListening() {
97 m_service.reset();
98 }
99
100 String PermissionStatus::state() const { 77 String PermissionStatus::state() const {
101 switch (m_status) { 78 switch (m_status) {
102 case MojoPermissionStatus::GRANTED: 79 case MojoPermissionStatus::GRANTED:
103 return "granted"; 80 return "granted";
104 case MojoPermissionStatus::DENIED: 81 case MojoPermissionStatus::DENIED:
105 return "denied"; 82 return "denied";
106 case MojoPermissionStatus::ASK: 83 case MojoPermissionStatus::ASK:
107 return "prompt"; 84 return "prompt";
108 } 85 }
109 86
110 ASSERT_NOT_REACHED(); 87 ASSERT_NOT_REACHED();
111 return "denied"; 88 return "denied";
112 } 89 }
113 90
91 void PermissionStatus::startListening() {
92 DCHECK(!m_binding.is_bound());
93 mojom::blink::PermissionObserverPtr observer;
94 m_binding.Bind(mojo::GetProxy(&observer));
95
96 mojom::blink::PermissionServicePtr service;
97 connectToPermissionService(getExecutionContext(), mojo::GetProxy(&service));
98 service->AddPermissionObserver(m_descriptor->Clone(),
99 getExecutionContext()->getSecurityOrigin(),
100 m_status, std::move(observer));
101 }
102
103 void PermissionStatus::stopListening() {
104 m_binding.Close();
105 }
106
107 void PermissionStatus::OnPermissionStatusChange(MojoPermissionStatus status) {
108 if (m_status != status) {
109 m_status = status;
110 dispatchEvent(Event::create(EventTypeNames::change));
111 }
112 }
113
114 DEFINE_TRACE(PermissionStatus) { 114 DEFINE_TRACE(PermissionStatus) {
115 EventTargetWithInlineData::trace(visitor); 115 EventTargetWithInlineData::trace(visitor);
116 SuspendableObject::trace(visitor); 116 SuspendableObject::trace(visitor);
117 } 117 }
118 118
119 } // namespace blink 119 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698