blob: e8caa8ffdae9f9451090b4412aad0923c091e586 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/test/histogram_tester.h"
#include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/browser_shutdown.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_list.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "content/public/browser/notification_service.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using testing::_;
using testing::AtLeast;
class BrowserShutdownBrowserTest : public InProcessBrowserTest {
public:
BrowserShutdownBrowserTest() {}
~BrowserShutdownBrowserTest() override {}
protected:
base::HistogramTester histogram_tester_;
private:
DISALLOW_COPY_AND_ASSIGN(BrowserShutdownBrowserTest);
};
class BrowserClosingObserver : public BrowserListObserver {
public:
BrowserClosingObserver() {}
MOCK_METHOD1(OnBrowserClosing, void(Browser* browser));
private:
DISALLOW_COPY_AND_ASSIGN(BrowserClosingObserver);
};
// ChromeOS has the different shutdown flow on user initiated exit process.
// See the comment for chrome::AttemptUserExit() function declaration.
#if !defined(OS_CHROMEOS)
IN_PROC_BROWSER_TEST_F(BrowserShutdownBrowserTest,
PRE_TwoBrowsersClosingShutdownHistograms) {
ui_test_utils::NavigateToURL(browser(), GURL("browser://version"));
Browser* browser2 = CreateBrowser(browser()->profile());
ui_test_utils::NavigateToURL(browser2, GURL("browser://help"));
BrowserClosingObserver closing_observer;
BrowserList::AddObserver(&closing_observer);
EXPECT_CALL(closing_observer, OnBrowserClosing(_)).Times(AtLeast(1));
content::WindowedNotificationObserver terminate_observer(
chrome::NOTIFICATION_APP_TERMINATING,
content::NotificationService::AllSources());
chrome::ExecuteCommand(browser(), IDC_EXIT);
terminate_observer.Wait();
EXPECT_TRUE(browser_shutdown::IsTryingToQuit());
EXPECT_TRUE(BrowserList::GetInstance()->empty());
EXPECT_EQ(browser_shutdown::GetShutdownType(),
browser_shutdown::WINDOW_CLOSE);
BrowserList::RemoveObserver(&closing_observer);
}
IN_PROC_BROWSER_TEST_F(BrowserShutdownBrowserTest,
TwoBrowsersClosingShutdownHistograms) {
histogram_tester_.ExpectUniqueSample("Shutdown.ShutdownType",
browser_shutdown::WINDOW_CLOSE, 1);
histogram_tester_.ExpectTotalCount("Shutdown.renderers.total", 1);
histogram_tester_.ExpectTotalCount("Shutdown.window_close.time2", 1);
histogram_tester_.ExpectTotalCount("Shutdown.window_close.time_per_process",
1);
}
#endif // !defined(OS_CHROMEOS)