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

Side by Side Diff: third_party/WebKit/Source/modules/presentation/PresentationConnection.cpp

Issue 2379703002: [Presentation API] (alternative) 1-UA: send message between controller and receiver page (Closed)
Patch Set: merge with master Created 4 years, 1 month 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/presentation/PresentationConnection.h" 5 #include "modules/presentation/PresentationConnection.h"
6 6
7 #include "bindings/core/v8/ScriptPromiseResolver.h" 7 #include "bindings/core/v8/ScriptPromiseResolver.h"
8 #include "core/dom/DOMArrayBuffer.h" 8 #include "core/dom/DOMArrayBuffer.h"
9 #include "core/dom/DOMArrayBufferView.h" 9 #include "core/dom/DOMArrayBufferView.h"
10 #include "core/dom/Document.h" 10 #include "core/dom/Document.h"
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 }; 146 };
147 147
148 PresentationConnection::PresentationConnection(LocalFrame* frame, 148 PresentationConnection::PresentationConnection(LocalFrame* frame,
149 const String& id, 149 const String& id,
150 const KURL& url) 150 const KURL& url)
151 : DOMWindowProperty(frame), 151 : DOMWindowProperty(frame),
152 m_id(id), 152 m_id(id),
153 m_url(url), 153 m_url(url),
154 // TODO(zhaobin): change initial state to Connecting. (crbug/659423) 154 // TODO(zhaobin): change initial state to Connecting. (crbug/659423)
155 m_state(WebPresentationConnectionState::Connected), 155 m_state(WebPresentationConnectionState::Connected),
156 m_binaryType(BinaryTypeBlob) {} 156 m_binaryType(BinaryTypeBlob),
157 m_proxy(nullptr) {}
157 158
158 PresentationConnection::~PresentationConnection() { 159 PresentationConnection::~PresentationConnection() {
159 ASSERT(!m_blobLoader); 160 ASSERT(!m_blobLoader);
160 } 161 }
161 162
163 void PresentationConnection::SetPresentationConnectionProxy(
164 std::unique_ptr<WebPresentationConnectionProxy> proxy) {
165 if (!proxy)
166 return;
167
168 m_proxy = std::move(proxy);
169 m_proxy->SetSourceConnection(this);
170 }
171
162 // static 172 // static
163 PresentationConnection* PresentationConnection::take( 173 PresentationConnection* PresentationConnection::take(
164 ScriptPromiseResolver* resolver, 174 ScriptPromiseResolver* resolver,
165 std::unique_ptr<WebPresentationConnectionClient> client, 175 std::unique_ptr<WebPresentationConnectionClient> client,
166 PresentationRequest* request) { 176 PresentationRequest* request) {
167 ASSERT(resolver); 177 ASSERT(resolver);
168 ASSERT(client); 178 ASSERT(client);
169 ASSERT(request); 179 ASSERT(request);
170 ASSERT(resolver->getExecutionContext()->isDocument()); 180 ASSERT(resolver->getExecutionContext()->isDocument());
171 181
(...skipping 12 matching lines...) Expand all
184 // static 194 // static
185 PresentationConnection* PresentationConnection::take( 195 PresentationConnection* PresentationConnection::take(
186 PresentationController* controller, 196 PresentationController* controller,
187 std::unique_ptr<WebPresentationConnectionClient> client, 197 std::unique_ptr<WebPresentationConnectionClient> client,
188 PresentationRequest* request) { 198 PresentationRequest* request) {
189 ASSERT(controller); 199 ASSERT(controller);
190 ASSERT(request); 200 ASSERT(request);
191 201
192 PresentationConnection* connection = new PresentationConnection( 202 PresentationConnection* connection = new PresentationConnection(
193 controller->frame(), client->getId(), client->getUrl()); 203 controller->frame(), client->getId(), client->getUrl());
204 connection->SetPresentationConnectionProxy(client->takeProxy());
205
194 controller->registerConnection(connection); 206 controller->registerConnection(connection);
195 request->dispatchEvent(PresentationConnectionAvailableEvent::create( 207 request->dispatchEvent(PresentationConnectionAvailableEvent::create(
196 EventTypeNames::connectionavailable, connection)); 208 EventTypeNames::connectionavailable, connection));
197 209
198 return connection; 210 return connection;
199 } 211 }
200 212
201 // static 213 // static
202 PresentationConnection* PresentationConnection::take( 214 PresentationConnection* PresentationConnection::take(
203 PresentationReceiver* receiver, 215 PresentationReceiver* receiver,
204 std::unique_ptr<WebPresentationConnectionClient> client) { 216 std::unique_ptr<WebPresentationConnectionClient> client) {
205 DCHECK(receiver); 217 DCHECK(receiver);
206 DCHECK(client); 218 DCHECK(client);
207 219
208 PresentationConnection* connection = new PresentationConnection( 220 PresentationConnection* connection = new PresentationConnection(
209 receiver->frame(), client->getId(), client->getUrl()); 221 receiver->frame(), client->getId(), client->getUrl());
222 connection->SetPresentationConnectionProxy(client->takeProxy());
223
210 receiver->registerConnection(connection); 224 receiver->registerConnection(connection);
211 225
212 return connection; 226 return connection;
213 } 227 }
214 228
215 const AtomicString& PresentationConnection::interfaceName() const { 229 const AtomicString& PresentationConnection::interfaceName() const {
216 return EventTargetNames::PresentationConnection; 230 return EventTargetNames::PresentationConnection;
217 } 231 }
218 232
219 ExecutionContext* PresentationConnection::getExecutionContext() const { 233 ExecutionContext* PresentationConnection::getExecutionContext() const {
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 315
302 void PresentationConnection::handleMessageQueue() { 316 void PresentationConnection::handleMessageQueue() {
303 WebPresentationClient* client = presentationClient(getExecutionContext()); 317 WebPresentationClient* client = presentationClient(getExecutionContext());
304 if (!client) 318 if (!client)
305 return; 319 return;
306 320
307 while (!m_messages.isEmpty() && !m_blobLoader) { 321 while (!m_messages.isEmpty() && !m_blobLoader) {
308 Message* message = m_messages.first().get(); 322 Message* message = m_messages.first().get();
309 switch (message->type) { 323 switch (message->type) {
310 case MessageTypeText: 324 case MessageTypeText:
311 client->sendString(m_url, m_id, message->text); 325 if (m_proxy)
326 m_proxy->SendString(message->text);
327 else
328 client->sendString(m_url, m_id, message->text);
312 m_messages.removeFirst(); 329 m_messages.removeFirst();
313 break; 330 break;
314 case MessageTypeArrayBuffer: 331 case MessageTypeArrayBuffer:
315 client->sendArrayBuffer(m_url, m_id, static_cast<const uint8_t*>( 332 if (m_proxy) {
316 message->arrayBuffer->data()), 333 m_proxy->SendArrayBuffer(
317 message->arrayBuffer->byteLength()); 334 static_cast<const uint8_t*>(message->arrayBuffer->data()),
335 message->arrayBuffer->byteLength());
336 } else {
337 client->sendArrayBuffer(
338 m_url, m_id,
339 static_cast<const uint8_t*>(message->arrayBuffer->data()),
340 message->arrayBuffer->byteLength());
341 }
318 m_messages.removeFirst(); 342 m_messages.removeFirst();
319 break; 343 break;
320 case MessageTypeBlob: 344 case MessageTypeBlob:
321 ASSERT(!m_blobLoader); 345 ASSERT(!m_blobLoader);
322 m_blobLoader = new BlobLoader(message->blobDataHandle, this); 346 m_blobLoader = new BlobLoader(message->blobDataHandle, this);
323 break; 347 break;
324 } 348 }
325 } 349 }
326 } 350 }
327 351
(...skipping 13 matching lines...) Expand all
341 m_binaryType = BinaryTypeBlob; 365 m_binaryType = BinaryTypeBlob;
342 return; 366 return;
343 } 367 }
344 if (binaryType == "arraybuffer") { 368 if (binaryType == "arraybuffer") {
345 m_binaryType = BinaryTypeArrayBuffer; 369 m_binaryType = BinaryTypeArrayBuffer;
346 return; 370 return;
347 } 371 }
348 ASSERT_NOT_REACHED(); 372 ASSERT_NOT_REACHED();
349 } 373 }
350 374
351 void PresentationConnection::didReceiveTextMessage(const String& message) { 375 void PresentationConnection::didReceiveTextMessage(const WebString& message) {
352 if (m_state != WebPresentationConnectionState::Connected) 376 if (m_state != WebPresentationConnectionState::Connected)
353 return; 377 return;
354 378
355 dispatchEvent(MessageEvent::create(message)); 379 dispatchEvent(MessageEvent::create(message));
356 } 380 }
357 381
358 void PresentationConnection::didReceiveBinaryMessage(const uint8_t* data, 382 void PresentationConnection::didReceiveBinaryMessage(const uint8_t* data,
359 size_t length) { 383 size_t length) {
360 if (m_state != WebPresentationConnectionState::Connected) 384 if (m_state != WebPresentationConnectionState::Connected)
361 return; 385 return;
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
468 void PresentationConnection::tearDown() { 492 void PresentationConnection::tearDown() {
469 // Cancel current Blob loading if any. 493 // Cancel current Blob loading if any.
470 if (m_blobLoader) { 494 if (m_blobLoader) {
471 m_blobLoader->cancel(); 495 m_blobLoader->cancel();
472 m_blobLoader.clear(); 496 m_blobLoader.clear();
473 } 497 }
474 m_messages.clear(); 498 m_messages.clear();
475 } 499 }
476 500
477 } // namespace blink 501 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698