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/browser_policy_connector.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/policy/cloud/test_request_interceptor.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_switches.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/cloud_policy_client.h" 16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "components/policy/core/common/cloud/mock_cloud_policy_client.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.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 32d57369da7c6519fef57db42085f7b42d4c8845c1Torne (Richard Coles)#include "components/policy/core/common/cloud/user_cloud_policy_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( 13290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) registration_type, "bogus", std::string(), false, std::string()); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) run_loop.Run(); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Mock::VerifyAndClearExpectations(&observer); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) policy_manager()->core()->client()->RemoveObserver(&observer); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TestRequestInterceptor> interceptor_; 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(CloudPolicyManagerTest, Register) { 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Accept one register request. The initial request should not include the 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // reregister flag. 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceRegisterRequest::Type expected_type = 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceRegisterRequest::USER; 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceRegisterRequest::BROWSER; 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool expect_reregister = false; 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor_->PushJobCallback( 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestRequestInterceptor::RegisterJob(expected_type, expect_reregister)); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(policy_manager()->core()->client()->is_registered()); 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(Register()); 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(policy_manager()->core()->client()->is_registered()); 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(CloudPolicyManagerTest, RegisterFails) { 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The interceptor makes all requests fail by default; this will trigger 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // an OnClientError() call on the observer. 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(policy_manager()->core()->client()->is_registered()); 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(Register()); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(policy_manager()->core()->client()->is_registered()); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(CloudPolicyManagerTest, RegisterFailsWithRetries) { 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fail 4 times with ERR_NETWORK_CHANGED; the first 3 will trigger a retry, 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the last one will forward the error to the client and unblock the 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // register process. 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 4; ++i) { 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor_->PushJobCallback( 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestRequestInterceptor::ErrorJob(net::ERR_NETWORK_CHANGED)); 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(policy_manager()->core()->client()->is_registered()); 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(Register()); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(policy_manager()->core()->client()->is_registered()); 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(CloudPolicyManagerTest, RegisterWithRetry) { 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Accept one register request after failing once. The retry request should 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // set the reregister flag. 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor_->PushJobCallback( 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestRequestInterceptor::ErrorJob(net::ERR_NETWORK_CHANGED)); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceRegisterRequest::Type expected_type = 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_CHROMEOS) 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceRegisterRequest::USER; 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) em::DeviceRegisterRequest::BROWSER; 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const bool expect_reregister = true; 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) interceptor_->PushJobCallback( 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestRequestInterceptor::RegisterJob(expected_type, expect_reregister)); 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(policy_manager()->core()->client()->is_registered()); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(Register()); 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(policy_manager()->core()->client()->is_registered()); 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace policy 202