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

Side by Side Diff: third_party/WebKit/Source/modules/fetch/FetchDataLoaderTest.cpp

Issue 2172183003: Return unique_ptr<WebDataConsumerHandle::Reader> directly from obtainReader (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@gmock_cxx11
Patch Set: rebase Created 4 years, 4 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 // 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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698