1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/content_settings/browser/page_specific_content_settings.h"
#include "base/metrics/histogram_base.h"
#include "base/test/metrics/histogram_tester.h"
#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
#include "chrome/browser/content_settings/page_specific_content_settings_delegate.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "components/permissions/permission_recovery_success_rate_tracker.h"
#include "content/public/browser/web_contents.h"
#include "testing/gmock/include/gmock/gmock-matchers.h"
namespace content_settings {
class PageSpecificContentSettingsTest : public ChromeRenderViewHostTestHarness {
public:
PageSpecificContentSettingsTest()
: ChromeRenderViewHostTestHarness(
base::test::TaskEnvironment::TimeSource::MOCK_TIME) {}
void SetUp() override {
ChromeRenderViewHostTestHarness::SetUp();
PageSpecificContentSettings::CreateForWebContents(
web_contents(),
std::make_unique<PageSpecificContentSettingsDelegate>(web_contents()));
permissions::PermissionRecoverySuccessRateTracker::CreateForWebContents(
web_contents());
}
};
TEST_F(PageSpecificContentSettingsTest, HistogramTest) {
base::HistogramTester histograms;
const GURL test_url("https://test.com/");
const char kGeolocationHistogramName[] =
"Permissions.Usage.ElapsedTimeSinceGrant.Geolocation";
const char kMicrophoneHistogramName[] =
"Permissions.Usage.ElapsedTimeSinceGrant.AudioCapture";
const char kCameraHistogramName[] =
"Permissions.Usage.ElapsedTimeSinceGrant.VideoCapture";
NavigateAndCommit(test_url);
HostContentSettingsMap* map =
HostContentSettingsMapFactory::GetForProfile(profile());
map->SetContentSettingDefaultScope(test_url, test_url,
ContentSettingsType::GEOLOCATION,
ContentSetting::CONTENT_SETTING_ALLOW);
map->SetContentSettingDefaultScope(test_url, test_url,
ContentSettingsType::MEDIASTREAM_MIC,
ContentSetting::CONTENT_SETTING_ALLOW);
map->SetContentSettingDefaultScope(test_url, test_url,
ContentSettingsType::MEDIASTREAM_CAMERA,
ContentSetting::CONTENT_SETTING_ALLOW);
task_environment()->FastForwardBy(base::Seconds(1));
PageSpecificContentSettings* content_settings =
PageSpecificContentSettings::GetForFrame(
web_contents()->GetPrimaryMainFrame());
histograms.ExpectTotalCount(kGeolocationHistogramName, 0);
content_settings->OnContentAllowed(ContentSettingsType::GEOLOCATION);
histograms.ExpectTotalCount(kGeolocationHistogramName, 1);
EXPECT_THAT(histograms.GetAllSamples(kGeolocationHistogramName),
testing::ElementsAre(base::Bucket(1, 1)));
content_settings->OnContentAllowed(ContentSettingsType::GEOLOCATION);
// Count should stay same even after multiple usage of permission
histograms.ExpectTotalCount(kGeolocationHistogramName, 1);
content_settings->OnContentAllowed(ContentSettingsType::NOTIFICATIONS);
// Count should stay same even if a different permission is used
histograms.ExpectTotalCount(kGeolocationHistogramName, 1);
PageSpecificContentSettings::MicrophoneCameraState microphone_accessed{
PageSpecificContentSettings::kMicrophoneAccessed,
PageSpecificContentSettings::kCameraAccessed,
PageSpecificContentSettings::kCameraBlocked,
};
histograms.ExpectTotalCount(kMicrophoneHistogramName, 0);
content_settings->OnMediaStreamPermissionSet(test_url, microphone_accessed);
histograms.ExpectTotalCount(kMicrophoneHistogramName, 1);
EXPECT_THAT(histograms.GetAllSamples(kMicrophoneHistogramName),
testing::ElementsAre(base::Bucket(1, 1)));
const PageSpecificContentSettings::MicrophoneCameraState mic_camera_accessed{
PageSpecificContentSettings::kMicrophoneAccessed,
PageSpecificContentSettings::kCameraAccessed,
};
histograms.ExpectTotalCount(kCameraHistogramName, 0);
content_settings->OnMediaStreamPermissionSet(test_url, mic_camera_accessed);
histograms.ExpectTotalCount(kCameraHistogramName, 1);
EXPECT_THAT(histograms.GetAllSamples(kCameraHistogramName),
testing::ElementsAre(base::Bucket(1, 1)));
content_settings->OnMediaStreamPermissionSet(test_url, mic_camera_accessed);
// Count should stay same even after multiple usage of permission
histograms.ExpectTotalCount(kMicrophoneHistogramName, 1);
histograms.ExpectTotalCount(kCameraHistogramName, 1);
// Count should stay same even if a different permission is used
histograms.ExpectTotalCount(kMicrophoneHistogramName, 1);
histograms.ExpectTotalCount(kCameraHistogramName, 1);
}
} // namespace content_settings
|