1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/ui/views/profiles/avatar_menu_button.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/command_line.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/path_service.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/strings/utf_string_conversions.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h" 119ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "chrome/browser/profiles/profiles_state.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/browser/ui/browser_list.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/views/frame/browser_view.h" 14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/ui/views/profiles/avatar_menu_bubble_view.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/chrome_paths.h" 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 18a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/test/base/test_switches.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 218bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)class AvatarMenuButtonTest : public InProcessBrowserTest { 227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AvatarMenuButtonTest(); 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~AvatarMenuButtonTest(); 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) protected: 277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void CreateTestingProfile(); 287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AvatarMenuButton* GetAvatarMenuButton(); 297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void StartAvatarMenu(); 307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private: 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(AvatarMenuButtonTest); 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)AvatarMenuButtonTest::AvatarMenuButtonTest() { 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)AvatarMenuButtonTest::~AvatarMenuButtonTest() { 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void AvatarMenuButtonTest::CreateTestingProfile() { 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProfileManager* profile_manager = g_browser_process->profile_manager(); 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, profile_manager->GetNumberOfProfiles()); 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PathService::Get(chrome::DIR_USER_DATA, &path); 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) path = path.AppendASCII("test_profile"); 487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (!base::PathExists(path)) 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ASSERT_TRUE(base::CreateDirectory(path)); 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile = 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile::CreateProfile(path, NULL, Profile::CREATE_MODE_SYNCHRONOUS); 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_manager->RegisterTestingProfile(profile, true, false); 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2u, profile_manager->GetNumberOfProfiles()); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)AvatarMenuButton* AvatarMenuButtonTest::GetAvatarMenuButton() { 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BrowserView* browser_view = reinterpret_cast<BrowserView*>( 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->window()); 597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return browser_view->frame()->GetAvatarMenuButton(); 607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)void AvatarMenuButtonTest::StartAvatarMenu() { 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AvatarMenuButton* button = GetAvatarMenuButton(); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(button); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AvatarMenuBubbleView::clear_close_on_deactivate_for_testing(); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<views::MenuButtonListener*>(button)->OnMenuButtonClicked( 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL, gfx::Point()); 69b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 708bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(AvatarMenuBubbleView::IsShowing()); 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// See http://crbug.com/315732 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if defined(OS_WIN) 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_HideOnSecondClick DISABLED_HideOnSecondClick 76a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#elif defined(OS_CHROMEOS) 77a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// This test doesn't make sense for ChromeOS since it has a different 78a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// multi-profiles menu in the system tray instead. 79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define MAYBE_HideOnSecondClick DISABLED_HideOnSecondClick 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#else 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define MAYBE_HideOnSecondClick HideOnSecondClick 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(AvatarMenuButtonTest, MAYBE_HideOnSecondClick) { 85558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#if defined(OS_WIN) && defined(USE_ASH) 86558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // Disable this test in Metro+Ash for now (http://crbug.com/262796). 87a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kAshBrowserTests)) 88558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch return; 89558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#endif 90558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) // If multiprofile mode is not enabled, you can't switch between profiles. 928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) if (!profiles::IsMultipleProfilesEnabled()) 937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CreateTestingProfile(); 968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) ASSERT_NO_FATAL_FAILURE(StartAvatarMenu()); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Verify that clicking again doesn't reshow it. 997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) AvatarMenuButton* button = GetAvatarMenuButton(); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<views::MenuButtonListener*>(button)->OnMenuButtonClicked( 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL, gfx::Point()); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Hide the bubble manually. In the browser this would normally happen during 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the event processing. 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AvatarMenuBubbleView::Hide(); 105b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop::current()->RunUntilIdle(); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(AvatarMenuBubbleView::IsShowing()); 1077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} 108