| 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 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 static const int32_t kBucketCountForMessageSizeHistogram = 50; | 66 static const int32_t kBucketCountForMessageSizeHistogram = 50; |
| 67 | 67 |
| 68 namespace blink { | 68 namespace blink { |
| 69 | 69 |
| 70 DOMWebSocket::EventQueue::EventQueue(EventTarget* target) | 70 DOMWebSocket::EventQueue::EventQueue(EventTarget* target) |
| 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() { | 75 DOMWebSocket::EventQueue::~EventQueue() { |
| 76 stop(); | 76 contextDestroyed(); |
| 77 } | 77 } |
| 78 | 78 |
| 79 void DOMWebSocket::EventQueue::dispatch(Event* event) { | 79 void DOMWebSocket::EventQueue::dispatch(Event* event) { |
| 80 switch (m_state) { | 80 switch (m_state) { |
| 81 case Active: | 81 case Active: |
| 82 DCHECK(m_events.isEmpty()); | 82 DCHECK(m_events.isEmpty()); |
| 83 DCHECK(m_target->getExecutionContext()); | 83 DCHECK(m_target->getExecutionContext()); |
| 84 m_target->dispatchEvent(event); | 84 m_target->dispatchEvent(event); |
| 85 break; | 85 break; |
| 86 case Suspended: | 86 case Suspended: |
| (...skipping 18 matching lines...) Expand all Loading... |
| 105 m_state = Suspended; | 105 m_state = Suspended; |
| 106 } | 106 } |
| 107 | 107 |
| 108 void DOMWebSocket::EventQueue::resume() { | 108 void DOMWebSocket::EventQueue::resume() { |
| 109 if (m_state != Suspended || m_resumeTimer.isActive()) | 109 if (m_state != Suspended || m_resumeTimer.isActive()) |
| 110 return; | 110 return; |
| 111 | 111 |
| 112 m_resumeTimer.startOneShot(0, BLINK_FROM_HERE); | 112 m_resumeTimer.startOneShot(0, BLINK_FROM_HERE); |
| 113 } | 113 } |
| 114 | 114 |
| 115 void DOMWebSocket::EventQueue::stop() { | 115 void DOMWebSocket::EventQueue::contextDestroyed() { |
| 116 if (m_state == Stopped) | 116 if (m_state == Stopped) |
| 117 return; | 117 return; |
| 118 | 118 |
| 119 m_state = Stopped; | 119 m_state = Stopped; |
| 120 m_resumeTimer.stop(); | 120 m_resumeTimer.stop(); |
| 121 m_events.clear(); | 121 m_events.clear(); |
| 122 } | 122 } |
| 123 | 123 |
| 124 void DOMWebSocket::EventQueue::dispatchQueuedEvents() { | 124 void DOMWebSocket::EventQueue::dispatchQueuedEvents() { |
| 125 if (m_state != Active) | 125 if (m_state != Active) |
| (...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 644 const AtomicString& DOMWebSocket::interfaceName() const { | 644 const AtomicString& DOMWebSocket::interfaceName() const { |
| 645 return EventTargetNames::DOMWebSocket; | 645 return EventTargetNames::DOMWebSocket; |
| 646 } | 646 } |
| 647 | 647 |
| 648 ExecutionContext* DOMWebSocket::getExecutionContext() const { | 648 ExecutionContext* DOMWebSocket::getExecutionContext() const { |
| 649 return ActiveDOMObject::getExecutionContext(); | 649 return ActiveDOMObject::getExecutionContext(); |
| 650 } | 650 } |
| 651 | 651 |
| 652 void DOMWebSocket::contextDestroyed() { | 652 void DOMWebSocket::contextDestroyed() { |
| 653 NETWORK_DVLOG(1) << "WebSocket " << this << " contextDestroyed()"; | 653 NETWORK_DVLOG(1) << "WebSocket " << this << " contextDestroyed()"; |
| 654 DCHECK(!m_channel); | 654 m_eventQueue->contextDestroyed(); |
| 655 DCHECK_EQ(kClosed, m_state); | 655 if (m_channel) { |
| 656 ActiveDOMObject::contextDestroyed(); | 656 m_channel->close(WebSocketChannel::CloseEventCodeGoingAway, String()); |
| 657 releaseChannel(); |
| 658 } |
| 659 if (m_state != kClosed) { |
| 660 m_state = kClosed; |
| 661 logBinaryTypeChangesAfterOpen(); |
| 662 } |
| 657 } | 663 } |
| 658 | 664 |
| 659 bool DOMWebSocket::hasPendingActivity() const { | 665 bool DOMWebSocket::hasPendingActivity() const { |
| 660 return m_channel || !m_eventQueue->isEmpty(); | 666 return m_channel || !m_eventQueue->isEmpty(); |
| 661 } | 667 } |
| 662 | 668 |
| 663 void DOMWebSocket::suspend() { | 669 void DOMWebSocket::suspend() { |
| 664 m_eventQueue->suspend(); | 670 m_eventQueue->suspend(); |
| 665 } | 671 } |
| 666 | 672 |
| 667 void DOMWebSocket::resume() { | 673 void DOMWebSocket::resume() { |
| 668 m_eventQueue->resume(); | 674 m_eventQueue->resume(); |
| 669 } | 675 } |
| 670 | 676 |
| 671 void DOMWebSocket::stop() { | |
| 672 m_eventQueue->stop(); | |
| 673 if (m_channel) { | |
| 674 m_channel->close(WebSocketChannel::CloseEventCodeGoingAway, String()); | |
| 675 releaseChannel(); | |
| 676 } | |
| 677 if (m_state != kClosed) { | |
| 678 m_state = kClosed; | |
| 679 logBinaryTypeChangesAfterOpen(); | |
| 680 } | |
| 681 } | |
| 682 | |
| 683 void DOMWebSocket::didConnect(const String& subprotocol, | 677 void DOMWebSocket::didConnect(const String& subprotocol, |
| 684 const String& extensions) { | 678 const String& extensions) { |
| 685 NETWORK_DVLOG(1) << "WebSocket " << this << " didConnect()"; | 679 NETWORK_DVLOG(1) << "WebSocket " << this << " didConnect()"; |
| 686 if (m_state != kConnecting) | 680 if (m_state != kConnecting) |
| 687 return; | 681 return; |
| 688 m_state = kOpen; | 682 m_state = kOpen; |
| 689 m_subprotocol = subprotocol; | 683 m_subprotocol = subprotocol; |
| 690 m_extensions = extensions; | 684 m_extensions = extensions; |
| 691 m_eventQueue->dispatch(Event::create(EventTypeNames::open)); | 685 m_eventQueue->dispatch(Event::create(EventTypeNames::open)); |
| 692 } | 686 } |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 862 | 856 |
| 863 DEFINE_TRACE(DOMWebSocket) { | 857 DEFINE_TRACE(DOMWebSocket) { |
| 864 visitor->trace(m_channel); | 858 visitor->trace(m_channel); |
| 865 visitor->trace(m_eventQueue); | 859 visitor->trace(m_eventQueue); |
| 866 WebSocketChannelClient::trace(visitor); | 860 WebSocketChannelClient::trace(visitor); |
| 867 EventTargetWithInlineData::trace(visitor); | 861 EventTargetWithInlineData::trace(visitor); |
| 868 ActiveDOMObject::trace(visitor); | 862 ActiveDOMObject::trace(visitor); |
| 869 } | 863 } |
| 870 | 864 |
| 871 } // namespace blink | 865 } // namespace blink |
| OLD | NEW |