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

Unified Diff: chrome/browser/policy/policy_service_unittest.cc

Issue 10191005: Added PolicyChangeRegistrar, to observe specific policies at the PolicyService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Cleanup Created 8 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/policy/policy_service_unittest.cc
diff --git a/chrome/browser/policy/policy_service_unittest.cc b/chrome/browser/policy/policy_service_unittest.cc
index 9fa0de5991ac795e5f00de52f2feaaa5ca169dd0..b29952a272d197f314eae32c97d045289a76aa84 100644
--- a/chrome/browser/policy/policy_service_unittest.cc
+++ b/chrome/browser/policy/policy_service_unittest.cc
@@ -27,12 +27,28 @@ class MockPolicyServiceObserver : public PolicyService::Observer {
const PolicyMap& current));
};
+class MockPolicyValueObserver : public PolicyChangeRegistrar::Observer {
+ public:
+ virtual ~MockPolicyValueObserver() {}
+ MOCK_METHOD5(OnPolicyValueUpdated, void(PolicyDomain,
+ const std::string&,
+ const std::string&,
+ const Value*,
+ const Value*));
+};
+
// Helper to compare the arguments to an EXPECT_CALL of OnPolicyUpdated() with
// their expected values.
MATCHER_P(PolicyEquals, expected, "") {
return arg.Equals(*expected);
}
+// Helper to compare the arguments to an EXPECT_CALL of OnPolicyValueUpdated()
+// with their expected values.
+MATCHER_P(ValueEquals, expected, "") {
+ return base::Value::Equals(arg, expected);
+}
+
} // namespace
class PolicyServiceTest : public testing::Test {
@@ -49,11 +65,6 @@ class PolicyServiceTest : public testing::Test {
providers.push_back(&provider1_);
providers.push_back(&provider2_);
policy_service_.reset(new PolicyServiceImpl(providers));
- policy_service_->AddObserver(POLICY_DOMAIN_CHROME, "", &observer_);
- }
-
- void TearDown() OVERRIDE {
- policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, "", &observer_);
}
// Returns true if the policies for |domain|, |component_id| match |expected|.
@@ -70,7 +81,6 @@ class PolicyServiceTest : public testing::Test {
MockConfigurationPolicyProvider provider1_;
MockConfigurationPolicyProvider provider2_;
scoped_ptr<PolicyServiceImpl> policy_service_;
- MockPolicyServiceObserver observer_;
private:
DISALLOW_COPY_AND_ASSIGN(PolicyServiceTest);
@@ -84,6 +94,9 @@ TEST_F(PolicyServiceTest, LoadsPoliciesBeforeProvidersRefresh) {
}
TEST_F(PolicyServiceTest, NotifyObservers) {
+ MockPolicyServiceObserver observer;
+ policy_service_->AddObserver(POLICY_DOMAIN_CHROME, "", &observer);
+
PolicyMap expectedPrevious;
expectedPrevious.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(13));
@@ -93,16 +106,16 @@ TEST_F(PolicyServiceTest, NotifyObservers) {
expectedCurrent.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(123));
provider0_.AddMandatoryPolicy("aaa", base::Value::CreateIntegerValue(123));
- EXPECT_CALL(observer_, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
- PolicyEquals(&expectedPrevious),
- PolicyEquals(&expectedCurrent)));
+ EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
+ PolicyEquals(&expectedPrevious),
+ PolicyEquals(&expectedCurrent)));
provider0_.RefreshPolicies();
- Mock::VerifyAndClearExpectations(&observer_);
+ Mock::VerifyAndClearExpectations(&observer);
// No changes.
- EXPECT_CALL(observer_, OnPolicyUpdated(_, _, _, _)).Times(0);
+ EXPECT_CALL(observer, OnPolicyUpdated(_, _, _, _)).Times(0);
provider0_.RefreshPolicies();
- Mock::VerifyAndClearExpectations(&observer_);
+ Mock::VerifyAndClearExpectations(&observer);
EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expectedCurrent));
// New policy.
@@ -110,46 +123,46 @@ TEST_F(PolicyServiceTest, NotifyObservers) {
expectedCurrent.Set("bbb", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(456));
provider0_.AddMandatoryPolicy("bbb", base::Value::CreateIntegerValue(456));
- EXPECT_CALL(observer_, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
- PolicyEquals(&expectedPrevious),
- PolicyEquals(&expectedCurrent)));
+ EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
+ PolicyEquals(&expectedPrevious),
+ PolicyEquals(&expectedCurrent)));
provider0_.RefreshPolicies();
- Mock::VerifyAndClearExpectations(&observer_);
+ Mock::VerifyAndClearExpectations(&observer);
// Removed policy.
expectedPrevious.CopyFrom(expectedCurrent);
expectedCurrent.Erase("bbb");
provider0_.RemovePolicy("bbb");
- EXPECT_CALL(observer_, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
- PolicyEquals(&expectedPrevious),
- PolicyEquals(&expectedCurrent)));
+ EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
+ PolicyEquals(&expectedPrevious),
+ PolicyEquals(&expectedCurrent)));
provider0_.RefreshPolicies();
- Mock::VerifyAndClearExpectations(&observer_);
+ Mock::VerifyAndClearExpectations(&observer);
// Changed policy.
expectedPrevious.CopyFrom(expectedCurrent);
expectedCurrent.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(789));
provider0_.AddMandatoryPolicy("aaa", base::Value::CreateIntegerValue(789));
- EXPECT_CALL(observer_, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
- PolicyEquals(&expectedPrevious),
- PolicyEquals(&expectedCurrent)));
+ EXPECT_CALL(observer, OnPolicyUpdated(POLICY_DOMAIN_CHROME, "",
+ PolicyEquals(&expectedPrevious),
+ PolicyEquals(&expectedCurrent)));
provider0_.RefreshPolicies();
- Mock::VerifyAndClearExpectations(&observer_);
+ Mock::VerifyAndClearExpectations(&observer);
// No changes again.
- EXPECT_CALL(observer_, OnPolicyUpdated(_, _, _, _)).Times(0);
+ EXPECT_CALL(observer, OnPolicyUpdated(_, _, _, _)).Times(0);
provider0_.RefreshPolicies();
- Mock::VerifyAndClearExpectations(&observer_);
+ Mock::VerifyAndClearExpectations(&observer);
EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expectedCurrent));
+
+ policy_service_->RemoveObserver(POLICY_DOMAIN_CHROME, "", &observer);
}
TEST_F(PolicyServiceTest, Priorities) {
PolicyMap expected;
expected.Set("pre", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(13));
- EXPECT_CALL(observer_, OnPolicyUpdated(_, _, _, _)).Times(AnyNumber());
-
expected.Set("aaa", POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
base::Value::CreateIntegerValue(0));
provider0_.AddMandatoryPolicy("aaa", base::Value::CreateIntegerValue(0));
@@ -173,4 +186,62 @@ TEST_F(PolicyServiceTest, Priorities) {
EXPECT_TRUE(VerifyPolicies(POLICY_DOMAIN_CHROME, "", expected));
}
+TEST_F(PolicyServiceTest, PolicyChangeRegistrar) {
+ MockPolicyValueObserver observer;
+ scoped_ptr<PolicyChangeRegistrar> registrar(
+ new PolicyChangeRegistrar(
+ policy_service_.get(), POLICY_DOMAIN_CHROME, "", &observer));
+
+ // Not observing any policy yet.
+ EXPECT_CALL(observer, OnPolicyValueUpdated(_, _, _, _, _)).Times(0);
+ const base::FundamentalValue kValue0(0);
+ provider0_.AddMandatoryPolicy("aaa", kValue0.DeepCopy());
+ provider0_.RefreshPolicies();
+ Mock::VerifyAndClearExpectations(&observer);
+
+ // Starting to observe existing policies doesn't trigger notification.
+ EXPECT_CALL(observer, OnPolicyValueUpdated(_, _, _, _, _)).Times(0);
+ registrar->Add("aaa");
+ Mock::VerifyAndClearExpectations(&observer);
+
+ // Changing it now triggers a notification.
+ base::FundamentalValue kValue1(1);
+ EXPECT_CALL(observer, OnPolicyValueUpdated(POLICY_DOMAIN_CHROME, "", "aaa",
+ ValueEquals(&kValue0),
+ ValueEquals(&kValue1)));
+ provider0_.AddMandatoryPolicy("aaa", kValue1.DeepCopy());
+ provider0_.RefreshPolicies();
+ Mock::VerifyAndClearExpectations(&observer);
+
+ // Changing other values doesn't trigger a notification.
+ EXPECT_CALL(observer, OnPolicyValueUpdated(_, _, _, _, _)).Times(0);
+ provider0_.AddMandatoryPolicy("bbb", kValue0.DeepCopy());
+ provider0_.RefreshPolicies();
+ Mock::VerifyAndClearExpectations(&observer);
+
+ // Modifying the value triggers a notification.
+ base::FundamentalValue kValue2(2);
+ EXPECT_CALL(observer, OnPolicyValueUpdated(POLICY_DOMAIN_CHROME, "", "aaa",
+ ValueEquals(&kValue1),
+ ValueEquals(&kValue2)));
+ provider0_.AddMandatoryPolicy("aaa", kValue2.DeepCopy());
+ provider0_.RefreshPolicies();
+ Mock::VerifyAndClearExpectations(&observer);
+
+ // Removing the value triggers a notification.
+ EXPECT_CALL(observer, OnPolicyValueUpdated(POLICY_DOMAIN_CHROME, "", "aaa",
+ ValueEquals(&kValue2),
+ NULL));
+ provider0_.RemovePolicy("aaa");
+ provider0_.RefreshPolicies();
+ Mock::VerifyAndClearExpectations(&observer);
+
+ // No more notifications after destroying the registrar.
+ EXPECT_CALL(observer, OnPolicyValueUpdated(_, _, _, _, _)).Times(0);
+ registrar.reset();
+ provider0_.AddMandatoryPolicy("aaa", kValue1.DeepCopy());
+ provider0_.RefreshPolicies();
+ Mock::VerifyAndClearExpectations(&observer);
+}
+
} // namespace policy

Powered by Google App Engine
This is Rietveld 408576698