Index: chrome/browser/browser_shutdown_browsertest.cc |
diff --git a/chrome/browser/browser_shutdown_browsertest.cc b/chrome/browser/browser_shutdown_browsertest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..64fa81ebd3b88d9c4ec57ffd4a479601d21bfd18 |
--- /dev/null |
+++ b/chrome/browser/browser_shutdown_browsertest.cc |
@@ -0,0 +1,73 @@ |
+// 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 chrome::BrowserListObserver { |
+ public: |
+ BrowserClosingObserver() {} |
+ MOCK_METHOD1(OnBrowserCloseStarted, void(Browser* browser)); |
+ |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(BrowserClosingObserver); |
+}; |
+ |
+IN_PROC_BROWSER_TEST_F(BrowserShutdownBrowserTest, |
+ PRE_TwoBrowsersShutdownHistograms) { |
+ 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, OnBrowserCloseStarted(_)).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, |
+ TwoBrowsersShutdownHistograms) { |
+ 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); |
+} |