| Index: Source/core/page/EventSource.cpp
|
| diff --git a/Source/core/page/EventSource.cpp b/Source/core/page/EventSource.cpp
|
| index 061c4d5d64ccbaa7c9693d62d554114a4796413e..1fd93f6406fc8ecc69fb91c5f6d7250bc258c05e 100644
|
| --- a/Source/core/page/EventSource.cpp
|
| +++ b/Source/core/page/EventSource.cpp
|
| @@ -63,7 +63,7 @@ inline EventSource::EventSource(ExecutionContext* context, const KURL& url, cons
|
| , m_withCredentials(false)
|
| , m_state(CONNECTING)
|
| , m_decoder(TextResourceDecoder::create("text/plain", "UTF-8"))
|
| - , m_reconnectTimer(this, &EventSource::reconnectTimerFired)
|
| + , m_connectTimer(this, &EventSource::connectTimerFired)
|
| , m_discardTrailingNewline(false)
|
| , m_requestInFlight(false)
|
| , m_reconnectDelay(defaultReconnectDelay)
|
| @@ -100,7 +100,7 @@ PassRefPtr<EventSource> EventSource::create(ExecutionContext* context, const Str
|
| RefPtr<EventSource> source = adoptRef(new EventSource(context, fullURL, eventSourceInit));
|
|
|
| source->setPendingActivity(source.get());
|
| - source->connect();
|
| + source->scheduleInitialConnect();
|
| source->suspendIfNeeded();
|
|
|
| return source.release();
|
| @@ -112,6 +112,14 @@ EventSource::~EventSource()
|
| ASSERT(!m_requestInFlight);
|
| }
|
|
|
| +void EventSource::scheduleInitialConnect()
|
| +{
|
| + ASSERT(m_state == CONNECTING);
|
| + ASSERT(!m_requestInFlight);
|
| +
|
| + m_connectTimer.startOneShot(0);
|
| +}
|
| +
|
| void EventSource::connect()
|
| {
|
| ASSERT(m_state == CONNECTING);
|
| @@ -159,11 +167,11 @@ void EventSource::networkRequestEnded()
|
| void EventSource::scheduleReconnect()
|
| {
|
| m_state = CONNECTING;
|
| - m_reconnectTimer.startOneShot(m_reconnectDelay / 1000.0);
|
| + m_connectTimer.startOneShot(m_reconnectDelay / 1000.0);
|
| dispatchEvent(Event::create(EventTypeNames::error));
|
| }
|
|
|
| -void EventSource::reconnectTimerFired(Timer<EventSource>*)
|
| +void EventSource::connectTimerFired(Timer<EventSource>*)
|
| {
|
| connect();
|
| }
|
| @@ -191,8 +199,8 @@ void EventSource::close()
|
| }
|
|
|
| // Stop trying to reconnect if EventSource was explicitly closed or if ActiveDOMObject::stop() was called.
|
| - if (m_reconnectTimer.isActive()) {
|
| - m_reconnectTimer.stop();
|
| + if (m_connectTimer.isActive()) {
|
| + m_connectTimer.stop();
|
| unsetPendingActivity(this);
|
| }
|
|
|
| @@ -306,9 +314,13 @@ void EventSource::didFailRedirectCheck()
|
| void EventSource::abortConnectionAttempt()
|
| {
|
| ASSERT(m_state == CONNECTING);
|
| - ASSERT(m_requestInFlight);
|
|
|
| - m_loader->cancel();
|
| + if (m_requestInFlight) {
|
| + m_loader->cancel();
|
| + } else {
|
| + m_state = CLOSED;
|
| + unsetPendingActivity(this);
|
| + }
|
|
|
| ASSERT(m_state == CLOSED);
|
| dispatchEvent(Event::create(EventTypeNames::error));
|
|
|