Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(447)

Unified Diff: chrome/browser/ui/content_settings/content_setting_bubble_model_unittest.cc

Issue 588153003: Remove MediaSettingChangedInfobar and show latest state in bubble (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: switch -> if Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/content_settings/content_setting_bubble_model_unittest.cc
diff --git a/chrome/browser/ui/content_settings/content_setting_bubble_model_unittest.cc b/chrome/browser/ui/content_settings/content_setting_bubble_model_unittest.cc
index e610488b632aaf95488edb2abca821a42e7ed20f..c10b8633d14f4d3fac966e694bf370215133440c 100644
--- a/chrome/browser/ui/content_settings/content_setting_bubble_model_unittest.cc
+++ b/chrome/browser/ui/content_settings/content_setting_bubble_model_unittest.cc
@@ -10,6 +10,7 @@
#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
#include "chrome/browser/infobars/infobar_service.h"
#include "chrome/browser/media/media_capture_devices_dispatcher.h"
+#include "chrome/browser/media/media_stream_capture_indicator.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/content_settings/content_setting_bubble_model.h"
#include "chrome/common/chrome_switches.h"
@@ -233,10 +234,243 @@ TEST_F(ContentSettingBubbleModelTest, BlockedMediastreamMicAndCamera) {
url,
CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA,
std::string()));
+}
+
+// Tests whether a changed setting in the setting bubble is displayed again when
+// the bubble is re-opened.
+TEST_F(ContentSettingBubbleModelTest, MediastreamContentBubble) {
+ // Required to break dependency on BrowserMainLoop.
+ MediaCaptureDevicesDispatcher::GetInstance()->
+ DisableDeviceEnumerationForTesting();
+
+ WebContentsTester::For(web_contents())->
+ NavigateAndCommit(GURL("https://www.example.com"));
+ GURL url = web_contents()->GetURL();
+
+ HostContentSettingsMap* host_content_settings_map =
+ profile()->GetHostContentSettingsMap();
+ ContentSettingsPattern primary_pattern =
+ ContentSettingsPattern::FromURL(url);
+ ContentSetting setting = CONTENT_SETTING_BLOCK;
+ host_content_settings_map->SetContentSetting(
+ primary_pattern,
+ ContentSettingsPattern::Wildcard(),
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
+ std::string(),
+ setting);
+
+ TabSpecificContentSettings* content_settings =
+ TabSpecificContentSettings::FromWebContents(web_contents());
+ MediaStreamDevicesController::MediaStreamTypeSettingsMap
+ request_permissions;
+ request_permissions[content::MEDIA_DEVICE_AUDIO_CAPTURE].permission =
+ MediaStreamDevicesController::MEDIA_BLOCKED_BY_USER;
+ content_settings->OnMediaStreamPermissionSet(url, request_permissions);
+ {
+ scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model(
+ ContentSettingBubbleModel::CreateContentSettingBubbleModel(
+ NULL, web_contents(), profile(),
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM));
+ const ContentSettingBubbleModel::BubbleContent& bubble_content =
+ content_setting_bubble_model->bubble_content();
+ // Test if the correct radio item is selected for the blocked mediastream
+ // setting.
+ EXPECT_EQ(1, bubble_content.radio_group.default_item);
+ // Change the radio setting.
+ content_setting_bubble_model->OnRadioClicked(0);
+ }
+ // Test that the setting was changed.
+ EXPECT_EQ(CONTENT_SETTING_ALLOW,
+ host_content_settings_map->GetContentSetting(
+ url,
+ url,
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
+ std::string()));
+
+ {
+ scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model(
+ ContentSettingBubbleModel::CreateContentSettingBubbleModel(
+ NULL, web_contents(), profile(),
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM));
+ const ContentSettingBubbleModel::BubbleContent& bubble_content =
+ content_setting_bubble_model->bubble_content();
+ // Test that the reload hint is displayed.
+ EXPECT_FALSE(bubble_content.custom_link_enabled);
+ EXPECT_EQ(bubble_content.custom_link, l10n_util::GetStringUTF8(
+ IDS_MEDIASTREAM_SETTING_CHANGED_MESSAGE));
+
+ EXPECT_EQ(0, bubble_content.radio_group.default_item);
+ // Restore the radio setting (to block).
+ content_setting_bubble_model->OnRadioClicked(1);
+ }
+ // Test that the media settings were changed again.
+ EXPECT_EQ(CONTENT_SETTING_BLOCK,
+ host_content_settings_map->GetContentSetting(
+ url,
+ url,
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC,
+ std::string()));
+
+ {
+ scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model(
+ ContentSettingBubbleModel::CreateContentSettingBubbleModel(
+ NULL, web_contents(), profile(),
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM));
+ const ContentSettingBubbleModel::BubbleContent& bubble_content =
+ content_setting_bubble_model->bubble_content();
+ // Test that the reload hint is not displayed any more.
+ EXPECT_FALSE(bubble_content.custom_link_enabled);
+ EXPECT_TRUE(bubble_content.custom_link.empty());
- InfoBarService* infobar_service =
- InfoBarService::FromWebContents(web_contents());
- infobar_service->RemoveInfoBar(infobar_service->infobar_at(0));
+ EXPECT_EQ(1, bubble_content.radio_group.default_item);
+ }
+}
+
+// Tests whether the media menu settings are correctly persisted in the bubble.
+TEST_F(ContentSettingBubbleModelTest, MediastreamContentBubbleMediaMenus) {
+ // Required to break dependency on BrowserMainLoop.
+ MediaCaptureDevicesDispatcher::GetInstance()->
+ DisableDeviceEnumerationForTesting();
+
+ WebContentsTester::For(web_contents())->
+ NavigateAndCommit(GURL("https://www.example.com"));
+ GURL url = web_contents()->GetURL();
+
+ content::MediaStreamDevices audio_devices;
+ content::MediaStreamDevice fake_audio_device1(
+ content::MEDIA_DEVICE_AUDIO_CAPTURE, "fake_dev1", "Fake Audio Device 1");
+ content::MediaStreamDevice fake_audio_device2(
+ content::MEDIA_DEVICE_AUDIO_CAPTURE, "fake_dev2", "Fake Audio Device 2");
+ content::MediaStreamDevice fake_audio_device3(
+ content::MEDIA_DEVICE_AUDIO_CAPTURE, "fake_dev3", "Fake Audio Device 3");
+ audio_devices.push_back(fake_audio_device1);
+ audio_devices.push_back(fake_audio_device2);
+ audio_devices.push_back(fake_audio_device3);
+ MediaCaptureDevicesDispatcher::GetInstance()->SetTestAudioCaptureDevices(
+ audio_devices);
+
+ TabSpecificContentSettings* content_settings =
+ TabSpecificContentSettings::FromWebContents(web_contents());
+ MediaStreamDevicesController::MediaStreamTypeSettingsMap
+ request_permissions;
+ request_permissions[content::MEDIA_DEVICE_AUDIO_CAPTURE].permission =
+ MediaStreamDevicesController::MEDIA_BLOCKED_BY_USER;
+ content_settings->OnMediaStreamPermissionSet(url, request_permissions);
+ {
+ scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model(
+ ContentSettingBubbleModel::CreateContentSettingBubbleModel(
+ NULL, web_contents(), profile(),
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM));
+ const ContentSettingBubbleModel::BubbleContent& bubble_content =
+ content_setting_bubble_model->bubble_content();
+ EXPECT_TRUE(bubble_content.custom_link.empty());
+
+ EXPECT_EQ(1U, bubble_content.media_menus.size());
+ EXPECT_EQ(content::MEDIA_DEVICE_AUDIO_CAPTURE,
+ bubble_content.media_menus.begin()->first);
+ EXPECT_FALSE(bubble_content.media_menus.begin()->second.disabled);
+ // The first audio device should be selected by default.
+ EXPECT_TRUE(fake_audio_device1.IsEqual(
+ bubble_content.media_menus.begin()->second.selected_device));
+
+ // Select a different (the second) device.
+ content_setting_bubble_model->OnMediaMenuClicked(
+ content::MEDIA_DEVICE_AUDIO_CAPTURE,
+ fake_audio_device2.id);
+ }
+ {
+ scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model(
+ ContentSettingBubbleModel::CreateContentSettingBubbleModel(
+ NULL, web_contents(), profile(),
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM));
+ const ContentSettingBubbleModel::BubbleContent& bubble_content =
+ content_setting_bubble_model->bubble_content();
+ EXPECT_EQ(1U, bubble_content.media_menus.size());
+ EXPECT_EQ(content::MEDIA_DEVICE_AUDIO_CAPTURE,
+ bubble_content.media_menus.begin()->first);
+ EXPECT_FALSE(bubble_content.media_menus.begin()->second.disabled);
+ // The second audio device should be selected.
+ EXPECT_TRUE(fake_audio_device2.IsEqual(
+ bubble_content.media_menus.begin()->second.selected_device));
+ // The "settings changed" message should not be displayed when there is no
+ // active capture.
+ EXPECT_FALSE(bubble_content.custom_link_enabled);
+ EXPECT_TRUE(bubble_content.custom_link.empty());
+ }
+
+ // Simulate that an audio stream is being captured.
+ scoped_refptr<MediaStreamCaptureIndicator> indicator =
+ MediaCaptureDevicesDispatcher::GetInstance()->
+ GetMediaStreamCaptureIndicator();
+ scoped_ptr<content::MediaStreamUI> media_stream_ui =
+ indicator->RegisterMediaStream(web_contents(), audio_devices);
+ media_stream_ui->OnStarted(base::Closure());
+ request_permissions[content::MEDIA_DEVICE_AUDIO_CAPTURE].permission =
+ MediaStreamDevicesController::MEDIA_ALLOWED;
+ content_settings->OnMediaStreamPermissionSet(url, request_permissions);
+
+ {
+ scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model(
+ ContentSettingBubbleModel::CreateContentSettingBubbleModel(
+ NULL, web_contents(), profile(),
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM));
+ const ContentSettingBubbleModel::BubbleContent& bubble_content =
+ content_setting_bubble_model->bubble_content();
+ // Settings not changed yet, so the "settings changed" message should not be
+ // shown.
+ EXPECT_TRUE(bubble_content.custom_link.empty());
+
+ EXPECT_EQ(1U, bubble_content.media_menus.size());
+ EXPECT_EQ(content::MEDIA_DEVICE_AUDIO_CAPTURE,
+ bubble_content.media_menus.begin()->first);
+ EXPECT_FALSE(bubble_content.media_menus.begin()->second.disabled);
+ EXPECT_TRUE(fake_audio_device2.IsEqual(
+ bubble_content.media_menus.begin()->second.selected_device));
+
+ // Select a different different device.
+ content_setting_bubble_model->OnMediaMenuClicked(
+ content::MEDIA_DEVICE_AUDIO_CAPTURE,
+ fake_audio_device3.id);
+ }
+
+ {
+ scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model(
+ ContentSettingBubbleModel::CreateContentSettingBubbleModel(
+ NULL, web_contents(), profile(),
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM));
+ const ContentSettingBubbleModel::BubbleContent& bubble_content =
+ content_setting_bubble_model->bubble_content();
+ // Test that the reload hint is displayed.
+ EXPECT_FALSE(bubble_content.custom_link_enabled);
+ EXPECT_EQ(bubble_content.custom_link, l10n_util::GetStringUTF8(
+ IDS_MEDIASTREAM_SETTING_CHANGED_MESSAGE));
+ }
+
+ // Simulate that yet another audio stream capture request was initiated.
+ request_permissions[content::MEDIA_DEVICE_AUDIO_CAPTURE].permission =
+ MediaStreamDevicesController::MEDIA_BLOCKED_BY_USER;
+ content_settings->OnMediaStreamPermissionSet(url, request_permissions);
+
+ {
+ scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model(
+ ContentSettingBubbleModel::CreateContentSettingBubbleModel(
+ NULL, web_contents(), profile(),
+ CONTENT_SETTINGS_TYPE_MEDIASTREAM));
+ const ContentSettingBubbleModel::BubbleContent& bubble_content =
+ content_setting_bubble_model->bubble_content();
+ // Test that the reload hint is not displayed any more, because this is a
+ // new permission request.
+ EXPECT_FALSE(bubble_content.custom_link_enabled);
+ EXPECT_TRUE(bubble_content.custom_link.empty());
+
+ // Though the audio menu setting should have persisted.
+ EXPECT_EQ(1U, bubble_content.media_menus.size());
+ EXPECT_EQ(content::MEDIA_DEVICE_AUDIO_CAPTURE,
+ bubble_content.media_menus.begin()->first);
+ EXPECT_FALSE(bubble_content.media_menus.begin()->second.disabled);
+ EXPECT_TRUE(fake_audio_device3.IsEqual(
+ bubble_content.media_menus.begin()->second.selected_device));
+ }
}
TEST_F(ContentSettingBubbleModelTest, MediastreamMic) {

Powered by Google App Engine
This is Rietveld 408576698