| 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 "content/browser/background_sync/background_sync_manager.h" | 5 #include "content/browser/background_sync/background_sync_manager.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/files/scoped_temp_dir.h" | 10 #include "base/files/scoped_temp_dir.h" |
| 11 #include "base/location.h" | 11 #include "base/location.h" |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| 13 #include "base/macros.h" | 13 #include "base/macros.h" |
| 14 #include "base/metrics/field_trial.h" | 14 #include "base/metrics/field_trial.h" |
| 15 #include "base/power_monitor/power_monitor.h" | |
| 16 #include "base/power_monitor/power_monitor_source.h" | |
| 17 #include "base/run_loop.h" | 15 #include "base/run_loop.h" |
| 18 #include "base/single_thread_task_runner.h" | 16 #include "base/single_thread_task_runner.h" |
| 19 #include "base/test/mock_entropy_provider.h" | 17 #include "base/test/mock_entropy_provider.h" |
| 20 #include "base/test/simple_test_clock.h" | 18 #include "base/test/simple_test_clock.h" |
| 21 #include "base/thread_task_runner_handle.h" | 19 #include "base/thread_task_runner_handle.h" |
| 22 #include "content/browser/background_sync/background_sync_network_observer.h" | 20 #include "content/browser/background_sync/background_sync_network_observer.h" |
| 23 #include "content/browser/background_sync/background_sync_registration_handle.h" | 21 #include "content/browser/background_sync/background_sync_registration_handle.h" |
| 24 #include "content/browser/background_sync/background_sync_status.h" | 22 #include "content/browser/background_sync/background_sync_status.h" |
| 25 #include "content/browser/browser_thread_impl.h" | 23 #include "content/browser/browser_thread_impl.h" |
| 26 #include "content/browser/service_worker/embedded_worker_test_helper.h" | 24 #include "content/browser/service_worker/embedded_worker_test_helper.h" |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 void NotifyWhenFinishedCallback(bool* was_called, | 95 void NotifyWhenFinishedCallback(bool* was_called, |
| 98 BackgroundSyncStatus* out_status, | 96 BackgroundSyncStatus* out_status, |
| 99 BackgroundSyncState* out_state, | 97 BackgroundSyncState* out_state, |
| 100 BackgroundSyncStatus status, | 98 BackgroundSyncStatus status, |
| 101 BackgroundSyncState state) { | 99 BackgroundSyncState state) { |
| 102 *was_called = true; | 100 *was_called = true; |
| 103 *out_status = status; | 101 *out_status = status; |
| 104 *out_state = state; | 102 *out_state = state; |
| 105 } | 103 } |
| 106 | 104 |
| 107 class TestPowerSource : public base::PowerMonitorSource { | |
| 108 public: | |
| 109 void GeneratePowerStateEvent(bool on_battery_power) { | |
| 110 test_on_battery_power_ = on_battery_power; | |
| 111 ProcessPowerEvent(POWER_STATE_EVENT); | |
| 112 } | |
| 113 | |
| 114 private: | |
| 115 bool IsOnBatteryPowerImpl() final { return test_on_battery_power_; } | |
| 116 bool test_on_battery_power_ = false; | |
| 117 }; | |
| 118 | |
| 119 class TestBackgroundSyncController : public BackgroundSyncController { | 105 class TestBackgroundSyncController : public BackgroundSyncController { |
| 120 public: | 106 public: |
| 121 TestBackgroundSyncController() = default; | 107 TestBackgroundSyncController() = default; |
| 122 | 108 |
| 123 // BackgroundSyncController Overrides | 109 // BackgroundSyncController Overrides |
| 124 void NotifyBackgroundSyncRegistered(const GURL& origin) override { | 110 void NotifyBackgroundSyncRegistered(const GURL& origin) override { |
| 125 registration_count_ += 1; | 111 registration_count_ += 1; |
| 126 registration_origin_ = origin; | 112 registration_origin_ = origin; |
| 127 } | 113 } |
| 128 void RunInBackground(bool enabled, int64_t min_ms) override { | 114 void RunInBackground(bool enabled, int64_t min_ms) override { |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 297 }; | 283 }; |
| 298 | 284 |
| 299 class BackgroundSyncManagerTest : public testing::Test { | 285 class BackgroundSyncManagerTest : public testing::Test { |
| 300 public: | 286 public: |
| 301 BackgroundSyncManagerTest() | 287 BackgroundSyncManagerTest() |
| 302 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), | 288 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP), |
| 303 network_change_notifier_(net::NetworkChangeNotifier::CreateMock()) { | 289 network_change_notifier_(net::NetworkChangeNotifier::CreateMock()) { |
| 304 sync_options_1_.tag = "foo"; | 290 sync_options_1_.tag = "foo"; |
| 305 sync_options_1_.periodicity = SYNC_ONE_SHOT; | 291 sync_options_1_.periodicity = SYNC_ONE_SHOT; |
| 306 sync_options_1_.network_state = NETWORK_STATE_ONLINE; | 292 sync_options_1_.network_state = NETWORK_STATE_ONLINE; |
| 307 sync_options_1_.power_state = POWER_STATE_AUTO; | |
| 308 | 293 |
| 309 sync_options_2_.tag = "bar"; | 294 sync_options_2_.tag = "bar"; |
| 310 sync_options_2_.periodicity = SYNC_ONE_SHOT; | 295 sync_options_2_.periodicity = SYNC_ONE_SHOT; |
| 311 sync_options_2_.network_state = NETWORK_STATE_ONLINE; | 296 sync_options_2_.network_state = NETWORK_STATE_ONLINE; |
| 312 sync_options_2_.power_state = POWER_STATE_AUTO; | |
| 313 } | 297 } |
| 314 | 298 |
| 315 void SetUp() override { | 299 void SetUp() override { |
| 316 // Don't let the tests be confused by the real-world device connectivity | 300 // Don't let the tests be confused by the real-world device connectivity |
| 317 background_sync_test_util::SetIgnoreNetworkChangeNotifier(true); | 301 background_sync_test_util::SetIgnoreNetworkChangeNotifier(true); |
| 318 | 302 |
| 319 // TODO(jkarlin): Create a new object with all of the necessary SW calls | 303 // TODO(jkarlin): Create a new object with all of the necessary SW calls |
| 320 // so that we can inject test versions instead of bringing up all of this | 304 // so that we can inject test versions instead of bringing up all of this |
| 321 // extra SW stuff. | 305 // extra SW stuff. |
| 322 helper_.reset(new EmbeddedWorkerTestHelper(base::FilePath())); | 306 helper_.reset(new EmbeddedWorkerTestHelper(base::FilePath())); |
| 323 | 307 |
| 324 // Create a StoragePartition with the correct BrowserContext so that the | 308 // Create a StoragePartition with the correct BrowserContext so that the |
| 325 // BackgroundSyncManager can find the BrowserContext through it. | 309 // BackgroundSyncManager can find the BrowserContext through it. |
| 326 storage_partition_impl_.reset(new StoragePartitionImpl( | 310 storage_partition_impl_.reset(new StoragePartitionImpl( |
| 327 helper_->browser_context(), base::FilePath(), nullptr, nullptr, nullptr, | 311 helper_->browser_context(), base::FilePath(), nullptr, nullptr, nullptr, |
| 328 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, | 312 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, |
| 329 nullptr, nullptr, nullptr, nullptr)); | 313 nullptr, nullptr, nullptr, nullptr)); |
| 330 helper_->context_wrapper()->set_storage_partition( | 314 helper_->context_wrapper()->set_storage_partition( |
| 331 storage_partition_impl_.get()); | 315 storage_partition_impl_.get()); |
| 332 | 316 |
| 333 power_monitor_source_ = new TestPowerSource(); | |
| 334 // power_monitor_ takes ownership of power_monitor_source. | |
| 335 power_monitor_.reset(new base::PowerMonitor( | |
| 336 scoped_ptr<base::PowerMonitorSource>(power_monitor_source_))); | |
| 337 | |
| 338 SetOnBatteryPower(false); | |
| 339 | |
| 340 scoped_ptr<TestBackgroundSyncController> background_sync_controller( | 317 scoped_ptr<TestBackgroundSyncController> background_sync_controller( |
| 341 new TestBackgroundSyncController()); | 318 new TestBackgroundSyncController()); |
| 342 test_controller_ = background_sync_controller.get(); | 319 test_controller_ = background_sync_controller.get(); |
| 343 helper_->browser_context()->SetBackgroundSyncController( | 320 helper_->browser_context()->SetBackgroundSyncController( |
| 344 std::move(background_sync_controller)); | 321 std::move(background_sync_controller)); |
| 345 | 322 |
| 346 SetMaxSyncAttemptsAndRestartManager(1); | 323 SetMaxSyncAttemptsAndRestartManager(1); |
| 347 | 324 |
| 348 // Wait for storage to finish initializing before registering service | 325 // Wait for storage to finish initializing before registering service |
| 349 // workers. | 326 // workers. |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 391 connection_type); | 368 connection_type); |
| 392 if (test_background_sync_manager_) { | 369 if (test_background_sync_manager_) { |
| 393 BackgroundSyncNetworkObserver* network_observer = | 370 BackgroundSyncNetworkObserver* network_observer = |
| 394 test_background_sync_manager_->GetNetworkObserverForTesting(); | 371 test_background_sync_manager_->GetNetworkObserverForTesting(); |
| 395 network_observer->NotifyManagerIfNetworkChangedForTesting( | 372 network_observer->NotifyManagerIfNetworkChangedForTesting( |
| 396 connection_type); | 373 connection_type); |
| 397 base::RunLoop().RunUntilIdle(); | 374 base::RunLoop().RunUntilIdle(); |
| 398 } | 375 } |
| 399 } | 376 } |
| 400 | 377 |
| 401 void SetOnBatteryPower(bool on_battery_power) { | |
| 402 power_monitor_source_->GeneratePowerStateEvent(on_battery_power); | |
| 403 base::RunLoop().RunUntilIdle(); | |
| 404 } | |
| 405 | |
| 406 void StatusAndRegistrationCallback( | 378 void StatusAndRegistrationCallback( |
| 407 bool* was_called, | 379 bool* was_called, |
| 408 BackgroundSyncStatus status, | 380 BackgroundSyncStatus status, |
| 409 scoped_ptr<BackgroundSyncRegistrationHandle> registration_handle) { | 381 scoped_ptr<BackgroundSyncRegistrationHandle> registration_handle) { |
| 410 *was_called = true; | 382 *was_called = true; |
| 411 callback_status_ = status; | 383 callback_status_ = status; |
| 412 callback_registration_handle_ = std::move(registration_handle); | 384 callback_registration_handle_ = std::move(registration_handle); |
| 413 } | 385 } |
| 414 | 386 |
| 415 void StatusAndRegistrationsCallback( | 387 void StatusAndRegistrationsCallback( |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 658 BackgroundSyncParameters* parameters = | 630 BackgroundSyncParameters* parameters = |
| 659 test_controller_->background_sync_parameters(); | 631 test_controller_->background_sync_parameters(); |
| 660 parameters->max_sync_attempts = max_sync_attempts; | 632 parameters->max_sync_attempts = max_sync_attempts; |
| 661 | 633 |
| 662 // Restart the BackgroundSyncManager so that it updates its parameters. | 634 // Restart the BackgroundSyncManager so that it updates its parameters. |
| 663 SetupBackgroundSyncManager(); | 635 SetupBackgroundSyncManager(); |
| 664 } | 636 } |
| 665 | 637 |
| 666 TestBrowserThreadBundle browser_thread_bundle_; | 638 TestBrowserThreadBundle browser_thread_bundle_; |
| 667 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; | 639 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; |
| 668 TestPowerSource* power_monitor_source_ = nullptr; // owned by power_monitor_ | |
| 669 scoped_ptr<base::PowerMonitor> power_monitor_; | |
| 670 scoped_ptr<EmbeddedWorkerTestHelper> helper_; | 640 scoped_ptr<EmbeddedWorkerTestHelper> helper_; |
| 671 scoped_ptr<BackgroundSyncManager> background_sync_manager_; | 641 scoped_ptr<BackgroundSyncManager> background_sync_manager_; |
| 672 scoped_ptr<StoragePartitionImpl> storage_partition_impl_; | 642 scoped_ptr<StoragePartitionImpl> storage_partition_impl_; |
| 673 TestBackgroundSyncManager* test_background_sync_manager_ = nullptr; | 643 TestBackgroundSyncManager* test_background_sync_manager_ = nullptr; |
| 674 TestBackgroundSyncController* test_controller_; | 644 TestBackgroundSyncController* test_controller_; |
| 675 base::SimpleTestClock* test_clock_ = nullptr; | 645 base::SimpleTestClock* test_clock_ = nullptr; |
| 676 | 646 |
| 677 int64_t sw_registration_id_1_; | 647 int64_t sw_registration_id_1_; |
| 678 int64_t sw_registration_id_2_; | 648 int64_t sw_registration_id_2_; |
| 679 scoped_refptr<ServiceWorkerRegistration> sw_registration_1_; | 649 scoped_refptr<ServiceWorkerRegistration> sw_registration_1_; |
| (...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1097 | 1067 |
| 1098 TEST_F(BackgroundSyncManagerTest, RegistrationEqualsNetworkState) { | 1068 TEST_F(BackgroundSyncManagerTest, RegistrationEqualsNetworkState) { |
| 1099 BackgroundSyncRegistration reg_1; | 1069 BackgroundSyncRegistration reg_1; |
| 1100 BackgroundSyncRegistration reg_2; | 1070 BackgroundSyncRegistration reg_2; |
| 1101 EXPECT_TRUE(reg_1.Equals(reg_2)); | 1071 EXPECT_TRUE(reg_1.Equals(reg_2)); |
| 1102 reg_1.options()->network_state = NETWORK_STATE_ANY; | 1072 reg_1.options()->network_state = NETWORK_STATE_ANY; |
| 1103 reg_2.options()->network_state = NETWORK_STATE_ONLINE; | 1073 reg_2.options()->network_state = NETWORK_STATE_ONLINE; |
| 1104 EXPECT_FALSE(reg_1.Equals(reg_2)); | 1074 EXPECT_FALSE(reg_1.Equals(reg_2)); |
| 1105 } | 1075 } |
| 1106 | 1076 |
| 1107 TEST_F(BackgroundSyncManagerTest, RegistrationEqualsPowerState) { | |
| 1108 BackgroundSyncRegistration reg_1; | |
| 1109 BackgroundSyncRegistration reg_2; | |
| 1110 EXPECT_TRUE(reg_1.Equals(reg_2)); | |
| 1111 reg_1.options()->power_state = POWER_STATE_AUTO; | |
| 1112 reg_2.options()->power_state = POWER_STATE_AVOID_DRAINING; | |
| 1113 EXPECT_FALSE(reg_1.Equals(reg_2)); | |
| 1114 } | |
| 1115 | |
| 1116 TEST_F(BackgroundSyncManagerTest, StoreAndRetrievePreservesValues) { | 1077 TEST_F(BackgroundSyncManagerTest, StoreAndRetrievePreservesValues) { |
| 1117 BackgroundSyncRegistrationOptions options; | 1078 BackgroundSyncRegistrationOptions options; |
| 1118 // Set non-default values for each field. | 1079 // Set non-default values for each field. |
| 1119 options.tag = "foo"; | 1080 options.tag = "foo"; |
| 1120 EXPECT_NE(SYNC_PERIODIC, options.periodicity); | 1081 EXPECT_NE(SYNC_PERIODIC, options.periodicity); |
| 1121 options.periodicity = SYNC_PERIODIC; | 1082 options.periodicity = SYNC_PERIODIC; |
| 1122 options.min_period += 1; | 1083 options.min_period += 1; |
| 1123 EXPECT_NE(NETWORK_STATE_ANY, options.network_state); | 1084 EXPECT_NE(NETWORK_STATE_ANY, options.network_state); |
| 1124 options.network_state = NETWORK_STATE_ANY; | 1085 options.network_state = NETWORK_STATE_ANY; |
| 1125 EXPECT_NE(POWER_STATE_AUTO, options.power_state); | |
| 1126 options.power_state = POWER_STATE_AUTO; | |
| 1127 | 1086 |
| 1128 // Store the registration. | 1087 // Store the registration. |
| 1129 EXPECT_TRUE(Register(options)); | 1088 EXPECT_TRUE(Register(options)); |
| 1130 | 1089 |
| 1131 // Simulate restarting the sync manager, forcing the next read to come from | 1090 // Simulate restarting the sync manager, forcing the next read to come from |
| 1132 // disk. | 1091 // disk. |
| 1133 SetupBackgroundSyncManager(); | 1092 SetupBackgroundSyncManager(); |
| 1134 | 1093 |
| 1135 EXPECT_TRUE(GetRegistration(options)); | 1094 EXPECT_TRUE(GetRegistration(options)); |
| 1136 EXPECT_TRUE(options.Equals(*callback_registration_handle_->options())); | 1095 EXPECT_TRUE(options.Equals(*callback_registration_handle_->options())); |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1384 // Finish firing the event. | 1343 // Finish firing the event. |
| 1385 sync_fired_callback_.Run(SERVICE_WORKER_ERROR_FAILED); | 1344 sync_fired_callback_.Run(SERVICE_WORKER_ERROR_FAILED); |
| 1386 base::RunLoop().RunUntilIdle(); | 1345 base::RunLoop().RunUntilIdle(); |
| 1387 // Since there was one retry attempt left, the sync didn't completely fail | 1346 // Since there was one retry attempt left, the sync didn't completely fail |
| 1388 // before it was unregistered. | 1347 // before it was unregistered. |
| 1389 EXPECT_EQ(BackgroundSyncState::UNREGISTERED, FinishedState()); | 1348 EXPECT_EQ(BackgroundSyncState::UNREGISTERED, FinishedState()); |
| 1390 } | 1349 } |
| 1391 | 1350 |
| 1392 TEST_F(BackgroundSyncManagerTest, OverwritePendingRegistration) { | 1351 TEST_F(BackgroundSyncManagerTest, OverwritePendingRegistration) { |
| 1393 // An overwritten pending registration should complete with | 1352 // An overwritten pending registration should complete with |
| 1394 // BackgroundSyncState::UNREGISTERED. | 1353 // BACKGROUND_SYNC_STATE_UNREGISTERED. |
| 1395 sync_options_1_.power_state = POWER_STATE_AVOID_DRAINING; | 1354 sync_options_1_.network_state = NETWORK_STATE_AVOID_CELLULAR; |
| 1396 EXPECT_TRUE(Register(sync_options_1_)); | 1355 EXPECT_TRUE(Register(sync_options_1_)); |
| 1397 EXPECT_TRUE(GetRegistration(sync_options_1_)); | 1356 EXPECT_TRUE(GetRegistration(sync_options_1_)); |
| 1398 EXPECT_EQ(POWER_STATE_AVOID_DRAINING, | 1357 EXPECT_EQ(NETWORK_STATE_AVOID_CELLULAR, |
| 1399 callback_registration_handle_->options()->power_state); | 1358 callback_registration_handle_->options()->network_state); |
| 1400 scoped_ptr<BackgroundSyncRegistrationHandle> original_handle = | 1359 scoped_ptr<BackgroundSyncRegistrationHandle> original_handle = |
| 1401 std::move(callback_registration_handle_); | 1360 std::move(callback_registration_handle_); |
| 1402 | 1361 |
| 1403 // Overwrite the pending registration. | 1362 // Overwrite the pending registration. |
| 1404 sync_options_1_.power_state = POWER_STATE_AUTO; | 1363 sync_options_1_.network_state = NETWORK_STATE_ONLINE; |
| 1405 EXPECT_TRUE(Register(sync_options_1_)); | 1364 EXPECT_TRUE(Register(sync_options_1_)); |
| 1406 EXPECT_TRUE(GetRegistration(sync_options_1_)); | 1365 EXPECT_TRUE(GetRegistration(sync_options_1_)); |
| 1407 EXPECT_EQ(POWER_STATE_AUTO, | 1366 EXPECT_EQ(NETWORK_STATE_ONLINE, |
| 1408 callback_registration_handle_->options()->power_state); | 1367 callback_registration_handle_->options()->network_state); |
| 1409 | 1368 |
| 1410 EXPECT_TRUE(NotifyWhenFinished(original_handle.get())); | 1369 EXPECT_TRUE(NotifyWhenFinished(original_handle.get())); |
| 1411 EXPECT_EQ(BackgroundSyncState::UNREGISTERED, FinishedState()); | 1370 EXPECT_EQ(BackgroundSyncState::UNREGISTERED, FinishedState()); |
| 1412 EXPECT_EQ(0, sync_events_called_); | 1371 EXPECT_EQ(0, sync_events_called_); |
| 1413 } | 1372 } |
| 1414 | 1373 |
| 1415 TEST_F(BackgroundSyncManagerTest, OverwriteFiringRegistrationWhichSucceeds) { | 1374 TEST_F(BackgroundSyncManagerTest, OverwriteFiringRegistrationWhichSucceeds) { |
| 1416 // An overwritten pending registration should complete with | 1375 // An overwritten pending registration should complete with |
| 1417 // BackgroundSyncState::SUCCESS if firing completes successfully. | 1376 // BackgroundSyncState::SUCCESS if firing completes successfully. |
| 1418 InitDelayedSyncEventTest(); | 1377 InitDelayedSyncEventTest(); |
| 1419 | 1378 |
| 1420 sync_options_1_.power_state = POWER_STATE_AVOID_DRAINING; | 1379 sync_options_1_.network_state = NETWORK_STATE_AVOID_CELLULAR; |
| 1421 RegisterAndVerifySyncEventDelayed(sync_options_1_); | 1380 RegisterAndVerifySyncEventDelayed(sync_options_1_); |
| 1422 scoped_ptr<BackgroundSyncRegistrationHandle> original_handle = | 1381 scoped_ptr<BackgroundSyncRegistrationHandle> original_handle = |
| 1423 std::move(callback_registration_handle_); | 1382 std::move(callback_registration_handle_); |
| 1424 | 1383 |
| 1425 // The next registration won't block. | 1384 // The next registration won't block. |
| 1426 InitSyncEventTest(); | 1385 InitSyncEventTest(); |
| 1427 | 1386 |
| 1428 // Overwrite the firing registration. | 1387 // Overwrite the firing registration. |
| 1429 sync_options_1_.power_state = POWER_STATE_AUTO; | 1388 sync_options_1_.network_state = NETWORK_STATE_ONLINE; |
| 1430 EXPECT_TRUE(Register(sync_options_1_)); | 1389 EXPECT_TRUE(Register(sync_options_1_)); |
| 1431 EXPECT_FALSE(NotifyWhenFinished(original_handle.get())); | 1390 EXPECT_FALSE(NotifyWhenFinished(original_handle.get())); |
| 1432 | 1391 |
| 1433 // Successfully finish the first event. | 1392 // Successfully finish the first event. |
| 1434 sync_fired_callback_.Run(SERVICE_WORKER_OK); | 1393 sync_fired_callback_.Run(SERVICE_WORKER_OK); |
| 1435 base::RunLoop().RunUntilIdle(); | 1394 base::RunLoop().RunUntilIdle(); |
| 1436 EXPECT_EQ(BackgroundSyncState::SUCCESS, FinishedState()); | 1395 EXPECT_EQ(BackgroundSyncState::SUCCESS, FinishedState()); |
| 1437 } | 1396 } |
| 1438 | 1397 |
| 1439 TEST_F(BackgroundSyncManagerTest, OverwriteFiringRegistrationWhichFails) { | 1398 TEST_F(BackgroundSyncManagerTest, OverwriteFiringRegistrationWhichFails) { |
| 1440 // An overwritten pending registration should complete with | 1399 // An overwritten pending registration should complete with |
| 1441 // BackgroundSyncState::FAILED if firing fails. | 1400 // BackgroundSyncState::FAILED if firing fails. |
| 1442 InitDelayedSyncEventTest(); | 1401 InitDelayedSyncEventTest(); |
| 1443 | 1402 |
| 1444 sync_options_1_.power_state = POWER_STATE_AVOID_DRAINING; | 1403 sync_options_1_.network_state = NETWORK_STATE_AVOID_CELLULAR; |
| 1445 RegisterAndVerifySyncEventDelayed(sync_options_1_); | 1404 RegisterAndVerifySyncEventDelayed(sync_options_1_); |
| 1446 scoped_ptr<BackgroundSyncRegistrationHandle> original_handle = | 1405 scoped_ptr<BackgroundSyncRegistrationHandle> original_handle = |
| 1447 std::move(callback_registration_handle_); | 1406 std::move(callback_registration_handle_); |
| 1448 | 1407 |
| 1449 // The next registration won't block. | 1408 // The next registration won't block. |
| 1450 InitSyncEventTest(); | 1409 InitSyncEventTest(); |
| 1451 | 1410 |
| 1452 // Overwrite the firing registration. | 1411 // Overwrite the firing registration. |
| 1453 sync_options_1_.power_state = POWER_STATE_AUTO; | 1412 sync_options_1_.network_state = NETWORK_STATE_ONLINE; |
| 1454 EXPECT_TRUE(Register(sync_options_1_)); | 1413 EXPECT_TRUE(Register(sync_options_1_)); |
| 1455 EXPECT_FALSE(NotifyWhenFinished(original_handle.get())); | 1414 EXPECT_FALSE(NotifyWhenFinished(original_handle.get())); |
| 1456 | 1415 |
| 1457 // Fail the first event. | 1416 // Fail the first event. |
| 1458 sync_fired_callback_.Run(SERVICE_WORKER_ERROR_FAILED); | 1417 sync_fired_callback_.Run(SERVICE_WORKER_ERROR_FAILED); |
| 1459 base::RunLoop().RunUntilIdle(); | 1418 base::RunLoop().RunUntilIdle(); |
| 1460 EXPECT_EQ(BackgroundSyncState::FAILED, FinishedState()); | 1419 EXPECT_EQ(BackgroundSyncState::FAILED, FinishedState()); |
| 1461 } | 1420 } |
| 1462 | 1421 |
| 1463 TEST_F(BackgroundSyncManagerTest, DisableWhilePendingNotifiesFinished) { | 1422 TEST_F(BackgroundSyncManagerTest, DisableWhilePendingNotifiesFinished) { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1491 EXPECT_FALSE(Register(sync_options_2_)); | 1450 EXPECT_FALSE(Register(sync_options_2_)); |
| 1492 EXPECT_FALSE(callback_finished_called_); | 1451 EXPECT_FALSE(callback_finished_called_); |
| 1493 test_background_sync_manager_->set_corrupt_backend(false); | 1452 test_background_sync_manager_->set_corrupt_backend(false); |
| 1494 | 1453 |
| 1495 // Successfully complete the firing event. | 1454 // Successfully complete the firing event. |
| 1496 sync_fired_callback_.Run(SERVICE_WORKER_OK); | 1455 sync_fired_callback_.Run(SERVICE_WORKER_OK); |
| 1497 base::RunLoop().RunUntilIdle(); | 1456 base::RunLoop().RunUntilIdle(); |
| 1498 EXPECT_EQ(BackgroundSyncState::SUCCESS, FinishedState()); | 1457 EXPECT_EQ(BackgroundSyncState::SUCCESS, FinishedState()); |
| 1499 } | 1458 } |
| 1500 | 1459 |
| 1501 // TODO(jkarlin): Change this to a periodic test as one-shots can't be power | |
| 1502 // dependent according to spec. | |
| 1503 TEST_F(BackgroundSyncManagerTest, OneShotFiresOnPowerChange) { | |
| 1504 InitSyncEventTest(); | |
| 1505 sync_options_1_.power_state = POWER_STATE_AVOID_DRAINING; | |
| 1506 | |
| 1507 SetOnBatteryPower(true); | |
| 1508 EXPECT_TRUE(Register(sync_options_1_)); | |
| 1509 EXPECT_EQ(0, sync_events_called_); | |
| 1510 EXPECT_TRUE(GetRegistration(sync_options_1_)); | |
| 1511 | |
| 1512 SetOnBatteryPower(false); | |
| 1513 EXPECT_EQ(1, sync_events_called_); | |
| 1514 EXPECT_FALSE(GetRegistration(sync_options_1_)); | |
| 1515 } | |
| 1516 | |
| 1517 // TODO(jkarlin): Change this to a periodic test as one-shots can't be power | |
| 1518 // dependent according to spec. | |
| 1519 TEST_F(BackgroundSyncManagerTest, MultipleOneShotsFireOnPowerChange) { | |
| 1520 InitSyncEventTest(); | |
| 1521 sync_options_1_.power_state = POWER_STATE_AVOID_DRAINING; | |
| 1522 sync_options_2_.power_state = POWER_STATE_AVOID_DRAINING; | |
| 1523 | |
| 1524 SetOnBatteryPower(true); | |
| 1525 EXPECT_TRUE(Register(sync_options_1_)); | |
| 1526 EXPECT_TRUE(Register(sync_options_2_)); | |
| 1527 EXPECT_EQ(0, sync_events_called_); | |
| 1528 EXPECT_TRUE(GetRegistration(sync_options_1_)); | |
| 1529 EXPECT_TRUE(GetRegistration(sync_options_2_)); | |
| 1530 | |
| 1531 SetOnBatteryPower(false); | |
| 1532 EXPECT_EQ(2, sync_events_called_); | |
| 1533 EXPECT_FALSE(GetRegistration(sync_options_1_)); | |
| 1534 EXPECT_FALSE(GetRegistration(sync_options_2_)); | |
| 1535 } | |
| 1536 | |
| 1537 TEST_F(BackgroundSyncManagerTest, OneShotFiresOnNetworkChange) { | 1460 TEST_F(BackgroundSyncManagerTest, OneShotFiresOnNetworkChange) { |
| 1538 InitSyncEventTest(); | 1461 InitSyncEventTest(); |
| 1539 | 1462 |
| 1540 SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); | 1463 SetNetwork(net::NetworkChangeNotifier::CONNECTION_NONE); |
| 1541 EXPECT_TRUE(Register(sync_options_1_)); | 1464 EXPECT_TRUE(Register(sync_options_1_)); |
| 1542 EXPECT_EQ(0, sync_events_called_); | 1465 EXPECT_EQ(0, sync_events_called_); |
| 1543 EXPECT_TRUE(GetRegistration(sync_options_1_)); | 1466 EXPECT_TRUE(GetRegistration(sync_options_1_)); |
| 1544 | 1467 |
| 1545 SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); | 1468 SetNetwork(net::NetworkChangeNotifier::CONNECTION_WIFI); |
| 1546 base::RunLoop().RunUntilIdle(); | 1469 base::RunLoop().RunUntilIdle(); |
| (...skipping 482 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2029 // Run it again. | 1952 // Run it again. |
| 2030 test_clock_->Advance(test_background_sync_manager_->delayed_task_delta()); | 1953 test_clock_->Advance(test_background_sync_manager_->delayed_task_delta()); |
| 2031 test_background_sync_manager_->delayed_task().Run(); | 1954 test_background_sync_manager_->delayed_task().Run(); |
| 2032 base::RunLoop().RunUntilIdle(); | 1955 base::RunLoop().RunUntilIdle(); |
| 2033 EXPECT_FALSE(GetRegistration(sync_options_1_)); | 1956 EXPECT_FALSE(GetRegistration(sync_options_1_)); |
| 2034 EXPECT_EQ(BackgroundSyncEventLastChance::IS_LAST_CHANCE, | 1957 EXPECT_EQ(BackgroundSyncEventLastChance::IS_LAST_CHANCE, |
| 2035 test_background_sync_manager_->last_chance()); | 1958 test_background_sync_manager_->last_chance()); |
| 2036 } | 1959 } |
| 2037 | 1960 |
| 2038 } // namespace content | 1961 } // namespace content |
| OLD | NEW |