Chromium Code Reviews| Index: chrome/browser/permissions/permission_context_base_unittest.cc |
| diff --git a/chrome/browser/permissions/permission_context_base_unittest.cc b/chrome/browser/permissions/permission_context_base_unittest.cc |
| index 3e672099546186d4a3ad21d8c9283c85d7a81367..d968443ed083688790e4998c5175e9027c09383c 100644 |
| --- a/chrome/browser/permissions/permission_context_base_unittest.cc |
| +++ b/chrome/browser/permissions/permission_context_base_unittest.cc |
| @@ -6,10 +6,14 @@ |
| #include "base/bind.h" |
| #include "base/command_line.h" |
| +#include "base/metrics/field_trial.h" |
| +#include "base/test/mock_entropy_provider.h" |
| #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
| #include "chrome/browser/infobars/infobar_service.h" |
| +#include "chrome/browser/permissions/permission_context_uma_util.h" |
| #include "chrome/browser/permissions/permission_queue_controller.h" |
| #include "chrome/browser/permissions/permission_request_id.h" |
| +#include "chrome/browser/permissions/permission_util.h" |
| #include "chrome/browser/ui/website_settings/permission_bubble_manager.h" |
| #include "chrome/common/chrome_switches.h" |
| #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| @@ -17,12 +21,19 @@ |
| #include "components/content_settings/core/browser/host_content_settings_map.h" |
| #include "components/content_settings/core/common/content_settings.h" |
| #include "components/content_settings/core/common/content_settings_types.h" |
| +#include "components/variations/variations_associated_data.h" |
| #include "content/public/browser/render_frame_host.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/test/mock_render_process_host.h" |
| #include "content/public/test/web_contents_tester.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| +static const char* kPermissionsKillSwitchFieldStudy = |
|
Bernhard Bauer
2015/10/21 10:29:04
No need for static, as const variables automatical
kcarattini
2015/10/26 00:30:59
Done.
|
| + PermissionContextBase::kPermissionsKillSwitchFieldStudy; |
| +static const char* kPermissionsKillSwitchBlockedValue = |
| + PermissionContextBase::kPermissionsKillSwitchBlockedValue; |
| +static const char kPermissionsKillSwitchTestGroup[] = "TestGroup"; |
| + |
| class TestPermissionContext : public PermissionContextBase { |
| public: |
| TestPermissionContext(Profile* profile, |
| @@ -30,7 +41,9 @@ class TestPermissionContext : public PermissionContextBase { |
| : PermissionContextBase(profile, permission_type), |
| permission_set_(false), |
| permission_granted_(false), |
| - tab_context_updated_(false) {} |
| + tab_context_updated_(false), |
| + field_trial_list_(new base::FieldTrialList(new base::MockEntropyProvider)) |
| + {} |
| ~TestPermissionContext() override {} |
| @@ -55,6 +68,15 @@ class TestPermissionContext : public PermissionContextBase { |
| permission_granted_ = content_setting == CONTENT_SETTING_ALLOW; |
| } |
| + void ResetFieldTrialList() { |
| + // Destroy the existing FieldTrialList before creating a new one to avoid |
| + // a DCHECK. |
| + field_trial_list_.reset(); |
| + field_trial_list_.reset(new base::FieldTrialList( |
| + new base::MockEntropyProvider)); |
| + variations::testing::ClearAllVariationParams(); |
| + } |
| + |
| protected: |
| void UpdateTabContext(const PermissionRequestID& id, |
| const GURL& requesting_origin, |
| @@ -70,6 +92,7 @@ class TestPermissionContext : public PermissionContextBase { |
| bool permission_set_; |
| bool permission_granted_; |
| bool tab_context_updated_; |
| + scoped_ptr<base::FieldTrialList> field_trial_list_; |
| }; |
| class PermissionContextBaseTests : public ChromeRenderViewHostTestHarness { |
| @@ -227,6 +250,23 @@ class PermissionContextBaseTests : public ChromeRenderViewHostTestHarness { |
| EXPECT_EQ(default_setting, setting_after_reset); |
| } |
| + void TestGlobalPermissionsKillSwitch(ContentSettingsType type) { |
| + TestPermissionContext permission_context( |
|
Bernhard Bauer
2015/10/21 10:29:03
This should fit on one line.
kcarattini
2015/10/26 00:30:59
Done.
|
| + profile(), type); |
| + permission_context.ResetFieldTrialList(); |
| + |
| + EXPECT_FALSE(permission_context.IsPermissionKillSwitchOn()); |
| + std::map<std::string, std::string> params; |
| + params[PermissionUtil::GetPermissionString(type)] = |
| + kPermissionsKillSwitchBlockedValue; |
| + variations::AssociateVariationParams( |
| + kPermissionsKillSwitchFieldStudy, kPermissionsKillSwitchTestGroup, |
| + params); |
| + base::FieldTrialList::CreateFieldTrial(kPermissionsKillSwitchFieldStudy, |
| + kPermissionsKillSwitchTestGroup); |
| + EXPECT_TRUE(permission_context.IsPermissionKillSwitchOn()); |
| + } |
| + |
| private: |
| // ChromeRenderViewHostTestHarness: |
| void SetUp() override { |
| @@ -297,3 +337,18 @@ TEST_F(PermissionContextBaseTests, TestGrantAndRevokeWithBubbles) { |
| CONTENT_SETTING_ASK); |
| } |
| #endif |
| + |
| +// Tests the global kill switch by enabling/disabling the Field Trials. |
| +TEST_F(PermissionContextBaseTests, TestGlobalKillSwitch) { |
| + TestGlobalPermissionsKillSwitch(CONTENT_SETTINGS_TYPE_GEOLOCATION); |
| + TestGlobalPermissionsKillSwitch(CONTENT_SETTINGS_TYPE_NOTIFICATIONS); |
| + TestGlobalPermissionsKillSwitch(CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
| + TestGlobalPermissionsKillSwitch(CONTENT_SETTINGS_TYPE_PUSH_MESSAGING); |
| + TestGlobalPermissionsKillSwitch(CONTENT_SETTINGS_TYPE_DURABLE_STORAGE); |
| +#if defined(OS_ANDROID) || defined(OS_CHROMEOS) |
| + TestGlobalPermissionsKillSwitch( |
| + CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER); |
| +#endif |
| + TestGlobalPermissionsKillSwitch(CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC); |
| + TestGlobalPermissionsKillSwitch(CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA); |
| +} |