Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / policy / cloud / cloud_policy_browsertest.cc
index 62cd375..238fdd1 100644 (file)
 #include "base/prefs/pref_service.h"
 #include "base/run_loop.h"
 #include "base/strings/stringprintf.h"
+#include "base/time/time.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/chrome_notification_types.h"
 #include "chrome/browser/invalidation/fake_invalidation_service.h"
-#include "chrome/browser/invalidation/invalidation_service_factory.h"
-#include "chrome/browser/policy/browser_policy_connector.h"
-#include "chrome/browser/policy/cloud/cloud_policy_client.h"
-#include "chrome/browser/policy/cloud/cloud_policy_constants.h"
-#include "chrome/browser/policy/cloud/mock_cloud_policy_client.h"
-#include "chrome/browser/policy/external_data_fetcher.h"
-#include "chrome/browser/policy/policy_map.h"
-#include "chrome/browser/policy/policy_service.h"
-#include "chrome/browser/policy/policy_test_utils.h"
+#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h"
 #include "chrome/browser/policy/profile_policy_connector.h"
 #include "chrome/browser/policy/profile_policy_connector_factory.h"
 #include "chrome/browser/policy/test/local_policy_test_server.h"
 #include "chrome/browser/profiles/profile.h"
 #include "chrome/browser/ui/browser.h"
-#include "chrome/common/chrome_switches.h"
 #include "chrome/test/base/in_process_browser_test.h"
-#include "content/public/browser/browser_thread.h"
+#include "components/invalidation/invalidation.h"
+#include "components/invalidation/invalidation_service.h"
+#include "components/invalidation/profile_invalidation_provider.h"
+#include "components/keyed_service/core/keyed_service.h"
+#include "components/policy/core/browser/browser_policy_connector.h"
+#include "components/policy/core/common/cloud/cloud_policy_client.h"
+#include "components/policy/core/common/cloud/cloud_policy_constants.h"
+#include "components/policy/core/common/cloud/mock_cloud_policy_client.h"
+#include "components/policy/core/common/external_data_fetcher.h"
+#include "components/policy/core/common/policy_map.h"
+#include "components/policy/core/common/policy_service.h"
+#include "components/policy/core/common/policy_switches.h"
+#include "components/policy/core/common/policy_test_utils.h"
 #include "content/public/browser/notification_service.h"
 #include "content/public/browser/notification_source.h"
 #include "content/public/test/test_utils.h"
 #include "policy/policy_constants.h"
 #include "policy/proto/chrome_settings.pb.h"
 #include "policy/proto/cloud_policy.pb.h"
-#include "sync/internal_api/public/base/invalidation.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "url/gurl.h"
 
 #if defined(OS_CHROMEOS)
-#include "chrome/browser/chromeos/login/user_manager.h"
 #include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h"
 #include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h"
 #include "chromeos/chromeos_paths.h"
 #include "chromeos/dbus/cryptohome_client.h"
+#include "chromeos/login/user_names.h"
 #else
-#include "chrome/browser/policy/cloud/user_cloud_policy_manager.h"
 #include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h"
-#include "chrome/browser/signin/signin_manager.h"
 #include "chrome/browser/signin/signin_manager_factory.h"
+#include "components/policy/core/common/cloud/user_cloud_policy_manager.h"
+#include "components/signin/core/browser/signin_manager.h"
 #endif
 
 using testing::AnyNumber;
@@ -63,15 +66,26 @@ using testing::Mock;
 using testing::Return;
 using testing::_;
 
