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/ash/launcher/chrome_launcher_controller_per_app.h" | 5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "ash/ash_switches.h" | 11 #include "ash/ash_switches.h" |
12 #include "ash/launcher/launcher_model.h" | 12 #include "ash/launcher/launcher_model.h" |
13 #include "ash/launcher/launcher_model_observer.h" | 13 #include "ash/launcher/launcher_model_observer.h" |
14 #include "base/command_line.h" | 14 #include "base/command_line.h" |
15 #include "base/compiler_specific.h" | 15 #include "base/compiler_specific.h" |
(...skipping 12 matching lines...) Expand all Loading... |
28 #include "chrome/browser/ui/browser_finder.h" | 28 #include "chrome/browser/ui/browser_finder.h" |
29 #include "chrome/browser/ui/browser_list.h" | 29 #include "chrome/browser/ui/browser_list.h" |
30 #include "chrome/browser/ui/host_desktop.h" | 30 #include "chrome/browser/ui/host_desktop.h" |
31 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 31 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
32 #include "chrome/common/extensions/extension.h" | 32 #include "chrome/common/extensions/extension.h" |
33 #include "chrome/common/extensions/extension_constants.h" | 33 #include "chrome/common/extensions/extension_constants.h" |
34 #include "chrome/common/pref_names.h" | 34 #include "chrome/common/pref_names.h" |
35 #include "chrome/test/base/browser_with_test_window_test.h" | 35 #include "chrome/test/base/browser_with_test_window_test.h" |
36 #include "chrome/test/base/testing_pref_service_syncable.h" | 36 #include "chrome/test/base/testing_pref_service_syncable.h" |
37 #include "chrome/test/base/testing_profile.h" | 37 #include "chrome/test/base/testing_profile.h" |
| 38 #include "content/public/browser/web_contents.h" |
38 #include "content/public/test/test_browser_thread.h" | 39 #include "content/public/test/test_browser_thread.h" |
39 #include "extensions/common/manifest_constants.h" | 40 #include "extensions/common/manifest_constants.h" |
40 #include "testing/gtest/include/gtest/gtest.h" | 41 #include "testing/gtest/include/gtest/gtest.h" |
41 #include "ui/base/models/menu_model.h" | 42 #include "ui/base/models/menu_model.h" |
42 | 43 |
43 using extensions::Extension; | 44 using extensions::Extension; |
44 using extensions::Manifest; | 45 using extensions::Manifest; |
45 | 46 |
46 namespace { | 47 namespace { |
47 const char* offline_gmail_url = "https://mail.google.com/mail/mu/u"; | 48 const char* offline_gmail_url = "https://mail.google.com/mail/mu/u"; |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 } | 129 } |
129 | 130 |
130 int fetch_count() const { return fetch_count_; } | 131 int fetch_count() const { return fetch_count_; } |
131 | 132 |
132 private: | 133 private: |
133 int fetch_count_; | 134 int fetch_count_; |
134 | 135 |
135 DISALLOW_COPY_AND_ASSIGN(TestAppIconLoaderImpl); | 136 DISALLOW_COPY_AND_ASSIGN(TestAppIconLoaderImpl); |
136 }; | 137 }; |
137 | 138 |
| 139 // Test implementation of AppTabHelper. |
| 140 class TestAppTabHelperImpl : public ChromeLauncherController::AppTabHelper { |
| 141 public: |
| 142 TestAppTabHelperImpl() {} |
| 143 virtual ~TestAppTabHelperImpl() {} |
| 144 |
| 145 // Sets the id for the specified tab. The id is removed if Remove() is |
| 146 // invoked. |
| 147 void SetAppID(content::WebContents* tab, const std::string& id) { |
| 148 tab_id_map_[tab] = id; |
| 149 } |
| 150 |
| 151 // Returns true if there is an id registered for |tab|. |
| 152 bool HasAppID(content::WebContents* tab) const { |
| 153 return tab_id_map_.find(tab) != tab_id_map_.end(); |
| 154 } |
| 155 |
| 156 // AppTabHelper implementation: |
| 157 virtual std::string GetAppID(content::WebContents* tab) OVERRIDE { |
| 158 return tab_id_map_.find(tab) != tab_id_map_.end() ? tab_id_map_[tab] : |
| 159 std::string(); |
| 160 } |
| 161 |
| 162 virtual bool IsValidID(const std::string& id) OVERRIDE { |
| 163 for (TabToStringMap::const_iterator i = tab_id_map_.begin(); |
| 164 i != tab_id_map_.end(); ++i) { |
| 165 if (i->second == id) |
| 166 return true; |
| 167 } |
| 168 return false; |
| 169 } |
| 170 |
| 171 private: |
| 172 typedef std::map<content::WebContents*, std::string> TabToStringMap; |
| 173 |
| 174 TabToStringMap tab_id_map_; |
| 175 |
| 176 DISALLOW_COPY_AND_ASSIGN(TestAppTabHelperImpl); |
| 177 }; |
| 178 |
138 } // namespace | 179 } // namespace |
139 | 180 |
140 class ChromeLauncherControllerPerAppTest : public BrowserWithTestWindowTest { | 181 class ChromeLauncherControllerTest : public BrowserWithTestWindowTest { |
141 protected: | 182 protected: |
142 ChromeLauncherControllerPerAppTest() | 183 ChromeLauncherControllerTest() : extension_service_(NULL) { |
143 : extension_service_(NULL) { | |
144 SetHostDesktopType(chrome::HOST_DESKTOP_TYPE_ASH); | 184 SetHostDesktopType(chrome::HOST_DESKTOP_TYPE_ASH); |
145 } | 185 } |
146 | 186 |
147 virtual ~ChromeLauncherControllerPerAppTest() { | 187 virtual ~ChromeLauncherControllerTest() { |
148 } | 188 } |
149 | 189 |
150 virtual void SetUp() OVERRIDE { | 190 virtual void SetUp() OVERRIDE { |
151 BrowserWithTestWindowTest::SetUp(); | 191 BrowserWithTestWindowTest::SetUp(); |
152 | 192 |
153 model_.reset(new ash::LauncherModel); | 193 model_.reset(new ash::LauncherModel); |
154 model_observer_.reset(new TestLauncherModelObserver); | 194 model_observer_.reset(new TestLauncherModelObserver); |
155 model_->AddObserver(model_observer_.get()); | 195 model_->AddObserver(model_observer_.get()); |
156 | 196 |
157 DictionaryValue manifest; | 197 DictionaryValue manifest; |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
209 model_->RemoveObserver(model_observer_.get()); | 249 model_->RemoveObserver(model_observer_.get()); |
210 model_observer_.reset(); | 250 model_observer_.reset(); |
211 launcher_controller_.reset(); | 251 launcher_controller_.reset(); |
212 model_.reset(); | 252 model_.reset(); |
213 | 253 |
214 BrowserWithTestWindowTest::TearDown(); | 254 BrowserWithTestWindowTest::TearDown(); |
215 } | 255 } |
216 | 256 |
217 void InitLauncherController() { | 257 void InitLauncherController() { |
218 launcher_controller_.reset( | 258 launcher_controller_.reset( |
219 new ChromeLauncherControllerPerApp(profile(), model_.get())); | 259 new ChromeLauncherController(profile(), model_.get())); |
220 launcher_controller_->Init(); | 260 launcher_controller_->Init(); |
221 } | 261 } |
222 | 262 |
223 void InitLauncherControllerWithBrowser() { | 263 void InitLauncherControllerWithBrowser() { |
224 chrome::NewTab(browser()); | 264 chrome::NewTab(browser()); |
225 BrowserList::SetLastActive(browser()); | 265 BrowserList::SetLastActive(browser()); |
226 InitLauncherController(); | 266 InitLauncherController(); |
227 } | 267 } |
228 | 268 |
229 void SetAppIconLoader(extensions::AppIconLoader* loader) { | 269 void SetAppIconLoader(extensions::AppIconLoader* loader) { |
230 launcher_controller_->SetAppIconLoaderForTest(loader); | 270 launcher_controller_->SetAppIconLoaderForTest(loader); |
231 } | 271 } |
232 | 272 |
| 273 void SetAppTabHelper(ChromeLauncherController::AppTabHelper* helper) { |
| 274 launcher_controller_->SetAppTabHelperForTest(helper); |
| 275 } |
| 276 |
233 void InsertPrefValue(base::ListValue* pref_value, | 277 void InsertPrefValue(base::ListValue* pref_value, |
234 int index, | 278 int index, |
235 const std::string& extension_id) { | 279 const std::string& extension_id) { |
236 base::DictionaryValue* entry = new DictionaryValue(); | 280 base::DictionaryValue* entry = new DictionaryValue(); |
237 entry->SetString(ash::kPinnedAppsPrefAppIDPath, extension_id); | 281 entry->SetString(ash::kPinnedAppsPrefAppIDPath, extension_id); |
238 pref_value->Insert(index, entry); | 282 pref_value->Insert(index, entry); |
239 } | 283 } |
240 | 284 |
241 // Gets the currently configured app launchers from the controller. | 285 // Gets the currently configured app launchers from the controller. |
242 void GetAppLaunchers(ChromeLauncherControllerPerApp* controller, | 286 void GetAppLaunchers(ChromeLauncherController* controller, |
243 std::vector<std::string>* launchers) { | 287 std::vector<std::string>* launchers) { |
244 launchers->clear(); | 288 launchers->clear(); |
245 for (ash::LauncherItems::const_iterator iter(model_->items().begin()); | 289 for (ash::LauncherItems::const_iterator iter(model_->items().begin()); |
246 iter != model_->items().end(); ++iter) { | 290 iter != model_->items().end(); ++iter) { |
247 ChromeLauncherControllerPerApp::IDToItemControllerMap::const_iterator | 291 ChromeLauncherController::IDToItemControllerMap::const_iterator |
248 entry(controller->id_to_item_controller_map_.find(iter->id)); | 292 entry(controller->id_to_item_controller_map_.find(iter->id)); |
249 if (iter->type == ash::TYPE_APP_SHORTCUT && | 293 if (iter->type == ash::TYPE_APP_SHORTCUT && |
250 entry != controller->id_to_item_controller_map_.end()) { | 294 entry != controller->id_to_item_controller_map_.end()) { |
251 launchers->push_back(entry->second->app_id()); | 295 launchers->push_back(entry->second->app_id()); |
252 } | 296 } |
253 } | 297 } |
254 } | 298 } |
255 | 299 |
256 std::string GetPinnedAppStatus() { | 300 std::string GetPinnedAppStatus() { |
257 std::string result; | 301 std::string result; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 } | 334 } |
291 } | 335 } |
292 return result; | 336 return result; |
293 } | 337 } |
294 | 338 |
295 // Needed for extension service & friends to work. | 339 // Needed for extension service & friends to work. |
296 scoped_refptr<Extension> extension1_; | 340 scoped_refptr<Extension> extension1_; |
297 scoped_refptr<Extension> extension2_; | 341 scoped_refptr<Extension> extension2_; |
298 scoped_refptr<Extension> extension3_; | 342 scoped_refptr<Extension> extension3_; |
299 scoped_refptr<Extension> extension4_; | 343 scoped_refptr<Extension> extension4_; |
300 scoped_ptr<ChromeLauncherControllerPerApp> launcher_controller_; | 344 scoped_ptr<ChromeLauncherController> launcher_controller_; |
301 scoped_ptr<TestLauncherModelObserver> model_observer_; | 345 scoped_ptr<TestLauncherModelObserver> model_observer_; |
302 scoped_ptr<ash::LauncherModel> model_; | 346 scoped_ptr<ash::LauncherModel> model_; |
303 | 347 |
304 ExtensionService* extension_service_; | 348 ExtensionService* extension_service_; |
305 | 349 |
306 DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerPerAppTest); | 350 DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerTest); |
307 }; | 351 }; |
308 | 352 |
309 // The testing framework to test the alternate shelf layout. | 353 // The testing framework to test the alternate shelf layout. |
310 class AlternateLayoutChromeLauncherControllerPerAppTest | 354 class AlternateLayoutChromeLauncherControllerTest |
311 : public ChromeLauncherControllerPerAppTest { | 355 : public ChromeLauncherControllerTest { |
312 protected: | 356 protected: |
313 AlternateLayoutChromeLauncherControllerPerAppTest() { | 357 AlternateLayoutChromeLauncherControllerTest() { |
314 } | 358 } |
315 | 359 |
316 virtual ~AlternateLayoutChromeLauncherControllerPerAppTest() { | 360 virtual ~AlternateLayoutChromeLauncherControllerTest() { |
317 } | 361 } |
318 | 362 |
319 // Overwrite the Setup function to add the Alternate Shelf layout option. | 363 // Overwrite the Setup function to add the Alternate Shelf layout option. |
320 virtual void SetUp() OVERRIDE { | 364 virtual void SetUp() OVERRIDE { |
321 CommandLine::ForCurrentProcess()->AppendSwitch( | 365 CommandLine::ForCurrentProcess()->AppendSwitch( |
322 ash::switches::kAshUseAlternateShelfLayout); | 366 ash::switches::kAshUseAlternateShelfLayout); |
323 ChromeLauncherControllerPerAppTest::SetUp(); | 367 ChromeLauncherControllerTest::SetUp(); |
324 } | 368 } |
325 | 369 |
326 // Set the index at which the chrome icon should be. | 370 // Set the index at which the chrome icon should be. |
327 void SetShelfChromeIconIndex(int index) { | 371 void SetShelfChromeIconIndex(int index) { |
328 profile()->GetTestingPrefService()->SetInteger(prefs::kShelfChromeIconIndex, | 372 profile()->GetTestingPrefService()->SetInteger(prefs::kShelfChromeIconIndex, |
329 index + 1); | 373 index + 1); |
330 } | 374 } |
331 | 375 |
332 private: | 376 private: |
333 | 377 |
334 DISALLOW_COPY_AND_ASSIGN(AlternateLayoutChromeLauncherControllerPerAppTest); | 378 DISALLOW_COPY_AND_ASSIGN(AlternateLayoutChromeLauncherControllerTest); |
335 }; | 379 }; |
336 | 380 |
337 | 381 |
338 TEST_F(ChromeLauncherControllerPerAppTest, DefaultApps) { | 382 TEST_F(ChromeLauncherControllerTest, DefaultApps) { |
339 InitLauncherController(); | 383 InitLauncherController(); |
340 // Model should only contain the browser shortcut and app list items. | 384 // Model should only contain the browser shortcut and app list items. |
341 EXPECT_EQ(2, model_->item_count()); | 385 EXPECT_EQ(2, model_->item_count()); |
342 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 386 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
343 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | 387 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
344 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | 388 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
345 | 389 |
346 // Installing |extension3_| should add it to the launcher - behind the | 390 // Installing |extension3_| should add it to the launcher - behind the |
347 // chrome icon. | 391 // chrome icon. |
348 extension_service_->AddExtension(extension3_.get()); | 392 extension_service_->AddExtension(extension3_.get()); |
349 EXPECT_EQ("Chrome, App3, AppList, ", GetPinnedAppStatus()); | 393 EXPECT_EQ("Chrome, App3, AppList, ", GetPinnedAppStatus()); |
350 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 394 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
351 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | 395 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
352 } | 396 } |
353 | 397 |
354 // Check that the restauration of launcher items is happening in the same order | 398 // Check that the restauration of launcher items is happening in the same order |
355 // as the user has pinned them (on another system) when they are synced reverse | 399 // as the user has pinned them (on another system) when they are synced reverse |
356 // order. | 400 // order. |
357 TEST_F(ChromeLauncherControllerPerAppTest, RestoreDefaultAppsReverseOrder) { | 401 TEST_F(ChromeLauncherControllerTest, RestoreDefaultAppsReverseOrder) { |
358 InitLauncherController(); | 402 InitLauncherController(); |
359 | 403 |
360 base::ListValue policy_value; | 404 base::ListValue policy_value; |
361 InsertPrefValue(&policy_value, 0, extension1_->id()); | 405 InsertPrefValue(&policy_value, 0, extension1_->id()); |
362 InsertPrefValue(&policy_value, 1, extension2_->id()); | 406 InsertPrefValue(&policy_value, 1, extension2_->id()); |
363 InsertPrefValue(&policy_value, 2, extension3_->id()); | 407 InsertPrefValue(&policy_value, 2, extension3_->id()); |
364 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | 408 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
365 policy_value.DeepCopy()); | 409 policy_value.DeepCopy()); |
366 EXPECT_EQ(0, profile()->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex)); | 410 EXPECT_EQ(0, profile()->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex)); |
367 // Model should only contain the browser shortcut and app list items. | 411 // Model should only contain the browser shortcut and app list items. |
(...skipping 18 matching lines...) Expand all Loading... |
386 | 430 |
387 // Installing |extension1_| should add it to the launcher - behind the | 431 // Installing |extension1_| should add it to the launcher - behind the |
388 // chrome icon, but in first location. | 432 // chrome icon, but in first location. |
389 extension_service_->AddExtension(extension1_.get()); | 433 extension_service_->AddExtension(extension1_.get()); |
390 EXPECT_EQ("Chrome, App1, App2, App3, AppList, ", GetPinnedAppStatus()); | 434 EXPECT_EQ("Chrome, App1, App2, App3, AppList, ", GetPinnedAppStatus()); |
391 } | 435 } |
392 | 436 |
393 // Check that the restauration of launcher items is happening in the same order | 437 // Check that the restauration of launcher items is happening in the same order |
394 // as the user has pinned them (on another system) when they are synced random | 438 // as the user has pinned them (on another system) when they are synced random |
395 // order. | 439 // order. |
396 TEST_F(ChromeLauncherControllerPerAppTest, RestoreDefaultAppsRandomOrder) { | 440 TEST_F(ChromeLauncherControllerTest, RestoreDefaultAppsRandomOrder) { |
397 InitLauncherController(); | 441 InitLauncherController(); |
398 | 442 |
399 base::ListValue policy_value; | 443 base::ListValue policy_value; |
400 InsertPrefValue(&policy_value, 0, extension1_->id()); | 444 InsertPrefValue(&policy_value, 0, extension1_->id()); |
401 InsertPrefValue(&policy_value, 1, extension2_->id()); | 445 InsertPrefValue(&policy_value, 1, extension2_->id()); |
402 InsertPrefValue(&policy_value, 2, extension3_->id()); | 446 InsertPrefValue(&policy_value, 2, extension3_->id()); |
403 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | 447 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
404 policy_value.DeepCopy()); | 448 policy_value.DeepCopy()); |
405 EXPECT_EQ(0, profile()->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex)); | 449 EXPECT_EQ(0, profile()->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex)); |
406 // Model should only contain the browser shortcut and app list items. | 450 // Model should only contain the browser shortcut and app list items. |
(...skipping 17 matching lines...) Expand all Loading... |
424 | 468 |
425 // Installing |extension3_| should add it to the launcher - behind the | 469 // Installing |extension3_| should add it to the launcher - behind the |
426 // chrome icon, but in first location. | 470 // chrome icon, but in first location. |
427 extension_service_->AddExtension(extension3_.get()); | 471 extension_service_->AddExtension(extension3_.get()); |
428 EXPECT_EQ("Chrome, App1, App2, App3, AppList, ", GetPinnedAppStatus()); | 472 EXPECT_EQ("Chrome, App1, App2, App3, AppList, ", GetPinnedAppStatus()); |
429 } | 473 } |
430 | 474 |
431 // Check that the restauration of launcher items is happening in the same order | 475 // Check that the restauration of launcher items is happening in the same order |
432 // as the user has pinned / moved them (on another system) when they are synced | 476 // as the user has pinned / moved them (on another system) when they are synced |
433 // random order - including the chrome icon. | 477 // random order - including the chrome icon. |
434 TEST_F(ChromeLauncherControllerPerAppTest, | 478 TEST_F(ChromeLauncherControllerTest, RestoreDefaultAppsRandomOrderChromeMoved) { |
435 RestoreDefaultAppsRandomOrderChromeMoved) { | |
436 InitLauncherController(); | 479 InitLauncherController(); |
437 | 480 |
438 base::ListValue policy_value; | 481 base::ListValue policy_value; |
439 InsertPrefValue(&policy_value, 0, extension1_->id()); | 482 InsertPrefValue(&policy_value, 0, extension1_->id()); |
440 InsertPrefValue(&policy_value, 1, extension2_->id()); | 483 InsertPrefValue(&policy_value, 1, extension2_->id()); |
441 InsertPrefValue(&policy_value, 2, extension3_->id()); | 484 InsertPrefValue(&policy_value, 2, extension3_->id()); |
442 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | 485 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
443 policy_value.DeepCopy()); | 486 policy_value.DeepCopy()); |
444 profile()->GetTestingPrefService()->SetInteger(prefs::kShelfChromeIconIndex, | 487 profile()->GetTestingPrefService()->SetInteger(prefs::kShelfChromeIconIndex, |
445 1); | 488 1); |
(...skipping 17 matching lines...) Expand all Loading... |
463 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | 506 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
464 EXPECT_EQ("App1, Chrome, App2, AppList, ", GetPinnedAppStatus()); | 507 EXPECT_EQ("App1, Chrome, App2, AppList, ", GetPinnedAppStatus()); |
465 | 508 |
466 // Installing |extension3_| should add it to the launcher - behind the | 509 // Installing |extension3_| should add it to the launcher - behind the |
467 // chrome icon, but in first location. | 510 // chrome icon, but in first location. |
468 extension_service_->AddExtension(extension3_.get()); | 511 extension_service_->AddExtension(extension3_.get()); |
469 EXPECT_EQ("App1, Chrome, App2, App3, AppList, ", GetPinnedAppStatus()); | 512 EXPECT_EQ("App1, Chrome, App2, App3, AppList, ", GetPinnedAppStatus()); |
470 } | 513 } |
471 | 514 |
472 // Check that syncing to a different state does the correct thing. | 515 // Check that syncing to a different state does the correct thing. |
473 TEST_F(ChromeLauncherControllerPerAppTest, RestoreDefaultAppsResyncOrder) { | 516 TEST_F(ChromeLauncherControllerTest, RestoreDefaultAppsResyncOrder) { |
474 InitLauncherController(); | 517 InitLauncherController(); |
475 base::ListValue policy_value; | 518 base::ListValue policy_value; |
476 InsertPrefValue(&policy_value, 0, extension1_->id()); | 519 InsertPrefValue(&policy_value, 0, extension1_->id()); |
477 InsertPrefValue(&policy_value, 1, extension2_->id()); | 520 InsertPrefValue(&policy_value, 1, extension2_->id()); |
478 InsertPrefValue(&policy_value, 2, extension3_->id()); | 521 InsertPrefValue(&policy_value, 2, extension3_->id()); |
479 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | 522 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
480 policy_value.DeepCopy()); | 523 policy_value.DeepCopy()); |
481 EXPECT_EQ(0, profile()->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex)); | 524 EXPECT_EQ(0, profile()->GetPrefs()->GetInteger(prefs::kShelfChromeIconIndex)); |
482 extension_service_->AddExtension(extension2_.get()); | 525 extension_service_->AddExtension(extension2_.get()); |
483 extension_service_->AddExtension(extension1_.get()); | 526 extension_service_->AddExtension(extension1_.get()); |
(...skipping 14 matching lines...) Expand all Loading... |
498 InsertPrefValue(&policy_value2, 0, extension2_->id()); | 541 InsertPrefValue(&policy_value2, 0, extension2_->id()); |
499 InsertPrefValue(&policy_value2, 1, extension3_->id()); | 542 InsertPrefValue(&policy_value2, 1, extension3_->id()); |
500 InsertPrefValue(&policy_value2, 2, extension1_->id()); | 543 InsertPrefValue(&policy_value2, 2, extension1_->id()); |
501 profile()->GetTestingPrefService()->SetInteger(prefs::kShelfChromeIconIndex, | 544 profile()->GetTestingPrefService()->SetInteger(prefs::kShelfChromeIconIndex, |
502 1); | 545 1); |
503 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | 546 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
504 policy_value2.DeepCopy()); | 547 policy_value2.DeepCopy()); |
505 EXPECT_EQ("App2, Chrome, App3, App1, AppList, ", GetPinnedAppStatus()); | 548 EXPECT_EQ("App2, Chrome, App3, App1, AppList, ", GetPinnedAppStatus()); |
506 } | 549 } |
507 | 550 |
508 TEST_F(AlternateLayoutChromeLauncherControllerPerAppTest, DefaultApps) { | 551 TEST_F(AlternateLayoutChromeLauncherControllerTest, DefaultApps) { |
509 InitLauncherController(); | 552 InitLauncherController(); |
510 // Model should only contain the browser shortcut and app list items. | 553 // Model should only contain the browser shortcut and app list items. |
511 EXPECT_EQ(2, model_->item_count()); | 554 EXPECT_EQ(2, model_->item_count()); |
512 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 555 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
513 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | 556 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
514 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | 557 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
515 | 558 |
516 // Installing |extension3_| should add it to the launcher - behind the | 559 // Installing |extension3_| should add it to the launcher - behind the |
517 // chrome icon. | 560 // chrome icon. |
518 extension_service_->AddExtension(extension3_.get()); | 561 extension_service_->AddExtension(extension3_.get()); |
519 EXPECT_EQ("AppList, Chrome, App3, ", GetPinnedAppStatus()); | 562 EXPECT_EQ("AppList, Chrome, App3, ", GetPinnedAppStatus()); |
520 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 563 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
521 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | 564 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
522 } | 565 } |
523 | 566 |
524 // Check that the restauration of launcher items is happening in the same order | 567 // Check that the restauration of launcher items is happening in the same order |
525 // as the user has pinned them (on another system) when they are synced reverse | 568 // as the user has pinned them (on another system) when they are synced reverse |
526 // order. | 569 // order. |
527 TEST_F(AlternateLayoutChromeLauncherControllerPerAppTest, | 570 TEST_F(AlternateLayoutChromeLauncherControllerTest, |
528 RestoreDefaultAppsReverseOrder) { | 571 RestoreDefaultAppsReverseOrder) { |
529 InitLauncherController(); | 572 InitLauncherController(); |
530 | 573 |
531 base::ListValue policy_value; | 574 base::ListValue policy_value; |
532 InsertPrefValue(&policy_value, 0, extension1_->id()); | 575 InsertPrefValue(&policy_value, 0, extension1_->id()); |
533 InsertPrefValue(&policy_value, 1, extension2_->id()); | 576 InsertPrefValue(&policy_value, 1, extension2_->id()); |
534 InsertPrefValue(&policy_value, 2, extension3_->id()); | 577 InsertPrefValue(&policy_value, 2, extension3_->id()); |
535 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | 578 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
536 policy_value.DeepCopy()); | 579 policy_value.DeepCopy()); |
537 SetShelfChromeIconIndex(0); | 580 SetShelfChromeIconIndex(0); |
(...skipping 19 matching lines...) Expand all Loading... |
557 | 600 |
558 // Installing |extension1_| should add it to the launcher - behind the | 601 // Installing |extension1_| should add it to the launcher - behind the |
559 // chrome icon, but in first location. | 602 // chrome icon, but in first location. |
560 extension_service_->AddExtension(extension1_.get()); | 603 extension_service_->AddExtension(extension1_.get()); |
561 EXPECT_EQ("AppList, Chrome, App1, App2, App3, ", GetPinnedAppStatus()); | 604 EXPECT_EQ("AppList, Chrome, App1, App2, App3, ", GetPinnedAppStatus()); |
562 } | 605 } |
563 | 606 |
564 // Check that the restauration of launcher items is happening in the same order | 607 // Check that the restauration of launcher items is happening in the same order |
565 // as the user has pinned them (on another system) when they are synced random | 608 // as the user has pinned them (on another system) when they are synced random |
566 // order. | 609 // order. |
567 TEST_F(AlternateLayoutChromeLauncherControllerPerAppTest, | 610 TEST_F(AlternateLayoutChromeLauncherControllerTest, |
568 RestoreDefaultAppsRandomOrder) { | 611 RestoreDefaultAppsRandomOrder) { |
569 InitLauncherController(); | 612 InitLauncherController(); |
570 | 613 |
571 base::ListValue policy_value; | 614 base::ListValue policy_value; |
572 InsertPrefValue(&policy_value, 0, extension1_->id()); | 615 InsertPrefValue(&policy_value, 0, extension1_->id()); |
573 InsertPrefValue(&policy_value, 1, extension2_->id()); | 616 InsertPrefValue(&policy_value, 1, extension2_->id()); |
574 InsertPrefValue(&policy_value, 2, extension3_->id()); | 617 InsertPrefValue(&policy_value, 2, extension3_->id()); |
575 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | 618 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
576 policy_value.DeepCopy()); | 619 policy_value.DeepCopy()); |
577 SetShelfChromeIconIndex(0); | 620 SetShelfChromeIconIndex(0); |
(...skipping 18 matching lines...) Expand all Loading... |
596 | 639 |
597 // Installing |extension3_| should add it to the launcher - behind the | 640 // Installing |extension3_| should add it to the launcher - behind the |
598 // chrome icon, but in first location. | 641 // chrome icon, but in first location. |
599 extension_service_->AddExtension(extension3_.get()); | 642 extension_service_->AddExtension(extension3_.get()); |
600 EXPECT_EQ("AppList, Chrome, App1, App2, App3, ", GetPinnedAppStatus()); | 643 EXPECT_EQ("AppList, Chrome, App1, App2, App3, ", GetPinnedAppStatus()); |
601 } | 644 } |
602 | 645 |
603 // Check that the restauration of launcher items is happening in the same order | 646 // Check that the restauration of launcher items is happening in the same order |
604 // as the user has pinned / moved them (on another system) when they are synced | 647 // as the user has pinned / moved them (on another system) when they are synced |
605 // random order - including the chrome icon - using the alternate shelf layout. | 648 // random order - including the chrome icon - using the alternate shelf layout. |
606 TEST_F(AlternateLayoutChromeLauncherControllerPerAppTest, | 649 TEST_F(AlternateLayoutChromeLauncherControllerTest, |
607 RestoreDefaultAppsRandomOrderChromeMoved) { | 650 RestoreDefaultAppsRandomOrderChromeMoved) { |
608 InitLauncherController(); | 651 InitLauncherController(); |
609 | 652 |
610 base::ListValue policy_value; | 653 base::ListValue policy_value; |
611 InsertPrefValue(&policy_value, 0, extension1_->id()); | 654 InsertPrefValue(&policy_value, 0, extension1_->id()); |
612 InsertPrefValue(&policy_value, 1, extension2_->id()); | 655 InsertPrefValue(&policy_value, 1, extension2_->id()); |
613 InsertPrefValue(&policy_value, 2, extension3_->id()); | 656 InsertPrefValue(&policy_value, 2, extension3_->id()); |
614 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | 657 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
615 policy_value.DeepCopy()); | 658 policy_value.DeepCopy()); |
616 SetShelfChromeIconIndex(1); | 659 SetShelfChromeIconIndex(1); |
(...skipping 18 matching lines...) Expand all Loading... |
635 EXPECT_EQ("AppList, App1, Chrome, App2, ", GetPinnedAppStatus()); | 678 EXPECT_EQ("AppList, App1, Chrome, App2, ", GetPinnedAppStatus()); |
636 | 679 |
637 // Installing |extension3_| should add it to the launcher - behind the | 680 // Installing |extension3_| should add it to the launcher - behind the |
638 // chrome icon, but in first location. | 681 // chrome icon, but in first location. |
639 extension_service_->AddExtension(extension3_.get()); | 682 extension_service_->AddExtension(extension3_.get()); |
640 EXPECT_EQ("AppList, App1, Chrome, App2, App3, ", GetPinnedAppStatus()); | 683 EXPECT_EQ("AppList, App1, Chrome, App2, App3, ", GetPinnedAppStatus()); |
641 } | 684 } |
642 | 685 |
643 // Check that syncing to a different state does the correct thing with the | 686 // Check that syncing to a different state does the correct thing with the |
644 // alternate shelf layout. | 687 // alternate shelf layout. |
645 TEST_F(AlternateLayoutChromeLauncherControllerPerAppTest, | 688 TEST_F(AlternateLayoutChromeLauncherControllerTest, |
646 RestoreDefaultAppsResyncOrder) { | 689 RestoreDefaultAppsResyncOrder) { |
647 InitLauncherController(); | 690 InitLauncherController(); |
648 base::ListValue policy_value; | 691 base::ListValue policy_value; |
649 InsertPrefValue(&policy_value, 0, extension1_->id()); | 692 InsertPrefValue(&policy_value, 0, extension1_->id()); |
650 InsertPrefValue(&policy_value, 1, extension2_->id()); | 693 InsertPrefValue(&policy_value, 1, extension2_->id()); |
651 InsertPrefValue(&policy_value, 2, extension3_->id()); | 694 InsertPrefValue(&policy_value, 2, extension3_->id()); |
652 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | 695 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
653 policy_value.DeepCopy()); | 696 policy_value.DeepCopy()); |
654 // The alternate shelf layout has always one static item at the beginning. | 697 // The alternate shelf layout has always one static item at the beginning. |
655 SetShelfChromeIconIndex(0); | 698 SetShelfChromeIconIndex(0); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
697 extension_misc::UNLOAD_REASON_UNINSTALL); | 740 extension_misc::UNLOAD_REASON_UNINSTALL); |
698 EXPECT_EQ("AppList, Chrome, App3, ", GetPinnedAppStatus()); | 741 EXPECT_EQ("AppList, Chrome, App3, ", GetPinnedAppStatus()); |
699 | 742 |
700 // Check that an update of an extension does not crash the system. | 743 // Check that an update of an extension does not crash the system. |
701 extension_service_->UnloadExtension(extension3_->id(), | 744 extension_service_->UnloadExtension(extension3_->id(), |
702 extension_misc::UNLOAD_REASON_UPDATE); | 745 extension_misc::UNLOAD_REASON_UPDATE); |
703 EXPECT_EQ("AppList, Chrome, App3, ", GetPinnedAppStatus()); | 746 EXPECT_EQ("AppList, Chrome, App3, ", GetPinnedAppStatus()); |
704 } | 747 } |
705 | 748 |
706 // Check that simple locking of an application will 'create' a launcher item. | 749 // Check that simple locking of an application will 'create' a launcher item. |
707 TEST_F(ChromeLauncherControllerPerAppTest, CheckLockApps) { | 750 TEST_F(ChromeLauncherControllerTest, CheckLockApps) { |
708 InitLauncherController(); | 751 InitLauncherController(); |
709 // Model should only contain the browser shortcut and app list items. | 752 // Model should only contain the browser shortcut and app list items. |
710 EXPECT_EQ(2, model_->item_count()); | 753 EXPECT_EQ(2, model_->item_count()); |
711 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 754 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
712 EXPECT_FALSE( | 755 EXPECT_FALSE( |
713 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); | 756 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); |
714 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | 757 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
715 EXPECT_FALSE( | 758 EXPECT_FALSE( |
716 launcher_controller_->IsWindowedAppInLauncher(extension2_->id())); | 759 launcher_controller_->IsWindowedAppInLauncher(extension2_->id())); |
717 | 760 |
(...skipping 12 matching lines...) Expand all Loading... |
730 EXPECT_EQ(2, model_->item_count()); | 773 EXPECT_EQ(2, model_->item_count()); |
731 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 774 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
732 EXPECT_FALSE( | 775 EXPECT_FALSE( |
733 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); | 776 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); |
734 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | 777 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
735 EXPECT_FALSE( | 778 EXPECT_FALSE( |
736 launcher_controller_->IsWindowedAppInLauncher(extension2_->id())); | 779 launcher_controller_->IsWindowedAppInLauncher(extension2_->id())); |
737 } | 780 } |
738 | 781 |
739 // Check that multiple locks of an application will be properly handled. | 782 // Check that multiple locks of an application will be properly handled. |
740 TEST_F(ChromeLauncherControllerPerAppTest, CheckMukltiLockApps) { | 783 TEST_F(ChromeLauncherControllerTest, CheckMukltiLockApps) { |
741 InitLauncherController(); | 784 InitLauncherController(); |
742 // Model should only contain the browser shortcut and app list items. | 785 // Model should only contain the browser shortcut and app list items. |
743 EXPECT_EQ(2, model_->item_count()); | 786 EXPECT_EQ(2, model_->item_count()); |
744 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 787 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
745 EXPECT_FALSE( | 788 EXPECT_FALSE( |
746 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); | 789 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); |
747 | 790 |
748 for (int i = 0; i < 2; i++) { | 791 for (int i = 0; i < 2; i++) { |
749 launcher_controller_->LockV1AppWithID(extension1_->id()); | 792 launcher_controller_->LockV1AppWithID(extension1_->id()); |
750 | 793 |
(...skipping 16 matching lines...) Expand all Loading... |
767 EXPECT_EQ(2, model_->item_count()); | 810 EXPECT_EQ(2, model_->item_count()); |
768 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 811 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
769 EXPECT_FALSE( | 812 EXPECT_FALSE( |
770 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); | 813 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); |
771 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); | 814 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension2_->id())); |
772 EXPECT_FALSE( | 815 EXPECT_FALSE( |
773 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); | 816 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); |
774 } | 817 } |
775 | 818 |
776 // Check that already pinned items are not effected by locks. | 819 // Check that already pinned items are not effected by locks. |
777 TEST_F(ChromeLauncherControllerPerAppTest, CheckAlreadyPinnedLockApps) { | 820 TEST_F(ChromeLauncherControllerTest, CheckAlreadyPinnedLockApps) { |
778 InitLauncherController(); | 821 InitLauncherController(); |
779 // Model should only contain the browser shortcut and app list items. | 822 // Model should only contain the browser shortcut and app list items. |
780 EXPECT_EQ(2, model_->item_count()); | 823 EXPECT_EQ(2, model_->item_count()); |
781 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 824 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
782 EXPECT_FALSE( | 825 EXPECT_FALSE( |
783 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); | 826 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); |
784 | 827 |
785 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 828 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
786 launcher_controller_->PinAppWithID(extension1_->id()); | 829 launcher_controller_->PinAppWithID(extension1_->id()); |
787 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); | 830 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); |
(...skipping 19 matching lines...) Expand all Loading... |
807 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); | 850 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); |
808 EXPECT_FALSE( | 851 EXPECT_FALSE( |
809 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); | 852 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); |
810 | 853 |
811 launcher_controller_->UnpinAppsWithID(extension1_->id()); | 854 launcher_controller_->UnpinAppsWithID(extension1_->id()); |
812 | 855 |
813 EXPECT_EQ(2, model_->item_count()); | 856 EXPECT_EQ(2, model_->item_count()); |
814 } | 857 } |
815 | 858 |
816 // Check that already pinned items which get locked stay after unpinning. | 859 // Check that already pinned items which get locked stay after unpinning. |
817 TEST_F(ChromeLauncherControllerPerAppTest, CheckPinnedAppsStayAfterUnlock) { | 860 TEST_F(ChromeLauncherControllerTest, CheckPinnedAppsStayAfterUnlock) { |
818 InitLauncherController(); | 861 InitLauncherController(); |
819 // Model should only contain the browser shortcut and app list items. | 862 // Model should only contain the browser shortcut and app list items. |
820 EXPECT_EQ(2, model_->item_count()); | 863 EXPECT_EQ(2, model_->item_count()); |
821 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 864 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
822 EXPECT_FALSE( | 865 EXPECT_FALSE( |
823 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); | 866 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); |
824 | 867 |
825 launcher_controller_->PinAppWithID(extension1_->id()); | 868 launcher_controller_->PinAppWithID(extension1_->id()); |
826 | 869 |
827 EXPECT_EQ(3, model_->item_count()); | 870 EXPECT_EQ(3, model_->item_count()); |
(...skipping 16 matching lines...) Expand all Loading... |
844 EXPECT_EQ(ash::TYPE_WINDOWED_APP, model_->items()[1].type); | 887 EXPECT_EQ(ash::TYPE_WINDOWED_APP, model_->items()[1].type); |
845 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 888 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
846 EXPECT_TRUE(launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); | 889 EXPECT_TRUE(launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); |
847 | 890 |
848 launcher_controller_->UnlockV1AppWithID(extension1_->id()); | 891 launcher_controller_->UnlockV1AppWithID(extension1_->id()); |
849 | 892 |
850 EXPECT_EQ(2, model_->item_count()); | 893 EXPECT_EQ(2, model_->item_count()); |
851 } | 894 } |
852 | 895 |
853 // Check that lock -> pin -> unlock -> unpin does properly transition. | 896 // Check that lock -> pin -> unlock -> unpin does properly transition. |
854 TEST_F(ChromeLauncherControllerPerAppTest, CheckLockPinUnlockUnpin) { | 897 TEST_F(ChromeLauncherControllerTest, CheckLockPinUnlockUnpin) { |
855 InitLauncherController(); | 898 InitLauncherController(); |
856 // Model should only contain the browser shortcut and app list items. | 899 // Model should only contain the browser shortcut and app list items. |
857 EXPECT_EQ(2, model_->item_count()); | 900 EXPECT_EQ(2, model_->item_count()); |
858 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 901 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
859 EXPECT_FALSE( | 902 EXPECT_FALSE( |
860 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); | 903 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); |
861 | 904 |
862 launcher_controller_->LockV1AppWithID(extension1_->id()); | 905 launcher_controller_->LockV1AppWithID(extension1_->id()); |
863 | 906 |
864 EXPECT_EQ(3, model_->item_count()); | 907 EXPECT_EQ(3, model_->item_count()); |
(...skipping 15 matching lines...) Expand all Loading... |
880 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[1].type); | 923 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[1].type); |
881 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); | 924 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension1_->id())); |
882 EXPECT_FALSE( | 925 EXPECT_FALSE( |
883 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); | 926 launcher_controller_->IsWindowedAppInLauncher(extension1_->id())); |
884 | 927 |
885 launcher_controller_->UnpinAppsWithID(extension1_->id()); | 928 launcher_controller_->UnpinAppsWithID(extension1_->id()); |
886 | 929 |
887 EXPECT_EQ(2, model_->item_count()); | 930 EXPECT_EQ(2, model_->item_count()); |
888 } | 931 } |
889 | 932 |
890 TEST_F(ChromeLauncherControllerPerAppTest, Policy) { | 933 TEST_F(ChromeLauncherControllerTest, Policy) { |
891 extension_service_->AddExtension(extension1_.get()); | 934 extension_service_->AddExtension(extension1_.get()); |
892 extension_service_->AddExtension(extension3_.get()); | 935 extension_service_->AddExtension(extension3_.get()); |
893 | 936 |
894 base::ListValue policy_value; | 937 base::ListValue policy_value; |
895 InsertPrefValue(&policy_value, 0, extension1_->id()); | 938 InsertPrefValue(&policy_value, 0, extension1_->id()); |
896 InsertPrefValue(&policy_value, 1, extension2_->id()); | 939 InsertPrefValue(&policy_value, 1, extension2_->id()); |
897 profile()->GetTestingPrefService()->SetManagedPref(prefs::kPinnedLauncherApps, | 940 profile()->GetTestingPrefService()->SetManagedPref(prefs::kPinnedLauncherApps, |
898 policy_value.DeepCopy()); | 941 policy_value.DeepCopy()); |
899 | 942 |
900 // Only |extension1_| should get pinned. |extension2_| is specified but not | 943 // Only |extension1_| should get pinned. |extension2_| is specified but not |
(...skipping 19 matching lines...) Expand all Loading... |
920 policy_value.Remove(0, NULL); | 963 policy_value.Remove(0, NULL); |
921 profile()->GetTestingPrefService()->SetManagedPref(prefs::kPinnedLauncherApps, | 964 profile()->GetTestingPrefService()->SetManagedPref(prefs::kPinnedLauncherApps, |
922 policy_value.DeepCopy()); | 965 policy_value.DeepCopy()); |
923 EXPECT_EQ(3, model_->item_count()); | 966 EXPECT_EQ(3, model_->item_count()); |
924 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[1].type); | 967 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[1].type); |
925 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); | 968 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension1_->id())); |
926 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension2_->id())); | 969 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension2_->id())); |
927 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | 970 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
928 } | 971 } |
929 | 972 |
930 TEST_F(ChromeLauncherControllerPerAppTest, UnpinWithUninstall) { | 973 TEST_F(ChromeLauncherControllerTest, UnpinWithUninstall) { |
931 extension_service_->AddExtension(extension3_.get()); | 974 extension_service_->AddExtension(extension3_.get()); |
932 extension_service_->AddExtension(extension4_.get()); | 975 extension_service_->AddExtension(extension4_.get()); |
933 | 976 |
934 InitLauncherController(); | 977 InitLauncherController(); |
935 | 978 |
936 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension3_->id())); | 979 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension3_->id())); |
937 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension4_->id())); | 980 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension4_->id())); |
938 | 981 |
939 extension_service_->UnloadExtension(extension3_->id(), | 982 extension_service_->UnloadExtension(extension3_->id(), |
940 extension_misc::UNLOAD_REASON_UNINSTALL); | 983 extension_misc::UNLOAD_REASON_UNINSTALL); |
941 | 984 |
942 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | 985 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
943 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension4_->id())); | 986 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension4_->id())); |
944 } | 987 } |
945 | 988 |
946 TEST_F(ChromeLauncherControllerPerAppTest, PrefUpdates) { | 989 TEST_F(ChromeLauncherControllerTest, PrefUpdates) { |
947 extension_service_->AddExtension(extension2_.get()); | 990 extension_service_->AddExtension(extension2_.get()); |
948 extension_service_->AddExtension(extension3_.get()); | 991 extension_service_->AddExtension(extension3_.get()); |
949 extension_service_->AddExtension(extension4_.get()); | 992 extension_service_->AddExtension(extension4_.get()); |
950 | 993 |
951 InitLauncherController(); | 994 InitLauncherController(); |
952 | 995 |
953 std::vector<std::string> expected_launchers; | 996 std::vector<std::string> expected_launchers; |
954 std::vector<std::string> actual_launchers; | 997 std::vector<std::string> actual_launchers; |
955 base::ListValue pref_value; | 998 base::ListValue pref_value; |
956 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | 999 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
992 | 1035 |
993 // Clearing works. | 1036 // Clearing works. |
994 pref_value.Clear(); | 1037 pref_value.Clear(); |
995 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | 1038 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
996 pref_value.DeepCopy()); | 1039 pref_value.DeepCopy()); |
997 expected_launchers.clear(); | 1040 expected_launchers.clear(); |
998 GetAppLaunchers(launcher_controller_.get(), &actual_launchers); | 1041 GetAppLaunchers(launcher_controller_.get(), &actual_launchers); |
999 EXPECT_EQ(expected_launchers, actual_launchers); | 1042 EXPECT_EQ(expected_launchers, actual_launchers); |
1000 } | 1043 } |
1001 | 1044 |
1002 TEST_F(ChromeLauncherControllerPerAppTest, PendingInsertionOrder) { | 1045 TEST_F(ChromeLauncherControllerTest, PendingInsertionOrder) { |
1003 extension_service_->AddExtension(extension1_.get()); | 1046 extension_service_->AddExtension(extension1_.get()); |
1004 extension_service_->AddExtension(extension3_.get()); | 1047 extension_service_->AddExtension(extension3_.get()); |
1005 | 1048 |
1006 InitLauncherController(); | 1049 InitLauncherController(); |
1007 | 1050 |
1008 base::ListValue pref_value; | 1051 base::ListValue pref_value; |
1009 InsertPrefValue(&pref_value, 0, extension1_->id()); | 1052 InsertPrefValue(&pref_value, 0, extension1_->id()); |
1010 InsertPrefValue(&pref_value, 1, extension2_->id()); | 1053 InsertPrefValue(&pref_value, 1, extension2_->id()); |
1011 InsertPrefValue(&pref_value, 2, extension3_->id()); | 1054 InsertPrefValue(&pref_value, 2, extension3_->id()); |
1012 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, | 1055 profile()->GetTestingPrefService()->SetUserPref(prefs::kPinnedLauncherApps, |
(...skipping 12 matching lines...) Expand all Loading... |
1025 expected_launchers.insert(expected_launchers.begin() + 1, extension2_->id()); | 1068 expected_launchers.insert(expected_launchers.begin() + 1, extension2_->id()); |
1026 GetAppLaunchers(launcher_controller_.get(), &actual_launchers); | 1069 GetAppLaunchers(launcher_controller_.get(), &actual_launchers); |
1027 EXPECT_EQ(expected_launchers, actual_launchers); | 1070 EXPECT_EQ(expected_launchers, actual_launchers); |
1028 } | 1071 } |
1029 | 1072 |
1030 // Checks the created menus and menu lists for correctness. It uses the given | 1073 // Checks the created menus and menu lists for correctness. It uses the given |
1031 // |controller| to create the objects for the given |item| and checks the | 1074 // |controller| to create the objects for the given |item| and checks the |
1032 // found item count against the |expected_items|. The |title| list contains the | 1075 // found item count against the |expected_items|. The |title| list contains the |
1033 // menu titles in the order of their appearance in the menu (not including the | 1076 // menu titles in the order of their appearance in the menu (not including the |
1034 // application name). | 1077 // application name). |
1035 bool CheckMenuCreation(ChromeLauncherControllerPerApp* controller, | 1078 bool CheckMenuCreation(ChromeLauncherController* controller, |
1036 const ash::LauncherItem& item, | 1079 const ash::LauncherItem& item, |
1037 size_t expected_items, | 1080 size_t expected_items, |
1038 string16 title[], | 1081 string16 title[], |
1039 bool is_browser) { | 1082 bool is_browser) { |
1040 ChromeLauncherAppMenuItems items = controller->GetApplicationList(item, 0); | 1083 ChromeLauncherAppMenuItems items = controller->GetApplicationList(item, 0); |
1041 // A new behavior has been added: Only show menus if there is at least one | 1084 // A new behavior has been added: Only show menus if there is at least one |
1042 // item available. | 1085 // item available. |
1043 if (expected_items < 1 && is_browser) { | 1086 if (expected_items < 1 && is_browser) { |
1044 EXPECT_EQ(0u, items.size()); | 1087 EXPECT_EQ(0u, items.size()); |
1045 return items.size() == 0; | 1088 return items.size() == 0; |
(...skipping 21 matching lines...) Expand all Loading... |
1067 EXPECT_EQ(expected_menu_items, menu->GetItemCount()); | 1110 EXPECT_EQ(expected_menu_items, menu->GetItemCount()); |
1068 EXPECT_FALSE(menu->IsEnabledAt(first_item)); | 1111 EXPECT_FALSE(menu->IsEnabledAt(first_item)); |
1069 if (expected_items) { | 1112 if (expected_items) { |
1070 EXPECT_EQ(ui::MenuModel::TYPE_SEPARATOR, | 1113 EXPECT_EQ(ui::MenuModel::TYPE_SEPARATOR, |
1071 menu->GetTypeAt(first_item + 1)); | 1114 menu->GetTypeAt(first_item + 1)); |
1072 } | 1115 } |
1073 return items.size() == expected_items + 1; | 1116 return items.size() == expected_items + 1; |
1074 } | 1117 } |
1075 | 1118 |
1076 // Check that browsers get reflected correctly in the launcher menu. | 1119 // Check that browsers get reflected correctly in the launcher menu. |
1077 TEST_F(ChromeLauncherControllerPerAppTest, BrowserMenuGeneration) { | 1120 TEST_F(ChromeLauncherControllerTest, BrowserMenuGeneration) { |
1078 EXPECT_EQ(1U, chrome::GetTotalBrowserCount()); | 1121 EXPECT_EQ(1U, chrome::GetTotalBrowserCount()); |
1079 chrome::NewTab(browser()); | 1122 chrome::NewTab(browser()); |
1080 | 1123 |
1081 InitLauncherController(); | 1124 InitLauncherController(); |
1082 | 1125 |
1083 // Check that the browser list is empty at this time. | 1126 // Check that the browser list is empty at this time. |
1084 ash::LauncherItem item_browser; | 1127 ash::LauncherItem item_browser; |
1085 item_browser.type = ash::TYPE_BROWSER_SHORTCUT; | 1128 item_browser.type = ash::TYPE_BROWSER_SHORTCUT; |
1086 item_browser.id = | 1129 item_browser.id = |
1087 launcher_controller_->GetLauncherIDForAppID(extension_misc::kChromeAppId); | 1130 launcher_controller_->GetLauncherIDForAppID(extension_misc::kChromeAppId); |
(...skipping 27 matching lines...) Expand all Loading... |
1115 launcher_controller_.get(), item_browser, 2, two_menu_items, true)); | 1158 launcher_controller_.get(), item_browser, 2, two_menu_items, true)); |
1116 | 1159 |
1117 // Apparently we have to close all tabs we have. | 1160 // Apparently we have to close all tabs we have. |
1118 chrome::CloseTab(browser2.get()); | 1161 chrome::CloseTab(browser2.get()); |
1119 } | 1162 } |
1120 | 1163 |
1121 // Check that V1 apps are correctly reflected in the launcher menu using the | 1164 // Check that V1 apps are correctly reflected in the launcher menu using the |
1122 // refocus logic. | 1165 // refocus logic. |
1123 // Note that the extension matching logic is tested by the extension system | 1166 // Note that the extension matching logic is tested by the extension system |
1124 // and does not need a separate test here. | 1167 // and does not need a separate test here. |
1125 TEST_F(ChromeLauncherControllerPerAppTest, V1AppMenuGeneration) { | 1168 TEST_F(ChromeLauncherControllerTest, V1AppMenuGeneration) { |
1126 EXPECT_EQ(1U, chrome::GetTotalBrowserCount()); | 1169 EXPECT_EQ(1U, chrome::GetTotalBrowserCount()); |
1127 EXPECT_EQ(0, browser()->tab_strip_model()->count()); | 1170 EXPECT_EQ(0, browser()->tab_strip_model()->count()); |
1128 | 1171 |
1129 InitLauncherControllerWithBrowser(); | 1172 InitLauncherControllerWithBrowser(); |
1130 | 1173 |
1131 // Model should only contain the browser shortcut and app list items. | 1174 // Model should only contain the browser shortcut and app list items. |
1132 EXPECT_EQ(2, model_->item_count()); | 1175 EXPECT_EQ(2, model_->item_count()); |
1133 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); | 1176 EXPECT_FALSE(launcher_controller_->IsAppPinned(extension3_->id())); |
1134 | 1177 |
1135 // Installing |extension3_| adds it to the launcher. | 1178 // Installing |extension3_| adds it to the launcher. |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1188 launcher_controller_->Close(item_gmail.id); | 1231 launcher_controller_->Close(item_gmail.id); |
1189 | 1232 |
1190 EXPECT_TRUE(CheckMenuCreation( | 1233 EXPECT_TRUE(CheckMenuCreation( |
1191 launcher_controller_.get(), item_gmail, 0, NULL, false)); | 1234 launcher_controller_.get(), item_gmail, 0, NULL, false)); |
1192 string16 browser_menu_item2[] = {title2}; | 1235 string16 browser_menu_item2[] = {title2}; |
1193 EXPECT_TRUE(CheckMenuCreation( | 1236 EXPECT_TRUE(CheckMenuCreation( |
1194 launcher_controller_.get(), item_browser, 1, browser_menu_item2, false)); | 1237 launcher_controller_.get(), item_browser, 1, browser_menu_item2, false)); |
1195 } | 1238 } |
1196 | 1239 |
1197 // Checks that the generated menu list properly activates items. | 1240 // Checks that the generated menu list properly activates items. |
1198 TEST_F(ChromeLauncherControllerPerAppTest, V1AppMenuExecution) { | 1241 TEST_F(ChromeLauncherControllerTest, V1AppMenuExecution) { |
1199 InitLauncherControllerWithBrowser(); | 1242 InitLauncherControllerWithBrowser(); |
1200 | 1243 |
1201 // Add |extension3_| to the launcher and add two items. | 1244 // Add |extension3_| to the launcher and add two items. |
1202 GURL gmail = GURL("https://mail.google.com/mail/u"); | 1245 GURL gmail = GURL("https://mail.google.com/mail/u"); |
1203 ash::LauncherID gmail_id = model_->next_id(); | 1246 ash::LauncherID gmail_id = model_->next_id(); |
1204 extension_service_->AddExtension(extension3_.get()); | 1247 extension_service_->AddExtension(extension3_.get()); |
1205 launcher_controller_->SetRefocusURLPatternForTest(gmail_id, GURL(gmail_url)); | 1248 launcher_controller_->SetRefocusURLPatternForTest(gmail_id, GURL(gmail_url)); |
1206 string16 title1 = ASCIIToUTF16("Test1"); | 1249 string16 title1 = ASCIIToUTF16("Test1"); |
1207 NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title1); | 1250 NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title1); |
1208 chrome::NewTab(browser()); | 1251 chrome::NewTab(browser()); |
(...skipping 28 matching lines...) Expand all Loading... |
1237 launcher_controller_->CreateApplicationMenu(item_gmail, 0)); | 1280 launcher_controller_->CreateApplicationMenu(item_gmail, 0)); |
1238 int first_item = | 1281 int first_item = |
1239 (menu->GetTypeAt(0) == ui::MenuModel::TYPE_SEPARATOR) ? 1 : 0; | 1282 (menu->GetTypeAt(0) == ui::MenuModel::TYPE_SEPARATOR) ? 1 : 0; |
1240 menu->ActivatedAt(first_item + 2); | 1283 menu->ActivatedAt(first_item + 2); |
1241 } | 1284 } |
1242 // Now the active tab should be the second item. | 1285 // Now the active tab should be the second item. |
1243 EXPECT_EQ(0, browser()->tab_strip_model()->active_index()); | 1286 EXPECT_EQ(0, browser()->tab_strip_model()->active_index()); |
1244 } | 1287 } |
1245 | 1288 |
1246 // Checks that the generated menu list properly deletes items. | 1289 // Checks that the generated menu list properly deletes items. |
1247 TEST_F(ChromeLauncherControllerPerAppTest, V1AppMenuDeletionExecution) { | 1290 TEST_F(ChromeLauncherControllerTest, V1AppMenuDeletionExecution) { |
1248 InitLauncherControllerWithBrowser(); | 1291 InitLauncherControllerWithBrowser(); |
1249 | 1292 |
1250 // Add |extension3_| to the launcher and add two items. | 1293 // Add |extension3_| to the launcher and add two items. |
1251 GURL gmail = GURL("https://mail.google.com/mail/u"); | 1294 GURL gmail = GURL("https://mail.google.com/mail/u"); |
1252 ash::LauncherID gmail_id = model_->next_id(); | 1295 ash::LauncherID gmail_id = model_->next_id(); |
1253 extension_service_->AddExtension(extension3_.get()); | 1296 extension_service_->AddExtension(extension3_.get()); |
1254 launcher_controller_->SetRefocusURLPatternForTest(gmail_id, GURL(gmail_url)); | 1297 launcher_controller_->SetRefocusURLPatternForTest(gmail_id, GURL(gmail_url)); |
1255 string16 title1 = ASCIIToUTF16("Test1"); | 1298 string16 title1 = ASCIIToUTF16("Test1"); |
1256 NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title1); | 1299 NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title1); |
1257 chrome::NewTab(browser()); | 1300 chrome::NewTab(browser()); |
(...skipping 20 matching lines...) Expand all Loading... |
1278 // Delete one tab through the menu item. | 1321 // Delete one tab through the menu item. |
1279 { | 1322 { |
1280 ChromeLauncherAppMenuItems items = | 1323 ChromeLauncherAppMenuItems items = |
1281 launcher_controller_->GetApplicationList(item_gmail, 0); | 1324 launcher_controller_->GetApplicationList(item_gmail, 0); |
1282 items[1]->Execute(ui::EF_SHIFT_DOWN); | 1325 items[1]->Execute(ui::EF_SHIFT_DOWN); |
1283 EXPECT_EQ(--tabs, browser()->tab_strip_model()->count()); | 1326 EXPECT_EQ(--tabs, browser()->tab_strip_model()->count()); |
1284 } | 1327 } |
1285 } | 1328 } |
1286 | 1329 |
1287 // Tests that panels create launcher items correctly | 1330 // Tests that panels create launcher items correctly |
1288 TEST_F(ChromeLauncherControllerPerAppTest, AppPanels) { | 1331 TEST_F(ChromeLauncherControllerTest, AppPanels) { |
1289 InitLauncherControllerWithBrowser(); | 1332 InitLauncherControllerWithBrowser(); |
| 1333 // Browser shortcut LauncherItem is added. |
1290 EXPECT_EQ(1, model_observer_->added()); | 1334 EXPECT_EQ(1, model_observer_->added()); |
1291 | 1335 |
1292 TestAppIconLoaderImpl* app_icon_loader = new TestAppIconLoaderImpl(); | 1336 TestAppIconLoaderImpl* app_icon_loader = new TestAppIconLoaderImpl(); |
1293 SetAppIconLoader(app_icon_loader); | 1337 SetAppIconLoader(app_icon_loader); |
1294 | 1338 |
1295 // Test adding an app panel | 1339 // Test adding an app panel |
1296 std::string app_id = extension1_->id(); | 1340 std::string app_id = extension1_->id(); |
1297 ShellWindowLauncherItemController app_panel_controller( | 1341 ShellWindowLauncherItemController app_panel_controller( |
1298 LauncherItemController::TYPE_APP_PANEL, "id", app_id, | 1342 LauncherItemController::TYPE_APP_PANEL, "id", app_id, |
1299 launcher_controller_.get()); | 1343 launcher_controller_.get()); |
(...skipping 23 matching lines...) Expand all Loading... |
1323 EXPECT_EQ(1, model_observer_->added()); | 1367 EXPECT_EQ(1, model_observer_->added()); |
1324 model_observer_->clear_counts(); | 1368 model_observer_->clear_counts(); |
1325 | 1369 |
1326 launcher_controller_->CloseLauncherItem(launcher_id2); | 1370 launcher_controller_->CloseLauncherItem(launcher_id2); |
1327 launcher_controller_->CloseLauncherItem(launcher_id1); | 1371 launcher_controller_->CloseLauncherItem(launcher_id1); |
1328 EXPECT_EQ(2, model_observer_->removed()); | 1372 EXPECT_EQ(2, model_observer_->removed()); |
1329 } | 1373 } |
1330 | 1374 |
1331 // Tests that the Gmail extension matches more then the app itself claims with | 1375 // Tests that the Gmail extension matches more then the app itself claims with |
1332 // the manifest file. | 1376 // the manifest file. |
1333 TEST_F(ChromeLauncherControllerPerAppTest, GmailMatching) { | 1377 TEST_F(ChromeLauncherControllerTest, GmailMatching) { |
1334 InitLauncherControllerWithBrowser(); | 1378 InitLauncherControllerWithBrowser(); |
1335 | 1379 |
1336 // Create a Gmail browser tab. | 1380 // Create a Gmail browser tab. |
1337 chrome::NewTab(browser()); | 1381 chrome::NewTab(browser()); |
1338 string16 title = ASCIIToUTF16("Test"); | 1382 string16 title = ASCIIToUTF16("Test"); |
1339 NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title); | 1383 NavigateAndCommitActiveTabWithTitle(browser(), GURL(gmail_url), title); |
1340 content::WebContents* content = | 1384 content::WebContents* content = |
1341 browser()->tab_strip_model()->GetActiveWebContents(); | 1385 browser()->tab_strip_model()->GetActiveWebContents(); |
1342 | 1386 |
1343 // Check that the launcher controller does not recognize the running app. | 1387 // Check that the launcher controller does not recognize the running app. |
(...skipping 11 matching lines...) Expand all Loading... |
1355 EXPECT_TRUE(launcher_controller_->ContentCanBeHandledByGmailApp(content)); | 1399 EXPECT_TRUE(launcher_controller_->ContentCanBeHandledByGmailApp(content)); |
1356 | 1400 |
1357 // Check also that the app has detected that properly. | 1401 // Check also that the app has detected that properly. |
1358 ash::LauncherItem item_gmail; | 1402 ash::LauncherItem item_gmail; |
1359 item_gmail.type = ash::TYPE_APP_SHORTCUT; | 1403 item_gmail.type = ash::TYPE_APP_SHORTCUT; |
1360 item_gmail.id = gmail_id; | 1404 item_gmail.id = gmail_id; |
1361 EXPECT_EQ(2U, launcher_controller_->GetApplicationList(item_gmail, 0).size()); | 1405 EXPECT_EQ(2U, launcher_controller_->GetApplicationList(item_gmail, 0).size()); |
1362 } | 1406 } |
1363 | 1407 |
1364 // Tests that the Gmail extension does not match the offline verison. | 1408 // Tests that the Gmail extension does not match the offline verison. |
1365 TEST_F(ChromeLauncherControllerPerAppTest, GmailOfflineMatching) { | 1409 TEST_F(ChromeLauncherControllerTest, GmailOfflineMatching) { |
1366 InitLauncherControllerWithBrowser(); | 1410 InitLauncherControllerWithBrowser(); |
1367 | 1411 |
1368 // Create a Gmail browser tab. | 1412 // Create a Gmail browser tab. |
1369 chrome::NewTab(browser()); | 1413 chrome::NewTab(browser()); |
1370 string16 title = ASCIIToUTF16("Test"); | 1414 string16 title = ASCIIToUTF16("Test"); |
1371 NavigateAndCommitActiveTabWithTitle(browser(), | 1415 NavigateAndCommitActiveTabWithTitle(browser(), |
1372 GURL(offline_gmail_url), | 1416 GURL(offline_gmail_url), |
1373 title); | 1417 title); |
1374 content::WebContents* content = | 1418 content::WebContents* content = |
1375 browser()->tab_strip_model()->GetActiveWebContents(); | 1419 browser()->tab_strip_model()->GetActiveWebContents(); |
1376 | 1420 |
1377 // Installing |extension3_| adds it to the launcher. | 1421 // Installing |extension3_| adds it to the launcher. |
1378 ash::LauncherID gmail_id = model_->next_id(); | 1422 ash::LauncherID gmail_id = model_->next_id(); |
1379 extension_service_->AddExtension(extension3_.get()); | 1423 extension_service_->AddExtension(extension3_.get()); |
1380 EXPECT_EQ(3, model_->item_count()); | 1424 EXPECT_EQ(3, model_->item_count()); |
1381 int gmail_index = model_->ItemIndexByID(gmail_id); | 1425 int gmail_index = model_->ItemIndexByID(gmail_id); |
1382 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[gmail_index].type); | 1426 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[gmail_index].type); |
1383 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension3_->id())); | 1427 EXPECT_TRUE(launcher_controller_->IsAppPinned(extension3_->id())); |
1384 | 1428 |
1385 // The content should not be able to be handled by the app. | 1429 // The content should not be able to be handled by the app. |
1386 EXPECT_FALSE(launcher_controller_->ContentCanBeHandledByGmailApp(content)); | 1430 EXPECT_FALSE(launcher_controller_->ContentCanBeHandledByGmailApp(content)); |
1387 } | 1431 } |
| 1432 |
| 1433 // Verify that the launcher item positions are persisted and restored. |
| 1434 TEST_F(ChromeLauncherControllerTest, PersistLauncherItemPositions) { |
| 1435 InitLauncherController(); |
| 1436 |
| 1437 TestAppTabHelperImpl* app_tab_helper = new TestAppTabHelperImpl; |
| 1438 SetAppTabHelper(app_tab_helper); |
| 1439 |
| 1440 EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT, model_->items()[0].type); |
| 1441 EXPECT_EQ(ash::TYPE_APP_LIST, model_->items()[1].type); |
| 1442 |
| 1443 TabStripModel* tab_strip_model = browser()->tab_strip_model(); |
| 1444 EXPECT_EQ(0, tab_strip_model->count()); |
| 1445 chrome::NewTab(browser()); |
| 1446 chrome::NewTab(browser()); |
| 1447 EXPECT_EQ(2, tab_strip_model->count()); |
| 1448 app_tab_helper->SetAppID(tab_strip_model->GetWebContentsAt(0), "1"); |
| 1449 app_tab_helper->SetAppID(tab_strip_model->GetWebContentsAt(1), "2"); |
| 1450 |
| 1451 EXPECT_FALSE(launcher_controller_->IsAppPinned("1")); |
| 1452 launcher_controller_->PinAppWithID("1"); |
| 1453 EXPECT_TRUE(launcher_controller_->IsAppPinned("1")); |
| 1454 launcher_controller_->PinAppWithID("2"); |
| 1455 |
| 1456 EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT, model_->items()[0].type); |
| 1457 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[1].type); |
| 1458 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[2].type); |
| 1459 EXPECT_EQ(ash::TYPE_APP_LIST, model_->items()[3].type); |
| 1460 |
| 1461 // Move browser shortcut item from index 0 to index 2. |
| 1462 model_->Move(0, 2); |
| 1463 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[0].type); |
| 1464 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[1].type); |
| 1465 EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT, model_->items()[2].type); |
| 1466 EXPECT_EQ(ash::TYPE_APP_LIST, model_->items()[3].type); |
| 1467 |
| 1468 launcher_controller_.reset(); |
| 1469 model_.reset(new ash::LauncherModel); |
| 1470 launcher_controller_.reset( |
| 1471 ChromeLauncherController::CreateInstance(profile(), model_.get())); |
| 1472 app_tab_helper = new TestAppTabHelperImpl; |
| 1473 app_tab_helper->SetAppID(tab_strip_model->GetWebContentsAt(0), "1"); |
| 1474 app_tab_helper->SetAppID(tab_strip_model->GetWebContentsAt(1), "2"); |
| 1475 SetAppTabHelper(app_tab_helper); |
| 1476 |
| 1477 launcher_controller_->Init(); |
| 1478 |
| 1479 // Check LauncherItems are restored after resetting ChromeLauncherController. |
| 1480 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[0].type); |
| 1481 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[1].type); |
| 1482 EXPECT_EQ(ash::TYPE_BROWSER_SHORTCUT, model_->items()[2].type); |
| 1483 EXPECT_EQ(ash::TYPE_APP_LIST, model_->items()[3].type); |
| 1484 } |
| 1485 |
| 1486 // Verifies pinned apps are persisted and restored. |
| 1487 TEST_F(ChromeLauncherControllerTest, PersistPinned) { |
| 1488 InitLauncherControllerWithBrowser(); |
| 1489 size_t initial_size = model_->items().size(); |
| 1490 |
| 1491 TabStripModel* tab_strip_model = browser()->tab_strip_model(); |
| 1492 EXPECT_EQ(1, tab_strip_model->count()); |
| 1493 |
| 1494 TestAppTabHelperImpl* app_tab_helper = new TestAppTabHelperImpl; |
| 1495 app_tab_helper->SetAppID(tab_strip_model->GetWebContentsAt(0), "1"); |
| 1496 SetAppTabHelper(app_tab_helper); |
| 1497 |
| 1498 TestAppIconLoaderImpl* app_icon_loader = new TestAppIconLoaderImpl; |
| 1499 SetAppIconLoader(app_icon_loader); |
| 1500 EXPECT_EQ(0, app_icon_loader->fetch_count()); |
| 1501 |
| 1502 launcher_controller_->PinAppWithID("1"); |
| 1503 ash::LauncherID id = launcher_controller_->GetLauncherIDForAppID("1"); |
| 1504 int app_index = model_->ItemIndexByID(id); |
| 1505 EXPECT_EQ(1, app_icon_loader->fetch_count()); |
| 1506 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[app_index].type); |
| 1507 EXPECT_TRUE(launcher_controller_->IsAppPinned("1")); |
| 1508 EXPECT_FALSE(launcher_controller_->IsAppPinned("0")); |
| 1509 EXPECT_EQ(initial_size + 1, model_->items().size()); |
| 1510 |
| 1511 launcher_controller_.reset(); |
| 1512 model_.reset(new ash::LauncherModel); |
| 1513 launcher_controller_.reset( |
| 1514 ChromeLauncherController::CreateInstance(profile(), model_.get())); |
| 1515 app_tab_helper = new TestAppTabHelperImpl; |
| 1516 app_tab_helper->SetAppID(tab_strip_model->GetWebContentsAt(0), "1"); |
| 1517 SetAppTabHelper(app_tab_helper); |
| 1518 app_icon_loader = new TestAppIconLoaderImpl; |
| 1519 SetAppIconLoader(app_icon_loader); |
| 1520 launcher_controller_->Init(); |
| 1521 |
| 1522 EXPECT_EQ(1, app_icon_loader->fetch_count()); |
| 1523 ASSERT_EQ(initial_size + 1, model_->items().size()); |
| 1524 EXPECT_TRUE(launcher_controller_->IsAppPinned("1")); |
| 1525 EXPECT_FALSE(launcher_controller_->IsAppPinned("0")); |
| 1526 EXPECT_EQ(ash::TYPE_APP_SHORTCUT, model_->items()[app_index].type); |
| 1527 |
| 1528 launcher_controller_->UnpinAppsWithID("1"); |
| 1529 ASSERT_EQ(initial_size, model_->items().size()); |
| 1530 } |
OLD | NEW |