OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/bluetooth/BluetoothRemoteGATTCharacteristic.h" | 5 #include "modules/bluetooth/BluetoothRemoteGATTCharacteristic.h" |
6 | 6 |
7 #include "bindings/core/v8/CallbackPromiseAdapter.h" | 7 #include "bindings/core/v8/CallbackPromiseAdapter.h" |
8 #include "bindings/core/v8/ScriptPromise.h" | 8 #include "bindings/core/v8/ScriptPromise.h" |
9 #include "bindings/core/v8/ScriptPromiseResolver.h" | 9 #include "bindings/core/v8/ScriptPromiseResolver.h" |
10 #include "core/dom/DOMDataView.h" | 10 #include "core/dom/DOMDataView.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 m_properties = BluetoothCharacteristicProperties::create(m_webCharacteristic
->characteristicProperties); | 39 m_properties = BluetoothCharacteristicProperties::create(m_webCharacteristic
->characteristicProperties); |
40 // See example in Source/platform/heap/ThreadState.h | 40 // See example in Source/platform/heap/ThreadState.h |
41 ThreadState::current()->registerPreFinalizer(this); | 41 ThreadState::current()->registerPreFinalizer(this); |
42 } | 42 } |
43 | 43 |
44 BluetoothRemoteGATTCharacteristic* BluetoothRemoteGATTCharacteristic::take(Scrip
tPromiseResolver* resolver, PassOwnPtr<WebBluetoothRemoteGATTCharacteristicInit>
webCharacteristic) | 44 BluetoothRemoteGATTCharacteristic* BluetoothRemoteGATTCharacteristic::take(Scrip
tPromiseResolver* resolver, PassOwnPtr<WebBluetoothRemoteGATTCharacteristicInit>
webCharacteristic) |
45 { | 45 { |
46 if (!webCharacteristic) { | 46 if (!webCharacteristic) { |
47 return nullptr; | 47 return nullptr; |
48 } | 48 } |
49 BluetoothRemoteGATTCharacteristic* characteristic = new BluetoothRemoteGATTC
haracteristic(resolver->executionContext(), webCharacteristic); | 49 BluetoothRemoteGATTCharacteristic* characteristic = new BluetoothRemoteGATTC
haracteristic(resolver->getExecutionContext(), webCharacteristic); |
50 // See note in ActiveDOMObject about suspendIfNeeded. | 50 // See note in ActiveDOMObject about suspendIfNeeded. |
51 characteristic->suspendIfNeeded(); | 51 characteristic->suspendIfNeeded(); |
52 return characteristic; | 52 return characteristic; |
53 } | 53 } |
54 | 54 |
55 void BluetoothRemoteGATTCharacteristic::setValue( | 55 void BluetoothRemoteGATTCharacteristic::setValue( |
56 const PassRefPtr<DOMDataView>& domDataView) | 56 const PassRefPtr<DOMDataView>& domDataView) |
57 { | 57 { |
58 m_value = domDataView; | 58 m_value = domDataView; |
59 } | 59 } |
(...skipping 13 matching lines...) Expand all Loading... |
73 | 73 |
74 void BluetoothRemoteGATTCharacteristic::dispose() | 74 void BluetoothRemoteGATTCharacteristic::dispose() |
75 { | 75 { |
76 notifyCharacteristicObjectRemoved(); | 76 notifyCharacteristicObjectRemoved(); |
77 } | 77 } |
78 | 78 |
79 void BluetoothRemoteGATTCharacteristic::notifyCharacteristicObjectRemoved() | 79 void BluetoothRemoteGATTCharacteristic::notifyCharacteristicObjectRemoved() |
80 { | 80 { |
81 if (!m_stopped) { | 81 if (!m_stopped) { |
82 m_stopped = true; | 82 m_stopped = true; |
83 WebBluetooth* webbluetooth = BluetoothSupplement::fromExecutionContext(A
ctiveDOMObject::executionContext()); | 83 WebBluetooth* webbluetooth = BluetoothSupplement::fromExecutionContext(A
ctiveDOMObject::getExecutionContext()); |
84 webbluetooth->characteristicObjectRemoved(m_webCharacteristic->character
isticInstanceID, this); | 84 webbluetooth->characteristicObjectRemoved(m_webCharacteristic->character
isticInstanceID, this); |
85 } | 85 } |
86 } | 86 } |
87 | 87 |
88 const WTF::AtomicString& BluetoothRemoteGATTCharacteristic::interfaceName() cons
t | 88 const WTF::AtomicString& BluetoothRemoteGATTCharacteristic::interfaceName() cons
t |
89 { | 89 { |
90 return EventTargetNames::BluetoothRemoteGATTCharacteristic; | 90 return EventTargetNames::BluetoothRemoteGATTCharacteristic; |
91 } | 91 } |
92 | 92 |
93 ExecutionContext* BluetoothRemoteGATTCharacteristic::executionContext() const | 93 ExecutionContext* BluetoothRemoteGATTCharacteristic::getExecutionContext() const |
94 { | 94 { |
95 return ActiveDOMObject::executionContext(); | 95 return ActiveDOMObject::getExecutionContext(); |
96 } | 96 } |
97 | 97 |
98 bool BluetoothRemoteGATTCharacteristic::addEventListenerInternal(const AtomicStr
ing& eventType, PassRefPtrWillBeRawPtr<EventListener> listener, const EventListe
nerOptions& options) | 98 bool BluetoothRemoteGATTCharacteristic::addEventListenerInternal(const AtomicStr
ing& eventType, PassRefPtrWillBeRawPtr<EventListener> listener, const EventListe
nerOptions& options) |
99 { | 99 { |
100 // We will also need to unregister a characteristic once all the event | 100 // We will also need to unregister a characteristic once all the event |
101 // listeners have been removed. See http://crbug.com/541390 | 101 // listeners have been removed. See http://crbug.com/541390 |
102 if (eventType == EventTypeNames::characteristicvaluechanged) { | 102 if (eventType == EventTypeNames::characteristicvaluechanged) { |
103 WebBluetooth* webbluetooth = BluetoothSupplement::fromExecutionContext(e
xecutionContext()); | 103 WebBluetooth* webbluetooth = BluetoothSupplement::fromExecutionContext(g
etExecutionContext()); |
104 webbluetooth->registerCharacteristicObject(m_webCharacteristic->characte
risticInstanceID, this); | 104 webbluetooth->registerCharacteristicObject(m_webCharacteristic->characte
risticInstanceID, this); |
105 } | 105 } |
106 return EventTarget::addEventListenerInternal(eventType, listener, options); | 106 return EventTarget::addEventListenerInternal(eventType, listener, options); |
107 } | 107 } |
108 | 108 |
109 class ReadValueCallback : public WebBluetoothReadValueCallbacks { | 109 class ReadValueCallback : public WebBluetoothReadValueCallbacks { |
110 public: | 110 public: |
111 ReadValueCallback(BluetoothRemoteGATTCharacteristic* characteristic, ScriptP
romiseResolver* resolver) : m_webCharacteristic(characteristic), m_resolver(reso
lver) {} | 111 ReadValueCallback(BluetoothRemoteGATTCharacteristic* characteristic, ScriptP
romiseResolver* resolver) : m_webCharacteristic(characteristic), m_resolver(reso
lver) {} |
112 | 112 |
113 void onSuccess(const WebVector<uint8_t>& value) override | 113 void onSuccess(const WebVector<uint8_t>& value) override |
114 { | 114 { |
115 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 115 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
116 return; | 116 return; |
117 | 117 |
118 RefPtr<DOMDataView> domDataView = ConvertWebVectorToDataView(value); | 118 RefPtr<DOMDataView> domDataView = ConvertWebVectorToDataView(value); |
119 if (m_webCharacteristic) { | 119 if (m_webCharacteristic) { |
120 m_webCharacteristic->setValue(domDataView); | 120 m_webCharacteristic->setValue(domDataView); |
121 } | 121 } |
122 m_resolver->resolve(domDataView); | 122 m_resolver->resolve(domDataView); |
123 } | 123 } |
124 | 124 |
125 void onError(const WebBluetoothError& e) override | 125 void onError(const WebBluetoothError& e) override |
126 { | 126 { |
127 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 127 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
128 return; | 128 return; |
129 m_resolver->reject(BluetoothError::take(m_resolver, e)); | 129 m_resolver->reject(BluetoothError::take(m_resolver, e)); |
130 } | 130 } |
131 | 131 |
132 private: | 132 private: |
133 WeakPersistent<BluetoothRemoteGATTCharacteristic> m_webCharacteristic; | 133 WeakPersistent<BluetoothRemoteGATTCharacteristic> m_webCharacteristic; |
134 Persistent<ScriptPromiseResolver> m_resolver; | 134 Persistent<ScriptPromiseResolver> m_resolver; |
135 }; | 135 }; |
136 | 136 |
137 ScriptPromise BluetoothRemoteGATTCharacteristic::readValue(ScriptState* scriptSt
ate) | 137 ScriptPromise BluetoothRemoteGATTCharacteristic::readValue(ScriptState* scriptSt
ate) |
138 { | 138 { |
139 WebBluetooth* webbluetooth = BluetoothSupplement::fromScriptState(scriptStat
e); | 139 WebBluetooth* webbluetooth = BluetoothSupplement::fromScriptState(scriptStat
e); |
140 | 140 |
141 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; | 141 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState)
; |
142 ScriptPromise promise = resolver->promise(); | 142 ScriptPromise promise = resolver->promise(); |
143 webbluetooth->readValue(m_webCharacteristic->characteristicInstanceID, new R
eadValueCallback(this, resolver)); | 143 webbluetooth->readValue(m_webCharacteristic->characteristicInstanceID, new R
eadValueCallback(this, resolver)); |
144 | 144 |
145 return promise; | 145 return promise; |
146 } | 146 } |
147 | 147 |
148 class WriteValueCallback : public WebBluetoothWriteValueCallbacks { | 148 class WriteValueCallback : public WebBluetoothWriteValueCallbacks { |
149 public: | 149 public: |
150 WriteValueCallback(BluetoothRemoteGATTCharacteristic* characteristic, Script
PromiseResolver* resolver) : m_webCharacteristic(characteristic), m_resolver(res
olver) {} | 150 WriteValueCallback(BluetoothRemoteGATTCharacteristic* characteristic, Script
PromiseResolver* resolver) : m_webCharacteristic(characteristic), m_resolver(res
olver) {} |
151 | 151 |
152 void onSuccess(const WebVector<uint8_t>& value) override | 152 void onSuccess(const WebVector<uint8_t>& value) override |
153 { | 153 { |
154 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 154 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
155 return; | 155 return; |
156 | 156 |
157 if (m_webCharacteristic) { | 157 if (m_webCharacteristic) { |
158 m_webCharacteristic->setValue(ConvertWebVectorToDataView(value)); | 158 m_webCharacteristic->setValue(ConvertWebVectorToDataView(value)); |
159 } | 159 } |
160 m_resolver->resolve(); | 160 m_resolver->resolve(); |
161 } | 161 } |
162 | 162 |
163 void onError(const WebBluetoothError& e) override | 163 void onError(const WebBluetoothError& e) override |
164 { | 164 { |
165 if (!m_resolver->executionContext() || m_resolver->executionContext()->a
ctiveDOMObjectsAreStopped()) | 165 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex
t()->activeDOMObjectsAreStopped()) |
166 return; | 166 return; |
167 m_resolver->reject(BluetoothError::take(m_resolver, e)); | 167 m_resolver->reject(BluetoothError::take(m_resolver, e)); |
168 } | 168 } |
169 | 169 |
170 private: | 170 private: |
171 WeakPersistent<BluetoothRemoteGATTCharacteristic> m_webCharacteristic; | 171 WeakPersistent<BluetoothRemoteGATTCharacteristic> m_webCharacteristic; |
172 Persistent<ScriptPromiseResolver> m_resolver; | 172 Persistent<ScriptPromiseResolver> m_resolver; |
173 }; | 173 }; |
174 | 174 |
175 ScriptPromise BluetoothRemoteGATTCharacteristic::writeValue(ScriptState* scriptS
tate, const DOMArrayPiece& value) | 175 ScriptPromise BluetoothRemoteGATTCharacteristic::writeValue(ScriptState* scriptS
tate, const DOMArrayPiece& value) |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 } | 214 } |
215 | 215 |
216 DEFINE_TRACE(BluetoothRemoteGATTCharacteristic) | 216 DEFINE_TRACE(BluetoothRemoteGATTCharacteristic) |
217 { | 217 { |
218 RefCountedGarbageCollectedEventTargetWithInlineData<BluetoothRemoteGATTChara
cteristic>::trace(visitor); | 218 RefCountedGarbageCollectedEventTargetWithInlineData<BluetoothRemoteGATTChara
cteristic>::trace(visitor); |
219 ActiveDOMObject::trace(visitor); | 219 ActiveDOMObject::trace(visitor); |
220 visitor->trace(m_properties); | 220 visitor->trace(m_properties); |
221 } | 221 } |
222 | 222 |
223 } // namespace blink | 223 } // namespace blink |
OLD | NEW |