OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "modules/fetch/FetchDataLoader.h" | 5 #include "modules/fetch/FetchDataLoader.h" |
6 | 6 |
7 #include "modules/fetch/DataConsumerHandleTestUtil.h" | 7 #include "modules/fetch/DataConsumerHandleTestUtil.h" |
8 #include "testing/gmock/include/gmock/gmock.h" | 8 #include "testing/gmock/include/gmock/gmock.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 #include <memory> | 10 #include <memory> |
11 | 11 |
12 namespace blink { | 12 namespace blink { |
13 | 13 |
14 namespace { | 14 namespace { |
15 | 15 |
| 16 using ::testing::ByMove; |
16 using ::testing::InSequence; | 17 using ::testing::InSequence; |
17 using ::testing::Return; | 18 using ::testing::Return; |
18 using ::testing::DoAll; | 19 using ::testing::DoAll; |
19 using ::testing::StrictMock; | 20 using ::testing::StrictMock; |
20 using ::testing::_; | 21 using ::testing::_; |
21 using ::testing::SaveArg; | 22 using ::testing::SaveArg; |
22 using ::testing::SetArgPointee; | 23 using ::testing::SetArgPointee; |
23 using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>; | 24 using Checkpoint = StrictMock<::testing::MockFunction<void(int)>>; |
24 using MockFetchDataLoaderClient = DataConsumerHandleTestUtil::MockFetchDataLoade
rClient; | 25 using MockFetchDataLoaderClient = DataConsumerHandleTestUtil::MockFetchDataLoade
rClient; |
25 using MockHandle = DataConsumerHandleTestUtil::MockFetchDataConsumerHandle; | 26 using MockHandle = DataConsumerHandleTestUtil::MockFetchDataConsumerHandle; |
26 using MockReader = DataConsumerHandleTestUtil::MockFetchDataConsumerReader; | 27 using MockReader = DataConsumerHandleTestUtil::MockFetchDataConsumerReader; |
27 | 28 |
28 const WebDataConsumerHandle::Result kOk = WebDataConsumerHandle::Ok; | 29 const WebDataConsumerHandle::Result kOk = WebDataConsumerHandle::Ok; |
29 const WebDataConsumerHandle::Result kUnexpectedError = WebDataConsumerHandle::Un
expectedError; | 30 const WebDataConsumerHandle::Result kUnexpectedError = WebDataConsumerHandle::Un
expectedError; |
30 const WebDataConsumerHandle::Result kDone = WebDataConsumerHandle::Done; | 31 const WebDataConsumerHandle::Result kDone = WebDataConsumerHandle::Done; |
31 const WebDataConsumerHandle::Flags kNone = WebDataConsumerHandle::FlagNone; | 32 const WebDataConsumerHandle::Flags kNone = WebDataConsumerHandle::FlagNone; |
32 const FetchDataConsumerHandle::Reader::BlobSizePolicy kDisallowBlobWithInvalidSi
ze = FetchDataConsumerHandle::Reader::DisallowBlobWithInvalidSize; | 33 const FetchDataConsumerHandle::Reader::BlobSizePolicy kDisallowBlobWithInvalidSi
ze = FetchDataConsumerHandle::Reader::DisallowBlobWithInvalidSize; |
33 | 34 |
34 const char kQuickBrownFox[] = "Quick brown fox"; | 35 const char kQuickBrownFox[] = "Quick brown fox"; |
35 const size_t kQuickBrownFoxLength = 15; | 36 const size_t kQuickBrownFoxLength = 15; |
36 const size_t kQuickBrownFoxLengthWithTerminatingNull = 16; | 37 const size_t kQuickBrownFoxLengthWithTerminatingNull = 16; |
37 | 38 |
38 TEST(FetchDataLoaderTest, LoadAsBlob) | 39 TEST(FetchDataLoaderTest, LoadAsBlob) |
39 { | 40 { |
40 WebDataConsumerHandle::Client *client = nullptr; | 41 WebDataConsumerHandle::Client *client = nullptr; |
41 Checkpoint checkpoint; | 42 Checkpoint checkpoint; |
42 | 43 |
43 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 44 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
44 std::unique_ptr<MockReader> reader = MockReader::create(); | 45 |
| 46 // |reader| will be adopted by |obtainFetchDataReader|. |
| 47 MockReader* reader = MockReader::create().release(); |
| 48 |
45 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle
("text/test"); | 49 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle
("text/test"); |
46 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); | 50 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
47 RefPtr<BlobDataHandle> blobDataHandle; | 51 RefPtr<BlobDataHandle> blobDataHandle; |
48 | 52 |
49 InSequence s; | 53 InSequence s; |
50 EXPECT_CALL(checkpoint, Call(1)); | 54 EXPECT_CALL(checkpoint, Call(1)); |
51 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(DoAll(SaveArg<0>(&cli
ent), Return(reader.get()))); | 55 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl
ient), Return(ByMove(WTF::wrapUnique(reader))))); |
52 EXPECT_CALL(*reader, drainAsBlobDataHandle(kDisallowBlobWithInvalidSize)).Wi
llOnce(Return(nullptr)); | 56 EXPECT_CALL(*reader, drainAsBlobDataHandle(kDisallowBlobWithInvalidSize)).Wi
llOnce(Return(nullptr)); |
53 EXPECT_CALL(checkpoint, Call(2)); | 57 EXPECT_CALL(checkpoint, Call(2)); |
54 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt
hWithTerminatingNull), Return(kOk))); | 58 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt
hWithTerminatingNull), Return(kOk))); |
55 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO
nce(Return(kOk)); | 59 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO
nce(Return(kOk)); |
56 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone)); | 60 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone)); |
57 EXPECT_CALL(*reader, destruct()); | 61 EXPECT_CALL(*reader, destruct()); |
58 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedBlobHandleMock(_)).Wil
lOnce(SaveArg<0>(&blobDataHandle)); | 62 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedBlobHandleMock(_)).Wil
lOnce(SaveArg<0>(&blobDataHandle)); |
59 EXPECT_CALL(checkpoint, Call(3)); | 63 EXPECT_CALL(checkpoint, Call(3)); |
60 EXPECT_CALL(checkpoint, Call(4)); | 64 EXPECT_CALL(checkpoint, Call(4)); |
61 | 65 |
62 // |reader| is adopted by |obtainReader|. | |
63 ASSERT_TRUE(reader.release()); | |
64 | |
65 checkpoint.Call(1); | 66 checkpoint.Call(1); |
66 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); | 67 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); |
67 checkpoint.Call(2); | 68 checkpoint.Call(2); |
68 ASSERT_TRUE(client); | 69 ASSERT_TRUE(client); |
69 client->didGetReadable(); | 70 client->didGetReadable(); |
70 checkpoint.Call(3); | 71 checkpoint.Call(3); |
71 fetchDataLoader->cancel(); | 72 fetchDataLoader->cancel(); |
72 checkpoint.Call(4); | 73 checkpoint.Call(4); |
73 | 74 |
74 ASSERT_TRUE(blobDataHandle); | 75 ASSERT_TRUE(blobDataHandle); |
75 EXPECT_EQ(kQuickBrownFoxLengthWithTerminatingNull, blobDataHandle->size()); | 76 EXPECT_EQ(kQuickBrownFoxLengthWithTerminatingNull, blobDataHandle->size()); |
76 EXPECT_EQ(String("text/test"), blobDataHandle->type()); | 77 EXPECT_EQ(String("text/test"), blobDataHandle->type()); |
77 } | 78 } |
78 | 79 |
79 TEST(FetchDataLoaderTest, LoadAsBlobFailed) | 80 TEST(FetchDataLoaderTest, LoadAsBlobFailed) |
80 { | 81 { |
81 WebDataConsumerHandle::Client *client = nullptr; | 82 WebDataConsumerHandle::Client *client = nullptr; |
82 Checkpoint checkpoint; | 83 Checkpoint checkpoint; |
83 | 84 |
84 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 85 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
85 std::unique_ptr<MockReader> reader = MockReader::create(); | 86 |
| 87 // |reader| is adopted by |obtainFetchDataReader|. |
| 88 MockReader* reader = MockReader::create().release(); |
| 89 |
86 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle
("text/test"); | 90 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle
("text/test"); |
87 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); | 91 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
88 | 92 |
89 InSequence s; | 93 InSequence s; |
90 EXPECT_CALL(checkpoint, Call(1)); | 94 EXPECT_CALL(checkpoint, Call(1)); |
91 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(DoAll(SaveArg<0>(&cli
ent), Return(reader.get()))); | 95 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl
ient), Return(ByMove(WTF::wrapUnique(reader))))); |
92 EXPECT_CALL(*reader, drainAsBlobDataHandle(kDisallowBlobWithInvalidSize)).Wi
llOnce(Return(nullptr)); | 96 EXPECT_CALL(*reader, drainAsBlobDataHandle(kDisallowBlobWithInvalidSize)).Wi
llOnce(Return(nullptr)); |
93 EXPECT_CALL(checkpoint, Call(2)); | 97 EXPECT_CALL(checkpoint, Call(2)); |
94 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt
hWithTerminatingNull), Return(kOk))); | 98 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt
hWithTerminatingNull), Return(kOk))); |
95 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO
nce(Return(kOk)); | 99 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO
nce(Return(kOk)); |
96 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kUnexpectedErro
r)); | 100 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kUnexpectedErro
r)); |
97 EXPECT_CALL(*reader, destruct()); | 101 EXPECT_CALL(*reader, destruct()); |
98 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed()); | 102 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed()); |
99 EXPECT_CALL(checkpoint, Call(3)); | 103 EXPECT_CALL(checkpoint, Call(3)); |
100 EXPECT_CALL(checkpoint, Call(4)); | 104 EXPECT_CALL(checkpoint, Call(4)); |
101 | 105 |
102 // |reader| is adopted by |obtainReader|. | |
103 ASSERT_TRUE(reader.release()); | |
104 | |
105 checkpoint.Call(1); | 106 checkpoint.Call(1); |
106 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); | 107 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); |
107 checkpoint.Call(2); | 108 checkpoint.Call(2); |
108 ASSERT_TRUE(client); | 109 ASSERT_TRUE(client); |
109 client->didGetReadable(); | 110 client->didGetReadable(); |
110 checkpoint.Call(3); | 111 checkpoint.Call(3); |
111 fetchDataLoader->cancel(); | 112 fetchDataLoader->cancel(); |
112 checkpoint.Call(4); | 113 checkpoint.Call(4); |
113 } | 114 } |
114 | 115 |
115 TEST(FetchDataLoaderTest, LoadAsBlobCancel) | 116 TEST(FetchDataLoaderTest, LoadAsBlobCancel) |
116 { | 117 { |
117 Checkpoint checkpoint; | 118 Checkpoint checkpoint; |
118 | 119 |
119 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 120 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
120 std::unique_ptr<MockReader> reader = MockReader::create(); | 121 |
| 122 // |reader| will be adopted by |obtainFetchDataReader|. |
| 123 MockReader* reader = MockReader::create().release(); |
| 124 |
121 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle
("text/test"); | 125 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle
("text/test"); |
122 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); | 126 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
123 | 127 |
124 InSequence s; | 128 InSequence s; |
125 EXPECT_CALL(checkpoint, Call(1)); | 129 EXPECT_CALL(checkpoint, Call(1)); |
126 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(Return(reader.get()))
; | 130 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(Return(ByMove(WTF::w
rapUnique(reader)))); |
127 EXPECT_CALL(*reader, drainAsBlobDataHandle(kDisallowBlobWithInvalidSize)).Wi
llOnce(Return(nullptr)); | 131 EXPECT_CALL(*reader, drainAsBlobDataHandle(kDisallowBlobWithInvalidSize)).Wi
llOnce(Return(nullptr)); |
128 EXPECT_CALL(checkpoint, Call(2)); | 132 EXPECT_CALL(checkpoint, Call(2)); |
129 EXPECT_CALL(*reader, destruct()); | 133 EXPECT_CALL(*reader, destruct()); |
130 EXPECT_CALL(checkpoint, Call(3)); | 134 EXPECT_CALL(checkpoint, Call(3)); |
131 | 135 |
132 // |reader| is adopted by |obtainReader|. | |
133 ASSERT_TRUE(reader.release()); | |
134 | |
135 checkpoint.Call(1); | 136 checkpoint.Call(1); |
136 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); | 137 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); |
137 checkpoint.Call(2); | 138 checkpoint.Call(2); |
138 fetchDataLoader->cancel(); | 139 fetchDataLoader->cancel(); |
139 checkpoint.Call(3); | 140 checkpoint.Call(3); |
140 } | 141 } |
141 | 142 |
142 TEST(FetchDataLoaderTest, LoadAsBlobViaDrainAsBlobDataHandleWithSameContentType) | 143 TEST(FetchDataLoaderTest, LoadAsBlobViaDrainAsBlobDataHandleWithSameContentType) |
143 { | 144 { |
144 std::unique_ptr<BlobData> blobData = BlobData::create(); | 145 std::unique_ptr<BlobData> blobData = BlobData::create(); |
145 blobData->appendBytes(kQuickBrownFox, kQuickBrownFoxLengthWithTerminatingNul
l); | 146 blobData->appendBytes(kQuickBrownFox, kQuickBrownFoxLengthWithTerminatingNul
l); |
146 blobData->setContentType("text/test"); | 147 blobData->setContentType("text/test"); |
147 RefPtr<BlobDataHandle> inputBlobDataHandle = BlobDataHandle::create(std::mov
e(blobData), kQuickBrownFoxLengthWithTerminatingNull); | 148 RefPtr<BlobDataHandle> inputBlobDataHandle = BlobDataHandle::create(std::mov
e(blobData), kQuickBrownFoxLengthWithTerminatingNull); |
148 | 149 |
149 Checkpoint checkpoint; | 150 Checkpoint checkpoint; |
150 | 151 |
151 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 152 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
152 std::unique_ptr<MockReader> reader = MockReader::create(); | 153 |
| 154 // |reader| will be adopted by |obtainFetchDataReader|. |
| 155 MockReader* reader = MockReader::create().release(); |
| 156 |
153 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle
("text/test"); | 157 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle
("text/test"); |
154 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); | 158 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
155 RefPtr<BlobDataHandle> blobDataHandle; | 159 RefPtr<BlobDataHandle> blobDataHandle; |
156 | 160 |
157 InSequence s; | 161 InSequence s; |
158 EXPECT_CALL(checkpoint, Call(1)); | 162 EXPECT_CALL(checkpoint, Call(1)); |
159 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(Return(reader.get()))
; | 163 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(Return(ByMove(WTF::w
rapUnique(reader)))); |
160 EXPECT_CALL(*reader, drainAsBlobDataHandle(kDisallowBlobWithInvalidSize)).Wi
llOnce(Return(inputBlobDataHandle)); | 164 EXPECT_CALL(*reader, drainAsBlobDataHandle(kDisallowBlobWithInvalidSize)).Wi
llOnce(Return(inputBlobDataHandle)); |
161 EXPECT_CALL(*reader, destruct()); | 165 EXPECT_CALL(*reader, destruct()); |
162 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedBlobHandleMock(_)).Wil
lOnce(SaveArg<0>(&blobDataHandle)); | 166 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedBlobHandleMock(_)).Wil
lOnce(SaveArg<0>(&blobDataHandle)); |
163 EXPECT_CALL(checkpoint, Call(2)); | 167 EXPECT_CALL(checkpoint, Call(2)); |
164 EXPECT_CALL(checkpoint, Call(3)); | 168 EXPECT_CALL(checkpoint, Call(3)); |
165 | 169 |
166 // |reader| is adopted by |obtainReader|. | |
167 ASSERT_TRUE(reader.release()); | |
168 | |
169 checkpoint.Call(1); | 170 checkpoint.Call(1); |
170 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); | 171 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); |
171 checkpoint.Call(2); | 172 checkpoint.Call(2); |
172 fetchDataLoader->cancel(); | 173 fetchDataLoader->cancel(); |
173 checkpoint.Call(3); | 174 checkpoint.Call(3); |
174 | 175 |
175 ASSERT_TRUE(blobDataHandle); | 176 ASSERT_TRUE(blobDataHandle); |
176 EXPECT_EQ(inputBlobDataHandle, blobDataHandle); | 177 EXPECT_EQ(inputBlobDataHandle, blobDataHandle); |
177 EXPECT_EQ(kQuickBrownFoxLengthWithTerminatingNull, blobDataHandle->size()); | 178 EXPECT_EQ(kQuickBrownFoxLengthWithTerminatingNull, blobDataHandle->size()); |
178 EXPECT_EQ(String("text/test"), blobDataHandle->type()); | 179 EXPECT_EQ(String("text/test"), blobDataHandle->type()); |
179 } | 180 } |
180 | 181 |
181 TEST(FetchDataLoaderTest, LoadAsBlobViaDrainAsBlobDataHandleWithDifferentContent
Type) | 182 TEST(FetchDataLoaderTest, LoadAsBlobViaDrainAsBlobDataHandleWithDifferentContent
Type) |
182 { | 183 { |
183 std::unique_ptr<BlobData> blobData = BlobData::create(); | 184 std::unique_ptr<BlobData> blobData = BlobData::create(); |
184 blobData->appendBytes(kQuickBrownFox, kQuickBrownFoxLengthWithTerminatingNul
l); | 185 blobData->appendBytes(kQuickBrownFox, kQuickBrownFoxLengthWithTerminatingNul
l); |
185 blobData->setContentType("text/different"); | 186 blobData->setContentType("text/different"); |
186 RefPtr<BlobDataHandle> inputBlobDataHandle = BlobDataHandle::create(std::mov
e(blobData), kQuickBrownFoxLengthWithTerminatingNull); | 187 RefPtr<BlobDataHandle> inputBlobDataHandle = BlobDataHandle::create(std::mov
e(blobData), kQuickBrownFoxLengthWithTerminatingNull); |
187 | 188 |
188 Checkpoint checkpoint; | 189 Checkpoint checkpoint; |
189 | 190 |
190 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 191 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
191 std::unique_ptr<MockReader> reader = MockReader::create(); | 192 |
| 193 // |reader| will be adopted by |obtainFetchDataReader|. |
| 194 MockReader* reader = MockReader::create().release(); |
| 195 |
192 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle
("text/test"); | 196 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsBlobHandle
("text/test"); |
193 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); | 197 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
194 RefPtr<BlobDataHandle> blobDataHandle; | 198 RefPtr<BlobDataHandle> blobDataHandle; |
195 | 199 |
196 InSequence s; | 200 InSequence s; |
197 EXPECT_CALL(checkpoint, Call(1)); | 201 EXPECT_CALL(checkpoint, Call(1)); |
198 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(Return(reader.get()))
; | 202 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(Return(ByMove(WTF::w
rapUnique(reader)))); |
199 EXPECT_CALL(*reader, drainAsBlobDataHandle(kDisallowBlobWithInvalidSize)).Wi
llOnce(Return(inputBlobDataHandle)); | 203 EXPECT_CALL(*reader, drainAsBlobDataHandle(kDisallowBlobWithInvalidSize)).Wi
llOnce(Return(inputBlobDataHandle)); |
200 EXPECT_CALL(*reader, destruct()); | 204 EXPECT_CALL(*reader, destruct()); |
201 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedBlobHandleMock(_)).Wil
lOnce(SaveArg<0>(&blobDataHandle)); | 205 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedBlobHandleMock(_)).Wil
lOnce(SaveArg<0>(&blobDataHandle)); |
202 EXPECT_CALL(checkpoint, Call(2)); | 206 EXPECT_CALL(checkpoint, Call(2)); |
203 EXPECT_CALL(checkpoint, Call(3)); | 207 EXPECT_CALL(checkpoint, Call(3)); |
204 | 208 |
205 // |reader| is adopted by |obtainReader|. | |
206 ASSERT_TRUE(reader.release()); | |
207 | |
208 checkpoint.Call(1); | 209 checkpoint.Call(1); |
209 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); | 210 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); |
210 checkpoint.Call(2); | 211 checkpoint.Call(2); |
211 fetchDataLoader->cancel(); | 212 fetchDataLoader->cancel(); |
212 checkpoint.Call(3); | 213 checkpoint.Call(3); |
213 | 214 |
214 ASSERT_TRUE(blobDataHandle); | 215 ASSERT_TRUE(blobDataHandle); |
215 EXPECT_NE(inputBlobDataHandle, blobDataHandle); | 216 EXPECT_NE(inputBlobDataHandle, blobDataHandle); |
216 EXPECT_EQ(kQuickBrownFoxLengthWithTerminatingNull, blobDataHandle->size()); | 217 EXPECT_EQ(kQuickBrownFoxLengthWithTerminatingNull, blobDataHandle->size()); |
217 EXPECT_EQ(String("text/test"), blobDataHandle->type()); | 218 EXPECT_EQ(String("text/test"), blobDataHandle->type()); |
218 } | 219 } |
219 | 220 |
220 TEST(FetchDataLoaderTest, LoadAsArrayBuffer) | 221 TEST(FetchDataLoaderTest, LoadAsArrayBuffer) |
221 { | 222 { |
222 WebDataConsumerHandle::Client *client = nullptr; | 223 WebDataConsumerHandle::Client *client = nullptr; |
223 Checkpoint checkpoint; | 224 Checkpoint checkpoint; |
224 | 225 |
225 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 226 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
226 std::unique_ptr<MockReader> reader = MockReader::create(); | 227 |
| 228 // |reader| will be adopted by |obtainFetchDataReader|. |
| 229 MockReader* reader = MockReader::create().release(); |
| 230 |
227 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffe
r(); | 231 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffe
r(); |
228 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); | 232 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
229 DOMArrayBuffer* arrayBuffer = nullptr; | 233 DOMArrayBuffer* arrayBuffer = nullptr; |
230 | 234 |
231 InSequence s; | 235 InSequence s; |
232 EXPECT_CALL(checkpoint, Call(1)); | 236 EXPECT_CALL(checkpoint, Call(1)); |
233 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(DoAll(SaveArg<0>(&cli
ent), Return(reader.get()))); | 237 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl
ient), Return(ByMove(WTF::wrapUnique(reader))))); |
234 EXPECT_CALL(checkpoint, Call(2)); | 238 EXPECT_CALL(checkpoint, Call(2)); |
235 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt
hWithTerminatingNull), Return(kOk))); | 239 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt
hWithTerminatingNull), Return(kOk))); |
236 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO
nce(Return(kOk)); | 240 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO
nce(Return(kOk)); |
237 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone)); | 241 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone)); |
238 EXPECT_CALL(*reader, destruct()); | 242 EXPECT_CALL(*reader, destruct()); |
239 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedArrayBufferMock(_)).Wi
llOnce(SaveArg<0>(&arrayBuffer)); | 243 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedArrayBufferMock(_)).Wi
llOnce(SaveArg<0>(&arrayBuffer)); |
240 EXPECT_CALL(checkpoint, Call(3)); | 244 EXPECT_CALL(checkpoint, Call(3)); |
241 EXPECT_CALL(checkpoint, Call(4)); | 245 EXPECT_CALL(checkpoint, Call(4)); |
242 | 246 |
243 // |reader| is adopted by |obtainReader|. | |
244 ASSERT_TRUE(reader.release()); | |
245 | |
246 checkpoint.Call(1); | 247 checkpoint.Call(1); |
247 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); | 248 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); |
248 checkpoint.Call(2); | 249 checkpoint.Call(2); |
249 ASSERT_TRUE(client); | 250 ASSERT_TRUE(client); |
250 client->didGetReadable(); | 251 client->didGetReadable(); |
251 checkpoint.Call(3); | 252 checkpoint.Call(3); |
252 fetchDataLoader->cancel(); | 253 fetchDataLoader->cancel(); |
253 checkpoint.Call(4); | 254 checkpoint.Call(4); |
254 | 255 |
255 ASSERT_TRUE(arrayBuffer); | 256 ASSERT_TRUE(arrayBuffer); |
256 ASSERT_EQ(kQuickBrownFoxLengthWithTerminatingNull, arrayBuffer->byteLength()
); | 257 ASSERT_EQ(kQuickBrownFoxLengthWithTerminatingNull, arrayBuffer->byteLength()
); |
257 EXPECT_STREQ(kQuickBrownFox, static_cast<const char*>(arrayBuffer->data())); | 258 EXPECT_STREQ(kQuickBrownFox, static_cast<const char*>(arrayBuffer->data())); |
258 } | 259 } |
259 | 260 |
260 TEST(FetchDataLoaderTest, LoadAsArrayBufferFailed) | 261 TEST(FetchDataLoaderTest, LoadAsArrayBufferFailed) |
261 { | 262 { |
262 WebDataConsumerHandle::Client *client = nullptr; | 263 WebDataConsumerHandle::Client *client = nullptr; |
263 Checkpoint checkpoint; | 264 Checkpoint checkpoint; |
264 | 265 |
265 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 266 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
266 std::unique_ptr<MockReader> reader = MockReader::create(); | 267 |
| 268 // |reader| will be adopted by |obtainFetchDataReader|. |
| 269 MockReader* reader = MockReader::create().release(); |
| 270 |
267 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffe
r(); | 271 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffe
r(); |
268 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); | 272 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
269 | 273 |
270 InSequence s; | 274 InSequence s; |
271 EXPECT_CALL(checkpoint, Call(1)); | 275 EXPECT_CALL(checkpoint, Call(1)); |
272 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(DoAll(SaveArg<0>(&cli
ent), Return(reader.get()))); | 276 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl
ient), Return(ByMove(WTF::wrapUnique(reader))))); |
273 EXPECT_CALL(checkpoint, Call(2)); | 277 EXPECT_CALL(checkpoint, Call(2)); |
274 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt
hWithTerminatingNull), Return(kOk))); | 278 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt
hWithTerminatingNull), Return(kOk))); |
275 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO
nce(Return(kOk)); | 279 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO
nce(Return(kOk)); |
276 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kUnexpectedErro
r)); | 280 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kUnexpectedErro
r)); |
277 EXPECT_CALL(*reader, destruct()); | 281 EXPECT_CALL(*reader, destruct()); |
278 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed()); | 282 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed()); |
279 EXPECT_CALL(checkpoint, Call(3)); | 283 EXPECT_CALL(checkpoint, Call(3)); |
280 EXPECT_CALL(checkpoint, Call(4)); | 284 EXPECT_CALL(checkpoint, Call(4)); |
281 | 285 |
282 // |reader| is adopted by |obtainReader|. | |
283 ASSERT_TRUE(reader.release()); | |
284 | |
285 checkpoint.Call(1); | 286 checkpoint.Call(1); |
286 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); | 287 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); |
287 checkpoint.Call(2); | 288 checkpoint.Call(2); |
288 ASSERT_TRUE(client); | 289 ASSERT_TRUE(client); |
289 client->didGetReadable(); | 290 client->didGetReadable(); |
290 checkpoint.Call(3); | 291 checkpoint.Call(3); |
291 fetchDataLoader->cancel(); | 292 fetchDataLoader->cancel(); |
292 checkpoint.Call(4); | 293 checkpoint.Call(4); |
293 } | 294 } |
294 | 295 |
295 TEST(FetchDataLoaderTest, LoadAsArrayBufferCancel) | 296 TEST(FetchDataLoaderTest, LoadAsArrayBufferCancel) |
296 { | 297 { |
297 Checkpoint checkpoint; | 298 Checkpoint checkpoint; |
298 | 299 |
299 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 300 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
300 std::unique_ptr<MockReader> reader = MockReader::create(); | 301 |
| 302 // |reader| will be adopted by |obtainFetchDataReader|. |
| 303 MockReader* reader = MockReader::create().release(); |
301 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffe
r(); | 304 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsArrayBuffe
r(); |
302 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); | 305 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
303 | 306 |
304 InSequence s; | 307 InSequence s; |
305 EXPECT_CALL(checkpoint, Call(1)); | 308 EXPECT_CALL(checkpoint, Call(1)); |
306 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(Return(reader.get()))
; | 309 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(Return(ByMove(WTF::w
rapUnique(reader)))); |
307 EXPECT_CALL(checkpoint, Call(2)); | 310 EXPECT_CALL(checkpoint, Call(2)); |
308 EXPECT_CALL(*reader, destruct()); | 311 EXPECT_CALL(*reader, destruct()); |
309 EXPECT_CALL(checkpoint, Call(3)); | 312 EXPECT_CALL(checkpoint, Call(3)); |
310 | 313 |
311 // |reader| is adopted by |obtainReader|. | |
312 ASSERT_TRUE(reader.release()); | |
313 | |
314 checkpoint.Call(1); | 314 checkpoint.Call(1); |
315 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); | 315 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); |
316 checkpoint.Call(2); | 316 checkpoint.Call(2); |
317 fetchDataLoader->cancel(); | 317 fetchDataLoader->cancel(); |
318 checkpoint.Call(3); | 318 checkpoint.Call(3); |
319 } | 319 } |
320 | 320 |
321 TEST(FetchDataLoaderTest, LoadAsString) | 321 TEST(FetchDataLoaderTest, LoadAsString) |
322 { | 322 { |
323 WebDataConsumerHandle::Client *client = nullptr; | 323 WebDataConsumerHandle::Client *client = nullptr; |
324 Checkpoint checkpoint; | 324 Checkpoint checkpoint; |
325 | 325 |
326 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 326 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
327 std::unique_ptr<MockReader> reader = MockReader::create(); | 327 |
| 328 // |reader| will be adopted by |obtainFetchDataReader|. |
| 329 MockReader* reader = MockReader::create().release(); |
| 330 |
328 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); | 331 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); |
329 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); | 332 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
330 | 333 |
331 InSequence s; | 334 InSequence s; |
332 EXPECT_CALL(checkpoint, Call(1)); | 335 EXPECT_CALL(checkpoint, Call(1)); |
333 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(DoAll(SaveArg<0>(&cli
ent), Return(reader.get()))); | 336 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl
ient), Return(ByMove(WTF::wrapUnique(reader))))); |
334 EXPECT_CALL(checkpoint, Call(2)); | 337 EXPECT_CALL(checkpoint, Call(2)); |
335 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt
h), Return(kOk))); | 338 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt
h), Return(kOk))); |
336 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLength)).WillOnce(Return(kOk)); | 339 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLength)).WillOnce(Return(kOk)); |
337 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone)); | 340 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone)); |
338 EXPECT_CALL(*reader, destruct()); | 341 EXPECT_CALL(*reader, destruct()); |
339 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedString(String(kQuickBr
ownFox))); | 342 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedString(String(kQuickBr
ownFox))); |
340 EXPECT_CALL(checkpoint, Call(3)); | 343 EXPECT_CALL(checkpoint, Call(3)); |
341 EXPECT_CALL(checkpoint, Call(4)); | 344 EXPECT_CALL(checkpoint, Call(4)); |
342 | 345 |
343 // |reader| is adopted by |obtainReader|. | |
344 ASSERT_TRUE(reader.release()); | |
345 | |
346 checkpoint.Call(1); | 346 checkpoint.Call(1); |
347 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); | 347 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); |
348 checkpoint.Call(2); | 348 checkpoint.Call(2); |
349 ASSERT_TRUE(client); | 349 ASSERT_TRUE(client); |
350 client->didGetReadable(); | 350 client->didGetReadable(); |
351 checkpoint.Call(3); | 351 checkpoint.Call(3); |
352 fetchDataLoader->cancel(); | 352 fetchDataLoader->cancel(); |
353 checkpoint.Call(4); | 353 checkpoint.Call(4); |
354 } | 354 } |
355 | 355 |
356 TEST(FetchDataLoaderTest, LoadAsStringWithNullBytes) | 356 TEST(FetchDataLoaderTest, LoadAsStringWithNullBytes) |
357 { | 357 { |
358 WebDataConsumerHandle::Client *client = nullptr; | 358 WebDataConsumerHandle::Client *client = nullptr; |
359 Checkpoint checkpoint; | 359 Checkpoint checkpoint; |
360 | 360 |
361 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 361 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
362 std::unique_ptr<MockReader> reader = MockReader::create(); | 362 |
| 363 // |reader| will be adopted by |obtainFetchDataReader|. |
| 364 MockReader* reader = MockReader::create().release(); |
| 365 |
363 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); | 366 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); |
364 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); | 367 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
365 | 368 |
366 InSequence s; | 369 InSequence s; |
367 EXPECT_CALL(checkpoint, Call(1)); | 370 EXPECT_CALL(checkpoint, Call(1)); |
368 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(DoAll(SaveArg<0>(&cli
ent), Return(reader.get()))); | 371 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl
ient), Return(ByMove(WTF::wrapUnique(reader))))); |
369 EXPECT_CALL(checkpoint, Call(2)); | 372 EXPECT_CALL(checkpoint, Call(2)); |
370 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>("Quick\0brown\0fox")), SetArgPointee<2>(16), Return(kO
k))); | 373 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>("Quick\0brown\0fox")), SetArgPointee<2>(16), Return(kO
k))); |
371 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO
nce(Return(kOk)); | 374 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLengthWithTerminatingNull)).WillO
nce(Return(kOk)); |
372 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone)); | 375 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kDone)); |
373 EXPECT_CALL(*reader, destruct()); | 376 EXPECT_CALL(*reader, destruct()); |
374 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedString(String("Quick\0
brown\0fox", 16))); | 377 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadedString(String("Quick\0
brown\0fox", 16))); |
375 EXPECT_CALL(checkpoint, Call(3)); | 378 EXPECT_CALL(checkpoint, Call(3)); |
376 EXPECT_CALL(checkpoint, Call(4)); | 379 EXPECT_CALL(checkpoint, Call(4)); |
377 | 380 |
378 // |reader| is adopted by |obtainReader|. | |
379 ASSERT_TRUE(reader.release()); | |
380 | |
381 checkpoint.Call(1); | 381 checkpoint.Call(1); |
382 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); | 382 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); |
383 checkpoint.Call(2); | 383 checkpoint.Call(2); |
384 ASSERT_TRUE(client); | 384 ASSERT_TRUE(client); |
385 client->didGetReadable(); | 385 client->didGetReadable(); |
386 checkpoint.Call(3); | 386 checkpoint.Call(3); |
387 fetchDataLoader->cancel(); | 387 fetchDataLoader->cancel(); |
388 checkpoint.Call(4); | 388 checkpoint.Call(4); |
389 } | 389 } |
390 | 390 |
391 TEST(FetchDataLoaderTest, LoadAsStringError) | 391 TEST(FetchDataLoaderTest, LoadAsStringError) |
392 { | 392 { |
393 WebDataConsumerHandle::Client *client = nullptr; | 393 WebDataConsumerHandle::Client *client = nullptr; |
394 Checkpoint checkpoint; | 394 Checkpoint checkpoint; |
395 | 395 |
396 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 396 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
397 std::unique_ptr<MockReader> reader = MockReader::create(); | 397 |
| 398 // |reader| will be adopted by |obtainFetchDataReader|. |
| 399 MockReader* reader = MockReader::create().release(); |
| 400 |
398 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); | 401 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); |
399 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); | 402 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
400 | 403 |
401 InSequence s; | 404 InSequence s; |
402 EXPECT_CALL(checkpoint, Call(1)); | 405 EXPECT_CALL(checkpoint, Call(1)); |
403 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(DoAll(SaveArg<0>(&cli
ent), Return(reader.get()))); | 406 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(DoAll(SaveArg<0>(&cl
ient), Return(ByMove(WTF::wrapUnique(reader))))); |
404 EXPECT_CALL(checkpoint, Call(2)); | 407 EXPECT_CALL(checkpoint, Call(2)); |
405 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt
h), Return(kOk))); | 408 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(DoAll(SetArgPointee<0>
(static_cast<const void*>(kQuickBrownFox)), SetArgPointee<2>(kQuickBrownFoxLengt
h), Return(kOk))); |
406 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLength)).WillOnce(Return(kOk)); | 409 EXPECT_CALL(*reader, endRead(kQuickBrownFoxLength)).WillOnce(Return(kOk)); |
407 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kUnexpectedErro
r)); | 410 EXPECT_CALL(*reader, beginRead(_, kNone, _)).WillOnce(Return(kUnexpectedErro
r)); |
408 EXPECT_CALL(*reader, destruct()); | 411 EXPECT_CALL(*reader, destruct()); |
409 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed()); | 412 EXPECT_CALL(*fetchDataLoaderClient, didFetchDataLoadFailed()); |
410 EXPECT_CALL(checkpoint, Call(3)); | 413 EXPECT_CALL(checkpoint, Call(3)); |
411 EXPECT_CALL(checkpoint, Call(4)); | 414 EXPECT_CALL(checkpoint, Call(4)); |
412 | 415 |
413 // |reader| is adopted by |obtainReader|. | |
414 ASSERT_TRUE(reader.release()); | |
415 | |
416 checkpoint.Call(1); | 416 checkpoint.Call(1); |
417 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); | 417 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); |
418 checkpoint.Call(2); | 418 checkpoint.Call(2); |
419 ASSERT_TRUE(client); | 419 ASSERT_TRUE(client); |
420 client->didGetReadable(); | 420 client->didGetReadable(); |
421 checkpoint.Call(3); | 421 checkpoint.Call(3); |
422 fetchDataLoader->cancel(); | 422 fetchDataLoader->cancel(); |
423 checkpoint.Call(4); | 423 checkpoint.Call(4); |
424 } | 424 } |
425 | 425 |
426 TEST(FetchDataLoaderTest, LoadAsStringCancel) | 426 TEST(FetchDataLoaderTest, LoadAsStringCancel) |
427 { | 427 { |
428 Checkpoint checkpoint; | 428 Checkpoint checkpoint; |
429 | 429 |
430 std::unique_ptr<MockHandle> handle = MockHandle::create(); | 430 std::unique_ptr<MockHandle> handle = MockHandle::create(); |
431 std::unique_ptr<MockReader> reader = MockReader::create(); | 431 |
| 432 // |reader| will be adopted by |obtainFetchDataReader|. |
| 433 MockReader* reader = MockReader::create().release(); |
| 434 |
432 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); | 435 FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); |
433 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); | 436 MockFetchDataLoaderClient* fetchDataLoaderClient = MockFetchDataLoaderClient
::create(); |
434 | 437 |
435 InSequence s; | 438 InSequence s; |
436 EXPECT_CALL(checkpoint, Call(1)); | 439 EXPECT_CALL(checkpoint, Call(1)); |
437 EXPECT_CALL(*handle, obtainReaderInternal(_)).WillOnce(Return(reader.get()))
; | 440 EXPECT_CALL(*handle, obtainFetchDataReader(_)).WillOnce(Return(ByMove(WTF::w
rapUnique(reader)))); |
438 EXPECT_CALL(checkpoint, Call(2)); | 441 EXPECT_CALL(checkpoint, Call(2)); |
439 EXPECT_CALL(*reader, destruct()); | 442 EXPECT_CALL(*reader, destruct()); |
440 EXPECT_CALL(checkpoint, Call(3)); | 443 EXPECT_CALL(checkpoint, Call(3)); |
441 | 444 |
442 // |reader| is adopted by |obtainReader|. | |
443 ASSERT_TRUE(reader.release()); | |
444 | |
445 checkpoint.Call(1); | 445 checkpoint.Call(1); |
446 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); | 446 fetchDataLoader->start(handle.get(), fetchDataLoaderClient); |
447 checkpoint.Call(2); | 447 checkpoint.Call(2); |
448 fetchDataLoader->cancel(); | 448 fetchDataLoader->cancel(); |
449 checkpoint.Call(3); | 449 checkpoint.Call(3); |
450 } | 450 } |
451 | 451 |
452 } // namespace | 452 } // namespace |
453 | 453 |
454 } // namespace blink | 454 } // namespace blink |
OLD | NEW |