1d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// found in the LICENSE file. 4d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 5d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <string> 6d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 7d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/bind.h" 8d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/callback.h" 9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/files/file_path.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/path_service.h" 13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/run_loop.h" 14d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/values.h" 15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/chromeos/policy/cloud_external_data_manager_base.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/chromeos/policy/cloud_external_data_manager_base_test_util.h" 17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h" 18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h" 19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/policy/profile_policy_connector.h" 20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/policy/profile_policy_connector_factory.h" 21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/common/chrome_paths.h" 24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_core.h" 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/external_data_fetcher.h" 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "components/policy/core/common/policy_map.h" 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/policy_service.h" 29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "content/public/test/test_utils.h" 30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "net/test/embedded_test_server/embedded_test_server.h" 31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "policy/policy_constants.h" 32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "url/gurl.h" 34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace policy { 36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace { 38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)const char kExternalDataPath[] = "policy/blank.html"; 40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} // namespace 42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)typedef InProcessBrowserTest UserCloudExternalDataManagerTest; 44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(UserCloudExternalDataManagerTest, FetchExternalData) { 46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) CloudExternalDataManagerBase::SetMaxExternalDataSizeForTesting(1000); 47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 48d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const GURL url = 50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) embedded_test_server()->GetURL(std::string("/") + kExternalDataPath); 51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 52d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::FilePath test_dir; 53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir)); 54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) std::string external_data; 55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_TRUE(base::ReadFileToString(test_dir.AppendASCII(kExternalDataPath), 56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) &external_data)); 57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_FALSE(external_data.empty()); 58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 59d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<base::DictionaryValue> metadata = 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test::ConstructExternalDataReference(url.spec(), external_data); 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_CHROMEOS) 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UserCloudPolicyManagerChromeOS* policy_manager = 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UserCloudPolicyManagerFactoryChromeOS::GetForProfile( 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser()->profile()); 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UserCloudPolicyManager* policy_manager = 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UserCloudPolicyManagerFactory::GetForBrowserContext(browser()->profile()); 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ASSERT_TRUE(policy_manager); 70d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // TODO(bartfab): The test injects an ExternalDataFetcher for an arbitrary 71d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // policy. This is only done because there are no policies that reference 72d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // external data yet. Once the first such policy is added, switch the test to 73d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) // that policy and stop injecting a manually instantiated ExternalDataFetcher. 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) test::SetExternalDataReference(policy_manager->core(), 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) key::kHomepageLocation, 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) make_scoped_ptr(metadata->DeepCopy())); 77d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) content::RunAllPendingInMessageLoop(); 78d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 79d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ProfilePolicyConnector* policy_connector = 80d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ProfilePolicyConnectorFactory::GetForProfile(browser()->profile()); 81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_TRUE(policy_connector); 82d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const PolicyMap& policies = policy_connector->policy_service()->GetPolicies( 83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) PolicyNamespace(POLICY_DOMAIN_CHROME, std::string())); 84d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const PolicyMap::Entry* policy_entry = policies.Get(key::kHomepageLocation); 85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_TRUE(policy_entry); 86d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_TRUE(base::Value::Equals(metadata.get(), policy_entry->value)); 87d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_TRUE(policy_entry->external_data_fetcher); 88d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 89d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop run_loop; 90d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) scoped_ptr<std::string> fetched_external_data; 91d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) policy_entry->external_data_fetcher->Fetch(base::Bind( 92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) &test::ExternalDataFetchCallback, 93d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) &fetched_external_data, 94d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) run_loop.QuitClosure())); 95d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) run_loop.Run(); 96d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 97d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ASSERT_TRUE(fetched_external_data); 98d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) EXPECT_EQ(external_data, *fetched_external_data); 99d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 100d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 101d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} // namespace policy 102