browser_command_controller_unittest.cc revision 9ab5563a3196760eb381d102cbb2bc0f7abc6a50
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_command_controller.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/browser_process.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/command_updater.h"
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/profile_destroyer.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h"
129ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/profiles/profiles_state.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h"
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser_commands.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_window_state.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/browser_with_test_window_test.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/test_browser_window.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_browser_process.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_profile_manager.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/native_web_keyboard_event.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/keycodes/keyboard_codes.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef BrowserWithTestWindowTest BrowserCommandControllerTest;
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest, IsReservedCommandOrKey) {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // F1-3 keys are reserved Chrome accelerators on Chrome OS.
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_BACK, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                ui::VKEY_F1, 0, 0)));
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FORWARD, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   ui::VKEY_F2, 0, 0)));
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_RELOAD, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  ui::VKEY_F3, 0, 0)));
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When there are modifier keys pressed, don't reserve.
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_RELOAD_IGNORING_CACHE, content::NativeWebKeyboardEvent(
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F3, ui::EF_SHIFT_DOWN, 0)));
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_RELOAD_IGNORING_CACHE, content::NativeWebKeyboardEvent(
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F3, ui::EF_CONTROL_DOWN, 0)));
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FULLSCREEN, content::NativeWebKeyboardEvent(
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F4, ui::EF_SHIFT_DOWN, 0)));
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // F4-10 keys are not reserved since they are Ash accelerators.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F4, 0, 0)));
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F5, 0, 0)));
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F6, 0, 0)));
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F7, 0, 0)));
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F8, 0, 0)));
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F9, 0, 0)));
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F10, 0, 0)));
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shift+Control+Alt+F3 is also an Ash accelerator. Don't reserve it.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false,
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::VKEY_F3,
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 0)));
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // OS_CHROMEOS
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ctrl+n, Ctrl+w are reserved while Ctrl+f is not.
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The content::NativeWebKeyboardEvent constructor is available only when
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // USE_AURA is #defined.
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_NEW_WINDOW, content::NativeWebKeyboardEvent(
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_N, ui::EF_CONTROL_DOWN, 0)));
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_CLOSE_TAB, content::NativeWebKeyboardEvent(
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_W, ui::EF_CONTROL_DOWN, 0)));
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FIND, content::NativeWebKeyboardEvent(
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F, ui::EF_CONTROL_DOWN, 0)));
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // USE_AURA
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest, IsReservedCommandOrKeyIsApp) {
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->app_name_ = "app";
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(browser()->is_app());
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When is_app(), no keys are reserved.
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_BACK, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                ui::VKEY_F1, 0, 0)));
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FORWARD, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   ui::VKEY_F2, 0, 0)));
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_RELOAD, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  ui::VKEY_F3, 0, 0)));
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F4, 0, 0)));
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // OS_CHROMEOS
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The content::NativeWebKeyboardEvent constructor is available only when
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // USE_AURA is #defined.
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_NEW_WINDOW, content::NativeWebKeyboardEvent(
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_N, ui::EF_CONTROL_DOWN, 0)));
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_CLOSE_TAB, content::NativeWebKeyboardEvent(
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_W, ui::EF_CONTROL_DOWN, 0)));
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FIND, content::NativeWebKeyboardEvent(
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F, ui::EF_CONTROL_DOWN, 0)));
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // USE_AURA
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest, AppFullScreen) {
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enable for tabbed browser.
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enabled for app windows.
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->app_name_ = "app";
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(browser()->is_app());
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->command_controller()->FullscreenStateChanged();
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest, AvatarMenuDisabledWhenOnlyOneProfile) {
1459ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  if (!profiles::IsMultipleProfilesEnabled())
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingProfileManager testing_profile_manager(
1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TestingBrowserProcess::GetGlobal());
1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::BrowserCommandController command_controller(browser(),
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                      profile_manager);
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  testing_profile_manager.CreateTestingProfile("p1");
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  testing_profile_manager.CreateTestingProfile("p2");
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(2U, profile_manager->GetNumberOfProfiles());
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  testing_profile_manager.DeleteTestingProfile("p1");
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  testing_profile_manager.DeleteTestingProfile("p2");
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//////////////////////////////////////////////////////////////////////////////
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A test browser window that can toggle fullscreen state.
1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FullscreenTestBrowserWindow : public TestBrowserWindow {
1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FullscreenTestBrowserWindow() : fullscreen_(false) {}
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~FullscreenTestBrowserWindow() {}
1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // TestBrowserWindow overrides:
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool ShouldHideUIForFullscreen() const OVERRIDE {
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fullscreen_;
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsFullscreen() const OVERRIDE {
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fullscreen_;
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void EnterFullscreen(
1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const GURL& url, FullscreenExitBubbleType type) OVERRIDE {
1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fullscreen_ = true;
1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ExitFullscreen() OVERRIDE {
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fullscreen_ = false;
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool fullscreen_;
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FullscreenTestBrowserWindow);
1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test that uses FullscreenTestBrowserWindow for its window.
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BrowserCommandControllerFullscreenTest
2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : public BrowserWithTestWindowTest {
2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BrowserCommandControllerFullscreenTest() {}
2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~BrowserCommandControllerFullscreenTest() {}
2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // BrowserWithTestWindowTest overrides:
209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual BrowserWindow* CreateBrowserWindow() OVERRIDE {
210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return new FullscreenTestBrowserWindow;
2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BrowserCommandControllerFullscreenTest);
2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerFullscreenTest,
2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       UpdateCommandsForFullscreenMode) {
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Defaults for a tabbed browser.
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Simulate going fullscreen.
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::ToggleFullscreenMode(browser());
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(browser()->window()->IsFullscreen());
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->command_controller()->FullscreenStateChanged();
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Most commands are disabled in fullscreen.
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Exit fullscreen.
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::ToggleFullscreenMode(browser());
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(browser()->window()->IsFullscreen());
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->command_controller()->FullscreenStateChanged();
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest,
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    IncognitoModeOnSigninAllowedPrefChange) {
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingProfileManager testing_profile_manager(
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TestingBrowserProcess::GetGlobal());
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Set up a profile with an off the record profile.
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingProfile::Builder builder;
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingProfile* profile2 = builder.Build().release();
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile2->set_incognito(true);
298c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TestingProfile::Builder builder2;
299c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TestingProfile* profile1 = builder2.Build().release();
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile2->SetOriginalProfile(profile1);
3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(profile2->GetOriginalProfile(), profile1);
3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile1->SetOffTheRecordProfile(profile2);
303c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Create a new browser based on the off the record profile.
305eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  Browser::CreateParams profile_params(profile2, chrome::GetActiveDesktop());
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Browser> browser2(
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      chrome::CreateBrowserWithTestWindowForParams(&profile_params));
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::BrowserCommandController* command_controller =
3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      new chrome::BrowserCommandController(browser2.get(), profile_manager);
3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const CommandUpdater* command_updater = command_controller->command_updater();
3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Check that the SYNC_SETUP command is updated on preference change.
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile1->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false);
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  delete command_controller;
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser2.reset();
320c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ProfileDestroyer::DestroyProfileWhenAppropriate(profile1);
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest,
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    OnSigninAllowedPrefChange) {
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingProfileManager testing_profile_manager(
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TestingBrowserProcess::GetGlobal());
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::BrowserCommandController command_controller(browser(),
3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                      profile_manager);
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Check that the SYNC_SETUP command is updated on preference change.
3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile()->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false);
3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
338