Index: chrome/browser/policy/cloud/cloud_policy_manager_unittest.cc |
diff --git a/chrome/browser/policy/cloud/cloud_policy_manager_unittest.cc b/chrome/browser/policy/cloud/cloud_policy_manager_unittest.cc |
index 04bfdaf0ae1c6517261d7708b5a1b51d8b89daf9..6b599125a4a77db321f4fe30b7188bb068d5c1ef 100644 |
--- a/chrome/browser/policy/cloud/cloud_policy_manager_unittest.cc |
+++ b/chrome/browser/policy/cloud/cloud_policy_manager_unittest.cc |
@@ -9,6 +9,7 @@ |
#include "base/callback.h" |
#include "base/compiler_specific.h" |
#include "base/memory/scoped_ptr.h" |
+#include "base/memory/weak_ptr.h" |
#include "base/message_loop/message_loop.h" |
#include "base/test/test_simple_task_runner.h" |
#include "chrome/browser/invalidation/fake_invalidation_service.h" |
@@ -150,7 +151,8 @@ class TestCloudPolicyManager : public CloudPolicyManager { |
using CloudPolicyManager::store; |
using CloudPolicyManager::service; |
using CloudPolicyManager::CheckAndPublishPolicy; |
- using CloudPolicyManager::StartRefreshScheduler; |
+ using CloudPolicyManager::StartInvalidator; |
+ using CloudPolicyManager::StopInvalidator; |
private: |
DISALLOW_COPY_AND_ASSIGN(TestCloudPolicyManager); |
@@ -187,7 +189,7 @@ class CloudPolicyManagerTest : public testing::Test { |
manager_->Shutdown(); |
} |
- // Sets up for an invalidations test. |
+ // Creates the invalidator object for an invalidations test. |
void CreateInvalidator() { |
// Add the invalidation registration info to the policy data. |
em::PolicyData* policy_data = new em::PolicyData(policy_.policy_data()); |
@@ -199,11 +201,15 @@ class CloudPolicyManagerTest : public testing::Test { |
MockCloudPolicyClient* client = new MockCloudPolicyClient(); |
EXPECT_CALL(*client, SetupRegistration(_, _)); |
manager_->core()->Connect(scoped_ptr<CloudPolicyClient>(client)); |
+ manager_->core()->StartRefreshScheduler(); |
// Create invalidation objects. |
task_runner_ = new base::TestSimpleTaskRunner(); |
invalidation_service_.reset(new invalidation::FakeInvalidationService()); |
invalidator_.reset(new CloudPolicyInvalidator( |
+ base::Bind( |
+ &CloudPolicyManagerTest::GetInvalidationService, |
+ base::Unretained(this)), |
manager_.get(), |
manager_->core()->store(), |
task_runner_)); |
@@ -213,13 +219,9 @@ class CloudPolicyManagerTest : public testing::Test { |
invalidator_->Shutdown(); |
} |
- // Call EnableInvalidations on the manager. |
- void EnableInvalidations() { |
- manager_->EnableInvalidations( |
- base::Bind( |
- &CloudPolicyInvalidator::InitializeWithService, |
- base::Unretained(invalidator_.get()), |
- base::Unretained(invalidation_service_.get()))); |
+ // Get a pointer to the invalidation service. |
+ invalidation::InvalidationService* GetInvalidationService() { |
+ return invalidation_service_.get(); |
} |
// Determine if the invalidator has registered with the invalidation service. |
@@ -401,25 +403,68 @@ TEST_F(CloudPolicyManagerTest, SignalOnError) { |
EXPECT_TRUE(manager_->IsInitializationComplete(POLICY_DOMAIN_CHROME)); |
} |
-TEST_F(CloudPolicyManagerTest, EnableInvalidationsBeforeRefreshScheduler) { |
+TEST_F(CloudPolicyManagerTest, StartInvalidatorAfterSetInvalidator) { |
CreateInvalidator(); |
+ base::WeakPtrFactory<CloudPolicyInvalidator> weak_factory(invalidator_.get()); |
EXPECT_TRUE(IsInvalidatorUnregistered()); |
- EnableInvalidations(); |
+ manager_->SetInvalidator(weak_factory.GetWeakPtr()); |
EXPECT_TRUE(IsInvalidatorUnregistered()); |
- manager_->StartRefreshScheduler(); |
+ manager_->StartInvalidator(); |
EXPECT_TRUE(IsInvalidatorRegistered()); |
ShutdownInvalidator(); |
} |
-TEST_F(CloudPolicyManagerTest, EnableInvalidationsAfterRefreshScheduler) { |
+TEST_F(CloudPolicyManagerTest, StartInvalidatorBeforeSetInvalidator) { |
CreateInvalidator(); |
+ base::WeakPtrFactory<CloudPolicyInvalidator> weak_factory(invalidator_.get()); |
EXPECT_TRUE(IsInvalidatorUnregistered()); |
- manager_->StartRefreshScheduler(); |
+ manager_->StartInvalidator(); |
EXPECT_TRUE(IsInvalidatorUnregistered()); |
- EnableInvalidations(); |
+ manager_->SetInvalidator(weak_factory.GetWeakPtr()); |
EXPECT_TRUE(IsInvalidatorRegistered()); |
ShutdownInvalidator(); |
} |
+TEST_F(CloudPolicyManagerTest, StartAndStopInvalidatorBeforeSetInvalidator) { |
+ CreateInvalidator(); |
+ base::WeakPtrFactory<CloudPolicyInvalidator> weak_factory(invalidator_.get()); |
+ EXPECT_TRUE(IsInvalidatorUnregistered()); |
+ manager_->StartInvalidator(); |
+ EXPECT_TRUE(IsInvalidatorUnregistered()); |
+ manager_->StopInvalidator(); |
+ EXPECT_TRUE(IsInvalidatorUnregistered()); |
+ manager_->SetInvalidator(weak_factory.GetWeakPtr()); |
+ EXPECT_TRUE(IsInvalidatorUnregistered()); |
+ ShutdownInvalidator(); |
+} |
+ |
+TEST_F(CloudPolicyManagerTest, StopInvalidator) { |
+ CreateInvalidator(); |
+ base::WeakPtrFactory<CloudPolicyInvalidator> weak_factory(invalidator_.get()); |
+ manager_->SetInvalidator(weak_factory.GetWeakPtr()); |
+ manager_->StartInvalidator(); |
+ EXPECT_TRUE(IsInvalidatorRegistered()); |
+ manager_->StopInvalidator(); |
+ EXPECT_TRUE(IsInvalidatorUnregistered()); |
+ manager_->StartInvalidator(); |
+ EXPECT_TRUE(IsInvalidatorRegistered()); |
+ ShutdownInvalidator(); |
+} |
+ |
+TEST_F(CloudPolicyManagerTest, InvalidateInvalidatorPointer) { |
+ CreateInvalidator(); |
+ base::WeakPtrFactory<CloudPolicyInvalidator> weak_factory(invalidator_.get()); |
+ manager_->SetInvalidator(weak_factory.GetWeakPtr()); |
+ manager_->StartInvalidator(); |
+ EXPECT_TRUE(IsInvalidatorRegistered()); |
+ ShutdownInvalidator(); |
+ weak_factory.InvalidateWeakPtrs(); |
+ EXPECT_TRUE(IsInvalidatorRegistered()); |
+ manager_->StopInvalidator(); |
+ EXPECT_TRUE(IsInvalidatorRegistered()); |
+ manager_->StartInvalidator(); |
+ EXPECT_TRUE(IsInvalidatorRegistered()); |
+} |
+ |
} // namespace |
} // namespace policy |