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

Side by Side Diff: chrome/browser/android/offline_pages/prerendering_offliner_unittest.cc

Issue 2715433006: [Offline Pages] Turn Offliner::Cancel into an async operation to resolve conflicting assumptions (Closed)
Patch Set: Created 3 years, 9 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 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 "chrome/browser/android/offline_pages/prerendering_offliner.h" 5 #include "chrome/browser/android/offline_pages/prerendering_offliner.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 ~PrerenderingOfflinerTest() override; 149 ~PrerenderingOfflinerTest() override;
150 150
151 void SetUp() override; 151 void SetUp() override;
152 152
153 Profile* profile() { return &profile_; } 153 Profile* profile() { return &profile_; }
154 PrerenderingOffliner* offliner() const { return offliner_.get(); } 154 PrerenderingOffliner* offliner() const { return offliner_.get(); }
155 Offliner::CompletionCallback const callback() { 155 Offliner::CompletionCallback const callback() {
156 return base::Bind(&PrerenderingOfflinerTest::OnCompletion, 156 return base::Bind(&PrerenderingOfflinerTest::OnCompletion,
157 base::Unretained(this)); 157 base::Unretained(this));
158 } 158 }
159 Offliner::CancelCallback const cancel_callback() {
160 return base::Bind(&PrerenderingOfflinerTest::OnCancel,
161 base::Unretained(this));
162 }
159 163
160 bool SaveInProgress() const { return model_->mock_saving(); } 164 bool SaveInProgress() const { return model_->mock_saving(); }
161 MockPrerenderingLoader* loader() { return loader_; } 165 MockPrerenderingLoader* loader() { return loader_; }
162 MockOfflinePageModel* model() { return model_; } 166 MockOfflinePageModel* model() { return model_; }
163 bool completion_callback_called() { return completion_callback_called_; } 167 bool completion_callback_called() { return completion_callback_called_; }
164 Offliner::RequestStatus request_status() { return request_status_; } 168 Offliner::RequestStatus request_status() { return request_status_; }
169 bool cancel_callback_called() { return cancel_callback_called_; }
165 170
166 private: 171 private:
167 void OnCompletion(const SavePageRequest& request, 172 void OnCompletion(const SavePageRequest& request,
168 Offliner::RequestStatus status); 173 Offliner::RequestStatus status);
174 void OnCancel(int64_t offline_id);
169 175
170 content::TestBrowserThreadBundle thread_bundle_; 176 content::TestBrowserThreadBundle thread_bundle_;
171 TestingProfile profile_; 177 TestingProfile profile_;
172 std::unique_ptr<PrerenderingOffliner> offliner_; 178 std::unique_ptr<PrerenderingOffliner> offliner_;
173 // Not owned. 179 // Not owned.
174 MockPrerenderingLoader* loader_; 180 MockPrerenderingLoader* loader_;
175 MockOfflinePageModel* model_; 181 MockOfflinePageModel* model_;
176 bool completion_callback_called_; 182 bool completion_callback_called_;
183 bool cancel_callback_called_;
177 Offliner::RequestStatus request_status_; 184 Offliner::RequestStatus request_status_;
178 185
179 DISALLOW_COPY_AND_ASSIGN(PrerenderingOfflinerTest); 186 DISALLOW_COPY_AND_ASSIGN(PrerenderingOfflinerTest);
180 }; 187 };
181 188
182 PrerenderingOfflinerTest::PrerenderingOfflinerTest() 189 PrerenderingOfflinerTest::PrerenderingOfflinerTest()
183 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), 190 : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
184 completion_callback_called_(false), 191 completion_callback_called_(false),
185 request_status_(Offliner::RequestStatus::UNKNOWN) {} 192 request_status_(Offliner::RequestStatus::UNKNOWN) {}
186 193
187 PrerenderingOfflinerTest::~PrerenderingOfflinerTest() {} 194 PrerenderingOfflinerTest::~PrerenderingOfflinerTest() {}
188 195
189 void PrerenderingOfflinerTest::SetUp() { 196 void PrerenderingOfflinerTest::SetUp() {
190 model_ = new MockOfflinePageModel(); 197 model_ = new MockOfflinePageModel();
191 offliner_.reset(new PrerenderingOffliner(profile(), nullptr, model_)); 198 offliner_.reset(new PrerenderingOffliner(profile(), nullptr, model_));
192 std::unique_ptr<MockPrerenderingLoader> mock_loader( 199 std::unique_ptr<MockPrerenderingLoader> mock_loader(
193 new MockPrerenderingLoader(nullptr)); 200 new MockPrerenderingLoader(nullptr));
194 loader_ = mock_loader.get(); 201 loader_ = mock_loader.get();
195 offliner_->SetLoaderForTesting(std::move(mock_loader)); 202 offliner_->SetLoaderForTesting(std::move(mock_loader));
196 } 203 }
197 204
198 void PrerenderingOfflinerTest::OnCompletion(const SavePageRequest& request, 205 void PrerenderingOfflinerTest::OnCompletion(const SavePageRequest& request,
199 Offliner::RequestStatus status) { 206 Offliner::RequestStatus status) {
200 DCHECK(!completion_callback_called_); // Expect single callback per request. 207 DCHECK(!completion_callback_called_); // Expect single callback per request.
201 completion_callback_called_ = true; 208 completion_callback_called_ = true;
202 request_status_ = status; 209 request_status_ = status;
203 } 210 }
204 211
212 void PrerenderingOfflinerTest::OnCancel(int64_t offline_id) {
213 DCHECK(!cancel_callback_called_);
214 cancel_callback_called_ = true;
215 }
216
205 TEST_F(PrerenderingOfflinerTest, LoadAndSaveBadUrl) { 217 TEST_F(PrerenderingOfflinerTest, LoadAndSaveBadUrl) {
206 base::Time creation_time = base::Time::Now(); 218 base::Time creation_time = base::Time::Now();
207 SavePageRequest request( 219 SavePageRequest request(
208 kRequestId, kFileUrl, kClientId, creation_time, kUserRequested); 220 kRequestId, kFileUrl, kClientId, creation_time, kUserRequested);
209 EXPECT_FALSE(offliner()->LoadAndSave(request, callback())); 221 EXPECT_FALSE(offliner()->LoadAndSave(request, callback()));
210 EXPECT_TRUE(loader()->IsIdle()); 222 EXPECT_TRUE(loader()->IsIdle());
211 } 223 }
212 224
213 TEST_F(PrerenderingOfflinerTest, LoadAndSavePrerenderingDisabled) { 225 TEST_F(PrerenderingOfflinerTest, LoadAndSavePrerenderingDisabled) {
214 base::Time creation_time = base::Time::Now(); 226 base::Time creation_time = base::Time::Now();
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
259 EXPECT_FALSE(SaveInProgress()); 271 EXPECT_FALSE(SaveInProgress());
260 } 272 }
261 273
262 TEST_F(PrerenderingOfflinerTest, CancelWhenLoading) { 274 TEST_F(PrerenderingOfflinerTest, CancelWhenLoading) {
263 base::Time creation_time = base::Time::Now(); 275 base::Time creation_time = base::Time::Now();
264 SavePageRequest request( 276 SavePageRequest request(
265 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); 277 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested);
266 EXPECT_TRUE(offliner()->LoadAndSave(request, callback())); 278 EXPECT_TRUE(offliner()->LoadAndSave(request, callback()));
267 EXPECT_FALSE(loader()->IsIdle()); 279 EXPECT_FALSE(loader()->IsIdle());
268 280
269 offliner()->Cancel(); 281 offliner()->Cancel(cancel_callback());
282 PumpLoop();
283 EXPECT_TRUE(cancel_callback_called());
270 EXPECT_TRUE(loader()->IsIdle()); 284 EXPECT_TRUE(loader()->IsIdle());
271 } 285 }
272 286
273 TEST_F(PrerenderingOfflinerTest, CancelWhenLoaded) { 287 TEST_F(PrerenderingOfflinerTest, CancelWhenLoaded) {
274 base::Time creation_time = base::Time::Now(); 288 base::Time creation_time = base::Time::Now();
275 SavePageRequest request( 289 SavePageRequest request(
276 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested); 290 kRequestId, kHttpUrl, kClientId, creation_time, kUserRequested);
277 EXPECT_TRUE(offliner()->LoadAndSave(request, callback())); 291 EXPECT_TRUE(offliner()->LoadAndSave(request, callback()));
278 EXPECT_FALSE(loader()->IsIdle()); 292 EXPECT_FALSE(loader()->IsIdle());
279 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status()); 293 EXPECT_EQ(Offliner::RequestStatus::UNKNOWN, request_status());
280 294
281 loader()->CompleteLoadingAsLoaded(); 295 loader()->CompleteLoadingAsLoaded();
282 PumpLoop(); 296 PumpLoop();
283 EXPECT_FALSE(completion_callback_called()); 297 EXPECT_FALSE(completion_callback_called());
284 EXPECT_TRUE(loader()->IsLoaded()); 298 EXPECT_TRUE(loader()->IsLoaded());
285 EXPECT_TRUE(SaveInProgress()); 299 EXPECT_TRUE(SaveInProgress());
286 300
287 offliner()->Cancel(); 301 offliner()->Cancel(cancel_callback());
288 PumpLoop(); 302 PumpLoop();
289 EXPECT_FALSE(completion_callback_called()); 303 EXPECT_FALSE(completion_callback_called());
304 EXPECT_TRUE(cancel_callback_called());
290 EXPECT_FALSE(loader()->IsLoaded()); 305 EXPECT_FALSE(loader()->IsLoaded());
291 // Note: save still in progress since it does not support canceling. 306 // Note: save still in progress since it does not support canceling.
292 EXPECT_TRUE(SaveInProgress()); 307 EXPECT_TRUE(SaveInProgress());
293 308
294 // Subsequent save callback causes no harm (no crash and no callback). 309 // Subsequent save callback causes no harm (no crash and no callback).
295 model()->CompleteSavingAsArchiveCreationFailed(); 310 model()->CompleteSavingAsArchiveCreationFailed();
296 PumpLoop(); 311 PumpLoop();
297 EXPECT_FALSE(completion_callback_called()); 312 EXPECT_FALSE(completion_callback_called());
298 EXPECT_TRUE(loader()->IsIdle()); 313 EXPECT_TRUE(loader()->IsIdle());
299 EXPECT_FALSE(SaveInProgress()); 314 EXPECT_FALSE(SaveInProgress());
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
393 EXPECT_FALSE(loader()->IsIdle()); 408 EXPECT_FALSE(loader()->IsIdle());
394 409
395 offliner()->SetApplicationStateForTesting( 410 offliner()->SetApplicationStateForTesting(
396 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES); 411 base::android::APPLICATION_STATE_HAS_RUNNING_ACTIVITIES);
397 412
398 // Loader still loading since not low-end device. 413 // Loader still loading since not low-end device.
399 EXPECT_FALSE(loader()->IsIdle()); 414 EXPECT_FALSE(loader()->IsIdle());
400 } 415 }
401 416
402 } // namespace offline_pages 417 } // namespace offline_pages
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698