Chromium Code Reviews| 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(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(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 getExecutionContext()->addConsoleMessage(ConsoleMessage::create(JSMessageSou rce, ErrorMessageLevel, message)); | 246 getExecutionContext()->addConsoleMessage(ConsoleMessage::create(JSMessageSou rce, ErrorMessageLevel, message)); |
| 247 } | 247 } |
| 248 | 248 |
| 249 DOMWebSocket* DOMWebSocket::create(ExecutionContext* context, const String& url, ExceptionState& exceptionState) | 249 DOMWebSocket* DOMWebSocket::create(ExecutionContext* context, const String& url, ExceptionState& exceptionState) |
| 250 { | 250 { |
| 251 StringOrStringSequence protocols; | 251 StringOrStringSequence protocols; |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 263 webSocket->suspendIfNeeded(); | 263 webSocket->suspendIfNeeded(); |
| 264 | 264 |
| 265 if (protocols.isNull()) { | 265 if (protocols.isNull()) { |
| 266 Vector<String> protocolsVector; | 266 Vector<String> protocolsVector; |
| 267 webSocket->connect(url, protocolsVector, exceptionState); | 267 webSocket->connect(url, protocolsVector, exceptionState); |
| 268 } else if (protocols.isString()) { | 268 } else if (protocols.isString()) { |
| 269 Vector<String> protocolsVector; | 269 Vector<String> protocolsVector; |
| 270 protocolsVector.append(protocols.getAsString()); | 270 protocolsVector.append(protocols.getAsString()); |
| 271 webSocket->connect(url, protocolsVector, exceptionState); | 271 webSocket->connect(url, protocolsVector, exceptionState); |
| 272 } else { | 272 } else { |
| 273 ASSERT(protocols.isStringSequence()); | 273 DCHECK(protocols.isStringSequence()); |
| 274 webSocket->connect(url, protocols.getAsStringSequence(), exceptionState) ; | 274 webSocket->connect(url, protocols.getAsStringSequence(), exceptionState) ; |
| 275 } | 275 } |
| 276 | 276 |
| 277 if (exceptionState.hadException()) | 277 if (exceptionState.hadException()) |
| 278 return nullptr; | 278 return nullptr; |
| 279 | 279 |
| 280 return webSocket; | 280 return webSocket; |
| 281 } | 281 } |
| 282 | 282 |
| 283 void DOMWebSocket::connect(const String& url, const Vector<String>& protocols, E xceptionState& exceptionState) | 283 void DOMWebSocket::connect(const String& url, const Vector<String>& protocols, E xceptionState& exceptionState) |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 360 | 360 |
| 361 void DOMWebSocket::updateBufferedAmountAfterClose(uint64_t payloadSize) | 361 void DOMWebSocket::updateBufferedAmountAfterClose(uint64_t payloadSize) |
| 362 { | 362 { |
| 363 m_bufferedAmountAfterClose += payloadSize; | 363 m_bufferedAmountAfterClose += payloadSize; |
| 364 | 364 |
| 365 logError("WebSocket is already in CLOSING or CLOSED state."); | 365 logError("WebSocket is already in CLOSING or CLOSED state."); |
| 366 } | 366 } |
| 367 | 367 |
| 368 void DOMWebSocket::reflectBufferedAmountConsumption(TimerBase*) | 368 void DOMWebSocket::reflectBufferedAmountConsumption(TimerBase*) |
| 369 { | 369 { |
| 370 ASSERT(m_bufferedAmount >= m_consumedBufferedAmount); | 370 DCHECK(m_bufferedAmount >= m_consumedBufferedAmount); |
| 371 // Cast to unsigned long long is required since clang doesn't accept | 371 // Cast to unsigned long long is required since clang doesn't accept |
| 372 // combination of %llu and uint64_t (known as unsigned long). | 372 // combination of %llu and uint64_t (known as unsigned long). |
| 373 NETWORK_DVLOG(1) << "WebSocket " << this << " reflectBufferedAmountConsumpti on() " << m_bufferedAmount << " => " << (m_bufferedAmount - m_consumedBufferedAm ount); | 373 NETWORK_DVLOG(1) << "WebSocket " << this << " reflectBufferedAmountConsumpti on() " << m_bufferedAmount << " => " << (m_bufferedAmount - m_consumedBufferedAm ount); |
| 374 | 374 |
| 375 m_bufferedAmount -= m_consumedBufferedAmount; | 375 m_bufferedAmount -= m_consumedBufferedAmount; |
| 376 m_consumedBufferedAmount = 0; | 376 m_consumedBufferedAmount = 0; |
| 377 } | 377 } |
| 378 | 378 |
| 379 void DOMWebSocket::releaseChannel() | 379 void DOMWebSocket::releaseChannel() |
| 380 { | 380 { |
| 381 ASSERT(m_channel); | 381 DCHECK(m_channel); |
| 382 m_channel->disconnect(); | 382 m_channel->disconnect(); |
| 383 m_channel = nullptr; | 383 m_channel = nullptr; |
| 384 } | 384 } |
| 385 | 385 |
| 386 void DOMWebSocket::logBinaryTypeChangesAfterOpen() | 386 void DOMWebSocket::logBinaryTypeChangesAfterOpen() |
| 387 { | 387 { |
| 388 DEFINE_THREAD_SAFE_STATIC_LOCAL(CustomCountHistogram, binaryTypeChangesHisto gram, new CustomCountHistogram("WebCore.WebSocket.BinaryTypeChangesAfterOpen", 1 , 1024, 10)); | 388 DEFINE_THREAD_SAFE_STATIC_LOCAL(CustomCountHistogram, binaryTypeChangesHisto gram, new CustomCountHistogram("WebCore.WebSocket.BinaryTypeChangesAfterOpen", 1 , 1024, 10)); |
| 389 DVLOG(3) << "WebSocket " << static_cast<void*>(this) << " logBinaryTypeChang esAfterOpen() logging " << m_binaryTypeChangesAfterOpen; | 389 DVLOG(3) << "WebSocket " << static_cast<void*>(this) << " logBinaryTypeChang esAfterOpen() logging " << m_binaryTypeChangesAfterOpen; |
| 390 binaryTypeChangesHistogram.count(m_binaryTypeChangesAfterOpen); | 390 binaryTypeChangesHistogram.count(m_binaryTypeChangesAfterOpen); |
| 391 } | 391 } |
| 392 | 392 |
| 393 void DOMWebSocket::send(const String& message, ExceptionState& exceptionState) | 393 void DOMWebSocket::send(const String& message, ExceptionState& exceptionState) |
| 394 { | 394 { |
| 395 CString encodedMessage = message.utf8(); | 395 CString encodedMessage = message.utf8(); |
| 396 | 396 |
| 397 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending String " << mes sage; | 397 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending String " << mes sage; |
| 398 if (m_state == kConnecting) { | 398 if (m_state == kConnecting) { |
| 399 setInvalidStateErrorForSendMethod(exceptionState); | 399 setInvalidStateErrorForSendMethod(exceptionState); |
| 400 return; | 400 return; |
| 401 } | 401 } |
| 402 // No exception is raised if the connection was once established but has sub sequently been closed. | 402 // No exception is raised if the connection was once established but has sub sequently been closed. |
| 403 if (m_state == kClosing || m_state == kClosed) { | 403 if (m_state == kClosing || m_state == kClosed) { |
| 404 updateBufferedAmountAfterClose(encodedMessage.length()); | 404 updateBufferedAmountAfterClose(encodedMessage.length()); |
| 405 return; | 405 return; |
| 406 } | 406 } |
| 407 | 407 |
| 408 recordSendTypeHistogram(WebSocketSendTypeString); | 408 recordSendTypeHistogram(WebSocketSendTypeString); |
| 409 | 409 |
| 410 ASSERT(m_channel); | 410 DCHECK(m_channel); |
| 411 m_bufferedAmount += encodedMessage.length(); | 411 m_bufferedAmount += encodedMessage.length(); |
| 412 m_channel->send(encodedMessage); | 412 m_channel->send(encodedMessage); |
| 413 } | 413 } |
| 414 | 414 |
| 415 void DOMWebSocket::send(DOMArrayBuffer* binaryData, ExceptionState& exceptionSta te) | 415 void DOMWebSocket::send(DOMArrayBuffer* binaryData, ExceptionState& exceptionSta te) |
| 416 { | 416 { |
| 417 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending ArrayBuffer " < < binaryData; | 417 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending ArrayBuffer " < < binaryData; |
| 418 ASSERT(binaryData && binaryData->buffer()); | 418 DCHECK(binaryData && binaryData->buffer()); |
| 419 if (m_state == kConnecting) { | 419 if (m_state == kConnecting) { |
| 420 setInvalidStateErrorForSendMethod(exceptionState); | 420 setInvalidStateErrorForSendMethod(exceptionState); |
| 421 return; | 421 return; |
| 422 } | 422 } |
| 423 if (m_state == kClosing || m_state == kClosed) { | 423 if (m_state == kClosing || m_state == kClosed) { |
| 424 updateBufferedAmountAfterClose(binaryData->byteLength()); | 424 updateBufferedAmountAfterClose(binaryData->byteLength()); |
| 425 return; | 425 return; |
| 426 } | 426 } |
| 427 recordSendTypeHistogram(WebSocketSendTypeArrayBuffer); | 427 recordSendTypeHistogram(WebSocketSendTypeArrayBuffer); |
| 428 recordSendMessageSizeHistogram(WebSocketSendTypeArrayBuffer, binaryData->byt eLength()); | 428 recordSendMessageSizeHistogram(WebSocketSendTypeArrayBuffer, binaryData->byt eLength()); |
| 429 ASSERT(m_channel); | 429 DCHECK(m_channel); |
| 430 m_bufferedAmount += binaryData->byteLength(); | 430 m_bufferedAmount += binaryData->byteLength(); |
| 431 m_channel->send(*binaryData, 0, binaryData->byteLength()); | 431 m_channel->send(*binaryData, 0, binaryData->byteLength()); |
| 432 } | 432 } |
| 433 | 433 |
| 434 void DOMWebSocket::send(DOMArrayBufferView* arrayBufferView, ExceptionState& exc eptionState) | 434 void DOMWebSocket::send(DOMArrayBufferView* arrayBufferView, ExceptionState& exc eptionState) |
| 435 { | 435 { |
| 436 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending ArrayBufferView " << arrayBufferView; | 436 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending ArrayBufferView " << arrayBufferView; |
| 437 ASSERT(arrayBufferView); | 437 DCHECK(arrayBufferView); |
| 438 if (m_state == kConnecting) { | 438 if (m_state == kConnecting) { |
| 439 setInvalidStateErrorForSendMethod(exceptionState); | 439 setInvalidStateErrorForSendMethod(exceptionState); |
| 440 return; | 440 return; |
| 441 } | 441 } |
| 442 if (m_state == kClosing || m_state == kClosed) { | 442 if (m_state == kClosing || m_state == kClosed) { |
| 443 updateBufferedAmountAfterClose(arrayBufferView->byteLength()); | 443 updateBufferedAmountAfterClose(arrayBufferView->byteLength()); |
| 444 return; | 444 return; |
| 445 } | 445 } |
| 446 recordSendTypeHistogram(WebSocketSendTypeArrayBufferView); | 446 recordSendTypeHistogram(WebSocketSendTypeArrayBufferView); |
| 447 recordSendMessageSizeHistogram(WebSocketSendTypeArrayBufferView, arrayBuffer View->byteLength()); | 447 recordSendMessageSizeHistogram(WebSocketSendTypeArrayBufferView, arrayBuffer View->byteLength()); |
| 448 ASSERT(m_channel); | 448 DCHECK(m_channel); |
| 449 m_bufferedAmount += arrayBufferView->byteLength(); | 449 m_bufferedAmount += arrayBufferView->byteLength(); |
| 450 m_channel->send(*arrayBufferView->buffer(), arrayBufferView->byteOffset(), a rrayBufferView->byteLength()); | 450 m_channel->send(*arrayBufferView->buffer(), arrayBufferView->byteOffset(), a rrayBufferView->byteLength()); |
| 451 } | 451 } |
| 452 | 452 |
| 453 void DOMWebSocket::send(Blob* binaryData, ExceptionState& exceptionState) | 453 void DOMWebSocket::send(Blob* binaryData, ExceptionState& exceptionState) |
| 454 { | 454 { |
| 455 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending Blob " << binar yData->uuid(); | 455 NETWORK_DVLOG(1) << "WebSocket " << this << " send() Sending Blob " << binar yData->uuid(); |
| 456 ASSERT(binaryData); | 456 DCHECK(binaryData); |
| 457 if (m_state == kConnecting) { | 457 if (m_state == kConnecting) { |
| 458 setInvalidStateErrorForSendMethod(exceptionState); | 458 setInvalidStateErrorForSendMethod(exceptionState); |
| 459 return; | 459 return; |
| 460 } | 460 } |
| 461 if (m_state == kClosing || m_state == kClosed) { | 461 if (m_state == kClosing || m_state == kClosed) { |
| 462 updateBufferedAmountAfterClose(binaryData->size()); | 462 updateBufferedAmountAfterClose(binaryData->size()); |
| 463 return; | 463 return; |
| 464 } | 464 } |
| 465 unsigned long long size = binaryData->size(); | 465 unsigned long long size = binaryData->size(); |
| 466 recordSendTypeHistogram(WebSocketSendTypeBlob); | 466 recordSendTypeHistogram(WebSocketSendTypeBlob); |
| 467 recordSendMessageSizeHistogram(WebSocketSendTypeBlob, clampTo<size_t>(size, 0, kMaxByteSizeForHistogram)); | 467 recordSendMessageSizeHistogram(WebSocketSendTypeBlob, clampTo<size_t>(size, 0, kMaxByteSizeForHistogram)); |
| 468 m_bufferedAmount += size; | 468 m_bufferedAmount += size; |
| 469 ASSERT(m_channel); | 469 DCHECK(m_channel); |
| 470 | 470 |
| 471 // When the runtime type of |binaryData| is File, | 471 // When the runtime type of |binaryData| is File, |
| 472 // binaryData->blobDataHandle()->size() returns -1. However, in order to | 472 // binaryData->blobDataHandle()->size() returns -1. However, in order to |
| 473 // maintain the value of |m_bufferedAmount| correctly, the WebSocket code | 473 // maintain the value of |m_bufferedAmount| correctly, the WebSocket code |
| 474 // needs to fix the size of the File at this point. For this reason, | 474 // needs to fix the size of the File at this point. For this reason, |
| 475 // construct a new BlobDataHandle here with the size that this method | 475 // construct a new BlobDataHandle here with the size that this method |
| 476 // observed. | 476 // observed. |
| 477 m_channel->send(BlobDataHandle::create(binaryData->uuid(), binaryData->type( ), size)); | 477 m_channel->send(BlobDataHandle::create(binaryData->uuid(), binaryData->type( ), size)); |
| 478 } | 478 } |
| 479 | 479 |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 503 exceptionState.throwDOMException(InvalidAccessError, "The code must be either 1000, or between 3000 and 4999. " + String::number(code) + " is neithe r."); | 503 exceptionState.throwDOMException(InvalidAccessError, "The code must be either 1000, or between 3000 and 4999. " + String::number(code) + " is neithe r."); |
| 504 return; | 504 return; |
| 505 } | 505 } |
| 506 // Bindings specify USVString, so unpaired surrogates are already replac ed with U+FFFD. | 506 // Bindings specify USVString, so unpaired surrogates are already replac ed with U+FFFD. |
| 507 CString utf8 = reason.utf8(); | 507 CString utf8 = reason.utf8(); |
| 508 if (utf8.length() > maxReasonSizeInBytes) { | 508 if (utf8.length() > maxReasonSizeInBytes) { |
| 509 exceptionState.throwDOMException(SyntaxError, "The message must not be greater than " + String::number(maxReasonSizeInBytes) + " bytes."); | 509 exceptionState.throwDOMException(SyntaxError, "The message must not be greater than " + String::number(maxReasonSizeInBytes) + " bytes."); |
| 510 return; | 510 return; |
| 511 } | 511 } |
| 512 if (!reason.isEmpty() && !reason.is8Bit()) { | 512 if (!reason.isEmpty() && !reason.is8Bit()) { |
| 513 ASSERT(utf8.length() > 0); | 513 DCHECK_LT(utf8.length(), 0u); |
|
hiroshige
2016/09/29 10:48:15
Oh, this should be DCHECK_GT(). Fixed.
| |
| 514 // reason might contain unpaired surrogates. Reconstruct it from | 514 // reason might contain unpaired surrogates. Reconstruct it from |
| 515 // utf8. | 515 // utf8. |
| 516 cleansedReason = String::fromUTF8(utf8.data(), utf8.length()); | 516 cleansedReason = String::fromUTF8(utf8.data(), utf8.length()); |
| 517 } | 517 } |
| 518 } | 518 } |
| 519 | 519 |
| 520 if (m_state == kClosing || m_state == kClosed) | 520 if (m_state == kClosing || m_state == kClosed) |
| 521 return; | 521 return; |
| 522 if (m_state == kConnecting) { | 522 if (m_state == kConnecting) { |
| 523 m_state = kClosing; | 523 m_state = kClosing; |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 559 } | 559 } |
| 560 | 560 |
| 561 String DOMWebSocket::binaryType() const | 561 String DOMWebSocket::binaryType() const |
| 562 { | 562 { |
| 563 switch (m_binaryType) { | 563 switch (m_binaryType) { |
| 564 case BinaryTypeBlob: | 564 case BinaryTypeBlob: |
| 565 return "blob"; | 565 return "blob"; |
| 566 case BinaryTypeArrayBuffer: | 566 case BinaryTypeArrayBuffer: |
| 567 return "arraybuffer"; | 567 return "arraybuffer"; |
| 568 } | 568 } |
| 569 ASSERT_NOT_REACHED(); | 569 NOTREACHED(); |
| 570 return String(); | 570 return String(); |
| 571 } | 571 } |
| 572 | 572 |
| 573 void DOMWebSocket::setBinaryType(const String& binaryType) | 573 void DOMWebSocket::setBinaryType(const String& binaryType) |
| 574 { | 574 { |
| 575 if (binaryType == "blob") { | 575 if (binaryType == "blob") { |
| 576 setBinaryTypeInternal(BinaryTypeBlob); | 576 setBinaryTypeInternal(BinaryTypeBlob); |
| 577 return; | 577 return; |
| 578 } | 578 } |
| 579 if (binaryType == "arraybuffer") { | 579 if (binaryType == "arraybuffer") { |
| 580 setBinaryTypeInternal(BinaryTypeArrayBuffer); | 580 setBinaryTypeInternal(BinaryTypeArrayBuffer); |
| 581 return; | 581 return; |
| 582 } | 582 } |
| 583 ASSERT_NOT_REACHED(); | 583 NOTREACHED(); |
| 584 } | 584 } |
| 585 | 585 |
| 586 void DOMWebSocket::setBinaryTypeInternal(BinaryType binaryType) | 586 void DOMWebSocket::setBinaryTypeInternal(BinaryType binaryType) |
| 587 { | 587 { |
| 588 if (m_binaryType == binaryType) | 588 if (m_binaryType == binaryType) |
| 589 return; | 589 return; |
| 590 m_binaryType = binaryType; | 590 m_binaryType = binaryType; |
| 591 if (m_state == kOpen || m_state == kClosing) | 591 if (m_state == kOpen || m_state == kClosing) |
| 592 ++m_binaryTypeChangesAfterOpen; | 592 ++m_binaryTypeChangesAfterOpen; |
| 593 } | 593 } |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 688 void DOMWebSocket::didError() | 688 void DOMWebSocket::didError() |
| 689 { | 689 { |
| 690 NETWORK_DVLOG(1) << "WebSocket " << this << " didError()"; | 690 NETWORK_DVLOG(1) << "WebSocket " << this << " didError()"; |
| 691 m_state = kClosed; | 691 m_state = kClosed; |
| 692 logBinaryTypeChangesAfterOpen(); | 692 logBinaryTypeChangesAfterOpen(); |
| 693 m_eventQueue->dispatch(Event::create(EventTypeNames::error)); | 693 m_eventQueue->dispatch(Event::create(EventTypeNames::error)); |
| 694 } | 694 } |
| 695 | 695 |
| 696 void DOMWebSocket::didConsumeBufferedAmount(uint64_t consumed) | 696 void DOMWebSocket::didConsumeBufferedAmount(uint64_t consumed) |
| 697 { | 697 { |
| 698 ASSERT(m_bufferedAmount >= consumed + m_consumedBufferedAmount); | 698 DCHECK(m_bufferedAmount >= consumed + m_consumedBufferedAmount); |
| 699 NETWORK_DVLOG(1) << "WebSocket " << this << " didConsumeBufferedAmount(" << consumed << ")"; | 699 NETWORK_DVLOG(1) << "WebSocket " << this << " didConsumeBufferedAmount(" << consumed << ")"; |
| 700 if (m_state == kClosed) | 700 if (m_state == kClosed) |
| 701 return; | 701 return; |
| 702 m_consumedBufferedAmount += consumed; | 702 m_consumedBufferedAmount += consumed; |
| 703 if (!m_bufferedAmountConsumeTimer.isActive()) | 703 if (!m_bufferedAmountConsumeTimer.isActive()) |
| 704 m_bufferedAmountConsumeTimer.startOneShot(0, BLINK_FROM_HERE); | 704 m_bufferedAmountConsumeTimer.startOneShot(0, BLINK_FROM_HERE); |
| 705 } | 705 } |
| 706 | 706 |
| 707 void DOMWebSocket::didStartClosingHandshake() | 707 void DOMWebSocket::didStartClosingHandshake() |
| 708 { | 708 { |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 788 DEFINE_TRACE(DOMWebSocket) | 788 DEFINE_TRACE(DOMWebSocket) |
| 789 { | 789 { |
| 790 visitor->trace(m_channel); | 790 visitor->trace(m_channel); |
| 791 visitor->trace(m_eventQueue); | 791 visitor->trace(m_eventQueue); |
| 792 WebSocketChannelClient::trace(visitor); | 792 WebSocketChannelClient::trace(visitor); |
| 793 EventTargetWithInlineData::trace(visitor); | 793 EventTargetWithInlineData::trace(visitor); |
| 794 ActiveDOMObject::trace(visitor); | 794 ActiveDOMObject::trace(visitor); |
| 795 } | 795 } |
| 796 | 796 |
| 797 } // namespace blink | 797 } // namespace blink |
| OLD | NEW |