OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/ui/app_list/apps_model_builder.h" | 5 #include "chrome/browser/ui/app_list/apps_model_builder.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/files/file_path.h" | 9 #include "base/files/file_path.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 // There should be 4 extensions in the test profile. | 84 // There should be 4 extensions in the test profile. |
85 const ExtensionSet* extensions = service_->extensions(); | 85 const ExtensionSet* extensions = service_->extensions(); |
86 ASSERT_EQ(static_cast<size_t>(4), extensions->size()); | 86 ASSERT_EQ(static_cast<size_t>(4), extensions->size()); |
87 } | 87 } |
88 }; | 88 }; |
89 | 89 |
90 TEST_F(AppsModelBuilderTest, Build) { | 90 TEST_F(AppsModelBuilderTest, Build) { |
91 scoped_ptr<app_list::AppListModel::Apps> model( | 91 scoped_ptr<app_list::AppListModel::Apps> model( |
92 new app_list::AppListModel::Apps); | 92 new app_list::AppListModel::Apps); |
93 AppsModelBuilder builder(profile_.get(), model.get(), NULL); | 93 AppsModelBuilder builder(profile_.get(), model.get(), NULL); |
94 builder.Build(); | |
95 | 94 |
96 // The apps list would have 3 extension apps in the profile. | 95 // The apps list would have 3 extension apps in the profile. |
97 EXPECT_EQ(std::string("Packaged App 1,Packaged App 2,Hosted App"), | 96 EXPECT_EQ(std::string("Packaged App 1,Packaged App 2,Hosted App"), |
98 GetModelContent(model.get())); | 97 GetModelContent(model.get())); |
99 } | 98 } |
100 | 99 |
101 TEST_F(AppsModelBuilderTest, HideWebStore) { | 100 TEST_F(AppsModelBuilderTest, HideWebStore) { |
102 // Install a "web store" app. | 101 // Install a "web store" app. |
103 scoped_refptr<extensions::Extension> store = | 102 scoped_refptr<extensions::Extension> store = |
104 MakeApp("webstore", | 103 MakeApp("webstore", |
105 "0.0", | 104 "0.0", |
106 "http://google.com", | 105 "http://google.com", |
107 std::string(extension_misc::kWebStoreAppId)); | 106 std::string(extension_misc::kWebStoreAppId)); |
108 service_->AddExtension(store.get()); | 107 service_->AddExtension(store.get()); |
109 | 108 |
110 // Install an "enterprise web store" app. | 109 // Install an "enterprise web store" app. |
111 scoped_refptr<extensions::Extension> enterprise_store = | 110 scoped_refptr<extensions::Extension> enterprise_store = |
112 MakeApp("enterprise_webstore", | 111 MakeApp("enterprise_webstore", |
113 "0.0", | 112 "0.0", |
114 "http://google.com", | 113 "http://google.com", |
115 std::string(extension_misc::kEnterpriseWebStoreAppId)); | 114 std::string(extension_misc::kEnterpriseWebStoreAppId)); |
116 service_->AddExtension(enterprise_store.get()); | 115 service_->AddExtension(enterprise_store.get()); |
117 | 116 |
118 // Web stores should be present in the AppListModel. | 117 // Web stores should be present in the AppListModel. |
119 app_list::AppListModel::Apps model1; | 118 app_list::AppListModel::Apps model1; |
120 AppsModelBuilder builder1(profile_.get(), &model1, NULL); | 119 AppsModelBuilder builder1(profile_.get(), &model1, NULL); |
121 builder1.Build(); | |
122 std::string content = GetModelContent(&model1); | 120 std::string content = GetModelContent(&model1); |
123 EXPECT_NE(std::string::npos, content.find("webstore")); | 121 EXPECT_NE(std::string::npos, content.find("webstore")); |
124 EXPECT_NE(std::string::npos, content.find("enterprise_webstore")); | 122 EXPECT_NE(std::string::npos, content.find("enterprise_webstore")); |
125 | 123 |
126 // Activate the HideWebStoreIcon policy. | 124 // Activate the HideWebStoreIcon policy. |
127 profile_->GetPrefs()->SetBoolean(prefs::kHideWebStoreIcon, true); | 125 profile_->GetPrefs()->SetBoolean(prefs::kHideWebStoreIcon, true); |
128 | 126 |
129 // Web stores should NOT be in the AppListModel. | 127 // Web stores should NOT be in the AppListModel. |
130 app_list::AppListModel::Apps model2; | 128 app_list::AppListModel::Apps model2; |
131 AppsModelBuilder builder2(profile_.get(), &model2, NULL); | 129 AppsModelBuilder builder2(profile_.get(), &model2, NULL); |
132 builder2.Build(); | |
133 content = GetModelContent(&model2); | 130 content = GetModelContent(&model2); |
134 EXPECT_EQ(std::string::npos, content.find("webstore")); | 131 EXPECT_EQ(std::string::npos, content.find("webstore")); |
135 EXPECT_EQ(std::string::npos, content.find("enterprise_webstore")); | 132 EXPECT_EQ(std::string::npos, content.find("enterprise_webstore")); |
136 } | 133 } |
137 | 134 |
138 TEST_F(AppsModelBuilderTest, DisableAndEnable) { | 135 TEST_F(AppsModelBuilderTest, DisableAndEnable) { |
139 scoped_ptr<app_list::AppListModel::Apps> model( | 136 scoped_ptr<app_list::AppListModel::Apps> model( |
140 new app_list::AppListModel::Apps); | 137 new app_list::AppListModel::Apps); |
141 AppsModelBuilder builder(profile_.get(), model.get(), NULL); | 138 AppsModelBuilder builder(profile_.get(), model.get(), NULL); |
142 builder.Build(); | |
143 | 139 |
144 service_->DisableExtension(kHostedAppId, | 140 service_->DisableExtension(kHostedAppId, |
145 extensions::Extension::DISABLE_NONE); | 141 extensions::Extension::DISABLE_NONE); |
146 EXPECT_EQ(std::string("Packaged App 1,Packaged App 2,Hosted App"), | 142 EXPECT_EQ(std::string("Packaged App 1,Packaged App 2,Hosted App"), |
147 GetModelContent(model.get())); | 143 GetModelContent(model.get())); |
148 | 144 |
149 service_->EnableExtension(kHostedAppId); | 145 service_->EnableExtension(kHostedAppId); |
150 EXPECT_EQ(std::string("Packaged App 1,Packaged App 2,Hosted App"), | 146 EXPECT_EQ(std::string("Packaged App 1,Packaged App 2,Hosted App"), |
151 GetModelContent(model.get())); | 147 GetModelContent(model.get())); |
152 } | 148 } |
153 | 149 |
154 TEST_F(AppsModelBuilderTest, Uninstall) { | 150 TEST_F(AppsModelBuilderTest, Uninstall) { |
155 scoped_ptr<app_list::AppListModel::Apps> model( | 151 scoped_ptr<app_list::AppListModel::Apps> model( |
156 new app_list::AppListModel::Apps); | 152 new app_list::AppListModel::Apps); |
157 AppsModelBuilder builder(profile_.get(), model.get(), NULL); | 153 AppsModelBuilder builder(profile_.get(), model.get(), NULL); |
158 builder.Build(); | |
159 | 154 |
160 service_->UninstallExtension(kPackagedApp2Id, false, NULL); | 155 service_->UninstallExtension(kPackagedApp2Id, false, NULL); |
161 EXPECT_EQ(std::string("Packaged App 1,Hosted App"), | 156 EXPECT_EQ(std::string("Packaged App 1,Hosted App"), |
162 GetModelContent(model.get())); | 157 GetModelContent(model.get())); |
163 | 158 |
164 base::RunLoop().RunUntilIdle(); | 159 base::RunLoop().RunUntilIdle(); |
165 } | 160 } |
166 | 161 |
167 TEST_F(AppsModelBuilderTest, UninstallTerminatedApp) { | 162 TEST_F(AppsModelBuilderTest, UninstallTerminatedApp) { |
168 scoped_ptr<app_list::AppListModel::Apps> model( | 163 scoped_ptr<app_list::AppListModel::Apps> model( |
169 new app_list::AppListModel::Apps); | 164 new app_list::AppListModel::Apps); |
170 AppsModelBuilder builder(profile_.get(), model.get(), NULL); | 165 AppsModelBuilder builder(profile_.get(), model.get(), NULL); |
171 builder.Build(); | |
172 | 166 |
173 const extensions::Extension* app = | 167 const extensions::Extension* app = |
174 service_->GetInstalledExtension(kPackagedApp2Id); | 168 service_->GetInstalledExtension(kPackagedApp2Id); |
175 ASSERT_TRUE(app != NULL); | 169 ASSERT_TRUE(app != NULL); |
176 | 170 |
177 // Simulate an app termination. | 171 // Simulate an app termination. |
178 service_->TrackTerminatedExtensionForTest(app); | 172 service_->TrackTerminatedExtensionForTest(app); |
179 | 173 |
180 service_->UninstallExtension(kPackagedApp2Id, false, NULL); | 174 service_->UninstallExtension(kPackagedApp2Id, false, NULL); |
181 EXPECT_EQ(std::string("Packaged App 1,Hosted App"), | 175 EXPECT_EQ(std::string("Packaged App 1,Hosted App"), |
182 GetModelContent(model.get())); | 176 GetModelContent(model.get())); |
183 | 177 |
184 base::RunLoop().RunUntilIdle(); | 178 base::RunLoop().RunUntilIdle(); |
185 } | 179 } |
186 | 180 |
187 TEST_F(AppsModelBuilderTest, OrdinalPrefsChange) { | 181 TEST_F(AppsModelBuilderTest, OrdinalPrefsChange) { |
188 scoped_ptr<app_list::AppListModel::Apps> model( | 182 scoped_ptr<app_list::AppListModel::Apps> model( |
189 new app_list::AppListModel::Apps); | 183 new app_list::AppListModel::Apps); |
190 AppsModelBuilder builder(profile_.get(), model.get(), NULL); | 184 AppsModelBuilder builder(profile_.get(), model.get(), NULL); |
191 builder.Build(); | |
192 | 185 |
193 ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); | 186 ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); |
194 | 187 |
195 syncer::StringOrdinal package_app_page = | 188 syncer::StringOrdinal package_app_page = |
196 sorting->GetPageOrdinal(kPackagedApp1Id); | 189 sorting->GetPageOrdinal(kPackagedApp1Id); |
197 sorting->SetPageOrdinal(kHostedAppId, package_app_page.CreateBefore()); | 190 sorting->SetPageOrdinal(kHostedAppId, package_app_page.CreateBefore()); |
198 EXPECT_EQ(std::string("Hosted App,Packaged App 1,Packaged App 2"), | 191 EXPECT_EQ(std::string("Hosted App,Packaged App 1,Packaged App 2"), |
199 GetModelContent(model.get())); | 192 GetModelContent(model.get())); |
200 | 193 |
201 syncer::StringOrdinal app1_ordinal = | 194 syncer::StringOrdinal app1_ordinal = |
202 sorting->GetAppLaunchOrdinal(kPackagedApp1Id); | 195 sorting->GetAppLaunchOrdinal(kPackagedApp1Id); |
203 syncer::StringOrdinal app2_ordinal = | 196 syncer::StringOrdinal app2_ordinal = |
204 sorting->GetAppLaunchOrdinal(kPackagedApp2Id); | 197 sorting->GetAppLaunchOrdinal(kPackagedApp2Id); |
205 sorting->SetPageOrdinal(kHostedAppId, package_app_page); | 198 sorting->SetPageOrdinal(kHostedAppId, package_app_page); |
206 sorting->SetAppLaunchOrdinal(kHostedAppId, | 199 sorting->SetAppLaunchOrdinal(kHostedAppId, |
207 app1_ordinal.CreateBetween(app2_ordinal)); | 200 app1_ordinal.CreateBetween(app2_ordinal)); |
208 EXPECT_EQ(std::string("Packaged App 1,Hosted App,Packaged App 2"), | 201 EXPECT_EQ(std::string("Packaged App 1,Hosted App,Packaged App 2"), |
209 GetModelContent(model.get())); | 202 GetModelContent(model.get())); |
210 } | 203 } |
211 | 204 |
212 TEST_F(AppsModelBuilderTest, OnExtensionMoved) { | 205 TEST_F(AppsModelBuilderTest, OnExtensionMoved) { |
213 scoped_ptr<app_list::AppListModel::Apps> model( | 206 scoped_ptr<app_list::AppListModel::Apps> model( |
214 new app_list::AppListModel::Apps); | 207 new app_list::AppListModel::Apps); |
215 AppsModelBuilder builder(profile_.get(), model.get(), NULL); | 208 AppsModelBuilder builder(profile_.get(), model.get(), NULL); |
216 builder.Build(); | |
217 | 209 |
218 ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); | 210 ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); |
219 sorting->SetPageOrdinal(kHostedAppId, | 211 sorting->SetPageOrdinal(kHostedAppId, |
220 sorting->GetPageOrdinal(kPackagedApp1Id)); | 212 sorting->GetPageOrdinal(kPackagedApp1Id)); |
221 | 213 |
222 service_->OnExtensionMoved(kHostedAppId, kPackagedApp1Id, kPackagedApp2Id); | 214 service_->OnExtensionMoved(kHostedAppId, kPackagedApp1Id, kPackagedApp2Id); |
223 EXPECT_EQ(std::string("Packaged App 1,Hosted App,Packaged App 2"), | 215 EXPECT_EQ(std::string("Packaged App 1,Hosted App,Packaged App 2"), |
224 GetModelContent(model.get())); | 216 GetModelContent(model.get())); |
225 | 217 |
226 service_->OnExtensionMoved(kHostedAppId, kPackagedApp2Id, std::string()); | 218 service_->OnExtensionMoved(kHostedAppId, kPackagedApp2Id, std::string()); |
(...skipping 12 matching lines...) Expand all Loading... |
239 | 231 |
240 // Creates an corrupted ordinal case. | 232 // Creates an corrupted ordinal case. |
241 ExtensionScopedPrefs* scoped_prefs = service_->extension_prefs(); | 233 ExtensionScopedPrefs* scoped_prefs = service_->extension_prefs(); |
242 scoped_prefs->UpdateExtensionPref( | 234 scoped_prefs->UpdateExtensionPref( |
243 kHostedAppId, | 235 kHostedAppId, |
244 "page_ordinal", | 236 "page_ordinal", |
245 base::Value::CreateStringValue("a corrupted ordinal")); | 237 base::Value::CreateStringValue("a corrupted ordinal")); |
246 | 238 |
247 scoped_ptr<app_list::AppListModel::Apps> model( | 239 scoped_ptr<app_list::AppListModel::Apps> model( |
248 new app_list::AppListModel::Apps); | 240 new app_list::AppListModel::Apps); |
249 AppsModelBuilder builder(profile_.get(), model.get(), NULL); | |
250 | 241 |
251 // This should not assert or crash. | 242 // This should not assert or crash. |
252 builder.Build(); | 243 AppsModelBuilder builder(profile_.get(), model.get(), NULL); |
253 } | 244 } |
254 | 245 |
255 TEST_F(AppsModelBuilderTest, OrdinalConfilicts) { | 246 TEST_F(AppsModelBuilderTest, OrdinalConfilicts) { |
256 // Creates conflict ordinals for app1 and app2. | 247 // Creates conflict ordinals for app1 and app2. |
257 syncer::StringOrdinal conflict_ordinal = | 248 syncer::StringOrdinal conflict_ordinal = |
258 syncer::StringOrdinal::CreateInitialOrdinal(); | 249 syncer::StringOrdinal::CreateInitialOrdinal(); |
259 | 250 |
260 ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); | 251 ExtensionSorting* sorting = service_->extension_prefs()->extension_sorting(); |
261 sorting->SetPageOrdinal(kHostedAppId, conflict_ordinal); | 252 sorting->SetPageOrdinal(kHostedAppId, conflict_ordinal); |
262 sorting->SetAppLaunchOrdinal(kHostedAppId, conflict_ordinal); | 253 sorting->SetAppLaunchOrdinal(kHostedAppId, conflict_ordinal); |
263 | 254 |
264 sorting->SetPageOrdinal(kPackagedApp1Id, conflict_ordinal); | 255 sorting->SetPageOrdinal(kPackagedApp1Id, conflict_ordinal); |
265 sorting->SetAppLaunchOrdinal(kPackagedApp1Id, conflict_ordinal); | 256 sorting->SetAppLaunchOrdinal(kPackagedApp1Id, conflict_ordinal); |
266 | 257 |
267 sorting->SetPageOrdinal(kPackagedApp2Id, conflict_ordinal); | 258 sorting->SetPageOrdinal(kPackagedApp2Id, conflict_ordinal); |
268 sorting->SetAppLaunchOrdinal(kPackagedApp2Id, conflict_ordinal); | 259 sorting->SetAppLaunchOrdinal(kPackagedApp2Id, conflict_ordinal); |
269 | 260 |
270 scoped_ptr<app_list::AppListModel::Apps> model( | 261 scoped_ptr<app_list::AppListModel::Apps> model( |
271 new app_list::AppListModel::Apps); | 262 new app_list::AppListModel::Apps); |
272 AppsModelBuilder builder(profile_.get(), model.get(), NULL); | 263 AppsModelBuilder builder(profile_.get(), model.get(), NULL); |
273 builder.Build(); | |
274 | 264 |
275 // By default, conflicted items are sorted by their app ids. | 265 // By default, conflicted items are sorted by their app ids. |
276 EXPECT_EQ(std::string("Hosted App,Packaged App 1,Packaged App 2"), | 266 EXPECT_EQ(std::string("Hosted App,Packaged App 1,Packaged App 2"), |
277 GetModelContent(model.get())); | 267 GetModelContent(model.get())); |
278 | 268 |
279 // Move hosted app between app1 and app2 and it should not crash. | 269 // Move hosted app between app1 and app2 and it should not crash. |
280 service_->OnExtensionMoved(kHostedAppId, kPackagedApp1Id, kPackagedApp2Id); | 270 service_->OnExtensionMoved(kHostedAppId, kPackagedApp1Id, kPackagedApp2Id); |
281 EXPECT_EQ(std::string("Packaged App 1,Hosted App,Packaged App 2"), | 271 EXPECT_EQ(std::string("Packaged App 1,Hosted App,Packaged App 2"), |
282 GetModelContent(model.get())); | 272 GetModelContent(model.get())); |
283 } | 273 } |
OLD | NEW |