OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/command_line.h" | 5 #include "base/command_line.h" |
6 #include "base/files/file_path.h" | 6 #include "base/files/file_path.h" |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/prefs/pref_registry_simple.h" | 8 #include "base/prefs/pref_registry_simple.h" |
9 #include "base/prefs/pref_service.h" | 9 #include "base/prefs/pref_service.h" |
10 #include "base/prefs/pref_service_factory.h" | 10 #include "base/prefs/pref_service_factory.h" |
11 #include "base/prefs/testing_pref_store.h" | 11 #include "base/prefs/testing_pref_store.h" |
12 #include "chrome/browser/profiles/profile.h" | 12 #include "chrome/browser/profiles/profile.h" |
13 #include "chrome/browser/profiles/profiles_state.h" | 13 #include "chrome/browser/profiles/profiles_state.h" |
14 #include "chrome/browser/ui/app_list/app_list_service.h" | 14 #include "chrome/browser/ui/app_list/app_list_service.h" |
15 #include "chrome/browser/ui/app_list/app_list_service_impl.h" | 15 #include "chrome/browser/ui/app_list/app_list_service_impl.h" |
16 #include "chrome/browser/ui/app_list/test/fake_profile.h" | 16 #include "chrome/browser/ui/app_list/test/fake_profile.h" |
17 #include "chrome/browser/ui/app_list/test/fake_profile_store.h" | 17 #include "chrome/browser/ui/app_list/test/fake_profile_store.h" |
18 #include "chrome/common/chrome_constants.h" | 18 #include "chrome/common/chrome_constants.h" |
19 #include "chrome/common/chrome_switches.h" | 19 #include "chrome/common/chrome_switches.h" |
20 #include "chrome/common/pref_names.h" | 20 #include "chrome/common/pref_names.h" |
21 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
22 | 22 |
23 class TestingAppListServiceImpl : public AppListServiceImpl { | 23 class TestingAppListServiceImpl : public AppListServiceImpl { |
24 public: | 24 public: |
25 TestingAppListServiceImpl(const CommandLine& command_line, | 25 TestingAppListServiceImpl(const CommandLine& command_line, |
26 PrefService* local_state, | 26 PrefService* local_state, |
27 scoped_ptr<ProfileStore> profile_store) | 27 scoped_ptr<ProfileStore> profile_store) |
28 : AppListServiceImpl(command_line, local_state, profile_store.Pass()), | 28 : AppListServiceImpl(command_line, local_state, profile_store.Pass()), |
29 showing_for_profile_(NULL) {} | 29 showing_for_profile_(NULL), |
| 30 destroy_app_list_call_count_(0) {} |
30 | 31 |
31 Profile* showing_for_profile() const { | 32 Profile* showing_for_profile() const { |
32 return showing_for_profile_; | 33 return showing_for_profile_; |
33 } | 34 } |
34 | 35 |
| 36 int destroy_app_list_call_count() const { |
| 37 return destroy_app_list_call_count_; |
| 38 } |
| 39 |
35 void PerformStartupChecks(Profile* profile) { | 40 void PerformStartupChecks(Profile* profile) { |
36 AppListServiceImpl::PerformStartupChecks(profile); | 41 AppListServiceImpl::PerformStartupChecks(profile); |
37 } | 42 } |
38 | 43 |
| 44 // AppListService overrides: |
39 virtual Profile* GetCurrentAppListProfile() OVERRIDE { | 45 virtual Profile* GetCurrentAppListProfile() OVERRIDE { |
40 // We don't return showing_for_profile_ here because that is only defined if | 46 // We don't return showing_for_profile_ here because that is only defined if |
41 // the app list is visible. | 47 // the app list is visible. |
42 return NULL; | 48 return NULL; |
43 } | 49 } |
44 | 50 |
45 virtual void CreateForProfile(Profile* requested_profile) OVERRIDE { | 51 virtual void CreateForProfile(Profile* requested_profile) OVERRIDE { |
46 } | 52 } |
47 | 53 |
48 virtual void ShowForProfile(Profile* requested_profile) OVERRIDE { | 54 virtual void ShowForProfile(Profile* requested_profile) OVERRIDE { |
(...skipping 10 matching lines...) Expand all Loading... |
59 } | 65 } |
60 | 66 |
61 virtual gfx::NativeWindow GetAppListWindow() OVERRIDE { | 67 virtual gfx::NativeWindow GetAppListWindow() OVERRIDE { |
62 return NULL; | 68 return NULL; |
63 } | 69 } |
64 | 70 |
65 virtual AppListControllerDelegate* GetControllerDelegate() OVERRIDE { | 71 virtual AppListControllerDelegate* GetControllerDelegate() OVERRIDE { |
66 return NULL; | 72 return NULL; |
67 } | 73 } |
68 | 74 |
| 75 // AppListServiceImpl overrides: |
| 76 virtual void DestroyAppList() OVERRIDE { ++destroy_app_list_call_count_; } |
| 77 |
69 private: | 78 private: |
70 Profile* showing_for_profile_; | 79 Profile* showing_for_profile_; |
| 80 int destroy_app_list_call_count_; |
| 81 |
| 82 DISALLOW_COPY_AND_ASSIGN(TestingAppListServiceImpl); |
71 }; | 83 }; |
72 | 84 |
73 class AppListServiceUnitTest : public testing::Test { | 85 class AppListServiceUnitTest : public testing::Test { |
74 public: | 86 public: |
75 AppListServiceUnitTest() {} | 87 AppListServiceUnitTest() {} |
76 | 88 |
77 virtual void SetUp() OVERRIDE { | 89 virtual void SetUp() OVERRIDE { |
78 SetupWithCommandLine(CommandLine(CommandLine::NO_PROGRAM)); | 90 SetupWithCommandLine(CommandLine(CommandLine::NO_PROGRAM)); |
79 } | 91 } |
80 | 92 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 base::FilePath initial_profile_path = | 150 base::FilePath initial_profile_path = |
139 user_data_dir_.AppendASCII(chrome::kInitialProfile); | 151 user_data_dir_.AppendASCII(chrome::kInitialProfile); |
140 EXPECT_EQ(initial_profile_path, | 152 EXPECT_EQ(initial_profile_path, |
141 service_->GetProfilePath(profile_store_->GetUserDataDir())); | 153 service_->GetProfilePath(profile_store_->GetUserDataDir())); |
142 } | 154 } |
143 | 155 |
144 TEST_F(AppListServiceUnitTest, | 156 TEST_F(AppListServiceUnitTest, |
145 RemovedProfileResetsToLastUsedProfileIfExists) { | 157 RemovedProfileResetsToLastUsedProfileIfExists) { |
146 local_state_->SetString(prefs::kProfileLastUsed, "last-used"); | 158 local_state_->SetString(prefs::kProfileLastUsed, "last-used"); |
147 EnableAppList(); | 159 EnableAppList(); |
| 160 EXPECT_EQ(0, service_->destroy_app_list_call_count()); |
148 profile_store_->RemoveProfile(profile1_.get()); | 161 profile_store_->RemoveProfile(profile1_.get()); |
| 162 |
149 base::FilePath last_used_profile_path = | 163 base::FilePath last_used_profile_path = |
150 user_data_dir_.AppendASCII("last-used"); | 164 user_data_dir_.AppendASCII("last-used"); |
151 EXPECT_EQ(last_used_profile_path, | 165 EXPECT_EQ(last_used_profile_path, |
152 service_->GetProfilePath(profile_store_->GetUserDataDir())); | 166 service_->GetProfilePath(profile_store_->GetUserDataDir())); |
| 167 |
| 168 // Ensure a tear-down was triggered, since there would be references to the |
| 169 // destroyed Profile, and the last-used profile could be getting loaded |
| 170 // asynchronously. |
| 171 EXPECT_EQ(1, service_->destroy_app_list_call_count()); |
153 } | 172 } |
154 | 173 |
155 TEST_F(AppListServiceUnitTest, SwitchingProfilesPersists) { | 174 TEST_F(AppListServiceUnitTest, SwitchingProfilesPersists) { |
156 profile_store_->LoadProfile(profile1_.get()); | 175 profile_store_->LoadProfile(profile1_.get()); |
157 profile_store_->LoadProfile(profile2_.get()); | 176 profile_store_->LoadProfile(profile2_.get()); |
158 EnableAppList(); | 177 EnableAppList(); |
159 service_->SetProfilePath(profile2_->GetPath()); | 178 service_->SetProfilePath(profile2_->GetPath()); |
160 service_->Show(); | 179 service_->Show(); |
161 EXPECT_EQ(profile2_.get(), service_->showing_for_profile()); | 180 EXPECT_EQ(profile2_.get(), service_->showing_for_profile()); |
162 EXPECT_EQ(profile2_->GetPath(), | 181 EXPECT_EQ(profile2_->GetPath(), |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 EXPECT_EQ(AppListService::ENABLE_FOR_APP_INSTALL, | 243 EXPECT_EQ(AppListService::ENABLE_FOR_APP_INSTALL, |
225 local_state_->GetInteger(prefs::kAppListEnableMethod)); | 244 local_state_->GetInteger(prefs::kAppListEnableMethod)); |
226 EXPECT_NE(0, local_state_->GetInt64(prefs::kAppListEnableTime)); | 245 EXPECT_NE(0, local_state_->GetInt64(prefs::kAppListEnableTime)); |
227 | 246 |
228 // An auto-show here should update the enable method to prevent recording it | 247 // An auto-show here should update the enable method to prevent recording it |
229 // as ENABLE_FOR_APP_INSTALL. | 248 // as ENABLE_FOR_APP_INSTALL. |
230 service_->AutoShowForProfile(profile1_.get()); | 249 service_->AutoShowForProfile(profile1_.get()); |
231 EXPECT_EQ(AppListService::ENABLE_SHOWN_UNDISCOVERED, | 250 EXPECT_EQ(AppListService::ENABLE_SHOWN_UNDISCOVERED, |
232 local_state_->GetInteger(prefs::kAppListEnableMethod)); | 251 local_state_->GetInteger(prefs::kAppListEnableMethod)); |
233 } | 252 } |
OLD | NEW |