content_setting_bubble_model_unittest.cc revision 868fa2fe829687343ffae624259930155e16dbd8
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/auto_reset.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/host_content_settings_map.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/tab_specific_content_settings.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/custom_handlers/protocol_handler_registry.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_delegate.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "chrome/browser/media/media_capture_devices_dispatcher.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/content_settings/content_setting_bubble_model.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/content_settings.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/chrome_render_view_host_test_harness.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/test/web_contents_tester.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContentsTester; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingBubbleModelTest : public ChromeRenderViewHostTestHarness { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ChromeRenderViewHostTestHarness::SetUp(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::CreateForWebContents(web_contents()); 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InfoBarService::CreateForWebContents(web_contents()); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CheckGeolocationBubble(size_t expected_domains, 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool expect_clear_link, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool expect_reload_hint) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model( 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingBubbleModel::CreateContentSettingBubbleModel( 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, web_contents(), profile(), 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_GEOLOCATION)); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingBubbleModel::BubbleContent& bubble_content = 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_setting_bubble_model->bubble_content(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(bubble_content.title.empty()); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(bubble_content.radio_group.radio_items.empty()); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(bubble_content.popup_items.empty()); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expected_domains, bubble_content.domain_lists.size()); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(expect_clear_link || expect_reload_hint, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bubble_content.custom_link.empty()); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(expect_clear_link, bubble_content.custom_link_enabled); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bubble_content.manage_link.empty()); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContentSettingBubbleModelTest, ImageRadios) { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->OnContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string()); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model( 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingBubbleModel::CreateContentSettingBubbleModel( 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, web_contents(), profile(), 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES)); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingBubbleModel::BubbleContent& bubble_content = 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_setting_bubble_model->bubble_content(); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bubble_content.title.empty()); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, bubble_content.radio_group.radio_items.size()); 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, bubble_content.radio_group.default_item); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(bubble_content.custom_link.empty()); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bubble_content.manage_link.empty()); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContentSettingBubbleModelTest, Cookies) { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string()); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model( 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingBubbleModel::CreateContentSettingBubbleModel( 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL, web_contents(), profile(), CONTENT_SETTINGS_TYPE_COOKIES)); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingBubbleModel::BubbleContent& bubble_content = 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_setting_bubble_model->bubble_content(); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string title = bubble_content.title; 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(title.empty()); 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2U, bubble_content.radio_group.radio_items.size()); 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string radio1 = bubble_content.radio_group.radio_items[0]; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string radio2 = bubble_content.radio_group.radio_items[1]; 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bubble_content.custom_link.empty()); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(bubble_content.custom_link_enabled); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bubble_content.manage_link.empty()); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_settings->ClearCookieSpecificContentSettings(); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_settings->OnContentAllowed(CONTENT_SETTINGS_TYPE_COOKIES); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_setting_bubble_model.reset( 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingBubbleModel::CreateContentSettingBubbleModel( 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL, web_contents(), profile(), CONTENT_SETTINGS_TYPE_COOKIES)); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ContentSettingBubbleModel::BubbleContent& bubble_content_2 = 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_setting_bubble_model->bubble_content(); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(bubble_content_2.title.empty()); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(title, bubble_content_2.title); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2U, bubble_content_2.radio_group.radio_items.size()); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(bauerb): Update this once the strings have been updated. 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(radio1, bubble_content_2.radio_group.radio_items[0]); 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(radio2, bubble_content_2.radio_group.radio_items[1]); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(bubble_content_2.custom_link.empty()); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(bubble_content_2.custom_link_enabled); 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(bubble_content_2.manage_link.empty()); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ContentSettingBubbleModelTest, Mediastream) { 113868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Required to break dependency on BrowserMainLoop. 114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) MediaCaptureDevicesDispatcher::GetInstance()-> 115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DisableDeviceEnumerationForTesting(); 116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model( 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingBubbleModel::CreateContentSettingBubbleModel( 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL, web_contents(), profile(), 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM)); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ContentSettingBubbleModel::BubbleContent& bubble_content = 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_setting_bubble_model->bubble_content(); 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(bubble_content.title.empty()); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2U, bubble_content.radio_group.radio_items.size()); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0, bubble_content.radio_group.default_item); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE(bubble_content.custom_link.empty()); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(bubble_content.custom_link_enabled); 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(bubble_content.manage_link.empty()); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(2U, bubble_content.media_menus.size()); 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ContentSettingBubbleModelTest, BlockedMediastream) { 133868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Required to break dependency on BrowserMainLoop. 134868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) MediaCaptureDevicesDispatcher::GetInstance()-> 135868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DisableDeviceEnumerationForTesting(); 136868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContentsTester::For(web_contents())-> 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NavigateAndCommit(GURL("https://www.example.com")); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL url = web_contents()->GetURL(); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HostContentSettingsMap* host_content_settings_map = 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile()->GetHostContentSettingsMap(); 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsPattern primary_pattern = 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsPattern::FromURL(url); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSetting setting = CONTENT_SETTING_BLOCK; 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_content_settings_map->SetContentSetting( 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) primary_pattern, 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsPattern::Wildcard(), 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string(), 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setting); 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_content_settings_map->SetContentSetting( 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) primary_pattern, 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsPattern::Wildcard(), 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string(), 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) setting); 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabSpecificContentSettings* content_settings = 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_settings->OnContentBlocked(CONTENT_SETTINGS_TYPE_MEDIASTREAM, 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string()); 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model( 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingBubbleModel::CreateContentSettingBubbleModel( 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL, web_contents(), profile(), 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM)); 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ContentSettingBubbleModel::BubbleContent& bubble_content = 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_setting_bubble_model->bubble_content(); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test if the correct radio item is selected for the blocked mediastream 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // setting. 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1, bubble_content.radio_group.default_item); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test that the media settings where not changed. 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_BLOCK, 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_content_settings_map->GetContentSetting( 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url, 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url, 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string())); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_BLOCK, 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_content_settings_map->GetContentSetting( 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url, 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url, 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string())); 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) { 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model( 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingBubbleModel::CreateContentSettingBubbleModel( 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL, web_contents(), profile(), 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM)); 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Change the radio setting. 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_setting_bubble_model->OnRadioClicked(0); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Test that the media setting were change correctly. 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_ALLOW, 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_content_settings_map->GetContentSetting( 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url, 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url, 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string())); 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_ALLOW, 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host_content_settings_map->GetContentSetting( 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url, 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url, 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string())); 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Removing an |InfoBarDelegate| from the |InfoBarService| does not delete 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // it. Hence the |delegate| must be cleaned up after it was removed from the 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |infobar_service|. 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InfoBarService* infobar_service = 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InfoBarService::FromWebContents(web_contents()); 216c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_ptr<InfoBarDelegate> delegate(infobar_service->infobar_at(0)); 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) infobar_service->RemoveInfoBar(delegate.get()); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContentSettingBubbleModelTest, Plugins) { 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->OnContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS, 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string()); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model( 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingBubbleModel::CreateContentSettingBubbleModel( 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, web_contents(), profile(), 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_PLUGINS)); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingBubbleModel::BubbleContent& bubble_content = 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_setting_bubble_model->bubble_content(); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bubble_content.title.empty()); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, bubble_content.radio_group.radio_items.size()); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bubble_content.custom_link.empty()); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(bubble_content.custom_link_enabled); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bubble_content.manage_link.empty()); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContentSettingBubbleModelTest, MultiplePlugins) { 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CommandLine* cmd = CommandLine::ForCurrentProcess(); 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::AutoReset<CommandLine> auto_reset(cmd, *cmd); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) cmd->AppendSwitch(switches::kEnableResourceContentSettings); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostContentSettingsMap* map = profile()->GetHostContentSettingsMap(); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string fooPlugin = "foo"; 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string barPlugin = "bar"; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Navigating to some sample url prevents the GetURL method from returning an 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // invalid empty URL. 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContentsTester::For(web_contents())-> 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateAndCommit(GURL("http://www.example.com")); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = web_contents()->GetURL(); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map->AddExceptionForURL(url, 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_PLUGINS, 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fooPlugin, 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_ALLOW); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map->AddExceptionForURL(url, 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_PLUGINS, 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) barPlugin, 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_ASK); 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->OnContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS, 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fooPlugin); 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->OnContentBlocked(CONTENT_SETTINGS_TYPE_PLUGINS, 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) barPlugin); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model( 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingBubbleModel::CreateContentSettingBubbleModel( 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, web_contents(), profile(), 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_PLUGINS)); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingBubbleModel::BubbleContent& bubble_content = 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_setting_bubble_model->bubble_content(); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2U, bubble_content.radio_group.radio_items.size()); 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, bubble_content.radio_group.default_item); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_setting_bubble_model->OnRadioClicked(0); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Nothing should have changed. 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_ALLOW, 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map->GetContentSetting(url, 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_PLUGINS, 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fooPlugin)); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_ASK, 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map->GetContentSetting(url, 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_PLUGINS, 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) barPlugin)); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_setting_bubble_model.reset(); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Both plug-ins should be click-to-play now. 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_ALLOW, 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map->GetContentSetting(url, 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_PLUGINS, 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) fooPlugin)); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_ALLOW, 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) map->GetContentSetting(url, 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_PLUGINS, 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) barPlugin)); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(ContentSettingBubbleModelTest, PepperBroker) { 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabSpecificContentSettings* content_settings = 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_settings->OnContentBlocked(CONTENT_SETTINGS_TYPE_PPAPI_BROKER, 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string()); 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model( 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingBubbleModel::CreateContentSettingBubbleModel( 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL, web_contents(), profile(), 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_PPAPI_BROKER)); 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ContentSettingBubbleModel::BubbleContent& bubble_content = 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_setting_bubble_model->bubble_content(); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string title = bubble_content.title; 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(title.empty()); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2U, bubble_content.radio_group.radio_items.size()); 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string radio1 = bubble_content.radio_group.radio_items[0]; 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string radio2 = bubble_content.radio_group.radio_items[1]; 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(bubble_content.custom_link_enabled); 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(bubble_content.manage_link.empty()); 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_settings->ClearBlockedContentSettingsExceptForCookies(); 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_settings->OnContentAllowed(CONTENT_SETTINGS_TYPE_PPAPI_BROKER); 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_setting_bubble_model.reset( 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingBubbleModel::CreateContentSettingBubbleModel( 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) NULL, web_contents(), profile(), 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_PPAPI_BROKER)); 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ContentSettingBubbleModel::BubbleContent& bubble_content_2 = 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_setting_bubble_model->bubble_content(); 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(bubble_content_2.title.empty()); 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(title, bubble_content_2.title); 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_EQ(2U, bubble_content_2.radio_group.radio_items.size()); 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(radio1, bubble_content_2.radio_group.radio_items[0]); 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_NE(radio2, bubble_content_2.radio_group.radio_items[1]); 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(bubble_content_2.custom_link_enabled); 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE(bubble_content_2.manage_link.empty()); 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContentSettingBubbleModelTest, Geolocation) { 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL page_url("http://toplevel.example/"); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL frame1_url("http://host1.example/"); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL frame2_url("http://host2.example:999/"); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateAndCommit(page_url); 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // One permitted frame, but not in the content map: requires reload. 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->OnGeolocationPermissionSet(frame1_url, true); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckGeolocationBubble(1, false, true); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add it to the content map, should now have a clear link. 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostContentSettingsMap* setting_map = 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->GetHostContentSettingsMap(); 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setting_map->SetContentSetting( 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURLNoWildcard(frame1_url), 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURLNoWildcard(page_url), 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_GEOLOCATION, 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string(), 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_ALLOW); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckGeolocationBubble(1, true, false); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Change the default to allow: no message needed. 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->GetHostContentSettingsMap()->SetDefaultContentSetting( 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_GEOLOCATION, CONTENT_SETTING_ALLOW); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckGeolocationBubble(1, false, false); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Second frame denied, but not stored in the content map: requires reload. 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->OnGeolocationPermissionSet(frame2_url, false); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckGeolocationBubble(2, false, true); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Change the default to block: offer a clear link for the persisted frame 1. 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->GetHostContentSettingsMap()->SetDefaultContentSetting( 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_GEOLOCATION, CONTENT_SETTING_BLOCK); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CheckGeolocationBubble(2, true, false); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContentSettingBubbleModelTest, FileURL) { 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string file_url("file:///tmp/test.html"); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateAndCommit(GURL(file_url)); 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents())->OnContentBlocked( 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES, std::string()); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<ContentSettingBubbleModel> content_setting_bubble_model( 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingBubbleModel::CreateContentSettingBubbleModel( 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, web_contents(), profile(), 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_IMAGES)); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string title = 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_setting_bubble_model->bubble_content().radio_group.radio_items[0]; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_NE(std::string::npos, title.find(file_url)); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContentSettingBubbleModelTest, RegisterProtocolHandler) { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL page_url("http://toplevel.example/"); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateAndCommit(page_url); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->set_pending_protocol_handler( 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler::CreateProtocolHandler("mailto", 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.toplevel.example/"), ASCIIToUTF16("Handler"))); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingRPHBubbleModel content_setting_bubble_model( 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, web_contents(), profile(), NULL, 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingBubbleModel::BubbleContent& bubble_content = 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_setting_bubble_model.bubble_content(); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bubble_content.title.empty()); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bubble_content.radio_group.radio_items.empty()); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(bubble_content.popup_items.empty()); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(bubble_content.domain_lists.empty()); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(bubble_content.custom_link.empty()); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bubble_content.custom_link_enabled); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bubble_content.manage_link.empty()); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FakeDelegate : public ProtocolHandlerRegistry::Delegate { 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void RegisterExternalHandler(const std::string& protocol) OVERRIDE { 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Overrides in order to not register the handler with the 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ChildProcessSecurityPolicy. That has persistent and unalterable 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // side effects on other tests. 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ShellIntegration::DefaultProtocolClientWorker* CreateShellWorker( 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ShellIntegration::DefaultWebClientObserver* observer, 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& protocol) OVERRIDE { 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(1) << "CreateShellWorker"; 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ProtocolHandlerRegistry::DefaultClientObserver* CreateShellObserver( 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProtocolHandlerRegistry* registry) OVERRIDE { 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void RegisterWithOSAsDefaultClient( 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& protocol, 4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProtocolHandlerRegistry* registry) OVERRIDE { 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) VLOG(1) << "Register With OS"; 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ContentSettingBubbleModelTest, RPHAllow) { 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry registry(profile(), new FakeDelegate()); 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry.InitProtocolSettings(); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL page_url("http://toplevel.example/"); 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NavigateAndCommit(page_url); 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler test_handler = ProtocolHandler::CreateProtocolHandler( 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "mailto", GURL("http://www.toplevel.example/"), 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASCIIToUTF16("Handler")); 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->set_pending_protocol_handler(test_handler); 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingRPHBubbleModel content_setting_bubble_model( 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, web_contents(), profile(), ®istry, 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler handler = registry.GetHandlerFor("mailto"); 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(handler.IsEmpty()); 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_DEFAULT, 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->pending_protocol_handler_setting()); 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "0" is the "Allow" radio button. 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_setting_bubble_model.OnRadioClicked(0); 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler handler = registry.GetHandlerFor("mailto"); 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(handler.IsEmpty()); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Handler"), handler.title()); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_ALLOW, 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->pending_protocol_handler_setting()); 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "1" is the "Deny" radio button. 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_setting_bubble_model.OnRadioClicked(1); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler handler = registry.GetHandlerFor("mailto"); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(handler.IsEmpty()); 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_BLOCK, 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->pending_protocol_handler_setting()); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "2" is the "Ignore button. 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_setting_bubble_model.OnRadioClicked(2); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler handler = registry.GetHandlerFor("mailto"); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(handler.IsEmpty()); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_DEFAULT, 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->pending_protocol_handler_setting()); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(registry.IsIgnored(test_handler)); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // "0" is the "Allow" radio button. 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_setting_bubble_model.OnRadioClicked(0); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandler handler = registry.GetHandlerFor("mailto"); 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_FALSE(handler.IsEmpty()); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ASCIIToUTF16("Handler"), handler.title()); 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(CONTENT_SETTING_ALLOW, 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->pending_protocol_handler_setting()); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(registry.IsIgnored(test_handler)); 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry.Shutdown(); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 516