121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Copyright (c) 2010 The Chromium Authors. All rights reserved.
221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Use of this source code is governed by a BSD-style license that can be
321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// found in the LICENSE file.
421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/policy/asynchronous_policy_loader.h"
621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/policy/asynchronous_policy_provider.h"
721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/policy/asynchronous_policy_test_base.h"
821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/policy/configuration_policy_pref_store.h"
921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "chrome/browser/policy/mock_configuration_policy_store.h"
1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "policy/policy_constants.h"
1121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "testing/gmock/include/gmock/gmock.h"
1221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "testing/gtest/include/gtest/gtest.h"
1321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
1421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenusing ::testing::_;
1521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenusing ::testing::InSequence;
1621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenusing ::testing::Return;
1721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
1821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsennamespace policy {
1921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
2021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Creating the provider should provide initial policy.
2121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTEST_F(AsynchronousPolicyTestBase, Provide) {
2221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  InSequence s;
2321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  DictionaryValue* policies = new DictionaryValue();
2421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  policies->SetBoolean(policy::key::kSyncDisabled, true);
2521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_CALL(*delegate_, Load()).WillOnce(Return(policies));
2621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_CALL(*store_, Apply(policy::kPolicySyncDisabled, _)).Times(1);
2721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  AsynchronousPolicyProvider provider(
2821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(),
2921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      new AsynchronousPolicyLoader(delegate_.release(), 10));
3021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  provider.Provide(store_.get());
3121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
3221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
3321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
3421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen// Trigger a refresh manually and ensure that policy gets reloaded.
3521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian MonsenTEST_F(AsynchronousPolicyTestBase, ProvideAfterRefresh) {
3621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  InSequence s;
3721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  DictionaryValue* original_policies = new DictionaryValue();
3821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  original_policies->SetBoolean(policy::key::kSyncDisabled, true);
3921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_CALL(*delegate_, Load()).WillOnce(Return(original_policies));
4021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  DictionaryValue* refresh_policies = new DictionaryValue();
4121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  refresh_policies->SetBoolean(
4221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      policy::key::kJavascriptEnabled,
4321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      true);
4421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_CALL(*delegate_, Load()).WillOnce(Return(refresh_policies));
4521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  AsynchronousPolicyLoader* loader =
4621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      new AsynchronousPolicyLoader(delegate_.release(), 10);
4721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  AsynchronousPolicyProvider provider(
4821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      ConfigurationPolicyPrefStore::GetChromePolicyDefinitionList(),
4921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      loader);
5021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  loop_.RunAllPending();
5121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  loader->Reload();
5221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  loop_.RunAllPending();
5321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  EXPECT_CALL(*store_, Apply(policy::kPolicyJavascriptEnabled, _)).Times(1);
5421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  provider.Provide(store_.get());
5521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
5621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
5721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}  // namespace policy
58