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 "chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.h" | 5 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller_impl.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <algorithm> | 9 #include <algorithm> |
10 #include <map> | 10 #include <map> |
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
266 const ItemSelectedCallback& callback) override { | 266 const ItemSelectedCallback& callback) override { |
267 callback.Run(ash::SHELF_ACTION_WINDOW_ACTIVATED, base::nullopt); | 267 callback.Run(ash::SHELF_ACTION_WINDOW_ACTIVATED, base::nullopt); |
268 } | 268 } |
269 void ExecuteCommand(uint32_t command_id, int32_t event_flags) override {} | 269 void ExecuteCommand(uint32_t command_id, int32_t event_flags) override {} |
270 void Close() override {} | 270 void Close() override {} |
271 | 271 |
272 private: | 272 private: |
273 DISALLOW_COPY_AND_ASSIGN(TestV2AppLauncherItemController); | 273 DISALLOW_COPY_AND_ASSIGN(TestV2AppLauncherItemController); |
274 }; | 274 }; |
275 | 275 |
| 276 // A test ShelfController implementation that tracks alignment and auto-hide. |
| 277 class TestShelfController : public ash::mojom::ShelfController { |
| 278 public: |
| 279 TestShelfController() : binding_(this) {} |
| 280 ~TestShelfController() override {} |
| 281 |
| 282 ash::ShelfAlignment alignment() const { return alignment_; } |
| 283 ash::ShelfAutoHideBehavior auto_hide() const { return auto_hide_; } |
| 284 |
| 285 size_t alignment_change_count() const { return alignment_change_count_; } |
| 286 size_t auto_hide_change_count() const { return auto_hide_change_count_; } |
| 287 |
| 288 ash::mojom::ShelfControllerPtr CreateInterfacePtrAndBind() { |
| 289 return binding_.CreateInterfacePtrAndBind(); |
| 290 } |
| 291 |
| 292 // ash::mojom::ShelfController: |
| 293 void AddObserver( |
| 294 ash::mojom::ShelfObserverAssociatedPtrInfo observer) override { |
| 295 observer_.Bind(std::move(observer)); |
| 296 } |
| 297 void SetAlignment(ash::ShelfAlignment alignment, |
| 298 int64_t display_id) override { |
| 299 alignment_change_count_++; |
| 300 alignment_ = alignment; |
| 301 observer_->OnAlignmentChanged(alignment_, display_id); |
| 302 } |
| 303 void SetAutoHideBehavior(ash::ShelfAutoHideBehavior auto_hide, |
| 304 int64_t display_id) override { |
| 305 auto_hide_change_count_++; |
| 306 auto_hide_ = auto_hide; |
| 307 observer_->OnAutoHideBehaviorChanged(auto_hide_, display_id); |
| 308 } |
| 309 void PinItem( |
| 310 const ash::ShelfItem& item, |
| 311 ash::mojom::ShelfItemDelegateAssociatedPtrInfo delegate) override {} |
| 312 void UnpinItem(const std::string& app_id) override {} |
| 313 void SetItemImage(const std::string& app_id, const SkBitmap& image) override { |
| 314 } |
| 315 |
| 316 private: |
| 317 ash::ShelfAlignment alignment_ = ash::SHELF_ALIGNMENT_BOTTOM_LOCKED; |
| 318 ash::ShelfAutoHideBehavior auto_hide_ = ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN; |
| 319 |
| 320 size_t alignment_change_count_ = 0; |
| 321 size_t auto_hide_change_count_ = 0; |
| 322 |
| 323 ash::mojom::ShelfObserverAssociatedPtr observer_; |
| 324 mojo::Binding<ash::mojom::ShelfController> binding_; |
| 325 |
| 326 DISALLOW_COPY_AND_ASSIGN(TestShelfController); |
| 327 }; |
| 328 |
276 // A callback that does nothing after shelf item selection handling. | 329 // A callback that does nothing after shelf item selection handling. |
277 void NoopCallback(ash::ShelfAction action, base::Optional<ash::MenuItemList>) {} | 330 void NoopCallback(ash::ShelfAction action, base::Optional<ash::MenuItemList>) {} |
278 | 331 |
279 // Simulates selection of the shelf item. | 332 // Simulates selection of the shelf item. |
280 void SelectItem(ash::ShelfItemDelegate* delegate) { | 333 void SelectItem(ash::ShelfItemDelegate* delegate) { |
281 std::unique_ptr<ui::Event> event = base::MakeUnique<ui::MouseEvent>( | 334 std::unique_ptr<ui::Event> event = base::MakeUnique<ui::MouseEvent>( |
282 ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), ui::EventTimeForNow(), | 335 ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), ui::EventTimeForNow(), |
283 ui::EF_NONE, 0); | 336 ui::EF_NONE, 0); |
284 delegate->ItemSelected(std::move(event), display::kInvalidDisplayId, | 337 delegate->ItemSelected(std::move(event), display::kInvalidDisplayId, |
285 ash::LAUNCH_FROM_UNKNOWN, base::Bind(&NoopCallback)); | 338 ash::LAUNCH_FROM_UNKNOWN, base::Bind(&NoopCallback)); |
286 } | 339 } |
287 | 340 |
288 } // namespace | 341 } // namespace |
289 | 342 |
| 343 // A test ChromeLauncherControllerImpl subclass that uses TestShelfController. |
| 344 class TestChromeLauncherControllerImpl : public ChromeLauncherControllerImpl { |
| 345 public: |
| 346 TestChromeLauncherControllerImpl(Profile* profile, ash::ShelfModel* model) |
| 347 : ChromeLauncherControllerImpl(profile, model) {} |
| 348 |
| 349 // ChromeLauncherControllerImpl: |
| 350 using ChromeLauncherControllerImpl::ReleaseProfile; |
| 351 bool ConnectToShelfController() override { |
| 352 // Set the shelf controller pointer to a test instance; this is run in init. |
| 353 if (!shelf_controller_.is_bound()) |
| 354 shelf_controller_ = test_shelf_controller_.CreateInterfacePtrAndBind(); |
| 355 return true; |
| 356 } |
| 357 |
| 358 TestShelfController* test_shelf_controller() { |
| 359 return &test_shelf_controller_; |
| 360 } |
| 361 |
| 362 private: |
| 363 TestShelfController test_shelf_controller_; |
| 364 |
| 365 DISALLOW_COPY_AND_ASSIGN(TestChromeLauncherControllerImpl); |
| 366 }; |
| 367 |
| 368 // A shell delegate that owns a ChromeLauncherController, like production. |
| 369 // TODO(msw): Refine ChromeLauncherControllerImpl lifetime management. |
| 370 // TODO(msw): Avoid relying on TestShellDelegate's ShelfInitializer. |
| 371 class ChromeLauncherTestShellDelegate : public ash::test::TestShellDelegate { |
| 372 public: |
| 373 ChromeLauncherTestShellDelegate() {} |
| 374 |
| 375 // Create a ChromeLauncherControllerImpl instance. |
| 376 ChromeLauncherControllerImpl* CreateLauncherController(Profile* profile) { |
| 377 launcher_controller_ = base::MakeUnique<ChromeLauncherControllerImpl>( |
| 378 profile, ash::Shell::Get()->shelf_model()); |
| 379 return launcher_controller_.get(); |
| 380 } |
| 381 |
| 382 // Create a TestChromeLauncherControllerImpl instance. |
| 383 TestChromeLauncherControllerImpl* CreateTestLauncherController( |
| 384 Profile* profile) { |
| 385 auto controller = base::MakeUnique<TestChromeLauncherControllerImpl>( |
| 386 profile, ash::Shell::Get()->shelf_model()); |
| 387 TestChromeLauncherControllerImpl* controller_weak = controller.get(); |
| 388 launcher_controller_ = std::move(controller); |
| 389 launcher_controller_->Init(); |
| 390 return controller_weak; |
| 391 } |
| 392 |
| 393 // ash::test::TestShellDelegate: |
| 394 void ShelfShutdown() override { launcher_controller_.reset(); } |
| 395 |
| 396 private: |
| 397 std::unique_ptr<ChromeLauncherControllerImpl> launcher_controller_; |
| 398 |
| 399 DISALLOW_COPY_AND_ASSIGN(ChromeLauncherTestShellDelegate); |
| 400 }; |
| 401 |
290 class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest { | 402 class ChromeLauncherControllerImplTest : public BrowserWithTestWindowTest { |
291 protected: | 403 protected: |
292 ChromeLauncherControllerImplTest() | 404 ChromeLauncherControllerImplTest() |
293 : BrowserWithTestWindowTest(Browser::TYPE_TABBED, false) {} | 405 : BrowserWithTestWindowTest(Browser::TYPE_TABBED, false) {} |
294 | 406 |
295 ~ChromeLauncherControllerImplTest() override {} | 407 ~ChromeLauncherControllerImplTest() override {} |
296 | 408 |
297 void SetUp() override { | 409 void SetUp() override { |
298 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 410 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
299 command_line->AppendSwitch(switches::kUseFirstDisplayAsInternal); | 411 command_line->AppendSwitch(switches::kUseFirstDisplayAsInternal); |
300 | 412 |
301 app_list::AppListSyncableServiceFactory::SetUseInTesting(); | 413 app_list::AppListSyncableServiceFactory::SetUseInTesting(); |
302 | 414 |
| 415 shell_delegate_ = new ChromeLauncherTestShellDelegate(); |
| 416 ash_test_helper()->set_test_shell_delegate(shell_delegate_); |
| 417 |
303 BrowserWithTestWindowTest::SetUp(); | 418 BrowserWithTestWindowTest::SetUp(); |
304 | 419 |
305 if (!profile_manager_) { | 420 if (!profile_manager_) { |
306 profile_manager_.reset( | 421 profile_manager_.reset( |
307 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); | 422 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); |
308 ASSERT_TRUE(profile_manager_->SetUp()); | 423 ASSERT_TRUE(profile_manager_->SetUp()); |
309 } | 424 } |
310 | 425 |
311 model_ = ash::Shell::Get()->shelf_controller()->model(); | 426 model_ = ash::Shell::Get()->shelf_controller()->model(); |
312 model_observer_.reset(new TestShelfModelObserver); | 427 model_observer_.reset(new TestShelfModelObserver); |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
478 return base::WrapUnique( | 593 return base::WrapUnique( |
479 CreateBrowser(profile, Browser::TYPE_TABBED, false, browser_window)); | 594 CreateBrowser(profile, Browser::TYPE_TABBED, false, browser_window)); |
480 } | 595 } |
481 | 596 |
482 void AddAppListLauncherItem() { | 597 void AddAppListLauncherItem() { |
483 ash::ShelfItem app_list; | 598 ash::ShelfItem app_list; |
484 app_list.type = ash::TYPE_APP_LIST; | 599 app_list.type = ash::TYPE_APP_LIST; |
485 model_->Add(app_list); | 600 model_->Add(app_list); |
486 } | 601 } |
487 | 602 |
488 // Create a launcher controller instance and register it as the ShelfDelegate. | 603 // Create a launcher controller instance, owned by the test shell delegate. |
489 // Returns a pointer to the uninitialized controller, which is owned by Shell. | 604 // Returns a pointer to the uninitialized controller. |
490 ChromeLauncherControllerImpl* CreateLauncherController() { | 605 ChromeLauncherControllerImpl* CreateLauncherController() { |
491 // Shell owns ChromeLauncherController as its ShelfDelegate. The lifetime | 606 launcher_controller_ = shell_delegate_->CreateLauncherController(profile()); |
492 // of this instance should match production behavior as closely as possible. | |
493 DCHECK(!ChromeLauncherController::instance()); | |
494 std::unique_ptr<ChromeLauncherControllerImpl> launcher_controller = | |
495 base::MakeUnique<ChromeLauncherControllerImpl>(profile(), model_); | |
496 launcher_controller_ = launcher_controller.get(); | |
497 ash::test::ShellTestApi().SetShelfDelegate(std::move(launcher_controller)); | |
498 return launcher_controller_; | 607 return launcher_controller_; |
499 } | 608 } |
500 | 609 |
501 // Create and initialize the controller. | 610 // Create and initialize the controller, owned by the test shell delegate. |
502 // Returns a pointer to the initialized controller, which is owned by Shell. | |
503 void InitLauncherController() { CreateLauncherController()->Init(); } | 611 void InitLauncherController() { CreateLauncherController()->Init(); } |
504 | 612 |
505 // Create and initialize the controller; create a tab and show the browser. | 613 // Create and initialize the controller; create a tab and show the browser. |
506 void InitLauncherControllerWithBrowser() { | 614 void InitLauncherControllerWithBrowser() { |
507 InitLauncherController(); | 615 InitLauncherController(); |
508 chrome::NewTab(browser()); | 616 chrome::NewTab(browser()); |
509 browser()->window()->Show(); | 617 browser()->window()->Show(); |
510 } | 618 } |
511 | 619 |
512 // Destroy Shell's controller instance and clear the local pointer. | 620 // Destroy the launcher controller instance and clear the local pointer. |
513 void ResetLauncherController() { | 621 void ResetLauncherController() { |
514 launcher_controller_ = nullptr; | 622 launcher_controller_ = nullptr; |
515 ash::test::ShellTestApi().SetShelfDelegate(nullptr); | 623 shell_delegate_->ShelfShutdown(); |
516 } | 624 } |
517 | 625 |
518 // Destroy and recreate the controller; clear and reinitialize the ShelfModel. | 626 // Destroy and recreate the controller; clear and reinitialize the ShelfModel. |
519 // Returns a pointer to the uninitialized controller, which is owned by Shell. | 627 // Returns a pointer to the uninitialized controller, owned by shell delegate. |
520 // TODO(msw): This does not accurately represent ChromeLauncherControllerImpl | 628 // TODO(msw): This does not accurately represent ChromeLauncherControllerImpl |
521 // lifetime or usage in production, and does not accurately simulate restarts. | 629 // lifetime or usage in production, and does not accurately simulate restarts. |
522 ChromeLauncherControllerImpl* RecreateLauncherController() { | 630 ChromeLauncherControllerImpl* RecreateLauncherController() { |
523 // Destroy any existing controller first; only one may exist at a time. | 631 // Destroy any existing controller first; only one may exist at a time. |
524 ResetLauncherController(); | 632 ResetLauncherController(); |
525 while (model_->item_count() > 0) | 633 while (model_->item_count() > 0) |
526 model_->RemoveItemAt(0); | 634 model_->RemoveItemAt(0); |
527 AddAppListLauncherItem(); | 635 AddAppListLauncherItem(); |
528 return CreateLauncherController(); | 636 return CreateLauncherController(); |
529 } | 637 } |
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
932 scoped_refptr<Extension> extension5_; | 1040 scoped_refptr<Extension> extension5_; |
933 scoped_refptr<Extension> extension6_; | 1041 scoped_refptr<Extension> extension6_; |
934 scoped_refptr<Extension> extension7_; | 1042 scoped_refptr<Extension> extension7_; |
935 scoped_refptr<Extension> extension8_; | 1043 scoped_refptr<Extension> extension8_; |
936 scoped_refptr<Extension> extension_platform_app_; | 1044 scoped_refptr<Extension> extension_platform_app_; |
937 scoped_refptr<Extension> arc_support_host_; | 1045 scoped_refptr<Extension> arc_support_host_; |
938 | 1046 |
939 ArcAppTest arc_test_; | 1047 ArcAppTest arc_test_; |
940 bool auto_start_arc_test_ = false; | 1048 bool auto_start_arc_test_ = false; |
941 ChromeLauncherControllerImpl* launcher_controller_ = nullptr; | 1049 ChromeLauncherControllerImpl* launcher_controller_ = nullptr; |
| 1050 ChromeLauncherTestShellDelegate* shell_delegate_ = nullptr; |
942 std::unique_ptr<TestShelfModelObserver> model_observer_; | 1051 std::unique_ptr<TestShelfModelObserver> model_observer_; |
943 ash::ShelfModel* model_ = nullptr; | 1052 ash::ShelfModel* model_ = nullptr; |
944 std::unique_ptr<TestingProfileManager> profile_manager_; | 1053 std::unique_ptr<TestingProfileManager> profile_manager_; |
945 | 1054 |
946 // |item_delegate_manager_| owns |test_controller_|. | 1055 // |item_delegate_manager_| owns |test_controller_|. |
947 ash::ShelfItemDelegate* test_controller_ = nullptr; | 1056 ash::ShelfItemDelegate* test_controller_ = nullptr; |
948 | 1057 |
949 ExtensionService* extension_service_ = nullptr; | 1058 ExtensionService* extension_service_ = nullptr; |
950 | 1059 |
951 app_list::AppListSyncableService* app_service_ = nullptr; | 1060 app_list::AppListSyncableService* app_service_ = nullptr; |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1101 | 1210 |
1102 // Initialize the UserManager singleton to a fresh FakeUserManager instance. | 1211 // Initialize the UserManager singleton to a fresh FakeUserManager instance. |
1103 user_manager_enabler_.reset(new chromeos::ScopedUserManagerEnabler( | 1212 user_manager_enabler_.reset(new chromeos::ScopedUserManagerEnabler( |
1104 new chromeos::FakeChromeUserManager)); | 1213 new chromeos::FakeChromeUserManager)); |
1105 | 1214 |
1106 // Initialize the WallpaperManager singleton. | 1215 // Initialize the WallpaperManager singleton. |
1107 chromeos::WallpaperManager::Initialize(); | 1216 chromeos::WallpaperManager::Initialize(); |
1108 | 1217 |
1109 // Initialize the rest. | 1218 // Initialize the rest. |
1110 ChromeLauncherControllerImplTest::SetUp(); | 1219 ChromeLauncherControllerImplTest::SetUp(); |
1111 | |
1112 // Get some base objects. | |
1113 shell_delegate_ = static_cast<ash::test::TestShellDelegate*>( | |
1114 ash::Shell::Get()->shell_delegate()); | |
1115 shell_delegate_->set_multi_profiles_enabled(true); | 1220 shell_delegate_->set_multi_profiles_enabled(true); |
1116 } | 1221 } |
1117 | 1222 |
1118 void TearDown() override { | 1223 void TearDown() override { |
1119 ChromeLauncherControllerImplTest::TearDown(); | 1224 ChromeLauncherControllerImplTest::TearDown(); |
1120 user_manager_enabler_.reset(); | 1225 user_manager_enabler_.reset(); |
1121 for (ProfileToNameMap::iterator it = created_profiles_.begin(); | 1226 for (ProfileToNameMap::iterator it = created_profiles_.begin(); |
1122 it != created_profiles_.end(); ++it) | 1227 it != created_profiles_.end(); ++it) |
1123 profile_manager_->DeleteTestingProfile(it->second); | 1228 profile_manager_->DeleteTestingProfile(it->second); |
1124 chromeos::WallpaperManager::Shutdown(); | 1229 chromeos::WallpaperManager::Shutdown(); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1189 // this is only usable with a single v1 application. | 1294 // this is only usable with a single v1 application. |
1190 V1App* CreateRunningV1App(Profile* profile, | 1295 V1App* CreateRunningV1App(Profile* profile, |
1191 const std::string& app_name, | 1296 const std::string& app_name, |
1192 const std::string& url) { | 1297 const std::string& url) { |
1193 V1App* v1_app = new V1App(profile, app_name); | 1298 V1App* v1_app = new V1App(profile, app_name); |
1194 NavigateAndCommitActiveTabWithTitle(v1_app->browser(), GURL(url), | 1299 NavigateAndCommitActiveTabWithTitle(v1_app->browser(), GURL(url), |
1195 base::string16()); | 1300 base::string16()); |
1196 return v1_app; | 1301 return v1_app; |
1197 } | 1302 } |
1198 | 1303 |
1199 ash::test::TestShellDelegate* shell_delegate() { return shell_delegate_; } | |
1200 | |
1201 // Override BrowserWithTestWindowTest: | 1304 // Override BrowserWithTestWindowTest: |
1202 TestingProfile* CreateProfile() override { | 1305 TestingProfile* CreateProfile() override { |
1203 return CreateMultiUserProfile("user1"); | 1306 return CreateMultiUserProfile("user1"); |
1204 } | 1307 } |
1205 void DestroyProfile(TestingProfile* profile) override { | 1308 void DestroyProfile(TestingProfile* profile) override { |
1206 // Delete the profile through our profile manager. | 1309 // Delete the profile through our profile manager. |
1207 ProfileToNameMap::iterator it = created_profiles_.find(profile); | 1310 ProfileToNameMap::iterator it = created_profiles_.find(profile); |
1208 DCHECK(it != created_profiles_.end()); | 1311 DCHECK(it != created_profiles_.end()); |
1209 profile_manager_->DeleteTestingProfile(it->second); | 1312 profile_manager_->DeleteTestingProfile(it->second); |
1210 created_profiles_.erase(it); | 1313 created_profiles_.erase(it); |
1211 } | 1314 } |
1212 | 1315 |
1213 private: | 1316 private: |
1214 typedef std::map<Profile*, std::string> ProfileToNameMap; | 1317 typedef std::map<Profile*, std::string> ProfileToNameMap; |
1215 TestingProfileManager* profile_manager() { return profile_manager_.get(); } | 1318 TestingProfileManager* profile_manager() { return profile_manager_.get(); } |
1216 | 1319 |
1217 chromeos::FakeChromeUserManager* GetFakeUserManager() { | 1320 chromeos::FakeChromeUserManager* GetFakeUserManager() { |
1218 return static_cast<chromeos::FakeChromeUserManager*>( | 1321 return static_cast<chromeos::FakeChromeUserManager*>( |
1219 user_manager::UserManager::Get()); | 1322 user_manager::UserManager::Get()); |
1220 } | 1323 } |
1221 | 1324 |
1222 std::unique_ptr<chromeos::ScopedUserManagerEnabler> user_manager_enabler_; | 1325 std::unique_ptr<chromeos::ScopedUserManagerEnabler> user_manager_enabler_; |
1223 | 1326 |
1224 ash::test::TestShellDelegate* shell_delegate_; | |
1225 | |
1226 ProfileToNameMap created_profiles_; | 1327 ProfileToNameMap created_profiles_; |
1227 | 1328 |
1228 DISALLOW_COPY_AND_ASSIGN( | 1329 DISALLOW_COPY_AND_ASSIGN( |
1229 MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest); | 1330 MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest); |
1230 }; | 1331 }; |
1231 | 1332 |
1232 class ChromeLauncherControllerImplMultiProfileWithArcTest | 1333 class ChromeLauncherControllerImplMultiProfileWithArcTest |
1233 : public MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest
, // NOLINT(whitespace/line_length) | 1334 : public MultiProfileMultiBrowserShelfLayoutChromeLauncherControllerImplTest
, // NOLINT(whitespace/line_length) |
1234 public ::testing::WithParamInterface<bool> { | 1335 public ::testing::WithParamInterface<bool> { |
1235 protected: | 1336 protected: |
(...skipping 2902 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4138 // Pinned state should not change. | 4239 // Pinned state should not change. |
4139 EXPECT_EQ("AppList, Chrome, App1, App2", GetPinnedAppStatus()); | 4240 EXPECT_EQ("AppList, Chrome, App1, App2", GetPinnedAppStatus()); |
4140 launcher_controller_->UnpinAppWithID(extension2_->id()); | 4241 launcher_controller_->UnpinAppWithID(extension2_->id()); |
4141 EXPECT_EQ("AppList, Chrome, App1", GetPinnedAppStatus()); | 4242 EXPECT_EQ("AppList, Chrome, App1", GetPinnedAppStatus()); |
4142 | 4243 |
4143 // Resume syncing and sync information overrides local copy. | 4244 // Resume syncing and sync information overrides local copy. |
4144 StartAppSyncService(copy_sync_list); | 4245 StartAppSyncService(copy_sync_list); |
4145 EXPECT_EQ("AppList, Chrome, App1, App2", GetPinnedAppStatus()); | 4246 EXPECT_EQ("AppList, Chrome, App1, App2", GetPinnedAppStatus()); |
4146 } | 4247 } |
4147 | 4248 |
4148 // A test ShelfController implementation that tracks alignment and auto-hide. | |
4149 class TestShelfController : public ash::mojom::ShelfController { | |
4150 public: | |
4151 TestShelfController() : binding_(this) {} | |
4152 ~TestShelfController() override {} | |
4153 | |
4154 ash::ShelfAlignment alignment() const { return alignment_; } | |
4155 ash::ShelfAutoHideBehavior auto_hide() const { return auto_hide_; } | |
4156 | |
4157 size_t alignment_change_count() const { return alignment_change_count_; } | |
4158 size_t auto_hide_change_count() const { return auto_hide_change_count_; } | |
4159 | |
4160 ash::mojom::ShelfControllerPtr CreateInterfacePtrAndBind() { | |
4161 return binding_.CreateInterfacePtrAndBind(); | |
4162 } | |
4163 | |
4164 // ash::mojom::ShelfController: | |
4165 void AddObserver( | |
4166 ash::mojom::ShelfObserverAssociatedPtrInfo observer) override { | |
4167 observer_.Bind(std::move(observer)); | |
4168 } | |
4169 void SetAlignment(ash::ShelfAlignment alignment, | |
4170 int64_t display_id) override { | |
4171 alignment_change_count_++; | |
4172 alignment_ = alignment; | |
4173 observer_->OnAlignmentChanged(alignment_, display_id); | |
4174 } | |
4175 void SetAutoHideBehavior(ash::ShelfAutoHideBehavior auto_hide, | |
4176 int64_t display_id) override { | |
4177 auto_hide_change_count_++; | |
4178 auto_hide_ = auto_hide; | |
4179 observer_->OnAutoHideBehaviorChanged(auto_hide_, display_id); | |
4180 } | |
4181 void PinItem( | |
4182 const ash::ShelfItem& item, | |
4183 ash::mojom::ShelfItemDelegateAssociatedPtrInfo delegate) override {} | |
4184 void UnpinItem(const std::string& app_id) override {} | |
4185 void SetItemImage(const std::string& app_id, const SkBitmap& image) override { | |
4186 } | |
4187 | |
4188 private: | |
4189 ash::ShelfAlignment alignment_ = ash::SHELF_ALIGNMENT_BOTTOM_LOCKED; | |
4190 ash::ShelfAutoHideBehavior auto_hide_ = ash::SHELF_AUTO_HIDE_ALWAYS_HIDDEN; | |
4191 | |
4192 size_t alignment_change_count_ = 0; | |
4193 size_t auto_hide_change_count_ = 0; | |
4194 | |
4195 ash::mojom::ShelfObserverAssociatedPtr observer_; | |
4196 mojo::Binding<ash::mojom::ShelfController> binding_; | |
4197 | |
4198 DISALLOW_COPY_AND_ASSIGN(TestShelfController); | |
4199 }; | |
4200 | |
4201 // A test ChromeLauncherControllerImpl sublcass that uses TestShelfController. | |
4202 class TestChromeLauncherControllerImpl : public ChromeLauncherControllerImpl { | |
4203 public: | |
4204 TestChromeLauncherControllerImpl(Profile* profile, ash::ShelfModel* model) | |
4205 : ChromeLauncherControllerImpl(profile, model) {} | |
4206 | |
4207 // ChromeLauncherControllerImpl: | |
4208 using ChromeLauncherControllerImpl::ReleaseProfile; | |
4209 bool ConnectToShelfController() override { | |
4210 // Set the shelf controller pointer to a test instance; this is run in init. | |
4211 if (!shelf_controller_.is_bound()) | |
4212 shelf_controller_ = test_shelf_controller_.CreateInterfacePtrAndBind(); | |
4213 return true; | |
4214 } | |
4215 | |
4216 TestShelfController* test_shelf_controller() { | |
4217 return &test_shelf_controller_; | |
4218 } | |
4219 | |
4220 private: | |
4221 TestShelfController test_shelf_controller_; | |
4222 | |
4223 DISALLOW_COPY_AND_ASSIGN(TestChromeLauncherControllerImpl); | |
4224 }; | |
4225 | |
4226 using ChromeLauncherControllerImplPrefTest = BrowserWithTestWindowTest; | |
4227 | |
4228 // Tests that shelf profile preferences are loaded on login. | 4249 // Tests that shelf profile preferences are loaded on login. |
4229 TEST_F(ChromeLauncherControllerImplPrefTest, PrefsLoadedOnLogin) { | 4250 TEST_F(ChromeLauncherControllerImplTest, PrefsLoadedOnLogin) { |
4230 PrefService* prefs = profile()->GetTestingPrefService(); | 4251 PrefService* prefs = profile()->GetTestingPrefService(); |
4231 prefs->SetString(prefs::kShelfAlignmentLocal, "Left"); | 4252 prefs->SetString(prefs::kShelfAlignmentLocal, "Left"); |
4232 prefs->SetString(prefs::kShelfAlignment, "Left"); | 4253 prefs->SetString(prefs::kShelfAlignment, "Left"); |
4233 prefs->SetString(prefs::kShelfAutoHideBehaviorLocal, "Always"); | 4254 prefs->SetString(prefs::kShelfAutoHideBehaviorLocal, "Always"); |
4234 prefs->SetString(prefs::kShelfAutoHideBehavior, "Always"); | 4255 prefs->SetString(prefs::kShelfAutoHideBehavior, "Always"); |
4235 | 4256 |
4236 ash::ShelfModel* model = ash::Shell::Get()->shelf_controller()->model(); | 4257 TestChromeLauncherControllerImpl* test_launcher_controller = |
4237 TestChromeLauncherControllerImpl test_launcher_controller(profile(), model); | 4258 shell_delegate_->CreateTestLauncherController(profile()); |
4238 test_launcher_controller.Init(); | |
4239 | 4259 |
4240 // Simulate login for the test controller. | 4260 // Simulate login for the test controller. |
4241 test_launcher_controller.ReleaseProfile(); | 4261 test_launcher_controller->ReleaseProfile(); |
4242 test_launcher_controller.AttachProfile(profile()); | 4262 test_launcher_controller->AttachProfile(profile()); |
4243 base::RunLoop().RunUntilIdle(); | 4263 base::RunLoop().RunUntilIdle(); |
4244 | 4264 |
4245 TestShelfController* shelf_controller = | 4265 TestShelfController* shelf_controller = |
4246 test_launcher_controller.test_shelf_controller(); | 4266 test_launcher_controller->test_shelf_controller(); |
4247 ASSERT_TRUE(shelf_controller); | 4267 ASSERT_TRUE(shelf_controller); |
4248 EXPECT_EQ(ash::SHELF_ALIGNMENT_LEFT, shelf_controller->alignment()); | 4268 EXPECT_EQ(ash::SHELF_ALIGNMENT_LEFT, shelf_controller->alignment()); |
4249 EXPECT_EQ(1u, shelf_controller->alignment_change_count()); | 4269 EXPECT_EQ(1u, shelf_controller->alignment_change_count()); |
4250 EXPECT_EQ(ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS, | 4270 EXPECT_EQ(ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS, |
4251 shelf_controller->auto_hide()); | 4271 shelf_controller->auto_hide()); |
4252 EXPECT_EQ(1u, shelf_controller->auto_hide_change_count()); | 4272 EXPECT_EQ(1u, shelf_controller->auto_hide_change_count()); |
4253 } | 4273 } |
4254 | 4274 |
4255 // Tests that the shelf controller's changes are not wastefully echoed back. | 4275 // Tests that the shelf controller's changes are not wastefully echoed back. |
4256 TEST_F(ChromeLauncherControllerImplPrefTest, DoNotEchoShelfControllerChanges) { | 4276 TEST_F(ChromeLauncherControllerImplTest, DoNotEchoShelfControllerChanges) { |
4257 ash::ShelfModel* model = ash::Shell::Get()->shelf_controller()->model(); | 4277 TestChromeLauncherControllerImpl* test_launcher_controller = |
4258 TestChromeLauncherControllerImpl test_launcher_controller(profile(), model); | 4278 shell_delegate_->CreateTestLauncherController(profile()); |
4259 test_launcher_controller.Init(); | |
4260 | 4279 |
4261 // Simulate login for the test controller. | 4280 // Simulate login for the test controller. |
4262 test_launcher_controller.ReleaseProfile(); | 4281 test_launcher_controller->ReleaseProfile(); |
4263 test_launcher_controller.AttachProfile(profile()); | 4282 test_launcher_controller->AttachProfile(profile()); |
4264 base::RunLoop().RunUntilIdle(); | 4283 base::RunLoop().RunUntilIdle(); |
4265 | 4284 |
4266 TestShelfController* shelf_controller = | 4285 TestShelfController* shelf_controller = |
4267 test_launcher_controller.test_shelf_controller(); | 4286 test_launcher_controller->test_shelf_controller(); |
4268 ASSERT_TRUE(shelf_controller); | 4287 ASSERT_TRUE(shelf_controller); |
4269 EXPECT_EQ(ash::SHELF_ALIGNMENT_BOTTOM, shelf_controller->alignment()); | 4288 EXPECT_EQ(ash::SHELF_ALIGNMENT_BOTTOM, shelf_controller->alignment()); |
4270 EXPECT_EQ(1u, shelf_controller->alignment_change_count()); | 4289 EXPECT_EQ(1u, shelf_controller->alignment_change_count()); |
4271 EXPECT_EQ(ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER, shelf_controller->auto_hide()); | 4290 EXPECT_EQ(ash::SHELF_AUTO_HIDE_BEHAVIOR_NEVER, shelf_controller->auto_hide()); |
4272 EXPECT_EQ(1u, shelf_controller->auto_hide_change_count()); | 4291 EXPECT_EQ(1u, shelf_controller->auto_hide_change_count()); |
4273 | 4292 |
4274 // Changing settings via the shelf controller causes the launcher controller | 4293 // Changing settings via the shelf controller causes the launcher controller |
4275 // to update profile prefs. The launcher controller's prefs observation should | 4294 // to update profile prefs. The launcher controller's prefs observation should |
4276 // not cause those same changes to be echoed back to the shelf controller. | 4295 // not cause those same changes to be echoed back to the shelf controller. |
4277 int64_t display_id = display::Screen::GetScreen()->GetPrimaryDisplay().id(); | 4296 int64_t display_id = display::Screen::GetScreen()->GetPrimaryDisplay().id(); |
4278 shelf_controller->SetAlignment(ash::SHELF_ALIGNMENT_LEFT, display_id); | 4297 shelf_controller->SetAlignment(ash::SHELF_ALIGNMENT_LEFT, display_id); |
4279 EXPECT_EQ(2u, shelf_controller->alignment_change_count()); | 4298 EXPECT_EQ(2u, shelf_controller->alignment_change_count()); |
4280 shelf_controller->SetAutoHideBehavior(ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS, | 4299 shelf_controller->SetAutoHideBehavior(ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS, |
4281 display_id); | 4300 display_id); |
4282 EXPECT_EQ(2u, shelf_controller->auto_hide_change_count()); | 4301 EXPECT_EQ(2u, shelf_controller->auto_hide_change_count()); |
4283 base::RunLoop().RunUntilIdle(); | 4302 base::RunLoop().RunUntilIdle(); |
4284 | 4303 |
4285 EXPECT_EQ(ash::SHELF_ALIGNMENT_LEFT, shelf_controller->alignment()); | 4304 EXPECT_EQ(ash::SHELF_ALIGNMENT_LEFT, shelf_controller->alignment()); |
4286 EXPECT_EQ(2u, shelf_controller->alignment_change_count()); | 4305 EXPECT_EQ(2u, shelf_controller->alignment_change_count()); |
4287 EXPECT_EQ(ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS, | 4306 EXPECT_EQ(ash::SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS, |
4288 shelf_controller->auto_hide()); | 4307 shelf_controller->auto_hide()); |
4289 EXPECT_EQ(2u, shelf_controller->auto_hide_change_count()); | 4308 EXPECT_EQ(2u, shelf_controller->auto_hide_change_count()); |
4290 | 4309 |
4291 PrefService* prefs = profile()->GetTestingPrefService(); | 4310 PrefService* prefs = profile()->GetTestingPrefService(); |
4292 EXPECT_EQ("Left", prefs->GetString(prefs::kShelfAlignmentLocal)); | 4311 EXPECT_EQ("Left", prefs->GetString(prefs::kShelfAlignmentLocal)); |
4293 EXPECT_EQ("Left", prefs->GetString(prefs::kShelfAlignment)); | 4312 EXPECT_EQ("Left", prefs->GetString(prefs::kShelfAlignment)); |
4294 EXPECT_EQ("Always", prefs->GetString(prefs::kShelfAutoHideBehaviorLocal)); | 4313 EXPECT_EQ("Always", prefs->GetString(prefs::kShelfAutoHideBehaviorLocal)); |
4295 EXPECT_EQ("Always", prefs->GetString(prefs::kShelfAutoHideBehavior)); | 4314 EXPECT_EQ("Always", prefs->GetString(prefs::kShelfAutoHideBehavior)); |
4296 } | 4315 } |
OLD | NEW |