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

Side by Side Diff: Source/modules/websockets/WebSocket.cpp

Issue 27571005: Replace Timers used in ActiveDOMObject with AsyncMethodRunner (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 7 years, 2 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 /* 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 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 133
134 WebSocket::WebSocket(ExecutionContext* context) 134 WebSocket::WebSocket(ExecutionContext* context)
135 : ActiveDOMObject(context) 135 : ActiveDOMObject(context)
136 , m_state(CONNECTING) 136 , m_state(CONNECTING)
137 , m_bufferedAmount(0) 137 , m_bufferedAmount(0)
138 , m_bufferedAmountAfterClose(0) 138 , m_bufferedAmountAfterClose(0)
139 , m_binaryType(BinaryTypeBlob) 139 , m_binaryType(BinaryTypeBlob)
140 , m_subprotocol("") 140 , m_subprotocol("")
141 , m_extensions("") 141 , m_extensions("")
142 , m_stopped(false) 142 , m_stopped(false)
143 , m_timerForDeferredDropProtection(this, &WebSocket::dropProtection) 143 , m_dropProtectionRunner(this, &WebSocket::dropProtection)
144 { 144 {
145 ScriptWrappable::init(this); 145 ScriptWrappable::init(this);
146 } 146 }
147 147
148 WebSocket::~WebSocket() 148 WebSocket::~WebSocket()
149 { 149 {
150 if (m_channel) 150 if (m_channel)
151 m_channel->disconnect(); 151 m_channel->disconnect();
152 } 152 }
153 153
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 if (m_channel) 471 if (m_channel)
472 m_channel->suspend(); 472 m_channel->suspend();
473 } 473 }
474 474
475 void WebSocket::resume() 475 void WebSocket::resume()
476 { 476 {
477 if (m_channel) 477 if (m_channel)
478 m_channel->resume(); 478 m_channel->resume();
479 } 479 }
480 480
481 void WebSocket::dropProtection(Timer<WebSocket>*) 481 void WebSocket::dropProtection()
482 { 482 {
483 unsetPendingActivity(this); 483 unsetPendingActivity(this);
484 } 484 }
485 485
486 void WebSocket::stop() 486 void WebSocket::stop()
487 { 487 {
488 m_stopped = true; 488 m_stopped = true;
489 489
490 if (!hasPendingActivity()) { 490 if (!hasPendingActivity()) {
491 ASSERT(!m_channel); 491 ASSERT(!m_channel);
492 ASSERT(m_state == CLOSED); 492 ASSERT(m_state == CLOSED);
493 return; 493 return;
494 } 494 }
495 if (m_channel) { 495 if (m_channel) {
496 m_channel->close(WebSocketChannel::CloseEventCodeGoingAway, String()); 496 m_channel->close(WebSocketChannel::CloseEventCodeGoingAway, String());
497 m_channel->disconnect(); 497 m_channel->disconnect();
498 m_channel = 0; 498 m_channel = 0;
499 } 499 }
500 m_state = CLOSED; 500 m_state = CLOSED;
501 501
502 ActiveDOMObject::stop(); 502 ActiveDOMObject::stop();
503 503
504 // ContextLifecycleNotifier is iterating over the set of ActiveDOMObject 504 // ContextLifecycleNotifier is iterating over the set of ActiveDOMObject
505 // instances. Deleting this WebSocket instance synchronously leads to 505 // instances. Deleting this WebSocket instance synchronously leads to
506 // ContextLifecycleNotifier::removeObserver() call which is prohibited 506 // ContextLifecycleNotifier::removeObserver() call which is prohibited
507 // to be called during iteration. Defer it. 507 // to be called during iteration. Defer it.
508 if (m_timerForDeferredDropProtection.isActive()) 508 m_dropProtectionRunner.runAsync();
509 return;
510 m_timerForDeferredDropProtection.startOneShot(0);
511 } 509 }
512 510
513 void WebSocket::didConnect() 511 void WebSocket::didConnect()
514 { 512 {
515 LOG(Network, "WebSocket %p didConnect()", this); 513 LOG(Network, "WebSocket %p didConnect()", this);
516 if (m_state != CONNECTING) 514 if (m_state != CONNECTING)
517 return; 515 return;
518 m_state = OPEN; 516 m_state = OPEN;
519 m_subprotocol = m_channel->subprotocol(); 517 m_subprotocol = m_channel->subprotocol();
520 m_extensions = m_channel->extensions(); 518 m_extensions = m_channel->extensions();
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
618 static const size_t minimumPayloadSizeWithEightByteExtendedPayloadLength = 0 x10000; 616 static const size_t minimumPayloadSizeWithEightByteExtendedPayloadLength = 0 x10000;
619 size_t overhead = hybiBaseFramingOverhead + hybiMaskingKeyLength; 617 size_t overhead = hybiBaseFramingOverhead + hybiMaskingKeyLength;
620 if (payloadSize >= minimumPayloadSizeWithEightByteExtendedPayloadLength) 618 if (payloadSize >= minimumPayloadSizeWithEightByteExtendedPayloadLength)
621 overhead += 8; 619 overhead += 8;
622 else if (payloadSize >= minimumPayloadSizeWithTwoByteExtendedPayloadLength) 620 else if (payloadSize >= minimumPayloadSizeWithTwoByteExtendedPayloadLength)
623 overhead += 2; 621 overhead += 2;
624 return overhead; 622 return overhead;
625 } 623 }
626 624
627 } // namespace WebCore 625 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698