blob: 0f6228748917358a379ec1c9c93281164a251941 [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/test/metrics/histogram_tester.h"
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/tabs/tab_enums.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "chrome/test/base/ui_test_utils.h"
#include "chrome/test/permissions/permission_request_manager_test_api.h"
#include "components/permissions/permission_uma_util.h"
#include "components/permissions/test/permission_request_observer.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/browser_test_utils.h"
constexpr char kRequestNotifications[] = R"(
new Promise(resolve => {
Notification.requestPermission().then(function (permission) {
resolve(permission)
});
})
)";
class PermissionPromptMetricsTest : public InProcessBrowserTest {
public:
PermissionPromptMetricsTest() = default;
PermissionPromptMetricsTest(const PermissionPromptMetricsTest&) = delete;
PermissionPromptMetricsTest& operator=(const PermissionPromptMetricsTest&) =
delete;
// InProcessBrowserTest:
void SetUpOnMainThread() override {
test_api_ =
std::make_unique<test::PermissionRequestManagerTestApi>(browser());
}
content::RenderFrameHost* GetActiveMainFrame() {
return browser()
->tab_strip_model()
->GetActiveWebContents()
->GetPrimaryMainFrame();
}
std::unique_ptr<test::PermissionRequestManagerTestApi> test_api_;
};
IN_PROC_BROWSER_TEST_F(PermissionPromptMetricsTest,
IgnoreReasonUmaTestCloseOtherTab) {
base::HistogramTester histograms;
ASSERT_TRUE(embedded_test_server()->Start());
const GURL url(embedded_test_server()->GetURL("/empty.html"));
TabStripModel* tab_strip = browser()->tab_strip_model();
content::WebContents* embedder_contents_tab_0 =
tab_strip->GetActiveWebContents();
ASSERT_TRUE(embedder_contents_tab_0);
content::RenderFrameHost* rfh_tab_0 =
ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(browser(), url,
1);
// Request Notification permission
permissions::PermissionRequestObserver observer_tab_0(
embedder_contents_tab_0);
EXPECT_TRUE(content::ExecJs(
rfh_tab_0, kRequestNotifications,
content::EvalJsOptions::EXECUTE_SCRIPT_NO_RESOLVE_PROMISES));
observer_tab_0.Wait();
// Open new tab
chrome::NewTabToRight(browser());
EXPECT_EQ(2, tab_strip->count());
// Close old tab
content::WebContentsDestroyedWatcher destroyed_watcher(
tab_strip->GetWebContentsAt(0));
tab_strip->CloseWebContentsAt(0, TabCloseTypes::CLOSE_USER_GESTURE);
destroyed_watcher.Wait();
histograms.ExpectUniqueSample(
"Permissions.Prompt.Notifications.LocationBarLeftChipAutoBubble."
"IgnoredReason",
static_cast<base::HistogramBase::Sample32>(
permissions::PermissionIgnoredReason::TAB_CLOSED),
1);
}
IN_PROC_BROWSER_TEST_F(PermissionPromptMetricsTest,
IgnoreReasonUmaTestCloseCurrentTab) {
base::HistogramTester histograms;
ASSERT_TRUE(embedded_test_server()->Start());
const GURL url(embedded_test_server()->GetURL("/empty.html"));
TabStripModel* tab_strip = browser()->tab_strip_model();
content::WebContents* embedder_contents_tab_0 =
tab_strip->GetActiveWebContents();
ASSERT_TRUE(embedder_contents_tab_0);
content::RenderFrameHost* rfh_tab_0 =
ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(browser(), url,
1);
// Request Notification permission
permissions::PermissionRequestObserver observer_tab_0(
embedder_contents_tab_0);
EXPECT_TRUE(content::ExecJs(
rfh_tab_0, kRequestNotifications,
content::EvalJsOptions::EXECUTE_SCRIPT_NO_RESOLVE_PROMISES));
observer_tab_0.Wait();
// Open new tab
chrome::NewTabToRight(browser());
EXPECT_EQ(2, tab_strip->count());
// Go to previous tab and close it
tab_strip->ActivateTabAt(0);
content::WebContentsDestroyedWatcher destroyed_watcher(
tab_strip->GetWebContentsAt(0));
tab_strip->CloseWebContentsAt(0, TabCloseTypes::CLOSE_USER_GESTURE);
destroyed_watcher.Wait();
histograms.ExpectUniqueSample(
"Permissions.Prompt.Notifications.LocationBarLeftChipAutoBubble."
"IgnoredReason",
static_cast<base::HistogramBase::Sample32>(
permissions::PermissionIgnoredReason::TAB_CLOSED),
1);
}
IN_PROC_BROWSER_TEST_F(PermissionPromptMetricsTest,
IgnoreReasonUmaTestCloseBrowser) {
base::HistogramTester histograms;
ASSERT_TRUE(embedded_test_server()->Start());
const GURL url(embedded_test_server()->GetURL("/empty.html"));
TabStripModel* tab_strip = browser()->tab_strip_model();
content::WebContents* embedder_contents_tab_0 =
tab_strip->GetActiveWebContents();
ASSERT_TRUE(embedder_contents_tab_0);
content::RenderFrameHost* rfh_tab_0 =
ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(browser(), url,
1);
// Request Notification permission
permissions::PermissionRequestObserver observer_tab_0(
embedder_contents_tab_0);
EXPECT_TRUE(content::ExecJs(
rfh_tab_0, kRequestNotifications,
content::EvalJsOptions::EXECUTE_SCRIPT_NO_RESOLVE_PROMISES));
observer_tab_0.Wait();
// Close browser without decision
chrome::CloseWindow(browser());
ui_test_utils::WaitForBrowserToClose(browser());
histograms.ExpectUniqueSample(
"Permissions.Prompt.Notifications.LocationBarLeftChipAutoBubble."
"IgnoredReason",
static_cast<base::HistogramBase::Sample32>(
permissions::PermissionIgnoredReason::WINDOW_CLOSED),
1);
}
IN_PROC_BROWSER_TEST_F(PermissionPromptMetricsTest,
IgnoreReasonUmaTestNavigation) {
base::HistogramTester histograms;
ASSERT_TRUE(embedded_test_server()->Start());
const GURL url(embedded_test_server()->GetURL("/empty.html"));
TabStripModel* tab_strip = browser()->tab_strip_model();
content::WebContents* embedder_contents_tab_0 =
tab_strip->GetActiveWebContents();
ASSERT_TRUE(embedder_contents_tab_0);
content::RenderFrameHost* rfh_tab_0 =
ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(browser(), url,
1);
// Request Notification permission
permissions::PermissionRequestObserver observer_tab_0(
embedder_contents_tab_0);
EXPECT_TRUE(content::ExecJs(
rfh_tab_0, kRequestNotifications,
content::EvalJsOptions::EXECUTE_SCRIPT_NO_RESOLVE_PROMISES));
observer_tab_0.Wait();
// Navigation
ui_test_utils::NavigateToURLBlockUntilNavigationsComplete(browser(), url, 1);
histograms.ExpectUniqueSample(
"Permissions.Prompt.Notifications.LocationBarLeftChipAutoBubble."
"IgnoredReason",
static_cast<base::HistogramBase::Sample32>(
permissions::PermissionIgnoredReason::NAVIGATION),
1);
}