+namespace content {
+class BrowserContext;
+}
+
 namespace em = enterprise_management;
 
 namespace policy {
 
 namespace {
 
+KeyedService* BuildFakeProfileInvalidationProvider(
+    content::BrowserContext* context) {
+  return new invalidation::ProfileInvalidationProvider(
+      scoped_ptr<invalidation::InvalidationService>(
+          new invalidation::FakeInvalidationService));
+}
+
 const char* GetTestUser() {
 #if defined(OS_CHROMEOS)
-  return chromeos::UserManager::kStubUser;
+  return chromeos::login::kStubUser;
 #else
   return "user@example.com";
 #endif
@@ -121,23 +135,50 @@ std::string GetTestPolicy(const char* homepage, int key_version) {
                             key_version);
 }
 
+void GetExpectedDefaultPolicy(PolicyMap* policy_map) {
+#if defined(OS_CHROMEOS)
+  policy_map->Set(key::kChromeOsMultiProfileUserBehavior,
+                  POLICY_LEVEL_MANDATORY,
+                  POLICY_SCOPE_USER,
+                  new base::StringValue("primary-only"),
+                  NULL);
+#endif
+}
+
 void GetExpectedTestPolicy(PolicyMap* expected, const char* homepage) {
-  expected->Set(key::kShowHomeButton, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
-                base::Value::CreateBooleanValue(true), NULL);
-  expected->Set(key::kRestoreOnStartup, POLICY_LEVEL_MANDATORY,
-                POLICY_SCOPE_USER, base::Value::CreateIntegerValue(4), NULL);
+  expected->Set(key::kShowHomeButton,
+                POLICY_LEVEL_MANDATORY,
+                POLICY_SCOPE_USER,
+                new base::FundamentalValue(true),
+                NULL);
+  expected->Set(key::kRestoreOnStartup,
+                POLICY_LEVEL_MANDATORY,
+                POLICY_SCOPE_USER,
+                new base::FundamentalValue(4),
+                NULL);
   base::ListValue list;
   list.AppendString("dev.chromium.org");
   list.AppendString("youtube.com");
   expected->Set(
       key::kURLBlacklist, POLICY_LEVEL_MANDATORY, POLICY_SCOPE_USER,
       list.DeepCopy(), NULL);
-  expected->Set(
-      key::kMaxInvalidationFetchDelay, POLICY_LEVEL_MANDATORY,
-      POLICY_SCOPE_USER, base::Value::CreateIntegerValue(1000), NULL);
-  expected->Set(
-      key::kHomepageLocation, POLICY_LEVEL_RECOMMENDED,
-      POLICY_SCOPE_USER, base::Value::CreateStringValue(homepage), NULL);
+  expected->Set(key::kMaxInvalidationFetchDelay,
+                POLICY_LEVEL_MANDATORY,
+                POLICY_SCOPE_USER,
+                new base::FundamentalValue(1000),
+                NULL);
+  expected->Set(key::kHomepageLocation,
+                POLICY_LEVEL_RECOMMENDED,
+                POLICY_SCOPE_USER,
+                new base::StringValue(homepage),
+                NULL);
+#if defined(OS_CHROMEOS)
+  expected->Set(key::kChromeOsMultiProfileUserBehavior,
+                POLICY_LEVEL_MANDATORY,
+                POLICY_SCOPE_USER,
+                new base::StringValue("primary-only"),
+                NULL);
+#endif
 }
 
 }  // namespace
@@ -161,8 +202,8 @@ class CloudPolicyTest : public InProcessBrowserTest,
     CommandLine* command_line = CommandLine::ForCurrentProcess();
     command_line->AppendSwitchASCII(switches::kDeviceManagementUrl, url);
 
-    invalidation::InvalidationServiceFactory::GetInstance()->
-        SetBuildOnlyFakeInvalidatorsForTest(true);
+    invalidation::ProfileInvalidationProviderFactory::GetInstance()->
+        RegisterTestingFactory(BuildFakeProfileInvalidationProvider);
   }
 
   virtual void SetUpOnMainThread() OVERRIDE {
@@ -187,12 +228,15 @@ class CloudPolicyTest : public InProcessBrowserTest,
     signin_manager->SetAuthenticatedUsername(GetTestUser());
 
     UserCloudPolicyManager* policy_manager =
-        UserCloudPolicyManagerFactory::GetForProfile(browser()->profile());
+        UserCloudPolicyManagerFactory::GetForBrowserContext(
+            browser()->profile());
     ASSERT_TRUE(policy_manager);
-    policy_manager->Connect(g_browser_process->local_state(),
-                            g_browser_process->system_request_context(),
-                            UserCloudPolicyManager::CreateCloudPolicyClient(
-                                connector->device_management_service()).Pass());
+    policy_manager->Connect(
+        g_browser_process->local_state(),
+        g_browser_process->system_request_context(),
+        UserCloudPolicyManager::CreateCloudPolicyClient(
+            connector->device_management_service(),
+            g_browser_process->system_request_context()).Pass());
 #endif  // defined(OS_CHROMEOS)
 
     ASSERT_TRUE(policy_manager->core()->client());
@@ -212,7 +256,8 @@ class CloudPolicyTest : public InProcessBrowserTest,
         em::DeviceRegisterRequest::BROWSER;
 #endif
     policy_manager->core()->client()->Register(
-        registration_type, "bogus", std::string(), false, std::string());
+        registration_type, "bogus", std::string(), false, std::string(),
+        std::string());
     run_loop.Run();
     Mock::VerifyAndClearExpectations(&observer);
     policy_manager->core()->client()->RemoveObserver(&observer);
