1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/basictypes.h"
6#include "base/command_line.h"
7#include "base/compiler_specific.h"
8#include "chrome/browser/chromeos/profiles/profile_helper.h"
9#include "chrome/browser/invalidation/profile_invalidation_provider_factory.h"
10#include "chrome/browser/profiles/profile.h"
11#include "chrome/common/chrome_switches.h"
12#include "chrome/test/base/in_process_browser_test.h"
13#include "chromeos/chromeos_switches.h"
14#include "chromeos/login/user_names.h"
15#include "components/invalidation/invalidation_service.h"
16#include "components/invalidation/profile_invalidation_provider.h"
17#include "components/user_manager/user_manager.h"
18#include "testing/gtest/include/gtest/gtest.h"
19
20namespace invalidation {
21
22class ProfileInvalidationProviderFactoryTestBase : public InProcessBrowserTest {
23 protected:
24  ProfileInvalidationProviderFactoryTestBase();
25  virtual ~ProfileInvalidationProviderFactoryTestBase();
26
27  bool CanConstructProfileInvalidationProvider(Profile* profile);
28
29 private:
30  DISALLOW_COPY_AND_ASSIGN(ProfileInvalidationProviderFactoryTestBase);
31};
32
33ProfileInvalidationProviderFactoryTestBase::
34    ProfileInvalidationProviderFactoryTestBase() {
35}
36
37ProfileInvalidationProviderFactoryTestBase::
38    ~ProfileInvalidationProviderFactoryTestBase() {
39}
40
41bool
42ProfileInvalidationProviderFactoryTestBase::
43    CanConstructProfileInvalidationProvider(Profile* profile) {
44  return static_cast<bool>(
45      ProfileInvalidationProviderFactory::GetInstance()->
46          GetServiceForBrowserContext(profile, false));
47}
48
49class ProfileInvalidationProviderFactoryLoginScreenBrowserTest
50    : public ProfileInvalidationProviderFactoryTestBase {
51 protected:
52  ProfileInvalidationProviderFactoryLoginScreenBrowserTest();
53  virtual ~ProfileInvalidationProviderFactoryLoginScreenBrowserTest();
54
55  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
56
57 private:
58  DISALLOW_COPY_AND_ASSIGN(
59      ProfileInvalidationProviderFactoryLoginScreenBrowserTest);
60};
61
62ProfileInvalidationProviderFactoryLoginScreenBrowserTest::
63    ProfileInvalidationProviderFactoryLoginScreenBrowserTest() {
64}
65
66ProfileInvalidationProviderFactoryLoginScreenBrowserTest::
67    ~ProfileInvalidationProviderFactoryLoginScreenBrowserTest() {
68}
69
70void ProfileInvalidationProviderFactoryLoginScreenBrowserTest::SetUpCommandLine(
71    CommandLine* command_line) {
72  command_line->AppendSwitch(chromeos::switches::kLoginManager);
73  command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, "user");
74}
75
76// Verify that no InvalidationService is instantiated for the login profile on
77// the login screen.
78IN_PROC_BROWSER_TEST_F(ProfileInvalidationProviderFactoryLoginScreenBrowserTest,
79                       NoInvalidationService) {
80  Profile* login_profile =
81      chromeos::ProfileHelper::GetSigninProfile()->GetOriginalProfile();
82  EXPECT_FALSE(CanConstructProfileInvalidationProvider(login_profile));
83}
84
85class ProfileInvalidationProviderFactoryGuestBrowserTest
86    : public ProfileInvalidationProviderFactoryTestBase {
87 protected:
88  ProfileInvalidationProviderFactoryGuestBrowserTest();
89  virtual ~ProfileInvalidationProviderFactoryGuestBrowserTest();
90
91  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
92
93 private:
94  DISALLOW_COPY_AND_ASSIGN(ProfileInvalidationProviderFactoryGuestBrowserTest);
95};
96
97ProfileInvalidationProviderFactoryGuestBrowserTest::
98    ProfileInvalidationProviderFactoryGuestBrowserTest() {
99}
100
101ProfileInvalidationProviderFactoryGuestBrowserTest::
102    ~ProfileInvalidationProviderFactoryGuestBrowserTest() {
103}
104
105void ProfileInvalidationProviderFactoryGuestBrowserTest::SetUpCommandLine(
106    CommandLine* command_line) {
107  command_line->AppendSwitch(chromeos::switches::kGuestSession);
108  command_line->AppendSwitch(::switches::kIncognito);
109  command_line->AppendSwitchASCII(chromeos::switches::kLoginProfile, "user");
110  command_line->AppendSwitchASCII(chromeos::switches::kLoginUser,
111                                  chromeos::login::kGuestUserName);
112}
113
114// Verify that no InvalidationService is instantiated for the login profile or
115// the guest profile while a guest session is in progress.
116IN_PROC_BROWSER_TEST_F(ProfileInvalidationProviderFactoryGuestBrowserTest,
117                       NoInvalidationService) {
118  user_manager::UserManager* user_manager = user_manager::UserManager::Get();
119  EXPECT_TRUE(user_manager->IsLoggedInAsGuest());
120  Profile* guest_profile =
121      chromeos::ProfileHelper::Get()
122          ->GetProfileByUserUnsafe(user_manager->GetActiveUser())
123          ->GetOriginalProfile();
124  Profile* login_profile =
125      chromeos::ProfileHelper::GetSigninProfile()->GetOriginalProfile();
126  EXPECT_FALSE(CanConstructProfileInvalidationProvider(guest_profile));
127  EXPECT_FALSE(CanConstructProfileInvalidationProvider(login_profile));
128}
129
130}  // namespace invalidation
131