| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 : m_state(Active) | 71 : m_state(Active) |
| 72 , m_target(target) | 72 , m_target(target) |
| 73 , m_resumeTimer(this, &EventQueue::resumeTimerFired) { } | 73 , m_resumeTimer(this, &EventQueue::resumeTimerFired) { } |
| 74 | 74 |
| 75 DOMWebSocket::EventQueue::~EventQueue() { stop(); } | 75 DOMWebSocket::EventQueue::~EventQueue() { stop(); } |
| 76 | 76 |
| 77 void DOMWebSocket::EventQueue::dispatch(Event* event) | 77 void DOMWebSocket::EventQueue::dispatch(Event* event) |
| 78 { | 78 { |
| 79 switch (m_state) { | 79 switch (m_state) { |
| 80 case Active: | 80 case Active: |
| 81 ASSERT(m_events.isEmpty()); | 81 DCHECK(m_events.isEmpty()); |
| 82 ASSERT(m_target->getExecutionContext()); | 82 DCHECK(m_target->getExecutionContext()); |
| 83 m_target->dispatchEvent(event); | 83 m_target->dispatchEvent(event); |
| 84 break; | 84 break; |
| 85 case Suspended: | 85 case Suspended: |
| 86 m_events.append(event); | 86 m_events.append(event); |
| 87 break; | 87 break; |
| 88 case Stopped: | 88 case Stopped: |
| 89 ASSERT(m_events.isEmpty()); | 89 DCHECK(m_events.isEmpty()); |
| 90 // Do nothing. | 90 // Do nothing. |
| 91 break; | 91 break; |
| 92 } | 92 } |
| 93 } | 93 } |
| 94 | 94 |
| 95 bool DOMWebSocket::EventQueue::isEmpty() const | 95 bool DOMWebSocket::EventQueue::isEmpty() const |
| 96 { | 96 { |
| 97 return m_events.isEmpty(); | 97 return m_events.isEmpty(); |
| 98 } | 98 } |
| 99 | 99 |
| (...skipping 27 matching lines...) Expand all Loading... |
| 127 void DOMWebSocket::EventQueue::dispatchQueuedEvents() | 127 void DOMWebSocket::EventQueue::dispatchQueuedEvents() |
| 128 { | 128 { |
| 129 if (m_state != Active) | 129 if (m_state != Active) |
| 130 return; | 130 return; |
| 131 | 131 |
| 132 HeapDeque<Member<Event>> events; | 132 HeapDeque<Member<Event>> events; |
| 133 events.swap(m_events); | 133 events.swap(m_events); |
| 134 while (!events.isEmpty()) { | 134 while (!events.isEmpty()) { |
| 135 if (m_state == Stopped || m_state == Suspended) | 135 if (m_state == Stopped || m_state == Suspended) |
| 136 break; | 136 break; |
| 137 ASSERT(m_state == Active); | 137 DCHECK_EQ(m_state, Active); |
| 138 ASSERT(m_target->getExecutionContext()); | 138 DCHECK(m_target->getExecutionContext()); |
| 139 m_target->dispatchEvent(events.takeFirst()); | 139 m_target->dispatchEvent(events.takeFirst()); |
| 140 // |this| can be stopped here. | 140 // |this| can be stopped here. |
| 141 } | 141 } |
| 142 if (m_state == Suspended) { | 142 if (m_state == Suspended) { |
| 143 while (!m_events.isEmpty()) | 143 while (!m_events.isEmpty()) |
| 144 events.append(m_events.takeFirst()); | 144 events.append(m_events.takeFirst()); |
| 145 events.swap(m_events); | 145 events.swap(m_events); |
| 146 } | 146 } |
| 147 } | 147 } |
| 148 | 148 |
| 149 void DOMWebSocket::EventQueue::resumeTimerFired(TimerBase*) | 149 void DOMWebSocket::EventQueue::resumeTimerFired(TimerBase*) |
| 150 { | 150 { |
| 151 ASSERT(m_state == Suspended); | 151 DCHECK_EQ(m_state, Suspended); |
| 152 m_state = Active; | 152 m_state = Active; |
| 153 dispatchQueuedEvents(); | 153 dispatchQueuedEvents(); |
| 154 } | 154 } |
| 155 | 155 |
| 156 DEFINE_TRACE(DOMWebSocket::EventQueue) | 156 DEFINE_TRACE(DOMWebSocket::EventQueue) |
| 157 { | 157 { |
| 158 visitor->trace(m_target); | 158 visitor->trace(m_target); |
| 159 visitor->trace(m_events); | 159 visitor->trace(m_events); |
| 160 } | 160 } |
| 161 | 161 |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 231 , m_binaryTypeChangesAfterOpen(0) | 231 , m_binaryTypeChangesAfterOpen(0) |
| 232 , m_subprotocol("") | 232 , m_subprotocol("") |
| 233 , m_extensions("") | 233 , m_extensions("") |
| 234 , m_eventQueue(EventQueue::create(this)) | 234 , m_eventQueue(EventQueue::create(this)) |
| 235 , m_bufferedAmountConsumeTimer(this, &DOMWebSocket::reflectBufferedAmountCon
sumption) | 235 , m_bufferedAmountConsumeTimer(this, &DOMWebSocket::reflectBufferedAmountCon
sumption) |
| 236 { | 236 { |
| 237 } | 237 } |
| 238 | 238 |
| 239 DOMWebSocket::~DOMWebSocket() | 239 DOMWebSocket::~DOMWebSocket() |
| 240 { | 240 { |
| 241 ASSERT(!m_channel); | 241 DCHECK(!m_channel); |
| 242 } | 242 } |
| 243 | 243 |
| 244 void DOMWebSocket::logError(const String& message) | 244 void DOMWebSocket::logError(const String& message) |
| 245 { | 245 { |
| 246 if (getExecutionContext()) | 246 if (getExecutionContext()) |
| 247 getExecutionContext()->addConsoleMessage(ConsoleMessage::create(JSMessag
eSource, ErrorMessageLevel, message)); | 247 getExecutionContext()->addConsoleMessage(ConsoleMessage::create(JSMessag
eSource, ErrorMessageLevel, message)); |
| 248 } | 248 } |
| 249 | 249 |
| 250 DOMWebSocket* DOMWebSocket::create(ExecutionContext* context, const String& url,
ExceptionState& exceptionState) | 250 DOMWebSocket* DOMWebSocket::create(ExecutionContext* context, const String& url,
ExceptionState& exceptionState) |
| 251 { | 251 { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 264 webSocket->suspendIfNeeded(); | 264 webSocket->suspendIfNeeded(); |
| 265 | 265 |
| 266 if (protocols.isNull()) { | 266 if (protocols.isNull()) { |
| 267 Vector<String> protocolsVector; | 267 Vector<String> protocolsVector; |
| 268 webSocket->connect(url, protocolsVector, exceptionState); | 268 webSocket->connect(url, protocolsVector, exceptionState); |
| 269 } else if (protocols.isString()) { | 269 } else if (protocols.isString()) { |
| 270 Vector<String> protocolsVector; | 270 Vector<String> protocolsVector; |
| 271 protocolsVector.append(protocols.getAsString()); | 271 protocolsVector.append(protocols.getAsString()); |
| 272 webSocket->connect(url, protocolsVector, exceptionState); | 272 webSocket->connect(url, protocolsVector, exceptionState); |
| 273 } else { | 273 } else { |
| 274 ASSERT(protocols.isStringSequence()); | 274 DCHECK(protocols.isStringSequence()); |
| 275 webSocket->connect(url, protocols.getAsStringSequence(), exceptionState)
; | 275 webSocket->connect(url, protocols.getAsStringSequence(), exceptionState)
; |
| 276 } | 276 } |
| 277 | 277 |
| 278 if (exceptionState.hadException()) | 278 if (exceptionState.hadException()) |
| 279 return nullptr; | 279 return nullptr; |
| 280 | 280 |
| 281 return webSocket; | 281 return webSocket; |
| 282 } | 282 } |
| 283 | 283 |
| 284 void DOMWebSocket::connect(const String& url, const Vector<String>& protocols, E
xceptionState& exceptionState) | 284 void DOMWebSocket::connect(const String& url, const Vector<String>& protocols, E
xceptionState& exceptionState) |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 367 | 367 |
| 368 void DOMWebSocket::updateBufferedAmountAfterClose(uint64_t payloadSize) | 368 void DOMWebSocket::updateBufferedAmountAfterClose(uint64_t payloadSize) |
| 369 { | 369 { |
| 370 m_bufferedAmountAfterClose += payloadSize; | 370 m_bufferedAmountAfterClose += payloadSize; |
| 371 | 371 |
| 372 logError("WebSocket is already in CLOSING or CLOSED state."); | 372 logError("WebSocket is already in CLOSING or CLOSED state."); |
| 373 } | 373 } |
| 374 | 374 |
| 375 void DOMWebSocket::reflectBufferedAmountConsumption(TimerBase*) | 375 void DOMWebSocket::reflectBufferedAmountConsumption(TimerBase*) |
| 376 { | 376 { |
| 377 ASSERT(m_bufferedAmount >= m_consumedBufferedAmount); | 377 DCHECK_GE(m_bufferedAmount, m_consumedBufferedAmount); |
| 378 // Cast to unsigned long long is required since clang doesn't accept | 378 // Cast to unsigned long long is required since clang doesn't accept |
| 379 // combination of %llu and uint64_t (known as unsigned long). | 379 // combination of %llu and uint64_t (known as unsigned long). |
| 380 NETWORK_DVLOG(1) << "WebSocket " << this << " reflectBufferedAmountConsumpti
on() " << m_bufferedAmount << " => " << (m_bufferedAmount - m_consumedBufferedAm
ount); | 380 NETWORK_DVLOG(1) << "WebSocket " << this << " reflectBufferedAmountConsumpti
on() " << m_bufferedAmount << " => " << (m_bufferedAmount - m_consumedBufferedAm
ount); |
| 381 | 381 |
| 382 m_bufferedAmount -= m_consumedBufferedAmount; | 382 m_bufferedAmount -= m_consumedBufferedAmount; |
| 383 m_consumedBufferedAmount = 0; | 383 m_consumedBufferedAmount = 0; |
| 384 } | 384 } |
| 385 | 385 |
| 386 void DOMWebSocket::releaseChannel() | 386 void DOMWebSocket::releaseChannel() |
| 387 { | 387 { |
| 388 ASSERT(m_channel); | 388 DCHECK(m_channel); |
| 389 m_channel->disconnect(); | 389 m_channel->disconnect(); |
| 390 m_channel = nullptr; | 390 m_channel = nullptr; |
| 391 } | 391 } |
| 392 | 392 |
| 393 void DOMWebSocket::logBinaryTypeChangesAfterOpen() | 393 void DOMWebSocket::logBinaryTypeChangesAfterOpen() |
| 394 { | 394 { |
| 395 DEFINE_THREAD_SAFE_STATIC_LOCAL(CustomCountHistogram, binaryTypeChangesHisto
gram, new CustomCountHistogram("WebCore.WebSocket.BinaryTypeChangesAfterOpen", 1
, 1024, 10)); | 395 DEFINE_THREAD_SAFE_STATIC_LOCAL(CustomCountHistogram, binaryTypeChangesHisto
gram, new CustomCountHistogram("WebCore.WebSocket.BinaryTypeChangesAfterOpen", 1
, 1024, 10)); |
| 396 DVLOG(3) << "WebSocket " << static_cast<void*>(this) << " logBinaryTypeChang
esAfterOpen() logging " << m_binaryTypeChangesAfterOpen; | 396 DVLOG(3) << "WebSocket " << static_cast<void*>(this) << " logBinaryTypeChang
esAfterOpen() logging " << m_binaryTypeChangesAfterOpen; |
| 397 binaryTypeChangesHistogram.count(m_binaryTypeChangesAfterOpen); | 397 binaryTypeChangesHistogram.count(m_binaryTypeChangesAfterOpen); |
| 398 } | 398 } |
| 399 | 399 |
| 400 void DOMWebSocket::send(const String& message, ExceptionState& exceptionState) | 400 void DOMWebSocket::send(const String& message, ExceptionState& exceptionState) |
| 401 { | 401 { |
| 402 CString encodedMessage = message.utf8(); | 402 CString encodedMessage = message.utf8(); |
| 403 | 403 |
| 404 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending String " << mes
sage; | 404 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending String " << mes
sage; |
| 405 if (m_state == kConnecting) { | 405 if (m_state == kConnecting) { |
| 406 setInvalidStateErrorForSendMethod(exceptionState); | 406 setInvalidStateErrorForSendMethod(exceptionState); |
| 407 return; | 407 return; |
| 408 } | 408 } |
| 409 // No exception is raised if the connection was once established but has sub
sequently been closed. | 409 // No exception is raised if the connection was once established but has sub
sequently been closed. |
| 410 if (m_state == kClosing || m_state == kClosed) { | 410 if (m_state == kClosing || m_state == kClosed) { |
| 411 updateBufferedAmountAfterClose(encodedMessage.length()); | 411 updateBufferedAmountAfterClose(encodedMessage.length()); |
| 412 return; | 412 return; |
| 413 } | 413 } |
| 414 | 414 |
| 415 recordSendTypeHistogram(WebSocketSendTypeString); | 415 recordSendTypeHistogram(WebSocketSendTypeString); |
| 416 | 416 |
| 417 ASSERT(m_channel); | 417 DCHECK(m_channel); |
| 418 m_bufferedAmount += encodedMessage.length(); | 418 m_bufferedAmount += encodedMessage.length(); |
| 419 m_channel->send(encodedMessage); | 419 m_channel->send(encodedMessage); |
| 420 } | 420 } |
| 421 | 421 |
| 422 void DOMWebSocket::send(DOMArrayBuffer* binaryData, ExceptionState& exceptionSta
te) | 422 void DOMWebSocket::send(DOMArrayBuffer* binaryData, ExceptionState& exceptionSta
te) |
| 423 { | 423 { |
| 424 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending ArrayBuffer " <
< binaryData; | 424 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending ArrayBuffer " <
< binaryData; |
| 425 ASSERT(binaryData && binaryData->buffer()); | 425 DCHECK(binaryData); |
| 426 DCHECK(binaryData->buffer()); |
| 426 if (m_state == kConnecting) { | 427 if (m_state == kConnecting) { |
| 427 setInvalidStateErrorForSendMethod(exceptionState); | 428 setInvalidStateErrorForSendMethod(exceptionState); |
| 428 return; | 429 return; |
| 429 } | 430 } |
| 430 if (m_state == kClosing || m_state == kClosed) { | 431 if (m_state == kClosing || m_state == kClosed) { |
| 431 updateBufferedAmountAfterClose(binaryData->byteLength()); | 432 updateBufferedAmountAfterClose(binaryData->byteLength()); |
| 432 return; | 433 return; |
| 433 } | 434 } |
| 434 recordSendTypeHistogram(WebSocketSendTypeArrayBuffer); | 435 recordSendTypeHistogram(WebSocketSendTypeArrayBuffer); |
| 435 recordSendMessageSizeHistogram(WebSocketSendTypeArrayBuffer, binaryData->byt
eLength()); | 436 recordSendMessageSizeHistogram(WebSocketSendTypeArrayBuffer, binaryData->byt
eLength()); |
| 436 ASSERT(m_channel); | 437 DCHECK(m_channel); |
| 437 m_bufferedAmount += binaryData->byteLength(); | 438 m_bufferedAmount += binaryData->byteLength(); |
| 438 m_channel->send(*binaryData, 0, binaryData->byteLength()); | 439 m_channel->send(*binaryData, 0, binaryData->byteLength()); |
| 439 } | 440 } |
| 440 | 441 |
| 441 void DOMWebSocket::send(DOMArrayBufferView* arrayBufferView, ExceptionState& exc
eptionState) | 442 void DOMWebSocket::send(DOMArrayBufferView* arrayBufferView, ExceptionState& exc
eptionState) |
| 442 { | 443 { |
| 443 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending ArrayBufferView
" << arrayBufferView; | 444 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending ArrayBufferView
" << arrayBufferView; |
| 444 ASSERT(arrayBufferView); | 445 DCHECK(arrayBufferView); |
| 445 if (m_state == kConnecting) { | 446 if (m_state == kConnecting) { |
| 446 setInvalidStateErrorForSendMethod(exceptionState); | 447 setInvalidStateErrorForSendMethod(exceptionState); |
| 447 return; | 448 return; |
| 448 } | 449 } |
| 449 if (m_state == kClosing || m_state == kClosed) { | 450 if (m_state == kClosing || m_state == kClosed) { |
| 450 updateBufferedAmountAfterClose(arrayBufferView->byteLength()); | 451 updateBufferedAmountAfterClose(arrayBufferView->byteLength()); |
| 451 return; | 452 return; |
| 452 } | 453 } |
| 453 recordSendTypeHistogram(WebSocketSendTypeArrayBufferView); | 454 recordSendTypeHistogram(WebSocketSendTypeArrayBufferView); |
| 454 recordSendMessageSizeHistogram(WebSocketSendTypeArrayBufferView, arrayBuffer
View->byteLength()); | 455 recordSendMessageSizeHistogram(WebSocketSendTypeArrayBufferView, arrayBuffer
View->byteLength()); |
| 455 ASSERT(m_channel); | 456 DCHECK(m_channel); |
| 456 m_bufferedAmount += arrayBufferView->byteLength(); | 457 m_bufferedAmount += arrayBufferView->byteLength(); |
| 457 m_channel->send(*arrayBufferView->buffer(), arrayBufferView->byteOffset(), a
rrayBufferView->byteLength()); | 458 m_channel->send(*arrayBufferView->buffer(), arrayBufferView->byteOffset(), a
rrayBufferView->byteLength()); |
| 458 } | 459 } |
| 459 | 460 |
| 460 void DOMWebSocket::send(Blob* binaryData, ExceptionState& exceptionState) | 461 void DOMWebSocket::send(Blob* binaryData, ExceptionState& exceptionState) |
| 461 { | 462 { |
| 462 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending Blob " << binar
yData->uuid(); | 463 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending Blob " << binar
yData->uuid(); |
| 463 ASSERT(binaryData); | 464 DCHECK(binaryData); |
| 464 if (m_state == kConnecting) { | 465 if (m_state == kConnecting) { |
| 465 setInvalidStateErrorForSendMethod(exceptionState); | 466 setInvalidStateErrorForSendMethod(exceptionState); |
| 466 return; | 467 return; |
| 467 } | 468 } |
| 468 if (m_state == kClosing || m_state == kClosed) { | 469 if (m_state == kClosing || m_state == kClosed) { |
| 469 updateBufferedAmountAfterClose(binaryData->size()); | 470 updateBufferedAmountAfterClose(binaryData->size()); |
| 470 return; | 471 return; |
| 471 } | 472 } |
| 472 unsigned long long size = binaryData->size(); | 473 unsigned long long size = binaryData->size(); |
| 473 recordSendTypeHistogram(WebSocketSendTypeBlob); | 474 recordSendTypeHistogram(WebSocketSendTypeBlob); |
| 474 recordSendMessageSizeHistogram(WebSocketSendTypeBlob, clampTo<size_t>(size,
0, kMaxByteSizeForHistogram)); | 475 recordSendMessageSizeHistogram(WebSocketSendTypeBlob, clampTo<size_t>(size,
0, kMaxByteSizeForHistogram)); |
| 475 m_bufferedAmount += size; | 476 m_bufferedAmount += size; |
| 476 ASSERT(m_channel); | 477 DCHECK(m_channel); |
| 477 | 478 |
| 478 // When the runtime type of |binaryData| is File, | 479 // When the runtime type of |binaryData| is File, |
| 479 // binaryData->blobDataHandle()->size() returns -1. However, in order to | 480 // binaryData->blobDataHandle()->size() returns -1. However, in order to |
| 480 // maintain the value of |m_bufferedAmount| correctly, the WebSocket code | 481 // maintain the value of |m_bufferedAmount| correctly, the WebSocket code |
| 481 // needs to fix the size of the File at this point. For this reason, | 482 // needs to fix the size of the File at this point. For this reason, |
| 482 // construct a new BlobDataHandle here with the size that this method | 483 // construct a new BlobDataHandle here with the size that this method |
| 483 // observed. | 484 // observed. |
| 484 m_channel->send(BlobDataHandle::create(binaryData->uuid(), binaryData->type(
), size)); | 485 m_channel->send(BlobDataHandle::create(binaryData->uuid(), binaryData->type(
), size)); |
| 485 } | 486 } |
| 486 | 487 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 510 exceptionState.throwDOMException(InvalidAccessError, "The code must
be either 1000, or between 3000 and 4999. " + String::number(code) + " is neithe
r."); | 511 exceptionState.throwDOMException(InvalidAccessError, "The code must
be either 1000, or between 3000 and 4999. " + String::number(code) + " is neithe
r."); |
| 511 return; | 512 return; |
| 512 } | 513 } |
| 513 // Bindings specify USVString, so unpaired surrogates are already replac
ed with U+FFFD. | 514 // Bindings specify USVString, so unpaired surrogates are already replac
ed with U+FFFD. |
| 514 CString utf8 = reason.utf8(); | 515 CString utf8 = reason.utf8(); |
| 515 if (utf8.length() > maxReasonSizeInBytes) { | 516 if (utf8.length() > maxReasonSizeInBytes) { |
| 516 exceptionState.throwDOMException(SyntaxError, "The message must not
be greater than " + String::number(maxReasonSizeInBytes) + " bytes."); | 517 exceptionState.throwDOMException(SyntaxError, "The message must not
be greater than " + String::number(maxReasonSizeInBytes) + " bytes."); |
| 517 return; | 518 return; |
| 518 } | 519 } |
| 519 if (!reason.isEmpty() && !reason.is8Bit()) { | 520 if (!reason.isEmpty() && !reason.is8Bit()) { |
| 520 ASSERT(utf8.length() > 0); | 521 DCHECK_GT(utf8.length(), 0u); |
| 521 // reason might contain unpaired surrogates. Reconstruct it from | 522 // reason might contain unpaired surrogates. Reconstruct it from |
| 522 // utf8. | 523 // utf8. |
| 523 cleansedReason = String::fromUTF8(utf8.data(), utf8.length()); | 524 cleansedReason = String::fromUTF8(utf8.data(), utf8.length()); |
| 524 } | 525 } |
| 525 } | 526 } |
| 526 | 527 |
| 527 if (m_state == kClosing || m_state == kClosed) | 528 if (m_state == kClosing || m_state == kClosed) |
| 528 return; | 529 return; |
| 529 if (m_state == kConnecting) { | 530 if (m_state == kConnecting) { |
| 530 m_state = kClosing; | 531 m_state = kClosing; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 } | 567 } |
| 567 | 568 |
| 568 String DOMWebSocket::binaryType() const | 569 String DOMWebSocket::binaryType() const |
| 569 { | 570 { |
| 570 switch (m_binaryType) { | 571 switch (m_binaryType) { |
| 571 case BinaryTypeBlob: | 572 case BinaryTypeBlob: |
| 572 return "blob"; | 573 return "blob"; |
| 573 case BinaryTypeArrayBuffer: | 574 case BinaryTypeArrayBuffer: |
| 574 return "arraybuffer"; | 575 return "arraybuffer"; |
| 575 } | 576 } |
| 576 ASSERT_NOT_REACHED(); | 577 NOTREACHED(); |
| 577 return String(); | 578 return String(); |
| 578 } | 579 } |
| 579 | 580 |
| 580 void DOMWebSocket::setBinaryType(const String& binaryType) | 581 void DOMWebSocket::setBinaryType(const String& binaryType) |
| 581 { | 582 { |
| 582 if (binaryType == "blob") { | 583 if (binaryType == "blob") { |
| 583 setBinaryTypeInternal(BinaryTypeBlob); | 584 setBinaryTypeInternal(BinaryTypeBlob); |
| 584 return; | 585 return; |
| 585 } | 586 } |
| 586 if (binaryType == "arraybuffer") { | 587 if (binaryType == "arraybuffer") { |
| 587 setBinaryTypeInternal(BinaryTypeArrayBuffer); | 588 setBinaryTypeInternal(BinaryTypeArrayBuffer); |
| 588 return; | 589 return; |
| 589 } | 590 } |
| 590 ASSERT_NOT_REACHED(); | 591 NOTREACHED(); |
| 591 } | 592 } |
| 592 | 593 |
| 593 void DOMWebSocket::setBinaryTypeInternal(BinaryType binaryType) | 594 void DOMWebSocket::setBinaryTypeInternal(BinaryType binaryType) |
| 594 { | 595 { |
| 595 if (m_binaryType == binaryType) | 596 if (m_binaryType == binaryType) |
| 596 return; | 597 return; |
| 597 m_binaryType = binaryType; | 598 m_binaryType = binaryType; |
| 598 if (m_state == kOpen || m_state == kClosing) | 599 if (m_state == kOpen || m_state == kClosing) |
| 599 ++m_binaryTypeChangesAfterOpen; | 600 ++m_binaryTypeChangesAfterOpen; |
| 600 } | 601 } |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 695 void DOMWebSocket::didError() | 696 void DOMWebSocket::didError() |
| 696 { | 697 { |
| 697 NETWORK_DVLOG(1) << "WebSocket " << this << " didError()"; | 698 NETWORK_DVLOG(1) << "WebSocket " << this << " didError()"; |
| 698 m_state = kClosed; | 699 m_state = kClosed; |
| 699 logBinaryTypeChangesAfterOpen(); | 700 logBinaryTypeChangesAfterOpen(); |
| 700 m_eventQueue->dispatch(Event::create(EventTypeNames::error)); | 701 m_eventQueue->dispatch(Event::create(EventTypeNames::error)); |
| 701 } | 702 } |
| 702 | 703 |
| 703 void DOMWebSocket::didConsumeBufferedAmount(uint64_t consumed) | 704 void DOMWebSocket::didConsumeBufferedAmount(uint64_t consumed) |
| 704 { | 705 { |
| 705 ASSERT(m_bufferedAmount >= consumed + m_consumedBufferedAmount); | 706 DCHECK_GE(m_bufferedAmount, consumed + m_consumedBufferedAmount); |
| 706 NETWORK_DVLOG(1) << "WebSocket " << this << " didConsumeBufferedAmount(" <<
consumed << ")"; | 707 NETWORK_DVLOG(1) << "WebSocket " << this << " didConsumeBufferedAmount(" <<
consumed << ")"; |
| 707 if (m_state == kClosed) | 708 if (m_state == kClosed) |
| 708 return; | 709 return; |
| 709 m_consumedBufferedAmount += consumed; | 710 m_consumedBufferedAmount += consumed; |
| 710 if (!m_bufferedAmountConsumeTimer.isActive()) | 711 if (!m_bufferedAmountConsumeTimer.isActive()) |
| 711 m_bufferedAmountConsumeTimer.startOneShot(0, BLINK_FROM_HERE); | 712 m_bufferedAmountConsumeTimer.startOneShot(0, BLINK_FROM_HERE); |
| 712 } | 713 } |
| 713 | 714 |
| 714 void DOMWebSocket::didStartClosingHandshake() | 715 void DOMWebSocket::didStartClosingHandshake() |
| 715 { | 716 { |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 795 DEFINE_TRACE(DOMWebSocket) | 796 DEFINE_TRACE(DOMWebSocket) |
| 796 { | 797 { |
| 797 visitor->trace(m_channel); | 798 visitor->trace(m_channel); |
| 798 visitor->trace(m_eventQueue); | 799 visitor->trace(m_eventQueue); |
| 799 WebSocketChannelClient::trace(visitor); | 800 WebSocketChannelClient::trace(visitor); |
| 800 EventTargetWithInlineData::trace(visitor); | 801 EventTargetWithInlineData::trace(visitor); |
| 801 ActiveDOMObject::trace(visitor); | 802 ActiveDOMObject::trace(visitor); |
| 802 } | 803 } |
| 803 | 804 |
| 804 } // namespace blink | 805 } // namespace blink |
| OLD | NEW |