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)
7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/command_line.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/app/chrome_command_ids.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/browser_process.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/command_updater.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"
16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "chrome/common/chrome_switches.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/browser_with_test_window_test.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/test_browser_window.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_browser_process.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_profile_manager.h"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/native_web_keyboard_event.h"
23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef BrowserWithTestWindowTest BrowserCommandControllerTest;
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest, IsReservedCommandOrKey) {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // F1-3 keys are reserved Chrome accelerators on Chrome OS.
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      IDC_BACK, content::NativeWebKeyboardEvent(
323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_BROWSER_BACK, 0, 0)));
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      IDC_FORWARD, content::NativeWebKeyboardEvent(
353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_BROWSER_FORWARD, 0, 0)));
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      IDC_RELOAD, content::NativeWebKeyboardEvent(
383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_BROWSER_REFRESH, 0, 0)));
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When there are modifier keys pressed, don't reserve.
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_RELOAD_IGNORING_CACHE, content::NativeWebKeyboardEvent(
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F3, ui::EF_SHIFT_DOWN, 0)));
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_RELOAD_IGNORING_CACHE, content::NativeWebKeyboardEvent(
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F3, ui::EF_CONTROL_DOWN, 0)));
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FULLSCREEN, content::NativeWebKeyboardEvent(
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F4, ui::EF_SHIFT_DOWN, 0)));
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // F4-10 keys are not reserved since they are Ash accelerators.
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F4, 0, 0)));
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F5, 0, 0)));
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F6, 0, 0)));
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F7, 0, 0)));
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F8, 0, 0)));
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F9, 0, 0)));
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F10, 0, 0)));
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shift+Control+Alt+F3 is also an Ash accelerator. Don't reserve it.
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false,
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::VKEY_F3,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 0)));
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // OS_CHROMEOS
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ctrl+n, Ctrl+w are reserved while Ctrl+f is not.
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The content::NativeWebKeyboardEvent constructor is available only when
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // USE_AURA is #defined.
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_NEW_WINDOW, content::NativeWebKeyboardEvent(
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_N, ui::EF_CONTROL_DOWN, 0)));
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_CLOSE_TAB, content::NativeWebKeyboardEvent(
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_W, ui::EF_CONTROL_DOWN, 0)));
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FIND, content::NativeWebKeyboardEvent(
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F, ui::EF_CONTROL_DOWN, 0)));
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // USE_AURA
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest, IsReservedCommandOrKeyIsApp) {
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->app_name_ = "app";
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(browser()->is_app());
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When is_app(), no keys are reserved.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_BACK, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                ui::VKEY_F1, 0, 0)));
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FORWARD, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   ui::VKEY_F2, 0, 0)));
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_RELOAD, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  ui::VKEY_F3, 0, 0)));
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F4, 0, 0)));
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // OS_CHROMEOS
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The content::NativeWebKeyboardEvent constructor is available only when
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // USE_AURA is #defined.
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_NEW_WINDOW, content::NativeWebKeyboardEvent(
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_N, ui::EF_CONTROL_DOWN, 0)));
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_CLOSE_TAB, content::NativeWebKeyboardEvent(
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_W, ui::EF_CONTROL_DOWN, 0)));
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FIND, content::NativeWebKeyboardEvent(
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F, ui::EF_CONTROL_DOWN, 0)));
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // USE_AURA
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest, AppFullScreen) {
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enable for tabbed browser.
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enabled for app windows.
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->app_name_ = "app";
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(browser()->is_app());
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->command_controller()->FullscreenStateChanged();
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
145a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, OldAvatarMenuDisabledWhenOnlyOneProfile) {
1469ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  if (!profiles::IsMultipleProfilesEnabled())
1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
149a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_FALSE(profiles::IsNewProfileManagementEnabled());
150a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingProfileManager testing_profile_manager(
1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TestingBrowserProcess::GetGlobal());
1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::BrowserCommandController command_controller(browser(),
1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                      profile_manager);
1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  testing_profile_manager.CreateTestingProfile("p1");
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  testing_profile_manager.CreateTestingProfile("p2");
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(2U, profile_manager->GetNumberOfProfiles());
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  testing_profile_manager.DeleteTestingProfile("p1");
1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  testing_profile_manager.DeleteTestingProfile("p2");
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
175a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, NewAvatarMenuEnabledWhenOnlyOneProfile) {
176a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (!profiles::IsMultipleProfilesEnabled())
177a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return;
178a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
179a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // The command line is reset at the end of every test by the test suite.
180a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  CommandLine::ForCurrentProcess()->AppendSwitch(
181a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      switches::kNewProfileManagement);
182a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_TRUE(profiles::IsNewProfileManagementEnabled());
183a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
184a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestingProfileManager testing_profile_manager(
185a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      TestingBrowserProcess::GetGlobal());
186a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
187a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
188a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
189a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  chrome::BrowserCommandController command_controller(browser(),
190a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                                      profile_manager);
191a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
192a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
193a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  testing_profile_manager.CreateTestingProfile("p1");
194a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
196a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  testing_profile_manager.DeleteTestingProfile("p1");
197a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
198a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
199a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, NewAvatarMenuEnabledInGuestMode) {
200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (!profiles::IsMultipleProfilesEnabled())
201a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return;
202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
203a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // The command line is reset at the end of every test by the test suite.
204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  CommandLine::ForCurrentProcess()->AppendSwitch(
205a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      switches::kNewProfileManagement);
206a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_TRUE(profiles::IsNewProfileManagementEnabled());
207a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
208a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestingProfileManager testing_profile_manager(
209a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      TestingBrowserProcess::GetGlobal());
210a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
211a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
212a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
213a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Set up guest a profile.
214a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestingProfile::Builder guest_builder;
215a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  guest_builder.SetIncognito();  // Guest profiles are off the record.
216a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  guest_builder.SetGuestSession();
217a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  guest_builder.SetPath(ProfileManager::GetGuestProfilePath());
218a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<TestingProfile>guest_profile = guest_builder.Build();
219a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
220a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(guest_profile->IsGuestSession());
221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
222a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Create a new browser based on the guest profile.
223a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  Browser::CreateParams profile_params(guest_profile.get(),
224a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                       chrome::GetActiveDesktop());
225a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<Browser> guest_browser(
226a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      chrome::CreateBrowserWithTestWindowForParams(&profile_params));
227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  chrome::BrowserCommandController command_controller(guest_browser.get(),
228a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                                      profile_manager);
229a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
230a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
231a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
233a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, AvatarMenuAlwaysDisabledInIncognitoMode) {
234a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (!profiles::IsMultipleProfilesEnabled())
235a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return;
236a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
237a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestingProfileManager testing_profile_manager(
238a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      TestingBrowserProcess::GetGlobal());
239a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
240a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
241a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Set up a profile with an off the record profile.
242a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestingProfile::Builder otr_builder;
243a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  otr_builder.SetIncognito();
244a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<TestingProfile> otr_profile(otr_builder.Build());
245a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestingProfile::Builder normal_builder;
247a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<TestingProfile> original_profile = normal_builder.Build();
248a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  otr_profile->SetOriginalProfile(original_profile.get());
249a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_EQ(otr_profile->GetOriginalProfile(), original_profile.get());
250a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
251a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  original_profile->SetOffTheRecordProfile(otr_profile.PassAs<Profile>());
252a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
253a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Create a new browser based on the off the record profile.
254a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  Browser::CreateParams profile_params(
255a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      original_profile->GetOffTheRecordProfile(), chrome::GetActiveDesktop());
256a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<Browser> otr_browser(
257a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      chrome::CreateBrowserWithTestWindowForParams(&profile_params));
258a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
259a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
260a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  chrome::BrowserCommandController command_controller(otr_browser.get(),
261a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                                      profile_manager);
262a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
263a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
264a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // The old style avatar menu should be disabled.
265a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_FALSE(profiles::IsNewProfileManagementEnabled());
266a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
267a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
268a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // The new style avatar menu should also be disabled.
269a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // The command line is reset at the end of every test by the test suite.
270a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  CommandLine::ForCurrentProcess()->AppendSwitch(
271a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      switches::kNewProfileManagement);
272a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_TRUE(profiles::IsNewProfileManagementEnabled());
273a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
274a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
275a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//////////////////////////////////////////////////////////////////////////////
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A test browser window that can toggle fullscreen state.
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FullscreenTestBrowserWindow : public TestBrowserWindow {
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FullscreenTestBrowserWindow() : fullscreen_(false) {}
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~FullscreenTestBrowserWindow() {}
2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // TestBrowserWindow overrides:
2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool ShouldHideUIForFullscreen() const OVERRIDE {
2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fullscreen_;
2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsFullscreen() const OVERRIDE {
2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fullscreen_;
2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void EnterFullscreen(
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const GURL& url, FullscreenExitBubbleType type) OVERRIDE {
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fullscreen_ = true;
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ExitFullscreen() OVERRIDE {
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fullscreen_ = false;
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool fullscreen_;
3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FullscreenTestBrowserWindow);
3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test that uses FullscreenTestBrowserWindow for its window.
3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BrowserCommandControllerFullscreenTest
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : public BrowserWithTestWindowTest {
3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BrowserCommandControllerFullscreenTest() {}
3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~BrowserCommandControllerFullscreenTest() {}
3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // BrowserWithTestWindowTest overrides:
313c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual BrowserWindow* CreateBrowserWindow() OVERRIDE {
314c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return new FullscreenTestBrowserWindow;
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BrowserCommandControllerFullscreenTest);
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerFullscreenTest,
3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       UpdateCommandsForFullscreenMode) {
3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Defaults for a tabbed browser.
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
33458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD)
3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
33658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif
3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Simulate going fullscreen.
3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::ToggleFullscreenMode(browser());
3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(browser()->window()->IsFullscreen());
3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->command_controller()->FullscreenStateChanged();
3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Most commands are disabled in fullscreen.
3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
36158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD)
3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
36358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif
3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Exit fullscreen.
3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::ToggleFullscreenMode(browser());
3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(browser()->window()->IsFullscreen());
3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->command_controller()->FullscreenStateChanged();
3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
38658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD)
3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
38858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest,
3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    IncognitoModeOnSigninAllowedPrefChange) {
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingProfileManager testing_profile_manager(
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TestingBrowserProcess::GetGlobal());
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Set up a profile with an off the record profile.
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingProfile::Builder builder;
4063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  builder.SetIncognito();
4073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  scoped_ptr<TestingProfile> profile2(builder.Build());
408c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TestingProfile::Builder builder2;
409a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<TestingProfile> profile1 = builder2.Build();
410a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  profile2->SetOriginalProfile(profile1.get());
411a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_EQ(profile2->GetOriginalProfile(), profile1.get());
4123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  profile1->SetOffTheRecordProfile(profile2.PassAs<Profile>());
413c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Create a new browser based on the off the record profile.
4153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  Browser::CreateParams profile_params(profile1->GetOffTheRecordProfile(),
4163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                       chrome::GetActiveDesktop());
4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Browser> browser2(
4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      chrome::CreateBrowserWithTestWindowForParams(&profile_params));
4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
421a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  chrome::BrowserCommandController command_controller(browser2.get(),
422a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                                      profile_manager);
423a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Check that the SYNC_SETUP command is updated on preference change.
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile1->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false);
4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest,
4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    OnSigninAllowedPrefChange) {
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingProfileManager testing_profile_manager(
4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TestingBrowserProcess::GetGlobal());
4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::BrowserCommandController command_controller(browser(),
4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                      profile_manager);
4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Check that the SYNC_SETUP command is updated on preference change.
4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile()->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false);
4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
446