browser_command_controller_unittest.cc revision 0529e5d033099cbfc42635f6f6183833b09dff6e
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"
210529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chrome/test/base/testing_profile.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_profile_manager.h"
230529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "components/signin/core/common/profile_management_switches.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/native_web_keyboard_event.h"
25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "ui/events/keycodes/keyboard_codes.h"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)typedef BrowserWithTestWindowTest BrowserCommandControllerTest;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest, IsReservedCommandOrKey) {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // F1-3 keys are reserved Chrome accelerators on Chrome OS.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      IDC_BACK, content::NativeWebKeyboardEvent(
343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_BROWSER_BACK, 0, 0)));
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      IDC_FORWARD, content::NativeWebKeyboardEvent(
373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_BROWSER_FORWARD, 0, 0)));
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)      IDC_RELOAD, content::NativeWebKeyboardEvent(
403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_BROWSER_REFRESH, 0, 0)));
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When there are modifier keys pressed, don't reserve.
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_SHIFT_DOWN, 0)));
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_RELOAD_IGNORING_CACHE, content::NativeWebKeyboardEvent(
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F3, ui::EF_CONTROL_DOWN, 0)));
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FULLSCREEN, content::NativeWebKeyboardEvent(
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F4, ui::EF_SHIFT_DOWN, 0)));
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // F4-10 keys are not reserved since they are Ash accelerators.
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_F4, 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_F5, 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_F6, 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_F7, 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_F8, 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_F9, 0, 0)));
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F10, 0, 0)));
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Shift+Control+Alt+F3 is also an Ash accelerator. Don't reserve it.
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false,
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::VKEY_F3,
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 0)));
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // OS_CHROMEOS
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Ctrl+n, Ctrl+w are reserved while Ctrl+f is not.
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The content::NativeWebKeyboardEvent constructor is available only when
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // USE_AURA is #defined.
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_NEW_WINDOW, content::NativeWebKeyboardEvent(
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_N, ui::EF_CONTROL_DOWN, 0)));
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_CLOSE_TAB, content::NativeWebKeyboardEvent(
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_W, ui::EF_CONTROL_DOWN, 0)));
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FIND, content::NativeWebKeyboardEvent(
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F, ui::EF_CONTROL_DOWN, 0)));
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // USE_AURA
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest, IsReservedCommandOrKeyIsApp) {
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  browser()->app_name_ = "app";
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(browser()->is_app());
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // When is_app(), no keys are reserved.
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_BACK, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                ui::VKEY_F1, 0, 0)));
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FORWARD, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                   ui::VKEY_F2, 0, 0)));
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_RELOAD, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                                  ui::VKEY_F3, 0, 0)));
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          ui::VKEY_F4, 0, 0)));
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // OS_CHROMEOS
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(USE_AURA)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The content::NativeWebKeyboardEvent constructor is available only when
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // USE_AURA is #defined.
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_NEW_WINDOW, content::NativeWebKeyboardEvent(
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_N, ui::EF_CONTROL_DOWN, 0)));
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_CLOSE_TAB, content::NativeWebKeyboardEvent(
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_W, ui::EF_CONTROL_DOWN, 0)));
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      IDC_FIND, content::NativeWebKeyboardEvent(
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          ui::ET_KEY_PRESSED, false, ui::VKEY_F, ui::EF_CONTROL_DOWN, 0)));
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // USE_AURA
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerTest, AppFullScreen) {
1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enable for tabbed browser.
1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Enabled for app windows.
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->app_name_ = "app";
1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(browser()->is_app());
1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->command_controller()->FullscreenStateChanged();
1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
147a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, OldAvatarMenuDisabledWhenOnlyOneProfile) {
148a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // TODO(nkostylev): Cleanup this code once multi-profiles are enabled by
150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // default on CrOS. http://crbug.com/351655
151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CommandLine::ForCurrentProcess()->AppendSwitch(switches::kMultiProfiles);
152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
1549ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch  if (!profiles::IsMultipleProfilesEnabled())
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return;
1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(switches::IsNewProfileManagement());
158a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingProfileManager testing_profile_manager(
1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TestingBrowserProcess::GetGlobal());
1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::BrowserCommandController command_controller(browser(),
1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                      profile_manager);
1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  testing_profile_manager.CreateTestingProfile("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.CreateTestingProfile("p2");
1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(2U, profile_manager->GetNumberOfProfiles());
174a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Chrome OS uses system tray menu to handle multi-profiles.
176a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
177a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#else
1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
179a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  testing_profile_manager.DeleteTestingProfile("p1");
1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  testing_profile_manager.DeleteTestingProfile("p2");
1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
188a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, NewAvatarMenuEnabledWhenOnlyOneProfile) {
189a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
190a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // TODO(nkostylev): Cleanup this code once multi-profiles are enabled by
191a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // default on CrOS. http://crbug.com/351655
192a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CommandLine::ForCurrentProcess()->AppendSwitch(switches::kMultiProfiles);
193a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
194a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
195a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (!profiles::IsMultipleProfilesEnabled())
196a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return;
197a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
198a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // The command line is reset at the end of every test by the test suite.
199a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  CommandLine::ForCurrentProcess()->AppendSwitch(
200a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      switches::kNewProfileManagement);
2015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(switches::IsNewProfileManagement());
202a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
203a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestingProfileManager testing_profile_manager(
204a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      TestingBrowserProcess::GetGlobal());
205a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
206a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
207a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
208a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  chrome::BrowserCommandController command_controller(browser(),
209a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                                      profile_manager);
210a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
211a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
212a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  testing_profile_manager.CreateTestingProfile("p1");
213a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
214a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
215a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Chrome OS uses system tray menu to handle multi-profiles.
216a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
217a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#else
218a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
219a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
220a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  testing_profile_manager.DeleteTestingProfile("p1");
221a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
222a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
223a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, NewAvatarMenuEnabledInGuestMode) {
224a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
225a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // TODO(nkostylev): Cleanup this code once multi-profiles are enabled by
226a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // default on CrOS. http://crbug.com/351655
227a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CommandLine::ForCurrentProcess()->AppendSwitch(switches::kMultiProfiles);
228a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
229a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
230a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (!profiles::IsMultipleProfilesEnabled())
231a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return;
232a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
233a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // The command line is reset at the end of every test by the test suite.
234a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  CommandLine::ForCurrentProcess()->AppendSwitch(
235a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      switches::kNewProfileManagement);
2365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(switches::IsNewProfileManagement());
237a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
238a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestingProfileManager testing_profile_manager(
239a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      TestingBrowserProcess::GetGlobal());
240a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
241a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
242a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
243a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Set up guest a profile.
244a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestingProfile::Builder guest_builder;
245a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  guest_builder.SetIncognito();  // Guest profiles are off the record.
246a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  guest_builder.SetGuestSession();
247a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  guest_builder.SetPath(ProfileManager::GetGuestProfilePath());
248a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<TestingProfile>guest_profile = guest_builder.Build();
249a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
250a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(guest_profile->IsGuestSession());
251a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
252a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Create a new browser based on the guest profile.
253a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  Browser::CreateParams profile_params(guest_profile.get(),
254a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                       chrome::GetActiveDesktop());
255a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<Browser> guest_browser(
256a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      chrome::CreateBrowserWithTestWindowForParams(&profile_params));
257a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  chrome::BrowserCommandController command_controller(guest_browser.get(),
258a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                                      profile_manager);
259a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
260a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
261a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // Chrome OS uses system tray menu to handle multi-profiles.
262a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
263a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#else
264a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
265a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
266a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
267a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
268a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, AvatarMenuAlwaysDisabledInIncognitoMode) {
269a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#if defined(OS_CHROMEOS)
270a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // TODO(nkostylev): Cleanup this code once multi-profiles are enabled by
271a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // default on CrOS. http://crbug.com/351655
272a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CommandLine::ForCurrentProcess()->AppendSwitch(switches::kMultiProfiles);
273a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif
274a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
275a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (!profiles::IsMultipleProfilesEnabled())
276a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    return;
277a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
278a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestingProfileManager testing_profile_manager(
279a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      TestingBrowserProcess::GetGlobal());
280a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
281a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
282a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Set up a profile with an off the record profile.
283a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  TestingProfile::Builder normal_builder;
284a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<TestingProfile> original_profile = normal_builder.Build();
285a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
286a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // Create a new browser based on the off the record profile.
287a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  Browser::CreateParams profile_params(
288a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      original_profile->GetOffTheRecordProfile(), chrome::GetActiveDesktop());
289a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<Browser> otr_browser(
290a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      chrome::CreateBrowserWithTestWindowForParams(&profile_params));
291a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
292a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
293a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  chrome::BrowserCommandController command_controller(otr_browser.get(),
294a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                                      profile_manager);
295a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
296a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
297a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // The old style avatar menu should be disabled.
2985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_FALSE(switches::IsNewProfileManagement());
299a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
300a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
301a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // The new style avatar menu should also be disabled.
302a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  // The command line is reset at the end of every test by the test suite.
303a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  CommandLine::ForCurrentProcess()->AppendSwitch(
304a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      switches::kNewProfileManagement);
3055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  EXPECT_TRUE(switches::IsNewProfileManagement());
306a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
307a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)}
308a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)
3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//////////////////////////////////////////////////////////////////////////////
3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A test browser window that can toggle fullscreen state.
3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class FullscreenTestBrowserWindow : public TestBrowserWindow {
3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  FullscreenTestBrowserWindow() : fullscreen_(false) {}
3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~FullscreenTestBrowserWindow() {}
3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // TestBrowserWindow overrides:
3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool ShouldHideUIForFullscreen() const OVERRIDE {
3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fullscreen_;
3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual bool IsFullscreen() const OVERRIDE {
3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    return fullscreen_;
3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void EnterFullscreen(
3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      const GURL& url, FullscreenExitBubbleType type) OVERRIDE {
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fullscreen_ = true;
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void ExitFullscreen() OVERRIDE {
3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    fullscreen_ = false;
3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bool fullscreen_;
3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(FullscreenTestBrowserWindow);
3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test that uses FullscreenTestBrowserWindow for its window.
3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class BrowserCommandControllerFullscreenTest
3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    : public BrowserWithTestWindowTest {
3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  BrowserCommandControllerFullscreenTest() {}
3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual ~BrowserCommandControllerFullscreenTest() {}
3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // BrowserWithTestWindowTest overrides:
346c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual BrowserWindow* CreateBrowserWindow() OVERRIDE {
347c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return new FullscreenTestBrowserWindow;
3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(BrowserCommandControllerFullscreenTest);
3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(BrowserCommandControllerFullscreenTest,
3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       UpdateCommandsForFullscreenMode) {
3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Defaults for a tabbed browser.
3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
36758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD)
3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
36958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif
3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Simulate going fullscreen.
3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::ToggleFullscreenMode(browser());
3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(browser()->window()->IsFullscreen());
3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->command_controller()->FullscreenStateChanged();
3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Most commands are disabled in fullscreen.
3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
39458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD)
3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
39658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif
3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Exit fullscreen.
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::ToggleFullscreenMode(browser());
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_FALSE(browser()->window()->IsFullscreen());
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  browser()->command_controller()->FullscreenStateChanged();
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
41958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#if defined(GOOGLE_CHROME_BUILD)
4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
42158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif
4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
4290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
4300529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  // Guest Profiles disallow some options.
4310529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  TestingProfile* testprofile = browser()->profile()->AsTestingProfile();
4320529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_TRUE(testprofile);
4330529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  testprofile->SetGuestSession(true);
4340529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch
4350529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  browser()->command_controller()->FullscreenStateChanged();
4360529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch  EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
439a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, IncognitoModeOnSigninAllowedPrefChange) {
4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingProfileManager testing_profile_manager(
4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TestingBrowserProcess::GetGlobal());
4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Set up a profile with an off the record profile.
4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingProfile::Builder builder;
4463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  builder.SetIncognito();
4473551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  scoped_ptr<TestingProfile> profile2(builder.Build());
448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  TestingProfile::Builder builder2;
449a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  scoped_ptr<TestingProfile> profile1 = builder2.Build();
450a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  profile2->SetOriginalProfile(profile1.get());
451a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  EXPECT_EQ(profile2->GetOriginalProfile(), profile1.get());
4523551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  profile1->SetOffTheRecordProfile(profile2.PassAs<Profile>());
453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Create a new browser based on the off the record profile.
4553551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  Browser::CreateParams profile_params(profile1->GetOffTheRecordProfile(),
4563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)                                       chrome::GetActiveDesktop());
4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<Browser> browser2(
4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      chrome::CreateBrowserWithTestWindowForParams(&profile_params));
4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
461a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  chrome::BrowserCommandController command_controller(browser2.get(),
462a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)                                                      profile_manager);
463a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Check that the SYNC_SETUP command is updated on preference change.
4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile1->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false);
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
471a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(BrowserCommandControllerTest, OnSigninAllowedPrefChange) {
4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  TestingProfileManager testing_profile_manager(
4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      TestingBrowserProcess::GetGlobal());
4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(testing_profile_manager.SetUp());
4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ProfileManager* profile_manager = testing_profile_manager.profile_manager();
4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  chrome::BrowserCommandController command_controller(browser(),
4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                                      profile_manager);
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const CommandUpdater* command_updater = command_controller.command_updater();
4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Check that the SYNC_SETUP command is updated on preference change.
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  profile()->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false);
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
485