Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/safe_browsing/incident_reporting/download_metadata_mana ger.h" | 5 #include "chrome/browser/safe_browsing/incident_reporting/download_metadata_mana ger.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 173 // Capture the metadata manager's observer on the download manager. | 173 // Capture the metadata manager's observer on the download manager. |
| 174 EXPECT_CALL(download_manager_, AddObserver(&manager_)) | 174 EXPECT_CALL(download_manager_, AddObserver(&manager_)) |
| 175 .WillOnce(SaveArg<0>(&dm_observer_)); | 175 .WillOnce(SaveArg<0>(&dm_observer_)); |
| 176 manager_.AddDownloadManager(&download_manager_); | 176 manager_.AddDownloadManager(&download_manager_); |
| 177 } | 177 } |
| 178 | 178 |
| 179 // Shuts down the DownloadManager. Safe to call any number of times. | 179 // Shuts down the DownloadManager. Safe to call any number of times. |
| 180 void ShutdownDownloadManager() { | 180 void ShutdownDownloadManager() { |
| 181 if (dm_observer_) { | 181 if (dm_observer_) { |
| 182 dm_observer_->ManagerGoingDown(&download_manager_); | 182 dm_observer_->ManagerGoingDown(&download_manager_); |
| 183 // Note: these calls may result in "Uninteresting mock function call" | |
| 184 // warnings as a result of MockDownloadItem invoking observers in its | |
| 185 // dtor. This happens after the NiceMock wrapper has removed its niceness | |
| 186 // hook. These can safely be ignored, as they are entirely expected. The | |
| 187 // values specified by ON_CALL invocations in AddDownloadItems are | |
| 188 // returned as desired. | |
|
robertshield
2014/11/05 01:04:50
I don't know enough gmock to know whether this is
grt (UTC plus 2)
2014/11/05 01:25:35
The right thing when you don't want an expectation
| |
| 189 other_item_.reset(); | |
| 190 test_item_.reset(); | |
| 183 dm_observer_ = nullptr; | 191 dm_observer_ = nullptr; |
| 184 } | 192 } |
| 185 } | 193 } |
| 186 | 194 |
| 187 // Adds two test DownloadItems to the DownloadManager. | 195 // Adds two test DownloadItems to the DownloadManager. |
| 188 void AddDownloadItems() { | 196 void AddDownloadItems() { |
| 189 ASSERT_NE(nullptr, dm_observer_); | 197 ASSERT_NE(nullptr, dm_observer_); |
| 190 // Add the item under test. | 198 // Add the item under test. |
| 191 test_item_.reset(new NiceMock<content::MockDownloadItem>); | 199 test_item_.reset(new NiceMock<content::MockDownloadItem>); |
| 192 ON_CALL(*test_item_, GetId()) | 200 ON_CALL(*test_item_, GetId()) |
| 193 .WillByDefault(Return(kTestDownloadId)); | 201 .WillByDefault(Return(kTestDownloadId)); |
| 194 ON_CALL(*test_item_, GetBrowserContext()) | 202 ON_CALL(*test_item_, GetBrowserContext()) |
| 195 .WillByDefault(Return(&profile_)); | 203 .WillByDefault(Return(&profile_)); |
| 196 ON_CALL(*test_item_, GetEndTime()) | 204 ON_CALL(*test_item_, GetEndTime()) |
| 197 .WillByDefault(Return(base::Time::FromJsTime(kTestDownloadEndTimeMs))); | 205 .WillByDefault(Return(base::Time::FromJsTime(kTestDownloadEndTimeMs))); |
| 198 dm_observer_->OnDownloadCreated(&download_manager_, test_item_.get()); | 206 dm_observer_->OnDownloadCreated(&download_manager_, test_item_.get()); |
| 199 | 207 |
| 200 // Add another item. | 208 // Add another item. |
| 201 other_item_.reset(new NiceMock<content::MockDownloadItem>); | 209 other_item_.reset(new NiceMock<content::MockDownloadItem>); |
| 202 ON_CALL(*other_item_, GetId()) | 210 ON_CALL(*other_item_, GetId()) |
| 203 .WillByDefault(Return(kOtherDownloadId)); | 211 .WillByDefault(Return(kOtherDownloadId)); |
| 204 ON_CALL(*other_item_, GetBrowserContext()) | 212 ON_CALL(*other_item_, GetBrowserContext()) |
| 205 .WillByDefault(Return(&profile_)); | 213 .WillByDefault(Return(&profile_)); |
| 206 ON_CALL(*test_item_, GetEndTime()) | 214 ON_CALL(*test_item_, GetEndTime()) |
| 207 .WillByDefault(Return(base::Time::FromJsTime(kTestDownloadEndTimeMs))); | 215 .WillByDefault(Return(base::Time::FromJsTime(kTestDownloadEndTimeMs))); |
| 208 dm_observer_->OnDownloadCreated(&download_manager_, other_item_.get()); | 216 dm_observer_->OnDownloadCreated(&download_manager_, other_item_.get()); |
| 209 } | 217 } |
| 210 | 218 |
| 211 // Destroyes the DownloadItems added to the manager. Safe to call any number | |
| 212 // of times. | |
| 213 void DestroyDownloadItems() { | |
| 214 other_item_.reset(); | |
| 215 test_item_.reset(); | |
| 216 } | |
| 217 | |
| 218 content::TestBrowserThreadBundle thread_bundle_; | 219 content::TestBrowserThreadBundle thread_bundle_; |
| 219 NiceMock<MockDownloadMetadataManager> manager_; | 220 NiceMock<MockDownloadMetadataManager> manager_; |
| 220 TestingProfile profile_; | 221 TestingProfile profile_; |
| 221 NiceMock<content::MockDownloadManager> download_manager_; | 222 NiceMock<content::MockDownloadManager> download_manager_; |
| 222 scoped_ptr<content::MockDownloadItem> test_item_; | 223 scoped_ptr<content::MockDownloadItem> test_item_; |
| 223 scoped_ptr<content::MockDownloadItem> other_item_; | 224 scoped_ptr<content::MockDownloadItem> other_item_; |
| 224 content::DownloadManager::Observer* dm_observer_; | 225 content::DownloadManager::Observer* dm_observer_; |
| 225 }; | 226 }; |
| 226 | 227 |
| 227 // A parameterized test that exercises GetDownloadDetails. The parameters | 228 // A parameterized test that exercises GetDownloadDetails. The parameters |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 322 ResultOf(GetDetailsOpenTime, Eq(0))))); | 323 ResultOf(GetDetailsOpenTime, Eq(0))))); |
| 323 } | 324 } |
| 324 } else { | 325 } else { |
| 325 // No file on disk, so expect that the callback is invoked with null. | 326 // No file on disk, so expect that the callback is invoked with null. |
| 326 EXPECT_CALL(details_getter, OnDownloadDetails(IsNull())); | 327 EXPECT_CALL(details_getter, OnDownloadDetails(IsNull())); |
| 327 } | 328 } |
| 328 | 329 |
| 329 // Fire in the hole! | 330 // Fire in the hole! |
| 330 manager_.GetDownloadDetails(&profile_, details_getter.GetCallback()); | 331 manager_.GetDownloadDetails(&profile_, details_getter.GetCallback()); |
| 331 | 332 |
| 332 // Destroy download items and shutdown the download manager, if relevant. | 333 // Shutdown the download manager, if relevant. |
| 333 if (early_shutdown_) { | 334 if (early_shutdown_) |
| 334 DestroyDownloadItems(); | |
| 335 ShutdownDownloadManager(); | 335 ShutdownDownloadManager(); |
| 336 } | |
| 337 | 336 |
| 338 // Allow the read task and the response callback to run. | 337 // Allow the read task and the response callback to run. |
| 339 RunAllTasks(); | 338 RunAllTasks(); |
| 340 | 339 |
| 341 // Destroy download items and shutdown the download manager, if relevant. | 340 // Shutdown the download manager, if relevant. |
| 342 DestroyDownloadItems(); | |
| 343 ShutdownDownloadManager(); | 341 ShutdownDownloadManager(); |
| 344 } | 342 } |
| 345 | 343 |
| 346 INSTANTIATE_TEST_CASE_P( | 344 INSTANTIATE_TEST_CASE_P( |
| 347 DownloadMetadataManager, | 345 DownloadMetadataManager, |
| 348 GetDetailsTest, | 346 GetDetailsTest, |
| 349 testing::Combine( | 347 testing::Combine( |
| 350 testing::Values("absent", "present"), | 348 testing::Values("absent", "present"), |
| 351 testing::Values("not_managed", "managed"), | 349 testing::Values("not_managed", "managed"), |
| 352 testing::Values("not_created", "created", "opened", "removed"), | 350 testing::Values("not_created", "created", "opened", "removed"), |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 457 // Expect that the callback is invoked with details for this item. | 455 // Expect that the callback is invoked with details for this item. |
| 458 EXPECT_CALL( | 456 EXPECT_CALL( |
| 459 details_getter, | 457 details_getter, |
| 460 OnDownloadDetails(ResultOf(GetDetailsDownloadUrl, StrEq(kNewUrl)))); | 458 OnDownloadDetails(ResultOf(GetDetailsDownloadUrl, StrEq(kNewUrl)))); |
| 461 } else { | 459 } else { |
| 462 // Expect that the callback is invoked with null to clear stale metadata. | 460 // Expect that the callback is invoked with null to clear stale metadata. |
| 463 EXPECT_CALL(details_getter, OnDownloadDetails(IsNull())); | 461 EXPECT_CALL(details_getter, OnDownloadDetails(IsNull())); |
| 464 } | 462 } |
| 465 manager_.GetDownloadDetails(&profile_, details_getter.GetCallback()); | 463 manager_.GetDownloadDetails(&profile_, details_getter.GetCallback()); |
| 466 | 464 |
| 467 DestroyDownloadItems(); | |
| 468 ShutdownDownloadManager(); | 465 ShutdownDownloadManager(); |
| 469 | 466 |
| 470 scoped_ptr<DownloadMetadata> metadata(ReadTestMetadataFile()); | 467 scoped_ptr<DownloadMetadata> metadata(ReadTestMetadataFile()); |
| 471 if (set_request_) { | 468 if (set_request_) { |
| 472 // Expect that the file contains metadata for the download. | 469 // Expect that the file contains metadata for the download. |
| 473 ASSERT_TRUE(metadata); | 470 ASSERT_TRUE(metadata); |
| 474 EXPECT_EQ(kTestDownloadId, metadata->download_id()); | 471 EXPECT_EQ(kTestDownloadId, metadata->download_id()); |
| 475 EXPECT_STREQ(kNewUrl, metadata->download().download().url().c_str()); | 472 EXPECT_STREQ(kNewUrl, metadata->download().download().url().c_str()); |
| 476 } else { | 473 } else { |
| 477 // Expect that the file is not present. | 474 // Expect that the file is not present. |
| 478 ASSERT_FALSE(metadata); | 475 ASSERT_FALSE(metadata); |
| 479 } | 476 } |
| 480 } | 477 } |
| 481 | 478 |
| 482 INSTANTIATE_TEST_CASE_P( | 479 INSTANTIATE_TEST_CASE_P( |
| 483 DownloadMetadataManager, | 480 DownloadMetadataManager, |
| 484 SetRequestTest, | 481 SetRequestTest, |
| 485 testing::Combine(testing::Values("absent", "this", "other", "unknown"), | 482 testing::Combine(testing::Values("absent", "this", "other", "unknown"), |
| 486 testing::Values("none", "pending"), | 483 testing::Values("none", "pending"), |
| 487 testing::Values("none", "pending"), | 484 testing::Values("none", "pending"), |
| 488 testing::Values("waiting", "loaded"), | 485 testing::Values("waiting", "loaded"), |
| 489 testing::Values("clear", "set"))); | 486 testing::Values("clear", "set"))); |
| 490 | 487 |
| 491 } // namespace safe_browsing | 488 } // namespace safe_browsing |
| OLD | NEW |