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 "chrome/browser/ui/content_settings/content_setting_bubble_model.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/command_line.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/content_settings_utils.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/cookie_settings.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/tab_specific_content_settings.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/custom_handlers/protocol_handler_registry.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/favicon/favicon_tab_helper.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media/media_capture_devices_dispatcher.h" 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/plugins/chrome_plugin_service_filter.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/blocked_content/blocked_content_tab_helper_delegate.h" 23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h" 24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/ui/browser_navigator.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/collected_cookies_infobar_delegate.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/content_settings/content_setting_bubble_model_delegate.h" 27fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch#include "chrome/browser/ui/content_settings/media_setting_changed_infobar_delegate.h" 28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/common/chrome_switches.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/content_settings.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/render_messages.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/render_process_host.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/user_metrics.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_delegate.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "grit/generated_resources.h" 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "grit/theme_resources.h" 40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "grit/ui_resources.h" 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_util.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 43ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "ui/base/resource/resource_bundle.h" 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::UserMetricsAction; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content_settings::SettingInfo; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content_settings::SettingSource; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content_settings::SETTING_SOURCE_USER; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content_settings::SETTING_SOURCE_NONE; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ContentSettingsTypeIdEntry { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType type; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GetIdForContentType(const ContentSettingsTypeIdEntry* entries, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t num_entries, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType type) { 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < num_entries; ++i) { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (entries[i].type == type) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return entries[i].id; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const content::MediaStreamDevice& GetMediaDeviceById( 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& device_id, 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::MediaStreamDevices& devices) { 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!devices.empty()); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (content::MediaStreamDevices::const_iterator it = devices.begin(); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) it != devices.end(); ++it) { 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (it->id == device_id) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return *(it); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A device with the |device_id| was not found. It is likely that the device 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // has been unplugged from the OS. Return the first device as the default 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // device. 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return *devices.begin(); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingTitleAndLinkModel::ContentSettingTitleAndLinkModel( 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingBubbleModel(web_contents, profile, content_type), 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_(delegate) { 937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Notifications do not have a bubble. 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_NE(content_type, CONTENT_SETTINGS_TYPE_NOTIFICATIONS); 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SetBlockedResources(); 967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SetTitle(); 977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SetManageLink(); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingTitleAndLinkModel::SetBlockedResources() { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* settings = 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::set<std::string>& resources = settings->BlockedResourcesForType( 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type()); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::set<std::string>::const_iterator it = resources.begin(); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != resources.end(); ++it) { 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddBlockedResource(*it); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingTitleAndLinkModel::SetTitle() { 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const ContentSettingsTypeIdEntry kBlockedTitleIDs[] = { 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_TITLE}, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_IMAGES, IDS_BLOCKED_IMAGES_TITLE}, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDS_BLOCKED_JAVASCRIPT_TITLE}, 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_MESSAGE}, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_TITLE}, 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_BLOCKED_DISPLAYING_INSECURE_CONTENT}, 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_BLOCKED_PPAPI_BROKER_TITLE}, 1227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOAD_TITLE}, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fields as for kBlockedTitleIDs, above. 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const ContentSettingsTypeIdEntry 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kResourceSpecificBlockedTitleIDs[] = { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_TITLE}, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const ContentSettingsTypeIdEntry kAccessedTitleIDs[] = { 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_ACCESSED_COOKIES_TITLE}, 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_ALLOWED_PPAPI_BROKER_TITLE}, 1327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_ALLOWED_DOWNLOAD_TITLE}, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsTypeIdEntry *title_ids = kBlockedTitleIDs; 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t num_title_ids = arraysize(kBlockedTitleIDs); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_contents() && 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents( 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents())->IsContentAllowed(content_type()) && 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !TabSpecificContentSettings::FromWebContents( 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents())->IsContentBlocked(content_type())) { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_ids = kAccessedTitleIDs; 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_title_ids = arraysize(kAccessedTitleIDs); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (!bubble_content().resource_identifiers.empty()) { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_ids = kResourceSpecificBlockedTitleIDs; 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_title_ids = arraysize(kResourceSpecificBlockedTitleIDs); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int title_id = 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetIdForContentType(title_ids, num_title_ids, content_type()); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (title_id) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_title(l10n_util::GetStringUTF8(title_id)); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingTitleAndLinkModel::SetManageLink() { 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const ContentSettingsTypeIdEntry kLinkIDs[] = { 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_LINK}, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_IMAGES, IDS_BLOCKED_IMAGES_LINK}, 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDS_BLOCKED_JAVASCRIPT_LINK}, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_LINK}, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_LINK}, 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_GEOLOCATION, IDS_GEOLOCATION_BUBBLE_MANAGE_LINK}, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, IDS_LEARN_MORE}, 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS, IDS_HANDLERS_BUBBLE_MANAGE_LINK}, 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_MEDIASTREAM, IDS_MEDIASTREAM_BUBBLE_MANAGE_LINK}, 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_PPAPI_BROKER_BUBBLE_MANAGE_LINK}, 1657dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOADS_LINK}, 1664311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch {CONTENT_SETTINGS_TYPE_MIDI_SYSEX, IDS_MIDI_SYSEX_BUBBLE_MANAGE_LINK}, 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_manage_link(l10n_util::GetStringUTF8( 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetIdForContentType(kLinkIDs, arraysize(kLinkIDs), content_type()))); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingTitleAndLinkModel::OnManageLinkClicked() { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->ShowContentSettingsPage(content_type()); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingTitleLinkAndCustomModel 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public ContentSettingTitleAndLinkModel { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingTitleLinkAndCustomModel(Delegate* delegate, 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentSettingTitleLinkAndCustomModel() {} 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetCustomLink(); 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnCustomLinkClicked() OVERRIDE {} 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingTitleLinkAndCustomModel::ContentSettingTitleLinkAndCustomModel( 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingTitleAndLinkModel( 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate, web_contents, profile, content_type) { 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCustomLink(); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingTitleLinkAndCustomModel::SetCustomLink() { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const ContentSettingsTypeIdEntry kCustomIDs[] = { 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_INFO}, 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_LOAD_ALL}, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, IDS_ALLOW_INSECURE_CONTENT_BUTTON}, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int custom_link_id = 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetIdForContentType(kCustomIDs, arraysize(kCustomIDs), content_type()); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (custom_link_id) 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_custom_link(l10n_util::GetStringUTF8(custom_link_id)); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingSingleRadioGroup 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public ContentSettingTitleLinkAndCustomModel { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingSingleRadioGroup(Delegate* delegate, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentSettingSingleRadioGroup(); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool settings_changed() const; 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetRadioGroup(); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddException(ContentSetting setting, 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& resource_identifier); 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnRadioClicked(int radio_index) OVERRIDE; 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting block_setting_; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int selected_item_; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingSingleRadioGroup::ContentSettingSingleRadioGroup( 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingTitleLinkAndCustomModel(delegate, web_contents, profile, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type), 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) block_setting_(CONTENT_SETTING_BLOCK), 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_item_(0) { 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetRadioGroup(); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingSingleRadioGroup::~ContentSettingSingleRadioGroup() { 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (settings_changed()) { 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting = 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_item_ == 0 ? CONTENT_SETTING_ALLOW : block_setting_; 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::set<std::string>& resources = 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bubble_content().resource_identifiers; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (resources.empty()) { 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddException(setting, std::string()); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::set<std::string>::const_iterator it = resources.begin(); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != resources.end(); ++it) { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AddException(setting, *it); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ContentSettingSingleRadioGroup::settings_changed() const { 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return selected_item_ != bubble_content().radio_group.default_item; 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Initialize the radio group by setting the appropriate labels for the 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// content type and setting the default value based on the content setting. 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingSingleRadioGroup::SetRadioGroup() { 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = web_contents()->GetURL(); 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 display_host; 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::AppendFormattedHost( 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->GetPrefs()->GetString(prefs::kAcceptLanguages), 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &display_host); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (display_host.empty()) 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) display_host = ASCIIToUTF16(url.spec()); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::set<std::string>& resources = 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bubble_content().resource_identifiers; 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabSpecificContentSettings* content_settings = 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool allowed = 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !content_settings->IsContentBlocked(content_type()); 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!allowed || 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_settings->IsContentAllowed(content_type())); 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RadioGroup radio_group; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.url = url; 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const ContentSettingsTypeIdEntry kBlockedAllowIDs[] = { 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_UNBLOCK}, 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_IMAGES, IDS_BLOCKED_IMAGES_UNBLOCK}, 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDS_BLOCKED_JAVASCRIPT_UNBLOCK}, 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_UNBLOCK_ALL}, 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_UNBLOCK}, 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_BLOCKED_PPAPI_BROKER_UNBLOCK}, 3017dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOAD_UNBLOCK}, 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fields as for kBlockedAllowIDs, above. 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const ContentSettingsTypeIdEntry kResourceSpecificBlockedAllowIDs[] = { 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_UNBLOCK}, 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const ContentSettingsTypeIdEntry kAllowedAllowIDs[] = { 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(bauerb): The string shouldn't be "unblock" (they weren't blocked). 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_UNBLOCK}, 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_ALLOWED_PPAPI_BROKER_NO_ACTION}, 3117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_ALLOWED_DOWNLOAD_NO_ACTION}, 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string radio_allow_label; 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (allowed) { 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int resource_id = GetIdForContentType(kAllowedAllowIDs, 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) arraysize(kAllowedAllowIDs), 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_type()); 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_allow_label = (content_type() == CONTENT_SETTINGS_TYPE_COOKIES) ? 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringFUTF8(resource_id, display_host) : 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF8(resource_id); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else if (resources.empty()) { 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_allow_label = l10n_util::GetStringFUTF8( 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetIdForContentType(kBlockedAllowIDs, arraysize(kBlockedAllowIDs), 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_type()), 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) display_host); 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_allow_label = l10n_util::GetStringFUTF8( 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetIdForContentType(kResourceSpecificBlockedAllowIDs, 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) arraysize(kResourceSpecificBlockedAllowIDs), 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_type()), 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) display_host); 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const ContentSettingsTypeIdEntry kBlockedBlockIDs[] = { 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_NO_ACTION}, 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_IMAGES, IDS_BLOCKED_IMAGES_NO_ACTION}, 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDS_BLOCKED_JAVASCRIPT_NO_ACTION}, 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_NO_ACTION}, 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_NO_ACTION}, 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_BLOCKED_PPAPI_BROKER_NO_ACTION}, 3427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOAD_NO_ACTION}, 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const ContentSettingsTypeIdEntry kAllowedBlockIDs[] = { 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(bauerb): The string should say "block". 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_NO_ACTION}, 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_ALLOWED_PPAPI_BROKER_BLOCK}, 3487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_ALLOWED_DOWNLOAD_BLOCK}, 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string radio_block_label; 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (allowed) { 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int resource_id = GetIdForContentType(kAllowedBlockIDs, 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) arraysize(kAllowedBlockIDs), 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_type()); 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_block_label = (content_type() == CONTENT_SETTINGS_TYPE_COOKIES) ? 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF8(resource_id) : 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringFUTF8(resource_id, display_host); 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_block_label = l10n_util::GetStringUTF8( 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetIdForContentType(kBlockedBlockIDs, arraysize(kBlockedBlockIDs), 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_type())); 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.radio_items.push_back(radio_allow_label); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.radio_items.push_back(radio_block_label); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostContentSettingsMap* map = profile()->GetHostContentSettingsMap(); 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CookieSettings* cookie_settings = 3697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CookieSettings::Factory::GetForProfile(profile()).get(); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting most_restrictive_setting; 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettingSource most_restrictive_setting_source = SETTING_SOURCE_NONE; 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (resources.empty()) { 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_type() == CONTENT_SETTINGS_TYPE_COOKIES) { 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) most_restrictive_setting = cookie_settings->GetCookieSetting( 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, url, true, &most_restrictive_setting_source); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettingInfo info; 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Value> value(map->GetWebsiteSetting( 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, url, content_type(), std::string(), &info)); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) most_restrictive_setting = 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings::ValueToContentSetting(value.get()); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) most_restrictive_setting_source = info.source; 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) most_restrictive_setting = CONTENT_SETTING_ALLOW; 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::set<std::string>::const_iterator it = resources.begin(); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) it != resources.end(); ++it) { 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettingInfo info; 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<Value> value(map->GetWebsiteSetting( 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, url, content_type(), *it, &info)); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting = 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings::ValueToContentSetting(value.get()); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (setting == CONTENT_SETTING_BLOCK) { 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) most_restrictive_setting = CONTENT_SETTING_BLOCK; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) most_restrictive_setting_source = info.source; 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (setting == CONTENT_SETTING_ASK) { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) most_restrictive_setting = CONTENT_SETTING_ASK; 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) most_restrictive_setting_source = info.source; 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (most_restrictive_setting == CONTENT_SETTING_ALLOW) { 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.default_item = 0; 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |block_setting_| is already set to |CONTENT_SETTING_BLOCK|. 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.default_item = 1; 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) block_setting_ = most_restrictive_setting; 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (most_restrictive_setting_source != SETTING_SOURCE_USER) { 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_radio_group_enabled(false); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_radio_group_enabled(true); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_item_ = radio_group.default_item; 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_radio_group(radio_group); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingSingleRadioGroup::AddException( 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting, 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& resource_identifier) { 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (profile()) { 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->GetHostContentSettingsMap()->AddExceptionForURL( 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bubble_content().radio_group.url, 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bubble_content().radio_group.url, 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type(), 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resource_identifier, 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setting); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingSingleRadioGroup::OnRadioClicked(int radio_index) { 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_item_ = radio_index; 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingCookiesBubbleModel : public ContentSettingSingleRadioGroup { 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingCookiesBubbleModel(Delegate* delegate, 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type); 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentSettingCookiesBubbleModel(); 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnCustomLinkClicked() OVERRIDE; 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingCookiesBubbleModel::ContentSettingCookiesBubbleModel( 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingSingleRadioGroup( 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate, web_contents, profile, content_type) { 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(CONTENT_SETTINGS_TYPE_COOKIES, content_type); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_custom_link_enabled(true); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingCookiesBubbleModel::~ContentSettingCookiesBubbleModel() { 463c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // On some plattforms e.g. MacOS X it is possible to close a tab while the 464ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // cookies settings bubble is open. This resets the web contents to NULL. 465c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (settings_changed() && web_contents()) { 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CollectedCookiesInfoBarDelegate::Create( 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InfoBarService::FromWebContents(web_contents())); 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingCookiesBubbleModel::OnCustomLinkClicked() { 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!web_contents()) 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_COLLECTED_COOKIES_SHOWN, 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<TabSpecificContentSettings>( 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents())), 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate()->ShowCollectedCookiesDialog(web_contents()); 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingPluginBubbleModel : public ContentSettingSingleRadioGroup { 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingPluginBubbleModel(Delegate* delegate, 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type); 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentSettingPluginBubbleModel() {} 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnCustomLinkClicked() OVERRIDE; 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingPluginBubbleModel::ContentSettingPluginBubbleModel( 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingSingleRadioGroup( 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate, web_contents, profile, content_type) { 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(content_type, CONTENT_SETTINGS_TYPE_PLUGINS); 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_custom_link_enabled(web_contents && 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents( 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents)->load_plugins_link_enabled()); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingPluginBubbleModel::OnCustomLinkClicked() { 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction(UserMetricsAction("ClickToPlay_LoadAll_Bubble")); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(web_contents()); 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* host = web_contents()->GetRenderViewHost(); 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ChromePluginServiceFilter::GetInstance()->AuthorizeAllPlugins( 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) host->GetProcess()->GetID()); 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(bauerb): We should send the identifiers of blocked plug-ins here. 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->Send(new ChromeViewMsg_LoadBlockedPlugins(host->GetRoutingID(), 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string())); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_custom_link_enabled(false); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents())-> 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_load_plugins_link_enabled(false); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingPopupBubbleModel : public ContentSettingSingleRadioGroup { 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingPopupBubbleModel(Delegate* delegate, 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentSettingPopupBubbleModel() {} 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetPopups(); 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnPopupClicked(int index) OVERRIDE; 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingPopupBubbleModel::ContentSettingPopupBubbleModel( 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingSingleRadioGroup( 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate, web_contents, profile, content_type) { 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPopups(); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingPopupBubbleModel::SetPopups() { 549558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!CommandLine::ForCurrentProcess()->HasSwitch( 550558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch switches::kDisableBetterPopupBlocking)) { 55158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch std::map<int32, GURL> blocked_popups = 552ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch PopupBlockerTabHelper::FromWebContents(web_contents()) 553ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ->GetBlockedPopupRequests(); 55458e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch for (std::map<int32, GURL>::const_iterator iter = blocked_popups.begin(); 55558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch iter != blocked_popups.end(); 55658e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch ++iter) { 55758e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch std::string title(iter->second.spec()); 558ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // The popup may not have a valid URL. 559ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (title.empty()) 560ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch title = l10n_util::GetStringUTF8(IDS_TAB_LOADING_TITLE); 561ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch PopupItem popup_item( 562ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ui::ResourceBundle::GetSharedInstance().GetImageNamed( 563ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch IDR_DEFAULT_FAVICON), 564ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch title, 56558e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch iter->first); 566ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch add_popup(popup_item); 567ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 568ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return; 569ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<WebContents*> blocked_contents; 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BlockedContentTabHelper::FromWebContents(web_contents())-> 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBlockedContents(&blocked_contents); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::vector<WebContents*>::const_iterator 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) i = blocked_contents.begin(); i != blocked_contents.end(); ++i) { 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string title(UTF16ToUTF8((*i)->GetTitle())); 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The popup may not have committed a load yet, in which case it won't 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // have a URL or title. 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (title.empty()) 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title = l10n_util::GetStringUTF8(IDS_TAB_LOADING_TITLE); 580ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch PopupItem popup_item( 581ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch FaviconTabHelper::FromWebContents(*i)->GetFavicon(), title, *i); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add_popup(popup_item); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingPopupBubbleModel::OnPopupClicked(int index) { 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_contents()) { 588558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch if (!CommandLine::ForCurrentProcess()->HasSwitch( 589558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch switches::kDisableBetterPopupBlocking)) { 590ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch PopupBlockerTabHelper::FromWebContents(web_contents())-> 591ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ShowBlockedPopup(bubble_content().popup_items[index].popup_id); 592ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } else { 593ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch BlockedContentTabHelper::FromWebContents(web_contents())-> 594ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch LaunchForContents(bubble_content().popup_items[index].web_contents); 595ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch } 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The model of the content settings bubble for media settings. 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ContentSettingMediaStreamBubbleModel 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public ContentSettingTitleAndLinkModel { 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingMediaStreamBubbleModel(Delegate* delegate, 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* web_contents, 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile); 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ContentSettingMediaStreamBubbleModel(); 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the title of the bubble. 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetTitle(); 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the data for the radio buttons of the bubble. 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetRadioGroup(); 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the data for the media menus of the bubble. 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetMediaMenus(); 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Updates the camera and microphone setting with the passed |setting|. 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateSettings(ContentSetting setting); 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Updates the camera and microphone default device with the passed |type| 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // and device. 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateDefaultDeviceForType(content::MediaStreamType type, 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& device); 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ContentSettingBubbleModel implementation. 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnRadioClicked(int radio_index) OVERRIDE; 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnMediaMenuClicked(content::MediaStreamType type, 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& selected_device) OVERRIDE; 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The index of the selected radio item. 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int selected_item_; 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The content settings that are associated with the individual radio 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // buttons. 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSetting radio_item_setting_[2]; 6337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // The state of the microphone and camera access. 6347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TabSpecificContentSettings::MicrophoneCameraState state_; 6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ContentSettingMediaStreamBubbleModel::ContentSettingMediaStreamBubbleModel( 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Delegate* delegate, 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* web_contents, 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile) 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : ContentSettingTitleAndLinkModel( 6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate, web_contents, profile, CONTENT_SETTINGS_TYPE_MEDIASTREAM), 6437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) selected_item_(0), 6447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_(TabSpecificContentSettings::MICROPHONE_CAMERA_NOT_ACCESSED) { 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(profile); 6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Initialize the content settings associated with the individual radio 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // buttons. 6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_item_setting_[0] = CONTENT_SETTING_ASK; 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_item_setting_[1] = CONTENT_SETTING_BLOCK; 6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TabSpecificContentSettings* content_settings = 6527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents); 6537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_ = content_settings->GetMicrophoneCameraState(); 6547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetTitle(); 6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRadioGroup(); 6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetMediaMenus(); 6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ContentSettingMediaStreamBubbleModel::~ContentSettingMediaStreamBubbleModel() { 661fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // On some platforms (e.g. MacOS X) it is possible to close a tab while the 662c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // media stream bubble is open. This resets the web contents to NULL. 663c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!web_contents()) 664c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 665fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool media_setting_changed = false; 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (MediaMenuMap::const_iterator it = bubble_content().media_menus.begin(); 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) it != bubble_content().media_menus.end(); ++it) { 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (it->second.selected_device.id != it->second.default_device.id) { 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateDefaultDeviceForType(it->first, it->second.selected_device.id); 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_setting_changed = true; 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Update the media settings if the radio button selection was changed. 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (selected_item_ != bubble_content().radio_group.default_item) { 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateSettings(radio_item_setting_[selected_item_]); 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) media_setting_changed = true; 6792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Trigger the reload infobar if the media setting has been changed. 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (media_setting_changed) { 683fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch MediaSettingChangedInfoBarDelegate::Create( 684fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch InfoBarService::FromWebContents(web_contents())); 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaStreamBubbleModel::SetTitle() { 6897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int title_id = 0; 6907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) switch (state_) { 6917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_CAMERA_NOT_ACCESSED: 6927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // If neither microphone nor camera stream was accessed, then there is no 6937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // icon didplayed in the omnibox and no settings bubble availbale. Hence 6947d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // there is no title. 6957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NOTREACHED(); 6967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 6977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_ACCESSED: 6987d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) title_id = IDS_MICROPHONE_ACCESSED; 6997d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 7007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case TabSpecificContentSettings::CAMERA_ACCESSED: 7017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) title_id = IDS_CAMERA_ACCESSED; 7027d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 7037d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_CAMERA_ACCESSED: 7047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) title_id = IDS_MICROPHONE_CAMERA_ALLOWED; 7057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 7067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_BLOCKED: 7077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) title_id = IDS_MICROPHONE_BLOCKED; 7087d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 7097d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case TabSpecificContentSettings::CAMERA_BLOCKED: 7107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) title_id = IDS_CAMERA_BLOCKED; 7117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 7127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_CAMERA_BLOCKED: 7137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) title_id = IDS_MICROPHONE_CAMERA_BLOCKED; 7147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 7157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 7162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_title(l10n_util::GetStringUTF8(title_id)); 7172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaStreamBubbleModel::SetRadioGroup() { 7202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL url = web_contents()->GetURL(); 7212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RadioGroup radio_group; 7222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_group.url = url; 7232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) string16 display_host_utf16; 7252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::AppendFormattedHost( 7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url, 7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile()->GetPrefs()->GetString(prefs::kAcceptLanguages), 7282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &display_host_utf16); 7292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string display_host(UTF16ToUTF8(display_host_utf16)); 7302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (display_host.empty()) 7312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) display_host = url.spec(); 7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int radio_allow_label_id = 0; 7347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int radio_block_label_id = 0; 7357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) switch (state_) { 7367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_CAMERA_NOT_ACCESSED: 7377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) NOTREACHED(); 7387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) return; 7397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_ACCESSED: 7407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_allow_label_id = IDS_ALLOWED_MEDIASTREAM_MIC_NO_ACTION; 7417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_block_label_id = IDS_ALLOWED_MEDIASTREAM_MIC_BLOCK; 7427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) selected_item_ = 0; 7437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 7447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case TabSpecificContentSettings::CAMERA_ACCESSED: 7457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_allow_label_id = IDS_ALLOWED_MEDIASTREAM_CAMERA_NO_ACTION; 7467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_block_label_id = IDS_ALLOWED_MEDIASTREAM_CAMERA_BLOCK; 7477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) selected_item_ = 0; 7487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 7497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_CAMERA_ACCESSED: 7507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_allow_label_id = IDS_ALLOWED_MEDIASTREAM_MIC_AND_CAMERA_NO_ACTION; 7517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_block_label_id = IDS_ALLOWED_MEDIASTREAM_MIC_AND_CAMERA_BLOCK; 7527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) selected_item_ = 0; 7537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 7547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_BLOCKED: 7557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (url.SchemeIsSecure()) { 7567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_allow_label_id = IDS_BLOCKED_MEDIASTREAM_MIC_ALLOW; 7577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_item_setting_[0] = CONTENT_SETTING_ALLOW; 7587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } else { 7597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_allow_label_id = IDS_BLOCKED_MEDIASTREAM_MIC_ASK; 7607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 7617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_block_label_id = IDS_BLOCKED_MEDIASTREAM_MIC_NO_ACTION; 7637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) selected_item_ = 1; 7647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 7657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case TabSpecificContentSettings::CAMERA_BLOCKED: 7667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (url.SchemeIsSecure()) { 7677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_allow_label_id = IDS_BLOCKED_MEDIASTREAM_CAMERA_ALLOW; 7687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_item_setting_[0] = CONTENT_SETTING_ALLOW; 7697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } else { 7707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_allow_label_id = IDS_BLOCKED_MEDIASTREAM_CAMERA_ASK; 7717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 7727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_block_label_id = IDS_BLOCKED_MEDIASTREAM_CAMERA_NO_ACTION; 7747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) selected_item_ = 1; 7757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 7767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_CAMERA_BLOCKED: 7777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (url.SchemeIsSecure()) { 7787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_allow_label_id = IDS_BLOCKED_MEDIASTREAM_MIC_AND_CAMERA_ALLOW; 7797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_item_setting_[0] = CONTENT_SETTING_ALLOW; 7807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } else { 7817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_allow_label_id = IDS_BLOCKED_MEDIASTREAM_MIC_AND_CAMERA_ASK; 7827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 7837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_block_label_id = IDS_BLOCKED_MEDIASTREAM_MIC_AND_CAMERA_NO_ACTION; 7857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) selected_item_ = 1; 7867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) break; 7872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string radio_allow_label = l10n_util::GetStringFUTF8( 7907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_allow_label_id, UTF8ToUTF16(display_host)); 7917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string radio_block_label = 7927d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) l10n_util::GetStringUTF8(radio_block_label_id); 7937d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_group.default_item = selected_item_; 7952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_group.radio_items.push_back(radio_allow_label); 7962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_group.radio_items.push_back(radio_block_label); 7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_radio_group(radio_group); 7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_radio_group_enabled(true); 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaStreamBubbleModel::UpdateSettings( 8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSetting setting) { 8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (profile()) { 8052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HostContentSettingsMap* content_settings = 8062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile()->GetHostContentSettingsMap(); 8072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The same patterns must be used as in other places (e.g. the infobar) in 8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // order to override the existing rule. Otherwise a new rule is created. 8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(markusheintz): Extract to a helper so that there is only a single 8102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // place to touch. 8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsPattern primary_pattern = 8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsPattern::FromURLNoWildcard(web_contents()->GetURL()); 8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsPattern secondary_pattern = 8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsPattern::Wildcard(); 8157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (state_ == TabSpecificContentSettings::MICROPHONE_ACCESSED || 8167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_ACCESSED || 8177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_BLOCKED || 8187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_BLOCKED) { 8197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content_settings->SetContentSetting( 8207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) primary_pattern, secondary_pattern, 8217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, std::string(), setting); 8227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 8237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (state_ == TabSpecificContentSettings::CAMERA_ACCESSED || 8247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_ACCESSED || 8257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_ == TabSpecificContentSettings::CAMERA_BLOCKED || 8267d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_BLOCKED) { 8277d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content_settings->SetContentSetting( 8287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) primary_pattern, secondary_pattern, 8297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, std::string(), setting); 8307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 8312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaStreamBubbleModel::UpdateDefaultDeviceForType( 8352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::MediaStreamType type, 8362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& device) { 8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefService* prefs = profile()->GetPrefs(); 8382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (type == content::MEDIA_DEVICE_AUDIO_CAPTURE) { 8392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs->SetString(prefs::kDefaultAudioCaptureDevice, device); 8402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 8412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(content::MEDIA_DEVICE_VIDEO_CAPTURE, type); 8422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs->SetString(prefs::kDefaultVideoCaptureDevice, device); 8432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaStreamBubbleModel::SetMediaMenus() { 8472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add microphone menu. 8482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefService* prefs = profile()->GetPrefs(); 8492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaCaptureDevicesDispatcher* dispatcher = 8502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaCaptureDevicesDispatcher::GetInstance(); 8512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::MediaStreamDevices& microphones = 8522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dispatcher->GetAudioCaptureDevices(); 8537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool show_mic_menu = 8557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) (state_ == TabSpecificContentSettings::MICROPHONE_ACCESSED || 8567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_ACCESSED || 8577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_BLOCKED || 8587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_BLOCKED); 8597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) bool show_camera_menu = 8607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) (state_ == TabSpecificContentSettings::CAMERA_ACCESSED || 8617d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_ACCESSED || 8627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_ == TabSpecificContentSettings::CAMERA_BLOCKED || 8637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_BLOCKED); 8647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DCHECK(show_mic_menu || show_camera_menu); 8657d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8667d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (show_mic_menu) { 8677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaMenu mic_menu; 8687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) mic_menu.label = l10n_util::GetStringUTF8(IDS_MEDIA_SELECTED_MIC_LABEL); 8697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!microphones.empty()) { 8707d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string preferred_mic = 8717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs->GetString(prefs::kDefaultAudioCaptureDevice); 8727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) mic_menu.default_device = GetMediaDeviceById(preferred_mic, microphones); 8737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) mic_menu.selected_device = mic_menu.default_device; 8747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 8757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) add_media_menu(content::MEDIA_DEVICE_AUDIO_CAPTURE, mic_menu); 8762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 8787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (show_camera_menu) { 8797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const content::MediaStreamDevices& cameras = 8807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) dispatcher->GetVideoCaptureDevices(); 8817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaMenu camera_menu; 8827d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) camera_menu.label = 8837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) l10n_util::GetStringUTF8(IDS_MEDIA_SELECTED_CAMERA_LABEL); 8847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!cameras.empty()) { 8857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string preferred_camera = 8867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) prefs->GetString(prefs::kDefaultVideoCaptureDevice); 8877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) camera_menu.default_device = 8887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GetMediaDeviceById(preferred_camera, cameras); 8897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) camera_menu.selected_device = camera_menu.default_device; 8907d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 8917d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) add_media_menu(content::MEDIA_DEVICE_VIDEO_CAPTURE, camera_menu); 8922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaStreamBubbleModel::OnRadioClicked(int radio_index) { 8962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) selected_item_ = radio_index; 8972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaStreamBubbleModel::OnMediaMenuClicked( 9002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::MediaStreamType type, 9012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& selected_device_id) { 9022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(type == content::MEDIA_DEVICE_AUDIO_CAPTURE || 9032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type == content::MEDIA_DEVICE_VIDEO_CAPTURE); 9042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(1U, bubble_content().media_menus.count(type)); 9052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaCaptureDevicesDispatcher* dispatcher = 9062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaCaptureDevicesDispatcher::GetInstance(); 9072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::MediaStreamDevices& devices = 9082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (type == content::MEDIA_DEVICE_AUDIO_CAPTURE) ? 9092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dispatcher->GetAudioCaptureDevices() : 9102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dispatcher->GetVideoCaptureDevices(); 9112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_selected_device(GetMediaDeviceById(selected_device_id, devices)); 9122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 9132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingDomainListBubbleModel 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public ContentSettingTitleAndLinkModel { 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingDomainListBubbleModel(Delegate* delegate, 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type); 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentSettingDomainListBubbleModel() {} 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MaybeAddDomainList(const std::set<std::string>& hosts, int title_id); 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetDomainsAndCustomLink(); 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnCustomLinkClicked() OVERRIDE; 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingDomainListBubbleModel::ContentSettingDomainListBubbleModel( 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingTitleAndLinkModel( 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate, web_contents, profile, content_type) { 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(CONTENT_SETTINGS_TYPE_GEOLOCATION, content_type) << 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SetDomains currently only supports geolocation content type"; 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetDomainsAndCustomLink(); 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingDomainListBubbleModel::MaybeAddDomainList( 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::set<std::string>& hosts, int title_id) { 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!hosts.empty()) { 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DomainList domain_list; 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) domain_list.title = l10n_util::GetStringUTF8(title_id); 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) domain_list.hosts = hosts; 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add_domain_list(domain_list); 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingDomainListBubbleModel::SetDomainsAndCustomLink() { 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 954ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const ContentSettingsUsagesState& usages = 955ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch content_settings->geolocation_usages_state(); 956ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ContentSettingsUsagesState::FormattedHostsPerState formatted_hosts_per_state; 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int tab_state_flags = 0; 958ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch usages.GetDetailedInfo(&formatted_hosts_per_state, &tab_state_flags); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Divide the tab's current geolocation users into sets according to their 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // permission state. 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MaybeAddDomainList(formatted_hosts_per_state[CONTENT_SETTING_ALLOW], 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_GEOLOCATION_BUBBLE_SECTION_ALLOWED); 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MaybeAddDomainList(formatted_hosts_per_state[CONTENT_SETTING_BLOCK], 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_GEOLOCATION_BUBBLE_SECTION_DENIED); 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 967ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (tab_state_flags & ContentSettingsUsagesState::TABSTATE_HAS_EXCEPTION) { 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_custom_link(l10n_util::GetStringUTF8( 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_GEOLOCATION_BUBBLE_CLEAR_LINK)); 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_custom_link_enabled(true); 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (tab_state_flags & 972ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ContentSettingsUsagesState::TABSTATE_HAS_CHANGED) { 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_custom_link(l10n_util::GetStringUTF8( 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_GEOLOCATION_BUBBLE_REQUIRE_RELOAD_TO_CLEAR)); 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingDomainListBubbleModel::OnCustomLinkClicked() { 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!web_contents()) 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reset this embedder's entry to default for each of the requesting 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // origins currently on the page. 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& embedder_url = web_contents()->GetURL(); 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 986ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const ContentSettingsUsagesState::StateMap& state_map = 987ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch content_settings->geolocation_usages_state().state_map(); 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostContentSettingsMap* settings_map = 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->GetHostContentSettingsMap(); 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 991ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch for (ContentSettingsUsagesState::StateMap::const_iterator it = 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_map.begin(); it != state_map.end(); ++it) { 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings_map->SetContentSetting( 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURLNoWildcard(it->first), 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURLNoWildcard(embedder_url), 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_GEOLOCATION, 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string(), 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_DEFAULT); 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingMixedScriptBubbleModel 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public ContentSettingTitleLinkAndCustomModel { 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingMixedScriptBubbleModel(Delegate* delegate, 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type); 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentSettingMixedScriptBubbleModel() {} 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnCustomLinkClicked() OVERRIDE; 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingMixedScriptBubbleModel::ContentSettingMixedScriptBubbleModel( 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingTitleLinkAndCustomModel( 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate, web_contents, profile, content_type) { 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(content_type, CONTENT_SETTINGS_TYPE_MIXEDSCRIPT); 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_custom_link_enabled(true); 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingMixedScriptBubbleModel::OnCustomLinkClicked() { 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction(UserMetricsAction("MixedScript_LoadAnyway_Bubble")); 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(web_contents()); 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RenderViewHost* host = web_contents()->GetRenderViewHost(); 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->Send(new ChromeViewMsg_SetAllowRunningInsecureContent( 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host->GetRoutingID(), true)); 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingRPHBubbleModel::ContentSettingRPHBubbleModel( 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry* registry, 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingTitleAndLinkModel( 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate, web_contents, profile, content_type), 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_item_(0), 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_(registry), 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_handler_(ProtocolHandler::EmptyProtocolHandler()), 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) previous_handler_(ProtocolHandler::EmptyProtocolHandler()) { 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS, content_type); 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents); 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_handler_ = content_settings->pending_protocol_handler(); 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) previous_handler_ = content_settings->previous_protocol_handler(); 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16 protocol; 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pending_handler_.protocol() == "mailto") { 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protocol = l10n_util::GetStringUTF16( 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_REGISTER_PROTOCOL_HANDLER_MAILTO_NAME); 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (pending_handler_.protocol() == "webcal") { 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protocol = l10n_util::GetStringUTF16( 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_REGISTER_PROTOCOL_HANDLER_WEBCAL_NAME); 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protocol = UTF8ToUTF16(pending_handler_.protocol()); 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (previous_handler_.IsEmpty()) { 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_title(l10n_util::GetStringFUTF8( 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM, 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_handler_.title(), UTF8ToUTF16(pending_handler_.url().host()), 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protocol)); 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_title(l10n_util::GetStringFUTF8( 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM_REPLACE, 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_handler_.title(), UTF8ToUTF16(pending_handler_.url().host()), 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protocol, previous_handler_.title())); 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string radio_allow_label = 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringFUTF8(IDS_REGISTER_PROTOCOL_HANDLER_ACCEPT, 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_handler_.title()); 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string radio_deny_label = 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF8(IDS_REGISTER_PROTOCOL_HANDLER_DENY); 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string radio_ignore_label = 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF8(IDS_REGISTER_PROTOCOL_HANDLER_IGNORE); 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = web_contents->GetURL(); 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RadioGroup radio_group; 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.url = url; 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.radio_items.push_back(radio_allow_label); 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.radio_items.push_back(radio_deny_label); 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.radio_items.push_back(radio_ignore_label); 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting = 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->pending_protocol_handler_setting(); 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (setting == CONTENT_SETTING_ALLOW) 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.default_item = RPH_ALLOW; 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (setting == CONTENT_SETTING_BLOCK) 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.default_item = RPH_BLOCK; 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.default_item = RPH_IGNORE; 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_item_ = radio_group.default_item; 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_radio_group_enabled(true); 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_radio_group(radio_group); 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingRPHBubbleModel::OnRadioClicked(int radio_index) { 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (selected_item_ == radio_index) 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_item_ = radio_index; 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (radio_index == RPH_ALLOW) 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterProtocolHandler(); 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (radio_index == RPH_BLOCK) 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnregisterProtocolHandler(); 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (radio_index == RPH_IGNORE) 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IgnoreProtocolHandler(); 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingRPHBubbleModel::OnDoneClicked() { 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The user has one chance to deal with the RPH content setting UI, 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // then we remove it. 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents())-> 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearPendingProtocolHandler(); 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED, 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<WebContents>(web_contents()), 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingRPHBubbleModel::RegisterProtocolHandler() { 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A no-op if the handler hasn't been ignored, but needed in case the user 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // selects sequences like register/ignore/register. 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->RemoveIgnoredHandler(pending_handler_); 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->OnAcceptRegisterProtocolHandler(pending_handler_); 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents())-> 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_pending_protocol_handler_setting(CONTENT_SETTING_ALLOW); 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingRPHBubbleModel::UnregisterProtocolHandler() { 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->OnDenyRegisterProtocolHandler(pending_handler_); 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents())-> 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_pending_protocol_handler_setting(CONTENT_SETTING_BLOCK); 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearOrSetPreviousHandler(); 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingRPHBubbleModel::IgnoreProtocolHandler() { 11525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->OnIgnoreRegisterProtocolHandler(pending_handler_); 11535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents())-> 11545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_pending_protocol_handler_setting(CONTENT_SETTING_DEFAULT); 11555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearOrSetPreviousHandler(); 11565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingRPHBubbleModel::ClearOrSetPreviousHandler() { 11595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (previous_handler_.IsEmpty()) { 11605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->ClearDefault(pending_handler_.protocol()); 11615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 11625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->OnAcceptRegisterProtocolHandler(previous_handler_); 11635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11664311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch// TODO(toyoshim): Should share as many code with geolocation as possible. 11674311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochclass ContentSettingMIDISysExBubbleModel 11684311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch : public ContentSettingTitleAndLinkModel { 11694311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch public: 11704311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ContentSettingMIDISysExBubbleModel(Delegate* delegate, 11714311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch WebContents* web_contents, 11724311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch Profile* profile, 11734311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ContentSettingsType content_type); 11744311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch virtual ~ContentSettingMIDISysExBubbleModel() {} 11754311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 11764311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch private: 11774311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch void MaybeAddDomainList(const std::set<std::string>& hosts, int title_id); 11784311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch void SetDomainsAndCustomLink(); 11794311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch virtual void OnCustomLinkClicked() OVERRIDE; 11804311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch}; 11814311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 11824311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen MurdochContentSettingMIDISysExBubbleModel::ContentSettingMIDISysExBubbleModel( 11834311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch Delegate* delegate, 11844311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch WebContents* web_contents, 11854311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch Profile* profile, 11864311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ContentSettingsType content_type) 11874311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch : ContentSettingTitleAndLinkModel( 11884311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch delegate, web_contents, profile, content_type) { 11894311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch DCHECK_EQ(CONTENT_SETTINGS_TYPE_MIDI_SYSEX, content_type); 11904311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch SetDomainsAndCustomLink(); 11914311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 11924311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 11934311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochvoid ContentSettingMIDISysExBubbleModel::MaybeAddDomainList( 11944311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch const std::set<std::string>& hosts, int title_id) { 11954311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch if (!hosts.empty()) { 11964311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch DomainList domain_list; 11974311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch domain_list.title = l10n_util::GetStringUTF8(title_id); 11984311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch domain_list.hosts = hosts; 11994311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch add_domain_list(domain_list); 12004311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch } 12014311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 12024311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 12034311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochvoid ContentSettingMIDISysExBubbleModel::SetDomainsAndCustomLink() { 12044311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch TabSpecificContentSettings* content_settings = 12054311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch TabSpecificContentSettings::FromWebContents(web_contents()); 12064311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch const ContentSettingsUsagesState& usages_state = 12074311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch content_settings->midi_usages_state(); 12084311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ContentSettingsUsagesState::FormattedHostsPerState formatted_hosts_per_state; 12094311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch unsigned int tab_state_flags = 0; 12104311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch usages_state.GetDetailedInfo(&formatted_hosts_per_state, &tab_state_flags); 12114311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Divide the tab's current MIDI sysex users into sets according to their 12124311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // permission state. 12134311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch MaybeAddDomainList(formatted_hosts_per_state[CONTENT_SETTING_ALLOW], 12144311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch IDS_MIDI_SYSEX_BUBBLE_ALLOWED); 12154311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 12164311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch MaybeAddDomainList(formatted_hosts_per_state[CONTENT_SETTING_BLOCK], 12174311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch IDS_MIDI_SYSEX_BUBBLE_DENIED); 12184311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 12194311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch if (tab_state_flags & ContentSettingsUsagesState::TABSTATE_HAS_EXCEPTION) { 12204311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch set_custom_link(l10n_util::GetStringUTF8( 12214311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch IDS_MIDI_SYSEX_BUBBLE_CLEAR_LINK)); 12224311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch set_custom_link_enabled(true); 12234311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch } else if (tab_state_flags & 12244311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ContentSettingsUsagesState::TABSTATE_HAS_CHANGED) { 12254311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch set_custom_link(l10n_util::GetStringUTF8( 12264311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch IDS_MIDI_SYSEX_BUBBLE_REQUIRE_RELOAD_TO_CLEAR)); 12274311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch } 12284311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 12294311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 12304311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdochvoid ContentSettingMIDISysExBubbleModel::OnCustomLinkClicked() { 12314311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch if (!web_contents()) 12324311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch return; 12334311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // Reset this embedder's entry to default for each of the requesting 12344311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch // origins currently on the page. 12354311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch TabSpecificContentSettings* content_settings = 12364311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch TabSpecificContentSettings::FromWebContents(web_contents()); 12374311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch const ContentSettingsUsagesState::StateMap& state_map = 12384311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch content_settings->midi_usages_state().state_map(); 12394311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch HostContentSettingsMap* settings_map = 12404311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile()->GetHostContentSettingsMap(); 12414311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 12424311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch for (ContentSettingsUsagesState::StateMap::const_iterator it = 12434311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch state_map.begin(); it != state_map.end(); ++it) { 12444311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch settings_map->SetContentSetting( 12454311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ContentSettingsPattern::FromURLNoWildcard(it->first), 12464311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch ContentSettingsPattern::Wildcard(), 12474311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch CONTENT_SETTINGS_TYPE_MIDI_SYSEX, 12484311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch std::string(), 12494311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch CONTENT_SETTING_DEFAULT); 12504311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch } 12514311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch} 12524311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel* 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingBubbleModel::CreateContentSettingBubbleModel( 12565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 12575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 12585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 12595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) { 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_type == CONTENT_SETTINGS_TYPE_COOKIES) { 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ContentSettingCookiesBubbleModel(delegate, web_contents, profile, 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type); 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_type == CONTENT_SETTINGS_TYPE_POPUPS) { 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ContentSettingPopupBubbleModel(delegate, web_contents, profile, 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type); 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_type == CONTENT_SETTINGS_TYPE_GEOLOCATION) { 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ContentSettingDomainListBubbleModel(delegate, web_contents, 12705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile, content_type); 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (content_type == CONTENT_SETTINGS_TYPE_MEDIASTREAM) { 12732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new ContentSettingMediaStreamBubbleModel(delegate, web_contents, 12742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile); 12752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_type == CONTENT_SETTINGS_TYPE_PLUGINS) { 12775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ContentSettingPluginBubbleModel(delegate, web_contents, profile, 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type); 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_type == CONTENT_SETTINGS_TYPE_MIXEDSCRIPT) { 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ContentSettingMixedScriptBubbleModel(delegate, web_contents, 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile, content_type); 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_type == CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS) { 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry* registry = 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistryFactory::GetForProfile(profile); 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ContentSettingRPHBubbleModel(delegate, web_contents, profile, 12885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry, content_type); 12895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12904311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch if (content_type == CONTENT_SETTINGS_TYPE_MIDI_SYSEX) { 12914311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch return new ContentSettingMIDISysExBubbleModel(delegate, web_contents, 12924311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch profile, content_type); 12934311e82a78ceafbe0585f51d4c8a86df9f21aa0dBen Murdoch } 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ContentSettingSingleRadioGroup(delegate, web_contents, profile, 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type); 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::ContentSettingBubbleModel( 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : web_contents_(web_contents), 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_(profile), 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type_(content_type) { 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED, 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<WebContents>(web_contents)); 13075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED, 13085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<Profile>(profile_)); 13095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::~ContentSettingBubbleModel() { 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::RadioGroup::RadioGroup() : default_item(0) {} 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::RadioGroup::~RadioGroup() {} 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::DomainList::DomainList() {} 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::DomainList::~DomainList() {} 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::BubbleContent::BubbleContent() 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : radio_group_enabled(false), 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) custom_link_enabled(false) { 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::BubbleContent::~BubbleContent() {} 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingBubbleModel::AddBlockedResource( 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& resource_identifier) { 13325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bubble_content_.resource_identifiers.insert(resource_identifier); 13335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingBubbleModel::Observe( 13365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int type, 13375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 13385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) { 13395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type == content::NOTIFICATION_WEB_CONTENTS_DESTROYED) { 13405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(web_contents_, 13415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<WebContents>(source).ptr()); 13425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_ = NULL; 13435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 13445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(chrome::NOTIFICATION_PROFILE_DESTROYED, type); 13455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(profile_, content::Source<Profile>(source).ptr()); 13465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_ = NULL; 13475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1349