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

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

Issue 2471263003: [Presentation API] (4th)(1-UA blink side) Add WebPresentationConnection and WebPresentationConnecti… (Closed)
Patch Set: resolve code review comments from mlamouri Created 3 years, 10 months 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 std::unique_ptr<FileReaderLoader> m_loader; 146 std::unique_ptr<FileReaderLoader> m_loader;
147 }; 147 };
148 148
149 PresentationConnection::PresentationConnection(LocalFrame* frame, 149 PresentationConnection::PresentationConnection(LocalFrame* frame,
150 const String& id, 150 const String& id,
151 const KURL& url) 151 const KURL& url)
152 : ContextClient(frame), 152 : ContextClient(frame),
153 m_id(id), 153 m_id(id),
154 m_url(url), 154 m_url(url),
155 m_state(WebPresentationConnectionState::Connecting), 155 m_state(WebPresentationConnectionState::Connecting),
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::bindProxy(
164 std::unique_ptr<WebPresentationConnectionProxy> proxy) {
165 DCHECK(proxy);
166 // TODO(zhaobin): Restore to DCHECK(!m_proxy) when reconnect() is properly
167 // implemented.
168 if (!m_proxy)
169 m_proxy = std::move(proxy);
170 }
171
162 // static 172 // static
163 PresentationConnection* PresentationConnection::take( 173 PresentationConnection* PresentationConnection::take(
164 ScriptPromiseResolver* resolver, 174 ScriptPromiseResolver* resolver,
165 const WebPresentationSessionInfo& sessionInfo, 175 const WebPresentationSessionInfo& sessionInfo,
166 PresentationRequest* request) { 176 PresentationRequest* request) {
167 ASSERT(resolver); 177 ASSERT(resolver);
168 ASSERT(request); 178 ASSERT(request);
169 ASSERT(resolver->getExecutionContext()->isDocument()); 179 ASSERT(resolver->getExecutionContext()->isDocument());
170 180
171 Document* document = toDocument(resolver->getExecutionContext()); 181 Document* document = toDocument(resolver->getExecutionContext());
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 throwPresentationDisconnectedError(exceptionState); 308 throwPresentationDisconnectedError(exceptionState);
299 return false; 309 return false;
300 } 310 }
301 311
302 // The connection can send a message if there is a client available. 312 // The connection can send a message if there is a client available.
303 return !!presentationClient(getExecutionContext()); 313 return !!presentationClient(getExecutionContext());
304 } 314 }
305 315
306 void PresentationConnection::handleMessageQueue() { 316 void PresentationConnection::handleMessageQueue() {
307 WebPresentationClient* client = presentationClient(getExecutionContext()); 317 WebPresentationClient* client = presentationClient(getExecutionContext());
308 if (!client) 318 if (!client || !m_proxy)
309 return; 319 return;
310 320
311 while (!m_messages.isEmpty() && !m_blobLoader) { 321 while (!m_messages.isEmpty() && !m_blobLoader) {
312 Message* message = m_messages.first().get(); 322 Message* message = m_messages.first().get();
313 switch (message->type) { 323 switch (message->type) {
314 case MessageTypeText: 324 case MessageTypeText:
315 client->sendString(m_url, m_id, message->text); 325 client->sendString(m_url, m_id, message->text, m_proxy.get());
316 m_messages.removeFirst(); 326 m_messages.removeFirst();
317 break; 327 break;
318 case MessageTypeArrayBuffer: 328 case MessageTypeArrayBuffer:
319 client->sendArrayBuffer(m_url, m_id, static_cast<const uint8_t*>( 329 client->sendArrayBuffer(
320 message->arrayBuffer->data()), 330 m_url, m_id,
321 message->arrayBuffer->byteLength()); 331 static_cast<const uint8_t*>(message->arrayBuffer->data()),
332 message->arrayBuffer->byteLength(), m_proxy.get());
322 m_messages.removeFirst(); 333 m_messages.removeFirst();
323 break; 334 break;
324 case MessageTypeBlob: 335 case MessageTypeBlob:
325 ASSERT(!m_blobLoader); 336 ASSERT(!m_blobLoader);
326 m_blobLoader = new BlobLoader(message->blobDataHandle, this); 337 m_blobLoader = new BlobLoader(message->blobDataHandle, this);
327 break; 338 break;
328 } 339 }
329 } 340 }
330 } 341 }
331 342
(...skipping 13 matching lines...) Expand all
345 m_binaryType = BinaryTypeBlob; 356 m_binaryType = BinaryTypeBlob;
346 return; 357 return;
347 } 358 }
348 if (binaryType == "arraybuffer") { 359 if (binaryType == "arraybuffer") {
349 m_binaryType = BinaryTypeArrayBuffer; 360 m_binaryType = BinaryTypeArrayBuffer;
350 return; 361 return;
351 } 362 }
352 ASSERT_NOT_REACHED(); 363 ASSERT_NOT_REACHED();
353 } 364 }
354 365
355 void PresentationConnection::didReceiveTextMessage(const String& message) { 366 void PresentationConnection::didReceiveTextMessage(const WebString& message) {
356 if (m_state != WebPresentationConnectionState::Connected) 367 if (m_state != WebPresentationConnectionState::Connected)
357 return; 368 return;
358 369
359 dispatchEvent(MessageEvent::create(message)); 370 dispatchEvent(MessageEvent::create(message));
360 } 371 }
361 372
362 void PresentationConnection::didReceiveBinaryMessage(const uint8_t* data, 373 void PresentationConnection::didReceiveBinaryMessage(const uint8_t* data,
363 size_t length) { 374 size_t length) {
364 if (m_state != WebPresentationConnectionState::Connected) 375 if (m_state != WebPresentationConnectionState::Connected)
365 return; 376 return;
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 m_state = WebPresentationConnectionState::Closed; 460 m_state = WebPresentationConnectionState::Closed;
450 dispatchStateChangeEvent(PresentationConnectionCloseEvent::create( 461 dispatchStateChangeEvent(PresentationConnectionCloseEvent::create(
451 EventTypeNames::close, connectionCloseReasonToString(reason), message)); 462 EventTypeNames::close, connectionCloseReasonToString(reason), message));
452 } 463 }
453 464
454 void PresentationConnection::didFinishLoadingBlob(DOMArrayBuffer* buffer) { 465 void PresentationConnection::didFinishLoadingBlob(DOMArrayBuffer* buffer) {
455 ASSERT(!m_messages.isEmpty() && m_messages.first()->type == MessageTypeBlob); 466 ASSERT(!m_messages.isEmpty() && m_messages.first()->type == MessageTypeBlob);
456 ASSERT(buffer && buffer->buffer()); 467 ASSERT(buffer && buffer->buffer());
457 // Send the loaded blob immediately here and continue processing the queue. 468 // Send the loaded blob immediately here and continue processing the queue.
458 WebPresentationClient* client = presentationClient(getExecutionContext()); 469 WebPresentationClient* client = presentationClient(getExecutionContext());
459 if (client) 470 if (client) {
460 client->sendBlobData(m_url, m_id, 471 client->sendBlobData(m_url, m_id,
461 static_cast<const uint8_t*>(buffer->data()), 472 static_cast<const uint8_t*>(buffer->data()),
462 buffer->byteLength()); 473 buffer->byteLength(), m_proxy.get());
474 }
463 475
464 m_messages.removeFirst(); 476 m_messages.removeFirst();
465 m_blobLoader.clear(); 477 m_blobLoader.clear();
466 handleMessageQueue(); 478 handleMessageQueue();
467 } 479 }
468 480
469 void PresentationConnection::didFailLoadingBlob( 481 void PresentationConnection::didFailLoadingBlob(
470 FileError::ErrorCode errorCode) { 482 FileError::ErrorCode errorCode) {
471 ASSERT(!m_messages.isEmpty() && m_messages.first()->type == MessageTypeBlob); 483 ASSERT(!m_messages.isEmpty() && m_messages.first()->type == MessageTypeBlob);
472 // FIXME: generate error message? 484 // FIXME: generate error message?
(...skipping 21 matching lines...) Expand all
494 void PresentationConnection::tearDown() { 506 void PresentationConnection::tearDown() {
495 // Cancel current Blob loading if any. 507 // Cancel current Blob loading if any.
496 if (m_blobLoader) { 508 if (m_blobLoader) {
497 m_blobLoader->cancel(); 509 m_blobLoader->cancel();
498 m_blobLoader.clear(); 510 m_blobLoader.clear();
499 } 511 }
500 m_messages.clear(); 512 m_messages.clear();
501 } 513 }
502 514
503 } // namespace blink 515 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698