| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "core/page/EventSource.h" | 5 #include "core/page/EventSource.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/ExceptionState.h" | 7 #include "bindings/core/v8/ExceptionState.h" |
| 8 #include "bindings/core/v8/ScriptState.h" | 8 #include "bindings/core/v8/ScriptState.h" |
| 9 #include "bindings/core/v8/ScriptValue.h" | 9 #include "bindings/core/v8/ScriptValue.h" |
| 10 #include "bindings/core/v8/SerializedScriptValue.h" | 10 #include "bindings/core/v8/SerializedScriptValue.h" |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 ASSERT(MessageEvent::DataTypeSerializedScriptValue == event->dataType()); | 32 ASSERT(MessageEvent::DataTypeSerializedScriptValue == event->dataType()); |
| 33 if (!event->dataAsSerializedScriptValue()) | 33 if (!event->dataAsSerializedScriptValue()) |
| 34 return String(); | 34 return String(); |
| 35 MessagePortArray ports = event->ports(); | 35 MessagePortArray ports = event->ports(); |
| 36 NonThrowableExceptionState es; | 36 NonThrowableExceptionState es; |
| 37 return toUSVString(isolate, event->dataAsSerializedScriptValue()->deserializ
e(isolate, &ports), es); | 37 return toUSVString(isolate, event->dataAsSerializedScriptValue()->deserializ
e(isolate, &ports), es); |
| 38 } | 38 } |
| 39 | 39 |
| 40 class FakeEventListener : public EventListener { | 40 class FakeEventListener : public EventListener { |
| 41 public: | 41 public: |
| 42 static PassRefPtrWillBeRawPtr<FakeEventListener> create() | 42 static RawPtr<FakeEventListener> create() |
| 43 { | 43 { |
| 44 return adoptRefWillBeNoop(new FakeEventListener()); | 44 return (new FakeEventListener()); |
| 45 } | 45 } |
| 46 bool operator==(const EventListener& x) const override { return &x == this;
} | 46 bool operator==(const EventListener& x) const override { return &x == this;
} |
| 47 const WillBeHeapVector<RefPtrWillBeMember<Event>>& events() { return m_event
s; } | 47 const HeapVector<Member<Event>>& events() { return m_events; } |
| 48 void handleEvent(ExecutionContext* executionContext, Event* event) | 48 void handleEvent(ExecutionContext* executionContext, Event* event) |
| 49 { | 49 { |
| 50 m_events.append(event); | 50 m_events.append(event); |
| 51 } | 51 } |
| 52 DEFINE_INLINE_TRACE() | 52 DEFINE_INLINE_TRACE() |
| 53 { | 53 { |
| 54 visitor->trace(m_events); | 54 visitor->trace(m_events); |
| 55 EventListener::trace(visitor); | 55 EventListener::trace(visitor); |
| 56 } | 56 } |
| 57 | 57 |
| 58 protected: | 58 protected: |
| 59 FakeEventListener() : EventListener(EventListener::CPPEventListenerType) {} | 59 FakeEventListener() : EventListener(EventListener::CPPEventListenerType) {} |
| 60 WillBeHeapVector<RefPtrWillBeMember<Event>> m_events; | 60 HeapVector<Member<Event>> m_events; |
| 61 }; | 61 }; |
| 62 | 62 |
| 63 class EventSourceTest : public ::testing::Test { | 63 class EventSourceTest : public ::testing::Test { |
| 64 protected: | 64 protected: |
| 65 EventSourceTest() | 65 EventSourceTest() |
| 66 : m_page(DummyPageHolder::create()) | 66 : m_page(DummyPageHolder::create()) |
| 67 , m_source(EventSource::create(&document(), "https://localhost/", EventS
ourceInit(), m_exceptionState)) | 67 , m_source(EventSource::create(&document(), "https://localhost/", EventS
ourceInit(), m_exceptionState)) |
| 68 { | 68 { |
| 69 source()->setStateForTest(EventSource::OPEN); | 69 source()->setStateForTest(EventSource::OPEN); |
| 70 source()->setRequestInFlightForTest(true); | 70 source()->setRequestInFlightForTest(true); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 95 ThreadableLoaderClient* client() { return m_source->asThreadableLoaderClient
ForTest(); } | 95 ThreadableLoaderClient* client() { return m_source->asThreadableLoaderClient
ForTest(); } |
| 96 | 96 |
| 97 private: | 97 private: |
| 98 OwnPtr<DummyPageHolder> m_page; | 98 OwnPtr<DummyPageHolder> m_page; |
| 99 NonThrowableExceptionState m_exceptionState; | 99 NonThrowableExceptionState m_exceptionState; |
| 100 Persistent<EventSource> m_source; | 100 Persistent<EventSource> m_source; |
| 101 }; | 101 }; |
| 102 | 102 |
| 103 TEST_F(EventSourceTest, EmptyMessageEventShouldNotBeDispatched) | 103 TEST_F(EventSourceTest, EmptyMessageEventShouldNotBeDispatched) |
| 104 { | 104 { |
| 105 RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create()
; | 105 RawPtr<FakeEventListener> listener = FakeEventListener::create(); |
| 106 | 106 |
| 107 source()->addEventListener("message", listener); | 107 source()->addEventListener("message", listener); |
| 108 enqueue("\n"); | 108 enqueue("\n"); |
| 109 | 109 |
| 110 EXPECT_EQ(0u, listener->events().size()); | 110 EXPECT_EQ(0u, listener->events().size()); |
| 111 } | 111 } |
| 112 | 112 |
| 113 TEST_F(EventSourceTest, DispatchSimpleMessageEvent) | 113 TEST_F(EventSourceTest, DispatchSimpleMessageEvent) |
| 114 { | 114 { |
| 115 RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create()
; | 115 RawPtr<FakeEventListener> listener = FakeEventListener::create(); |
| 116 | 116 |
| 117 source()->addEventListener("message", listener); | 117 source()->addEventListener("message", listener); |
| 118 enqueue("data:hello\n\n"); | 118 enqueue("data:hello\n\n"); |
| 119 | 119 |
| 120 ASSERT_EQ(1u, listener->events().size()); | 120 ASSERT_EQ(1u, listener->events().size()); |
| 121 ASSERT_EQ("message", listener->events()[0]->type()); | 121 ASSERT_EQ("message", listener->events()[0]->type()); |
| 122 RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener
->events()[0].get()); | 122 RawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener->events()[0
].get()); |
| 123 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); | 123 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
| 124 EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); | 124 EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); |
| 125 EXPECT_EQ(String(), event->lastEventId()); | 125 EXPECT_EQ(String(), event->lastEventId()); |
| 126 } | 126 } |
| 127 | 127 |
| 128 TEST_F(EventSourceTest, DispatchMessageEventWithLastEventId) | 128 TEST_F(EventSourceTest, DispatchMessageEventWithLastEventId) |
| 129 { | 129 { |
| 130 RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create()
; | 130 RawPtr<FakeEventListener> listener = FakeEventListener::create(); |
| 131 | 131 |
| 132 source()->addEventListener("message", listener); | 132 source()->addEventListener("message", listener); |
| 133 enqueue("id:99\ndata:hello\n\n"); | 133 enqueue("id:99\ndata:hello\n\n"); |
| 134 | 134 |
| 135 ASSERT_EQ(1u, listener->events().size()); | 135 ASSERT_EQ(1u, listener->events().size()); |
| 136 ASSERT_EQ("message", listener->events()[0]->type()); | 136 ASSERT_EQ("message", listener->events()[0]->type()); |
| 137 RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener
->events()[0].get()); | 137 RawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener->events()[0
].get()); |
| 138 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); | 138 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
| 139 EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); | 139 EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); |
| 140 EXPECT_EQ("99", event->lastEventId()); | 140 EXPECT_EQ("99", event->lastEventId()); |
| 141 } | 141 } |
| 142 | 142 |
| 143 TEST_F(EventSourceTest, DispatchMessageEventWithCustomEventType) | 143 TEST_F(EventSourceTest, DispatchMessageEventWithCustomEventType) |
| 144 { | 144 { |
| 145 RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create()
; | 145 RawPtr<FakeEventListener> listener = FakeEventListener::create(); |
| 146 | 146 |
| 147 source()->addEventListener("foo", listener); | 147 source()->addEventListener("foo", listener); |
| 148 enqueue("event:foo\ndata:hello\n\n"); | 148 enqueue("event:foo\ndata:hello\n\n"); |
| 149 | 149 |
| 150 ASSERT_EQ(1u, listener->events().size()); | 150 ASSERT_EQ(1u, listener->events().size()); |
| 151 ASSERT_EQ("foo", listener->events()[0]->type()); | 151 ASSERT_EQ("foo", listener->events()[0]->type()); |
| 152 RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener
->events()[0].get()); | 152 RawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener->events()[0
].get()); |
| 153 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); | 153 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
| 154 EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); | 154 EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); |
| 155 } | 155 } |
| 156 | 156 |
| 157 TEST_F(EventSourceTest, RetryTakesEffectEvenWhenNotDispatching) | 157 TEST_F(EventSourceTest, RetryTakesEffectEvenWhenNotDispatching) |
| 158 { | 158 { |
| 159 RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create()
; | 159 RawPtr<FakeEventListener> listener = FakeEventListener::create(); |
| 160 | 160 |
| 161 source()->addEventListener("message", listener); | 161 source()->addEventListener("message", listener); |
| 162 ASSERT_NE(999u, EventSource::defaultReconnectDelay); | 162 ASSERT_NE(999u, EventSource::defaultReconnectDelay); |
| 163 | 163 |
| 164 EXPECT_EQ(EventSource::defaultReconnectDelay, source()->reconnectDelayForTes
t()); | 164 EXPECT_EQ(EventSource::defaultReconnectDelay, source()->reconnectDelayForTes
t()); |
| 165 enqueue("retry:999\n"); | 165 enqueue("retry:999\n"); |
| 166 EXPECT_EQ(999u, source()->reconnectDelayForTest()); | 166 EXPECT_EQ(999u, source()->reconnectDelayForTest()); |
| 167 EXPECT_EQ(0u, listener->events().size()); | 167 EXPECT_EQ(0u, listener->events().size()); |
| 168 } | 168 } |
| 169 | 169 |
| 170 TEST_F(EventSourceTest, EventTypeShouldBeReset) | 170 TEST_F(EventSourceTest, EventTypeShouldBeReset) |
| 171 { | 171 { |
| 172 RefPtrWillBeRawPtr<FakeEventListener> fooListener = FakeEventListener::creat
e(); | 172 RawPtr<FakeEventListener> fooListener = FakeEventListener::create(); |
| 173 RefPtrWillBeRawPtr<FakeEventListener> messageListener = FakeEventListener::c
reate(); | 173 RawPtr<FakeEventListener> messageListener = FakeEventListener::create(); |
| 174 | 174 |
| 175 source()->addEventListener("foo", fooListener); | 175 source()->addEventListener("foo", fooListener); |
| 176 source()->addEventListener("message", messageListener); | 176 source()->addEventListener("message", messageListener); |
| 177 enqueue("event:foo\ndata:hello\n\ndata:bye\n\n"); | 177 enqueue("event:foo\ndata:hello\n\ndata:bye\n\n"); |
| 178 | 178 |
| 179 ASSERT_EQ(1u, fooListener->events().size()); | 179 ASSERT_EQ(1u, fooListener->events().size()); |
| 180 ASSERT_EQ("foo", fooListener->events()[0]->type()); | 180 ASSERT_EQ("foo", fooListener->events()[0]->type()); |
| 181 RefPtrWillBeRawPtr<MessageEvent> fooEvent = static_cast<MessageEvent*>(fooLi
stener->events()[0].get()); | 181 RawPtr<MessageEvent> fooEvent = static_cast<MessageEvent*>(fooListener->even
ts()[0].get()); |
| 182 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, fooEvent->dataType())
; | 182 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, fooEvent->dataType())
; |
| 183 EXPECT_EQ("hello", dataAsString(scriptState(), fooEvent.get())); | 183 EXPECT_EQ("hello", dataAsString(scriptState(), fooEvent.get())); |
| 184 | 184 |
| 185 ASSERT_EQ(1u, messageListener->events().size()); | 185 ASSERT_EQ(1u, messageListener->events().size()); |
| 186 ASSERT_EQ("message", messageListener->events()[0]->type()); | 186 ASSERT_EQ("message", messageListener->events()[0]->type()); |
| 187 RefPtrWillBeRawPtr<MessageEvent> messageEvent = static_cast<MessageEvent*>(m
essageListener->events()[0].get()); | 187 RawPtr<MessageEvent> messageEvent = static_cast<MessageEvent*>(messageListen
er->events()[0].get()); |
| 188 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, messageEvent->dataTyp
e()); | 188 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, messageEvent->dataTyp
e()); |
| 189 EXPECT_EQ("bye", dataAsString(scriptState(), messageEvent.get())); | 189 EXPECT_EQ("bye", dataAsString(scriptState(), messageEvent.get())); |
| 190 } | 190 } |
| 191 | 191 |
| 192 TEST_F(EventSourceTest, DataShouldBeReset) | 192 TEST_F(EventSourceTest, DataShouldBeReset) |
| 193 { | 193 { |
| 194 RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create()
; | 194 RawPtr<FakeEventListener> listener = FakeEventListener::create(); |
| 195 | 195 |
| 196 source()->addEventListener("message", listener); | 196 source()->addEventListener("message", listener); |
| 197 enqueue("data:hello\n\n\n"); | 197 enqueue("data:hello\n\n\n"); |
| 198 | 198 |
| 199 ASSERT_EQ(1u, listener->events().size()); | 199 ASSERT_EQ(1u, listener->events().size()); |
| 200 ASSERT_EQ("message", listener->events()[0]->type()); | 200 ASSERT_EQ("message", listener->events()[0]->type()); |
| 201 RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener
->events()[0].get()); | 201 RawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener->events()[0
].get()); |
| 202 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); | 202 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
| 203 EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); | 203 EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); |
| 204 } | 204 } |
| 205 | 205 |
| 206 TEST_F(EventSourceTest, LastEventIdShouldNotBeReset) | 206 TEST_F(EventSourceTest, LastEventIdShouldNotBeReset) |
| 207 { | 207 { |
| 208 RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create()
; | 208 RawPtr<FakeEventListener> listener = FakeEventListener::create(); |
| 209 | 209 |
| 210 source()->addEventListener("message", listener); | 210 source()->addEventListener("message", listener); |
| 211 enqueue("id:99\ndata:hello\n\ndata:bye\n\n"); | 211 enqueue("id:99\ndata:hello\n\ndata:bye\n\n"); |
| 212 | 212 |
| 213 ASSERT_EQ(2u, listener->events().size()); | 213 ASSERT_EQ(2u, listener->events().size()); |
| 214 | 214 |
| 215 ASSERT_EQ("message", listener->events()[0]->type()); | 215 ASSERT_EQ("message", listener->events()[0]->type()); |
| 216 RefPtrWillBeRawPtr<MessageEvent> event0 = static_cast<MessageEvent*>(listene
r->events()[0].get()); | 216 RawPtr<MessageEvent> event0 = static_cast<MessageEvent*>(listener->events()[
0].get()); |
| 217 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event0->dataType()); | 217 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event0->dataType()); |
| 218 EXPECT_EQ("hello", dataAsString(scriptState(), event0.get())); | 218 EXPECT_EQ("hello", dataAsString(scriptState(), event0.get())); |
| 219 EXPECT_EQ("99", event0->lastEventId()); | 219 EXPECT_EQ("99", event0->lastEventId()); |
| 220 | 220 |
| 221 ASSERT_EQ("message", listener->events()[1]->type()); | 221 ASSERT_EQ("message", listener->events()[1]->type()); |
| 222 RefPtrWillBeRawPtr<MessageEvent> event1 = static_cast<MessageEvent*>(listene
r->events()[1].get()); | 222 RawPtr<MessageEvent> event1 = static_cast<MessageEvent*>(listener->events()[
1].get()); |
| 223 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event1->dataType()); | 223 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event1->dataType()); |
| 224 EXPECT_EQ("bye", dataAsString(scriptState(), event1.get())); | 224 EXPECT_EQ("bye", dataAsString(scriptState(), event1.get())); |
| 225 EXPECT_EQ("99", event1->lastEventId()); | 225 EXPECT_EQ("99", event1->lastEventId()); |
| 226 } | 226 } |
| 227 | 227 |
| 228 TEST_F(EventSourceTest, VariousNewLinesShouldBeAllowed) | 228 TEST_F(EventSourceTest, VariousNewLinesShouldBeAllowed) |
| 229 { | 229 { |
| 230 RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create()
; | 230 RawPtr<FakeEventListener> listener = FakeEventListener::create(); |
| 231 | 231 |
| 232 source()->addEventListener("message", listener); | 232 source()->addEventListener("message", listener); |
| 233 enqueueOneByOne("data:hello\r\n\rdata:bye\r\r"); | 233 enqueueOneByOne("data:hello\r\n\rdata:bye\r\r"); |
| 234 | 234 |
| 235 ASSERT_EQ(2u, listener->events().size()); | 235 ASSERT_EQ(2u, listener->events().size()); |
| 236 | 236 |
| 237 ASSERT_EQ("message", listener->events()[0]->type()); | 237 ASSERT_EQ("message", listener->events()[0]->type()); |
| 238 RefPtrWillBeRawPtr<MessageEvent> event0 = static_cast<MessageEvent*>(listene
r->events()[0].get()); | 238 RawPtr<MessageEvent> event0 = static_cast<MessageEvent*>(listener->events()[
0].get()); |
| 239 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event0->dataType()); | 239 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event0->dataType()); |
| 240 EXPECT_EQ("hello", dataAsString(scriptState(), event0.get())); | 240 EXPECT_EQ("hello", dataAsString(scriptState(), event0.get())); |
| 241 | 241 |
| 242 ASSERT_EQ("message", listener->events()[1]->type()); | 242 ASSERT_EQ("message", listener->events()[1]->type()); |
| 243 RefPtrWillBeRawPtr<MessageEvent> event1 = static_cast<MessageEvent*>(listene
r->events()[1].get()); | 243 RawPtr<MessageEvent> event1 = static_cast<MessageEvent*>(listener->events()[
1].get()); |
| 244 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event1->dataType()); | 244 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event1->dataType()); |
| 245 EXPECT_EQ("bye", dataAsString(scriptState(), event1.get())); | 245 EXPECT_EQ("bye", dataAsString(scriptState(), event1.get())); |
| 246 } | 246 } |
| 247 | 247 |
| 248 TEST_F(EventSourceTest, RetryWithEmptyValueShouldRestoreDefaultValue) | 248 TEST_F(EventSourceTest, RetryWithEmptyValueShouldRestoreDefaultValue) |
| 249 { | 249 { |
| 250 // TODO(yhirano): This is unspecified in the spec. We need to update | 250 // TODO(yhirano): This is unspecified in the spec. We need to update |
| 251 // the implementation or the spec. | 251 // the implementation or the spec. |
| 252 EXPECT_EQ(EventSource::defaultReconnectDelay, source()->reconnectDelayForTes
t()); | 252 EXPECT_EQ(EventSource::defaultReconnectDelay, source()->reconnectDelayForTes
t()); |
| 253 enqueue("retry: 12\n"); | 253 enqueue("retry: 12\n"); |
| 254 EXPECT_NE(EventSource::defaultReconnectDelay, source()->reconnectDelayForTes
t()); | 254 EXPECT_NE(EventSource::defaultReconnectDelay, source()->reconnectDelayForTes
t()); |
| 255 enqueue("retry\n"); | 255 enqueue("retry\n"); |
| 256 EXPECT_EQ(EventSource::defaultReconnectDelay, source()->reconnectDelayForTes
t()); | 256 EXPECT_EQ(EventSource::defaultReconnectDelay, source()->reconnectDelayForTes
t()); |
| 257 } | 257 } |
| 258 | 258 |
| 259 TEST_F(EventSourceTest, NonDigitRetryShouldBeIgnored) | 259 TEST_F(EventSourceTest, NonDigitRetryShouldBeIgnored) |
| 260 { | 260 { |
| 261 RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create()
; | 261 RawPtr<FakeEventListener> listener = FakeEventListener::create(); |
| 262 | 262 |
| 263 source()->addEventListener("message", listener); | 263 source()->addEventListener("message", listener); |
| 264 | 264 |
| 265 EXPECT_EQ(EventSource::defaultReconnectDelay, source()->reconnectDelayForTes
t()); | 265 EXPECT_EQ(EventSource::defaultReconnectDelay, source()->reconnectDelayForTes
t()); |
| 266 enqueue("retry:123\n"); | 266 enqueue("retry:123\n"); |
| 267 EXPECT_NE(EventSource::defaultReconnectDelay, source()->reconnectDelayForTes
t()); | 267 EXPECT_NE(EventSource::defaultReconnectDelay, source()->reconnectDelayForTes
t()); |
| 268 EXPECT_EQ(123u, source()->reconnectDelayForTest()); | 268 EXPECT_EQ(123u, source()->reconnectDelayForTest()); |
| 269 | 269 |
| 270 enqueue("retry:a0\n"); | 270 enqueue("retry:a0\n"); |
| 271 EXPECT_EQ(123u, source()->reconnectDelayForTest()); | 271 EXPECT_EQ(123u, source()->reconnectDelayForTest()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 285 EXPECT_EQ(123u, source()->reconnectDelayForTest()); | 285 EXPECT_EQ(123u, source()->reconnectDelayForTest()); |
| 286 | 286 |
| 287 enqueue("retry:456 \n"); | 287 enqueue("retry:456 \n"); |
| 288 EXPECT_EQ(123u, source()->reconnectDelayForTest()); | 288 EXPECT_EQ(123u, source()->reconnectDelayForTest()); |
| 289 | 289 |
| 290 EXPECT_EQ(0u, listener->events().size()); | 290 EXPECT_EQ(0u, listener->events().size()); |
| 291 } | 291 } |
| 292 | 292 |
| 293 TEST_F(EventSourceTest, UnrecognizedFieldShouldBeIgnored) | 293 TEST_F(EventSourceTest, UnrecognizedFieldShouldBeIgnored) |
| 294 { | 294 { |
| 295 RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create()
; | 295 RawPtr<FakeEventListener> listener = FakeEventListener::create(); |
| 296 | 296 |
| 297 source()->addEventListener("message", listener); | 297 source()->addEventListener("message", listener); |
| 298 enqueue("data:hello\nhoge:fuga\npiyo\n\n"); | 298 enqueue("data:hello\nhoge:fuga\npiyo\n\n"); |
| 299 | 299 |
| 300 ASSERT_EQ(1u, listener->events().size()); | 300 ASSERT_EQ(1u, listener->events().size()); |
| 301 ASSERT_EQ("message", listener->events()[0]->type()); | 301 ASSERT_EQ("message", listener->events()[0]->type()); |
| 302 RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener
->events()[0].get()); | 302 RawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener->events()[0
].get()); |
| 303 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); | 303 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
| 304 EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); | 304 EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); |
| 305 } | 305 } |
| 306 | 306 |
| 307 TEST_F(EventSourceTest, CommentShouldBeIgnored) | 307 TEST_F(EventSourceTest, CommentShouldBeIgnored) |
| 308 { | 308 { |
| 309 RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create()
; | 309 RawPtr<FakeEventListener> listener = FakeEventListener::create(); |
| 310 | 310 |
| 311 source()->addEventListener("message", listener); | 311 source()->addEventListener("message", listener); |
| 312 enqueue("data:hello\n:event:a\n\n"); | 312 enqueue("data:hello\n:event:a\n\n"); |
| 313 | 313 |
| 314 ASSERT_EQ(1u, listener->events().size()); | 314 ASSERT_EQ(1u, listener->events().size()); |
| 315 | 315 |
| 316 ASSERT_EQ("message", listener->events()[0]->type()); | 316 ASSERT_EQ("message", listener->events()[0]->type()); |
| 317 RefPtrWillBeRawPtr<MessageEvent> event0 = static_cast<MessageEvent*>(listene
r->events()[0].get()); | 317 RawPtr<MessageEvent> event0 = static_cast<MessageEvent*>(listener->events()[
0].get()); |
| 318 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event0->dataType()); | 318 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event0->dataType()); |
| 319 EXPECT_EQ("hello", dataAsString(scriptState(), event0.get())); | 319 EXPECT_EQ("hello", dataAsString(scriptState(), event0.get())); |
| 320 } | 320 } |
| 321 | 321 |
| 322 TEST_F(EventSourceTest, BOMShouldBeIgnored) | 322 TEST_F(EventSourceTest, BOMShouldBeIgnored) |
| 323 { | 323 { |
| 324 RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create()
; | 324 RawPtr<FakeEventListener> listener = FakeEventListener::create(); |
| 325 | 325 |
| 326 source()->addEventListener("message", listener); | 326 source()->addEventListener("message", listener); |
| 327 enqueue("\xef\xbb\xbf" "data:hello\n\n"); | 327 enqueue("\xef\xbb\xbf" "data:hello\n\n"); |
| 328 | 328 |
| 329 ASSERT_EQ(1u, listener->events().size()); | 329 ASSERT_EQ(1u, listener->events().size()); |
| 330 | 330 |
| 331 ASSERT_EQ("message", listener->events()[0]->type()); | 331 ASSERT_EQ("message", listener->events()[0]->type()); |
| 332 RefPtrWillBeRawPtr<MessageEvent> event0 = static_cast<MessageEvent*>(listene
r->events()[0].get()); | 332 RawPtr<MessageEvent> event0 = static_cast<MessageEvent*>(listener->events()[
0].get()); |
| 333 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event0->dataType()); | 333 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event0->dataType()); |
| 334 EXPECT_EQ("hello", dataAsString(scriptState(), event0.get())); | 334 EXPECT_EQ("hello", dataAsString(scriptState(), event0.get())); |
| 335 } | 335 } |
| 336 | 336 |
| 337 TEST_F(EventSourceTest, ColonlessLineShouldBeTreatedAsNameOnlyField) | 337 TEST_F(EventSourceTest, ColonlessLineShouldBeTreatedAsNameOnlyField) |
| 338 { | 338 { |
| 339 RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create()
; | 339 RawPtr<FakeEventListener> listener = FakeEventListener::create(); |
| 340 | 340 |
| 341 source()->addEventListener("message", listener); | 341 source()->addEventListener("message", listener); |
| 342 enqueue("data:hello\nevent:a\nevent\n\n"); | 342 enqueue("data:hello\nevent:a\nevent\n\n"); |
| 343 | 343 |
| 344 ASSERT_EQ(1u, listener->events().size()); | 344 ASSERT_EQ(1u, listener->events().size()); |
| 345 | 345 |
| 346 ASSERT_EQ("message", listener->events()[0]->type()); | 346 ASSERT_EQ("message", listener->events()[0]->type()); |
| 347 RefPtrWillBeRawPtr<MessageEvent> event0 = static_cast<MessageEvent*>(listene
r->events()[0].get()); | 347 RawPtr<MessageEvent> event0 = static_cast<MessageEvent*>(listener->events()[
0].get()); |
| 348 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event0->dataType()); | 348 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event0->dataType()); |
| 349 EXPECT_EQ("hello", dataAsString(scriptState(), event0.get())); | 349 EXPECT_EQ("hello", dataAsString(scriptState(), event0.get())); |
| 350 } | 350 } |
| 351 | 351 |
| 352 TEST_F(EventSourceTest, AtMostOneLeadingSpaceCanBeSkipped) | 352 TEST_F(EventSourceTest, AtMostOneLeadingSpaceCanBeSkipped) |
| 353 { | 353 { |
| 354 RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create()
; | 354 RawPtr<FakeEventListener> listener = FakeEventListener::create(); |
| 355 | 355 |
| 356 source()->addEventListener(" type ", listener); | 356 source()->addEventListener(" type ", listener); |
| 357 enqueue("data: hello \nevent: type \n\n"); | 357 enqueue("data: hello \nevent: type \n\n"); |
| 358 | 358 |
| 359 ASSERT_EQ(1u, listener->events().size()); | 359 ASSERT_EQ(1u, listener->events().size()); |
| 360 ASSERT_EQ(" type ", listener->events()[0]->type()); | 360 ASSERT_EQ(" type ", listener->events()[0]->type()); |
| 361 RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener
->events()[0].get()); | 361 RawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener->events()[0
].get()); |
| 362 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); | 362 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
| 363 EXPECT_EQ(" hello ", dataAsString(scriptState(), event.get())); | 363 EXPECT_EQ(" hello ", dataAsString(scriptState(), event.get())); |
| 364 } | 364 } |
| 365 | 365 |
| 366 TEST_F(EventSourceTest, DataShouldAccumulate) | 366 TEST_F(EventSourceTest, DataShouldAccumulate) |
| 367 { | 367 { |
| 368 RefPtrWillBeRawPtr<FakeEventListener> listener = FakeEventListener::create()
; | 368 RawPtr<FakeEventListener> listener = FakeEventListener::create(); |
| 369 | 369 |
| 370 source()->addEventListener("message", listener); | 370 source()->addEventListener("message", listener); |
| 371 enqueue("data:hello\ndata: world\ndata\n\n"); | 371 enqueue("data:hello\ndata: world\ndata\n\n"); |
| 372 | 372 |
| 373 ASSERT_EQ(1u, listener->events().size()); | 373 ASSERT_EQ(1u, listener->events().size()); |
| 374 ASSERT_EQ("message", listener->events()[0]->type()); | 374 ASSERT_EQ("message", listener->events()[0]->type()); |
| 375 RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener
->events()[0].get()); | 375 RawPtr<MessageEvent> event = static_cast<MessageEvent*>(listener->events()[0
].get()); |
| 376 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); | 376 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
| 377 EXPECT_EQ("hello\nworld\n", dataAsString(scriptState(), event.get())); | 377 EXPECT_EQ("hello\nworld\n", dataAsString(scriptState(), event.get())); |
| 378 } | 378 } |
| 379 | 379 |
| 380 TEST_F(EventSourceTest, EventShouldNotAccumulate) | 380 TEST_F(EventSourceTest, EventShouldNotAccumulate) |
| 381 { | 381 { |
| 382 RefPtrWillBeRawPtr<FakeEventListener> aListener = FakeEventListener::create(
); | 382 RawPtr<FakeEventListener> aListener = FakeEventListener::create(); |
| 383 RefPtrWillBeRawPtr<FakeEventListener> bListener = FakeEventListener::create(
); | 383 RawPtr<FakeEventListener> bListener = FakeEventListener::create(); |
| 384 | 384 |
| 385 source()->addEventListener("a", aListener); | 385 source()->addEventListener("a", aListener); |
| 386 source()->addEventListener("b", bListener); | 386 source()->addEventListener("b", bListener); |
| 387 enqueue("data:hello\nevent:a\nevent:b\n\n"); | 387 enqueue("data:hello\nevent:a\nevent:b\n\n"); |
| 388 | 388 |
| 389 ASSERT_EQ(0u, aListener->events().size()); | 389 ASSERT_EQ(0u, aListener->events().size()); |
| 390 ASSERT_EQ(1u, bListener->events().size()); | 390 ASSERT_EQ(1u, bListener->events().size()); |
| 391 ASSERT_EQ("b", bListener->events()[0]->type()); | 391 ASSERT_EQ("b", bListener->events()[0]->type()); |
| 392 RefPtrWillBeRawPtr<MessageEvent> event = static_cast<MessageEvent*>(bListene
r->events()[0].get()); | 392 RawPtr<MessageEvent> event = static_cast<MessageEvent*>(bListener->events()[
0].get()); |
| 393 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); | 393 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, event->dataType()); |
| 394 EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); | 394 EXPECT_EQ("hello", dataAsString(scriptState(), event.get())); |
| 395 } | 395 } |
| 396 | 396 |
| 397 TEST_F(EventSourceTest, FeedDataOneByOne) | 397 TEST_F(EventSourceTest, FeedDataOneByOne) |
| 398 { | 398 { |
| 399 RefPtrWillBeRawPtr<FakeEventListener> aListener = FakeEventListener::create(
); | 399 RawPtr<FakeEventListener> aListener = FakeEventListener::create(); |
| 400 RefPtrWillBeRawPtr<FakeEventListener> bListener = FakeEventListener::create(
); | 400 RawPtr<FakeEventListener> bListener = FakeEventListener::create(); |
| 401 RefPtrWillBeRawPtr<FakeEventListener> messageListener = FakeEventListener::c
reate(); | 401 RawPtr<FakeEventListener> messageListener = FakeEventListener::create(); |
| 402 | 402 |
| 403 source()->addEventListener("a", aListener); | 403 source()->addEventListener("a", aListener); |
| 404 source()->addEventListener("b", bListener); | 404 source()->addEventListener("b", bListener); |
| 405 source()->addEventListener("message", messageListener); | 405 source()->addEventListener("message", messageListener); |
| 406 enqueueOneByOne("data:hello\r\ndata:world\revent:a\revent:b\nid:4\n\nid:8\nd
ata:bye\r\n\r"); | 406 enqueueOneByOne("data:hello\r\ndata:world\revent:a\revent:b\nid:4\n\nid:8\nd
ata:bye\r\n\r"); |
| 407 | 407 |
| 408 ASSERT_EQ(0u, aListener->events().size()); | 408 ASSERT_EQ(0u, aListener->events().size()); |
| 409 | 409 |
| 410 ASSERT_EQ(1u, bListener->events().size()); | 410 ASSERT_EQ(1u, bListener->events().size()); |
| 411 ASSERT_EQ("b", bListener->events()[0]->type()); | 411 ASSERT_EQ("b", bListener->events()[0]->type()); |
| 412 RefPtrWillBeRawPtr<MessageEvent> bEvent = static_cast<MessageEvent*>(bListen
er->events()[0].get()); | 412 RawPtr<MessageEvent> bEvent = static_cast<MessageEvent*>(bListener->events()
[0].get()); |
| 413 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, bEvent->dataType()); | 413 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, bEvent->dataType()); |
| 414 EXPECT_EQ("hello\nworld", dataAsString(scriptState(), bEvent.get())); | 414 EXPECT_EQ("hello\nworld", dataAsString(scriptState(), bEvent.get())); |
| 415 EXPECT_EQ("4", bEvent->lastEventId()); | 415 EXPECT_EQ("4", bEvent->lastEventId()); |
| 416 | 416 |
| 417 ASSERT_EQ(1u, messageListener->events().size()); | 417 ASSERT_EQ(1u, messageListener->events().size()); |
| 418 ASSERT_EQ("message", messageListener->events()[0]->type()); | 418 ASSERT_EQ("message", messageListener->events()[0]->type()); |
| 419 RefPtrWillBeRawPtr<MessageEvent> messageEvent = static_cast<MessageEvent*>(m
essageListener->events()[0].get()); | 419 RawPtr<MessageEvent> messageEvent = static_cast<MessageEvent*>(messageListen
er->events()[0].get()); |
| 420 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, messageEvent->dataTyp
e()); | 420 ASSERT_EQ(MessageEvent::DataTypeSerializedScriptValue, messageEvent->dataTyp
e()); |
| 421 EXPECT_EQ("bye", dataAsString(scriptState(), messageEvent.get())); | 421 EXPECT_EQ("bye", dataAsString(scriptState(), messageEvent.get())); |
| 422 EXPECT_EQ("8", messageEvent->lastEventId()); | 422 EXPECT_EQ("8", messageEvent->lastEventId()); |
| 423 } | 423 } |
| 424 | 424 |
| 425 } // namespace | 425 } // namespace |
| 426 | 426 |
| 427 } // namespace blink | 427 } // namespace blink |
| OLD | NEW |