Home | History | Annotate | Download | only in ui
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "chrome/browser/ui/browser_command_controller.h"
      6 
      7 #include "base/command_line.h"
      8 #include "chrome/app/chrome_command_ids.h"
      9 #include "chrome/browser/browser_process.h"
     10 #include "chrome/browser/command_updater.h"
     11 #include "chrome/browser/profiles/profile_manager.h"
     12 #include "chrome/browser/profiles/profiles_state.h"
     13 #include "chrome/browser/ui/browser.h"
     14 #include "chrome/browser/ui/browser_commands.h"
     15 #include "chrome/browser/ui/browser_window_state.h"
     16 #include "chrome/common/chrome_switches.h"
     17 #include "chrome/common/pref_names.h"
     18 #include "chrome/test/base/browser_with_test_window_test.h"
     19 #include "chrome/test/base/test_browser_window.h"
     20 #include "chrome/test/base/testing_browser_process.h"
     21 #include "chrome/test/base/testing_profile_manager.h"
     22 #include "content/public/browser/native_web_keyboard_event.h"
     23 #include "ui/events/keycodes/keyboard_codes.h"
     24 
     25 typedef BrowserWithTestWindowTest BrowserCommandControllerTest;
     26 
     27 TEST_F(BrowserCommandControllerTest, IsReservedCommandOrKey) {
     28 #if defined(OS_CHROMEOS)
     29   // F1-3 keys are reserved Chrome accelerators on Chrome OS.
     30   EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
     31       IDC_BACK, content::NativeWebKeyboardEvent(
     32           ui::ET_KEY_PRESSED, false, ui::VKEY_BROWSER_BACK, 0, 0)));
     33   EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
     34       IDC_FORWARD, content::NativeWebKeyboardEvent(
     35           ui::ET_KEY_PRESSED, false, ui::VKEY_BROWSER_FORWARD, 0, 0)));
     36   EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
     37       IDC_RELOAD, content::NativeWebKeyboardEvent(
     38           ui::ET_KEY_PRESSED, false, ui::VKEY_BROWSER_REFRESH, 0, 0)));
     39 
     40   // When there are modifier keys pressed, don't reserve.
     41   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
     42       IDC_RELOAD_IGNORING_CACHE, content::NativeWebKeyboardEvent(
     43           ui::ET_KEY_PRESSED, false, ui::VKEY_F3, ui::EF_SHIFT_DOWN, 0)));
     44   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
     45       IDC_RELOAD_IGNORING_CACHE, content::NativeWebKeyboardEvent(
     46           ui::ET_KEY_PRESSED, false, ui::VKEY_F3, ui::EF_CONTROL_DOWN, 0)));
     47   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
     48       IDC_FULLSCREEN, content::NativeWebKeyboardEvent(
     49           ui::ET_KEY_PRESSED, false, ui::VKEY_F4, ui::EF_SHIFT_DOWN, 0)));
     50 
     51   // F4-10 keys are not reserved since they are Ash accelerators.
     52   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
     53       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
     54                                           ui::VKEY_F4, 0, 0)));
     55   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
     56       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
     57                                           ui::VKEY_F5, 0, 0)));
     58   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
     59       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
     60                                           ui::VKEY_F6, 0, 0)));
     61   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
     62       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
     63                                           ui::VKEY_F7, 0, 0)));
     64   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
     65       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
     66                                           ui::VKEY_F8, 0, 0)));
     67   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
     68       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
     69                                           ui::VKEY_F9, 0, 0)));
     70   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
     71       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
     72                                           ui::VKEY_F10, 0, 0)));
     73 
     74   // Shift+Control+Alt+F3 is also an Ash accelerator. Don't reserve it.
     75   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
     76       -1, content::NativeWebKeyboardEvent(
     77           ui::ET_KEY_PRESSED, false,
     78           ui::VKEY_F3,
     79           ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 0)));
     80 #endif  // OS_CHROMEOS
     81 
     82 #if defined(USE_AURA)
     83   // Ctrl+n, Ctrl+w are reserved while Ctrl+f is not.
     84 
     85   // The content::NativeWebKeyboardEvent constructor is available only when
     86   // USE_AURA is #defined.
     87   EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
     88       IDC_NEW_WINDOW, content::NativeWebKeyboardEvent(
     89           ui::ET_KEY_PRESSED, false, ui::VKEY_N, ui::EF_CONTROL_DOWN, 0)));
     90   EXPECT_TRUE(browser()->command_controller()->IsReservedCommandOrKey(
     91       IDC_CLOSE_TAB, content::NativeWebKeyboardEvent(
     92           ui::ET_KEY_PRESSED, false, ui::VKEY_W, ui::EF_CONTROL_DOWN, 0)));
     93   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
     94       IDC_FIND, content::NativeWebKeyboardEvent(
     95           ui::ET_KEY_PRESSED, false, ui::VKEY_F, ui::EF_CONTROL_DOWN, 0)));
     96 #endif  // USE_AURA
     97 }
     98 
     99 TEST_F(BrowserCommandControllerTest, IsReservedCommandOrKeyIsApp) {
    100   browser()->app_name_ = "app";
    101   ASSERT_TRUE(browser()->is_app());
    102 
    103   // When is_app(), no keys are reserved.
    104 #if defined(OS_CHROMEOS)
    105   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
    106       IDC_BACK, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
    107                                                 ui::VKEY_F1, 0, 0)));
    108   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
    109       IDC_FORWARD, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
    110                                                    ui::VKEY_F2, 0, 0)));
    111   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
    112       IDC_RELOAD, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
    113                                                   ui::VKEY_F3, 0, 0)));
    114   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
    115       -1, content::NativeWebKeyboardEvent(ui::ET_KEY_PRESSED, false,
    116                                           ui::VKEY_F4, 0, 0)));
    117 #endif  // OS_CHROMEOS
    118 
    119 #if defined(USE_AURA)
    120   // The content::NativeWebKeyboardEvent constructor is available only when
    121   // USE_AURA is #defined.
    122   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
    123       IDC_NEW_WINDOW, content::NativeWebKeyboardEvent(
    124           ui::ET_KEY_PRESSED, false, ui::VKEY_N, ui::EF_CONTROL_DOWN, 0)));
    125   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
    126       IDC_CLOSE_TAB, content::NativeWebKeyboardEvent(
    127           ui::ET_KEY_PRESSED, false, ui::VKEY_W, ui::EF_CONTROL_DOWN, 0)));
    128   EXPECT_FALSE(browser()->command_controller()->IsReservedCommandOrKey(
    129       IDC_FIND, content::NativeWebKeyboardEvent(
    130           ui::ET_KEY_PRESSED, false, ui::VKEY_F, ui::EF_CONTROL_DOWN, 0)));
    131 #endif  // USE_AURA
    132 }
    133 
    134 TEST_F(BrowserCommandControllerTest, AppFullScreen) {
    135   // Enable for tabbed browser.
    136   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
    137 
    138   // Enabled for app windows.
    139   browser()->app_name_ = "app";
    140   ASSERT_TRUE(browser()->is_app());
    141   browser()->command_controller()->FullscreenStateChanged();
    142   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
    143 }
    144 
    145 TEST_F(BrowserCommandControllerTest, OldAvatarMenuDisabledWhenOnlyOneProfile) {
    146   if (!profiles::IsMultipleProfilesEnabled())
    147     return;
    148 
    149   EXPECT_FALSE(profiles::IsNewProfileManagementEnabled());
    150 
    151   TestingProfileManager testing_profile_manager(
    152       TestingBrowserProcess::GetGlobal());
    153   ASSERT_TRUE(testing_profile_manager.SetUp());
    154   ProfileManager* profile_manager = testing_profile_manager.profile_manager();
    155 
    156   chrome::BrowserCommandController command_controller(browser(),
    157                                                       profile_manager);
    158   const CommandUpdater* command_updater = command_controller.command_updater();
    159 
    160   testing_profile_manager.CreateTestingProfile("p1");
    161   ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
    162   EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
    163 
    164   testing_profile_manager.CreateTestingProfile("p2");
    165   ASSERT_EQ(2U, profile_manager->GetNumberOfProfiles());
    166   EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
    167 
    168   testing_profile_manager.DeleteTestingProfile("p1");
    169   ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
    170   EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
    171 
    172   testing_profile_manager.DeleteTestingProfile("p2");
    173 }
    174 
    175 TEST_F(BrowserCommandControllerTest, NewAvatarMenuEnabledWhenOnlyOneProfile) {
    176   if (!profiles::IsMultipleProfilesEnabled())
    177     return;
    178 
    179   // The command line is reset at the end of every test by the test suite.
    180   CommandLine::ForCurrentProcess()->AppendSwitch(
    181       switches::kNewProfileManagement);
    182   EXPECT_TRUE(profiles::IsNewProfileManagementEnabled());
    183 
    184   TestingProfileManager testing_profile_manager(
    185       TestingBrowserProcess::GetGlobal());
    186   ASSERT_TRUE(testing_profile_manager.SetUp());
    187   ProfileManager* profile_manager = testing_profile_manager.profile_manager();
    188 
    189   chrome::BrowserCommandController command_controller(browser(),
    190                                                       profile_manager);
    191   const CommandUpdater* command_updater = command_controller.command_updater();
    192 
    193   testing_profile_manager.CreateTestingProfile("p1");
    194   ASSERT_EQ(1U, profile_manager->GetNumberOfProfiles());
    195   EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
    196   testing_profile_manager.DeleteTestingProfile("p1");
    197 }
    198 
    199 TEST_F(BrowserCommandControllerTest, NewAvatarMenuEnabledInGuestMode) {
    200   if (!profiles::IsMultipleProfilesEnabled())
    201     return;
    202 
    203   // The command line is reset at the end of every test by the test suite.
    204   CommandLine::ForCurrentProcess()->AppendSwitch(
    205       switches::kNewProfileManagement);
    206   EXPECT_TRUE(profiles::IsNewProfileManagementEnabled());
    207 
    208   TestingProfileManager testing_profile_manager(
    209       TestingBrowserProcess::GetGlobal());
    210   ASSERT_TRUE(testing_profile_manager.SetUp());
    211   ProfileManager* profile_manager = testing_profile_manager.profile_manager();
    212 
    213   // Set up guest a profile.
    214   TestingProfile::Builder guest_builder;
    215   guest_builder.SetIncognito();  // Guest profiles are off the record.
    216   guest_builder.SetGuestSession();
    217   guest_builder.SetPath(ProfileManager::GetGuestProfilePath());
    218   scoped_ptr<TestingProfile>guest_profile = guest_builder.Build();
    219 
    220   ASSERT_TRUE(guest_profile->IsGuestSession());
    221 
    222   // Create a new browser based on the guest profile.
    223   Browser::CreateParams profile_params(guest_profile.get(),
    224                                        chrome::GetActiveDesktop());
    225   scoped_ptr<Browser> guest_browser(
    226       chrome::CreateBrowserWithTestWindowForParams(&profile_params));
    227   chrome::BrowserCommandController command_controller(guest_browser.get(),
    228                                                       profile_manager);
    229   const CommandUpdater* command_updater = command_controller.command_updater();
    230   EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
    231 }
    232 
    233 TEST_F(BrowserCommandControllerTest, AvatarMenuAlwaysDisabledInIncognitoMode) {
    234   if (!profiles::IsMultipleProfilesEnabled())
    235     return;
    236 
    237   TestingProfileManager testing_profile_manager(
    238       TestingBrowserProcess::GetGlobal());
    239   ASSERT_TRUE(testing_profile_manager.SetUp());
    240 
    241   // Set up a profile with an off the record profile.
    242   TestingProfile::Builder otr_builder;
    243   otr_builder.SetIncognito();
    244   scoped_ptr<TestingProfile> otr_profile(otr_builder.Build());
    245 
    246   TestingProfile::Builder normal_builder;
    247   scoped_ptr<TestingProfile> original_profile = normal_builder.Build();
    248   otr_profile->SetOriginalProfile(original_profile.get());
    249   EXPECT_EQ(otr_profile->GetOriginalProfile(), original_profile.get());
    250 
    251   original_profile->SetOffTheRecordProfile(otr_profile.PassAs<Profile>());
    252 
    253   // Create a new browser based on the off the record profile.
    254   Browser::CreateParams profile_params(
    255       original_profile->GetOffTheRecordProfile(), chrome::GetActiveDesktop());
    256   scoped_ptr<Browser> otr_browser(
    257       chrome::CreateBrowserWithTestWindowForParams(&profile_params));
    258 
    259   ProfileManager* profile_manager = testing_profile_manager.profile_manager();
    260   chrome::BrowserCommandController command_controller(otr_browser.get(),
    261                                                       profile_manager);
    262   const CommandUpdater* command_updater = command_controller.command_updater();
    263 
    264   // The old style avatar menu should be disabled.
    265   EXPECT_FALSE(profiles::IsNewProfileManagementEnabled());
    266   EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
    267 
    268   // The new style avatar menu should also be disabled.
    269   // The command line is reset at the end of every test by the test suite.
    270   CommandLine::ForCurrentProcess()->AppendSwitch(
    271       switches::kNewProfileManagement);
    272   EXPECT_TRUE(profiles::IsNewProfileManagementEnabled());
    273   EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_AVATAR_MENU));
    274 }
    275 
    276 //////////////////////////////////////////////////////////////////////////////
    277 
    278 // A test browser window that can toggle fullscreen state.
    279 class FullscreenTestBrowserWindow : public TestBrowserWindow {
    280  public:
    281   FullscreenTestBrowserWindow() : fullscreen_(false) {}
    282   virtual ~FullscreenTestBrowserWindow() {}
    283 
    284   // TestBrowserWindow overrides:
    285   virtual bool ShouldHideUIForFullscreen() const OVERRIDE {
    286     return fullscreen_;
    287   }
    288   virtual bool IsFullscreen() const OVERRIDE {
    289     return fullscreen_;
    290   }
    291   virtual void EnterFullscreen(
    292       const GURL& url, FullscreenExitBubbleType type) OVERRIDE {
    293     fullscreen_ = true;
    294   }
    295   virtual void ExitFullscreen() OVERRIDE {
    296     fullscreen_ = false;
    297   }
    298 
    299  private:
    300   bool fullscreen_;
    301 
    302   DISALLOW_COPY_AND_ASSIGN(FullscreenTestBrowserWindow);
    303 };
    304 
    305 // Test that uses FullscreenTestBrowserWindow for its window.
    306 class BrowserCommandControllerFullscreenTest
    307     : public BrowserWithTestWindowTest {
    308  public:
    309   BrowserCommandControllerFullscreenTest() {}
    310   virtual ~BrowserCommandControllerFullscreenTest() {}
    311 
    312   // BrowserWithTestWindowTest overrides:
    313   virtual BrowserWindow* CreateBrowserWindow() OVERRIDE {
    314     return new FullscreenTestBrowserWindow;
    315   }
    316 
    317  private:
    318   DISALLOW_COPY_AND_ASSIGN(BrowserCommandControllerFullscreenTest);
    319 };
    320 
    321 TEST_F(BrowserCommandControllerFullscreenTest,
    322        UpdateCommandsForFullscreenMode) {
    323   // Defaults for a tabbed browser.
    324   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
    325   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
    326   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
    327   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
    328   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
    329   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
    330   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
    331   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
    332   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
    333   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
    334 #if defined(GOOGLE_CHROME_BUILD)
    335   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
    336 #endif
    337   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
    338   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
    339   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
    340   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
    341   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
    342   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
    343   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
    344 
    345   // Simulate going fullscreen.
    346   chrome::ToggleFullscreenMode(browser());
    347   ASSERT_TRUE(browser()->window()->IsFullscreen());
    348   browser()->command_controller()->FullscreenStateChanged();
    349 
    350   // Most commands are disabled in fullscreen.
    351   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
    352   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
    353   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
    354   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
    355   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
    356   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
    357   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
    358   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
    359   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
    360   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
    361 #if defined(GOOGLE_CHROME_BUILD)
    362   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
    363 #endif
    364   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
    365   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
    366   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
    367   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
    368   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
    369   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
    370   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
    371 
    372   // Exit fullscreen.
    373   chrome::ToggleFullscreenMode(browser());
    374   ASSERT_FALSE(browser()->window()->IsFullscreen());
    375   browser()->command_controller()->FullscreenStateChanged();
    376   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPEN_CURRENT_URL));
    377   EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_SHOW_AS_TAB));
    378   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_TOOLBAR));
    379   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_LOCATION));
    380   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_SEARCH));
    381   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_MENU_BAR));
    382   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_NEXT_PANE));
    383   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_PREVIOUS_PANE));
    384   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FOCUS_BOOKMARKS));
    385   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_DEVELOPER_MENU));
    386 #if defined(GOOGLE_CHROME_BUILD)
    387   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FEEDBACK));
    388 #endif
    389   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_OPTIONS));
    390   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_IMPORT_SETTINGS));
    391   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_EDIT_SEARCH_ENGINES));
    392   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_VIEW_PASSWORDS));
    393   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_ABOUT));
    394   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_SHOW_APP_MENU));
    395   EXPECT_TRUE(chrome::IsCommandEnabled(browser(), IDC_FULLSCREEN));
    396 }
    397 
    398 TEST_F(BrowserCommandControllerTest,
    399     IncognitoModeOnSigninAllowedPrefChange) {
    400   TestingProfileManager testing_profile_manager(
    401       TestingBrowserProcess::GetGlobal());
    402   ASSERT_TRUE(testing_profile_manager.SetUp());
    403 
    404   // Set up a profile with an off the record profile.
    405   TestingProfile::Builder builder;
    406   builder.SetIncognito();
    407   scoped_ptr<TestingProfile> profile2(builder.Build());
    408   TestingProfile::Builder builder2;
    409   scoped_ptr<TestingProfile> profile1 = builder2.Build();
    410   profile2->SetOriginalProfile(profile1.get());
    411   EXPECT_EQ(profile2->GetOriginalProfile(), profile1.get());
    412   profile1->SetOffTheRecordProfile(profile2.PassAs<Profile>());
    413 
    414   // Create a new browser based on the off the record profile.
    415   Browser::CreateParams profile_params(profile1->GetOffTheRecordProfile(),
    416                                        chrome::GetActiveDesktop());
    417   scoped_ptr<Browser> browser2(
    418       chrome::CreateBrowserWithTestWindowForParams(&profile_params));
    419 
    420   ProfileManager* profile_manager = testing_profile_manager.profile_manager();
    421   chrome::BrowserCommandController command_controller(browser2.get(),
    422                                                       profile_manager);
    423   const CommandUpdater* command_updater = command_controller.command_updater();
    424 
    425   // Check that the SYNC_SETUP command is updated on preference change.
    426   EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
    427   profile1->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false);
    428   EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
    429 }
    430 
    431 TEST_F(BrowserCommandControllerTest,
    432     OnSigninAllowedPrefChange) {
    433   TestingProfileManager testing_profile_manager(
    434       TestingBrowserProcess::GetGlobal());
    435   ASSERT_TRUE(testing_profile_manager.SetUp());
    436   ProfileManager* profile_manager = testing_profile_manager.profile_manager();
    437   chrome::BrowserCommandController command_controller(browser(),
    438                                                       profile_manager);
    439   const CommandUpdater* command_updater = command_controller.command_updater();
    440 
    441   // Check that the SYNC_SETUP command is updated on preference change.
    442   EXPECT_TRUE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
    443   profile()->GetPrefs()->SetBoolean(prefs::kSigninAllowed, false);
    444   EXPECT_FALSE(command_updater->IsCommandEnabled(IDC_SHOW_SYNC_SETUP));
    445 }
    446