@@ -238,13 +283,14 @@ class CloudPolicyTest : public InProcessBrowserTest,
 
   invalidation::FakeInvalidationService* GetInvalidationService() {
     return static_cast<invalidation::FakeInvalidationService*>(
-        invalidation::InvalidationServiceFactory::GetForProfile(
-            browser()->profile()));
+        static_cast<invalidation::ProfileInvalidationProvider*>(
+            invalidation::ProfileInvalidationProviderFactory::GetInstance()->
+                GetForProfile(browser()->profile()))->GetInvalidationService());
   }
 
   void SetServerPolicy(const std::string& policy) {
-    int result = file_util::WriteFile(policy_file_path(), policy.data(),
-                                      policy.size());
+    int result = base::WriteFile(policy_file_path(), policy.data(),
+                                 policy.size());
     ASSERT_EQ(static_cast<int>(policy.size()), result);
   }
 
@@ -278,8 +324,9 @@ IN_PROC_BROWSER_TEST_F(CloudPolicyTest, FetchPolicy) {
     run_loop.Run();
   }
 
-  PolicyMap empty;
-  EXPECT_TRUE(empty.Equals(policy_service->GetPolicies(
+  PolicyMap default_policy;
+  GetExpectedDefaultPolicy(&default_policy);
+  EXPECT_TRUE(default_policy.Equals(policy_service->GetPolicies(
       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))));
 
   ASSERT_NO_FATAL_FAILURE(SetServerPolicy(GetTestPolicy("google.com", 0)));
@@ -309,10 +356,12 @@ IN_PROC_BROWSER_TEST_F(CloudPolicyTest, InvalidatePolicy) {
 
   // Update the homepage in the policy and trigger an invalidation.
   ASSERT_NO_FATAL_FAILURE(SetServerPolicy(GetTestPolicy("youtube.com", 0)));
+  base::TimeDelta now =
+      base::Time::NowFromSystemTime() - base::Time::UnixEpoch();
   GetInvalidationService()->EmitInvalidationForTest(
       syncer::Invalidation::Init(
           invalidation::ObjectId(16, "test_policy"),
-          1 /* version */,
+          now.InMicroseconds() /* version */,
           "payload"));
   {
     base::RunLoop run_loop;
@@ -343,8 +392,9 @@ IN_PROC_BROWSER_TEST_F(CloudPolicyTest, FetchPolicyWithRotatedKey) {
   std::string initial_key;
   ASSERT_TRUE(base::ReadFileToString(user_policy_key_file_, &initial_key));
 
-  PolicyMap empty;
-  EXPECT_TRUE(empty.Equals(policy_service->GetPolicies(
+  PolicyMap default_policy;
+  GetExpectedDefaultPolicy(&default_policy);
+  EXPECT_TRUE(default_policy.Equals(policy_service->GetPolicies(
       PolicyNamespace(POLICY_DOMAIN_CHROME, std::string()))));
 
   // Set the new policies and a new key at the server.