12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/run_loop.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/browser_process.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/test_request_interceptor.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/browser/browser_policy_connector.h" 14a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_client.h" 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/mock_cloud_policy_client.h" 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/policy_switches.h" 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/policy_test_utils.h" 188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/net_errors.h" 20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "net/url_request/url_request_context_getter.h" 21a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "policy/proto/device_management_backend.pb.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h" 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/user_cloud_policy_manager_factory.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "components/policy/core/common/cloud/user_cloud_policy_manager.h" 32e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 358bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)using content::BrowserThread; 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using testing::AnyNumber; 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using testing::InvokeWithoutArgs; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using testing::Mock; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using testing::_; 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace em = enterprise_management; 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace policy { 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests the cloud policy stack using a URLRequestJobFactory::ProtocolHandler 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// to intercept requests and produce canned responses. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CloudPolicyManagerTest : public InProcessBrowserTest { 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CloudPolicyManagerTest() {} 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~CloudPolicyManagerTest() {} 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine* command_line = CommandLine::ForCurrentProcess(); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) command_line->AppendSwitchASCII(switches::kDeviceManagementUrl, 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "http://localhost"); 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUpOnMainThread() OVERRIDE { 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(PolicyServiceIsEmpty(g_browser_process->policy_service())) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) << "Pre-existing policies in this machine will make this test fail."; 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) interceptor_.reset(new TestRequestInterceptor( 638bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) "localhost", 648bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO))); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserPolicyConnector* connector = 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) g_browser_process->browser_policy_connector(); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) connector->ScheduleServiceInitialization(0); 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if !defined(OS_CHROMEOS) 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Mock a signed-in user. This is used by the UserCloudPolicyStore to pass 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the username to the UserCloudPolicyValidator. 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SigninManager* signin_manager = 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SigninManagerFactory::GetForProfile(browser()->profile()); 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(signin_manager); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) signin_manager->SetAuthenticatedUsername("user@example.com"); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ASSERT_TRUE(policy_manager()); 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policy_manager()->Connect( 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) g_browser_process->local_state(), 81d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) g_browser_process->system_request_context(), 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) UserCloudPolicyManager::CreateCloudPolicyClient( 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) connector->device_management_service(), 84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) g_browser_process->system_request_context()).Pass()); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void CleanUpOnMainThread() OVERRIDE { 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that all the expected requests were handled. 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0u, interceptor_->GetPendingSize()); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor_.reset(); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserCloudPolicyManagerChromeOS* policy_manager() { 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return UserCloudPolicyManagerFactoryChromeOS::GetForProfile( 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) browser()->profile()); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UserCloudPolicyManager* policy_manager() { 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return UserCloudPolicyManagerFactory::GetForBrowserContext( 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) browser()->profile()); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // defined(OS_CHROMEOS) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Register the client of the policy_manager() using a bogus auth token, and 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // returns once the registration gets a result back. 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void Register() { 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(policy_manager()); 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(policy_manager()->core()->client()); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::RunLoop run_loop; 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockCloudPolicyClientObserver observer; 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(observer, OnRegistrationStateChanged(_)) 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(AnyNumber()) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillRepeatedly(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(observer, OnClientError(_)) 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .Times(AnyNumber()) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) .WillRepeatedly(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policy_manager()->core()->client()->AddObserver(&observer); 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Give a bogus OAuth token to the |policy_manager|. This should make its 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // CloudPolicyClient fetch the DMToken. 125c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) em::DeviceRegisterRequest::Type registration_type = 126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) em::DeviceRegisterRequest::USER; 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#else 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) em::DeviceRegisterRequest::BROWSER; 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) policy_manager()->core()->client()->Register( 132effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch registration_type, "bogus", std::string(), false, std::string(), 133effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch std::string()); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) run_loop.Run(); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policy_manager()->core()->client()->RemoveObserver(&observer); 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TestRequestInterceptor> interceptor_; 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(CloudPolicyManagerTest, Register) { 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Accept one register request. The initial request should not include the 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reregister flag. 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceRegisterRequest::Type expected_type = 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceRegisterRequest::USER; 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceRegisterRequest::BROWSER; 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool expect_reregister = false; 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor_->PushJobCallback( 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestRequestInterceptor::RegisterJob(expected_type, expect_reregister)); 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(policy_manager()->core()->client()->is_registered()); 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(Register()); 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(policy_manager()->core()->client()->is_registered()); 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(CloudPolicyManagerTest, RegisterFails) { 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The interceptor makes all requests fail by default; this will trigger 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // an OnClientError() call on the observer. 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(policy_manager()->core()->client()->is_registered()); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(Register()); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(policy_manager()->core()->client()->is_registered()); 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(CloudPolicyManagerTest, RegisterFailsWithRetries) { 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fail 4 times with ERR_NETWORK_CHANGED; the first 3 will trigger a retry, 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the last one will forward the error to the client and unblock the 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // register process. 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 4; ++i) { 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor_->PushJobCallback( 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestRequestInterceptor::ErrorJob(net::ERR_NETWORK_CHANGED)); 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(policy_manager()->core()->client()->is_registered()); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(Register()); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(policy_manager()->core()->client()->is_registered()); 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(CloudPolicyManagerTest, RegisterWithRetry) { 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Accept one register request after failing once. The retry request should 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // set the reregister flag. 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor_->PushJobCallback( 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestRequestInterceptor::ErrorJob(net::ERR_NETWORK_CHANGED)); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceRegisterRequest::Type expected_type = 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceRegisterRequest::USER; 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceRegisterRequest::BROWSER; 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool expect_reregister = true; 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor_->PushJobCallback( 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestRequestInterceptor::RegisterJob(expected_type, expect_reregister)); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(policy_manager()->core()->client()->is_registered()); 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(Register()); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(policy_manager()->core()->client()->is_registered()); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace policy 203