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/custom_handlers/protocol_handler_registry.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/custom_handlers/protocol_handler_registry_factory.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/favicon/favicon_tab_helper.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/infobars/infobar_service.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/media/media_capture_devices_dispatcher.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/plugins/chrome_plugin_service_filter.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h" 21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/browser/ui/browser_navigator.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/collected_cookies_infobar_delegate.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/content_settings/content_setting_bubble_model_delegate.h" 2434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)#include "chrome/browser/ui/content_settings/media_setting_changed_infobar_delegate.h" 25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "chrome/common/chrome_switches.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/render_messages.h" 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h" 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/common/content_settings.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "content/public/browser/render_frame_host.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/render_process_host.h" 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/render_view_host.h" 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/user_metrics.h" 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h" 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents_delegate.h" 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "grit/components_strings.h" 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_util.h" 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/base/l10n/l10n_util.h" 40ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "ui/base/resource/resource_bundle.h" 4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "ui/resources/grit/ui_resources.h" 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using base::UserMetricsAction; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::WebContents; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content_settings::SettingInfo; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content_settings::SettingSource; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content_settings::SETTING_SOURCE_USER; 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content_settings::SETTING_SOURCE_NONE; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 520f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)const int kAllowButtonIndex = 0; 530f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ContentSettingsTypeIdEntry { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType type; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int id; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int GetIdForContentType(const ContentSettingsTypeIdEntry* entries, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t num_entries, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType type) { 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < num_entries; ++i) { 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (entries[i].type == type) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return entries[i].id; 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const content::MediaStreamDevice& GetMediaDeviceById( 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& device_id, 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::MediaStreamDevices& devices) { 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!devices.empty()); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (content::MediaStreamDevices::const_iterator it = devices.begin(); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) it != devices.end(); ++it) { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (it->id == device_id) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return *(it); 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A device with the |device_id| was not found. It is likely that the device 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // has been unplugged from the OS. Return the first device as the default 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // device. 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return *devices.begin(); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingTitleAndLinkModel::ContentSettingTitleAndLinkModel( 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingBubbleModel(web_contents, profile, content_type), 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_(delegate) { 947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Notifications do not have a bubble. 957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch DCHECK_NE(content_type, CONTENT_SETTINGS_TYPE_NOTIFICATIONS); 967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SetTitle(); 977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch SetManageLink(); 986d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) SetLearnMoreLink(); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingTitleAndLinkModel::SetTitle() { 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const ContentSettingsTypeIdEntry kBlockedTitleIDs[] = { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_TITLE}, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_IMAGES, IDS_BLOCKED_IMAGES_TITLE}, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDS_BLOCKED_JAVASCRIPT_TITLE}, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_MESSAGE}, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_TITLE}, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_BLOCKED_DISPLAYING_INSECURE_CONTENT}, 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IDS_BLOCKED_PPAPI_BROKER_TITLE}, 1127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOAD_TITLE}, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Fields as for kBlockedTitleIDs, above. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const ContentSettingsTypeIdEntry kAccessedTitleIDs[] = { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_ACCESSED_COOKIES_TITLE}, 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_ALLOWED_PPAPI_BROKER_TITLE}, 1187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_ALLOWED_DOWNLOAD_TITLE}, 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentSettingsTypeIdEntry *title_ids = kBlockedTitleIDs; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t num_title_ids = arraysize(kBlockedTitleIDs); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_contents() && 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents( 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) web_contents())->IsContentAllowed(content_type()) && 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) !TabSpecificContentSettings::FromWebContents( 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents())->IsContentBlocked(content_type())) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_ids = kAccessedTitleIDs; 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_title_ids = arraysize(kAccessedTitleIDs); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int title_id = 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetIdForContentType(title_ids, num_title_ids, content_type()); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (title_id) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_title(l10n_util::GetStringUTF8(title_id)); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingTitleAndLinkModel::SetManageLink() { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const ContentSettingsTypeIdEntry kLinkIDs[] = { 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_LINK}, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_IMAGES, IDS_BLOCKED_IMAGES_LINK}, 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDS_BLOCKED_JAVASCRIPT_LINK}, 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_LINK}, 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_LINK}, 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_GEOLOCATION, IDS_GEOLOCATION_BUBBLE_MANAGE_LINK}, 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, IDS_LEARN_MORE}, 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS, IDS_HANDLERS_BUBBLE_MANAGE_LINK}, 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_MEDIASTREAM, IDS_MEDIASTREAM_BUBBLE_MANAGE_LINK}, 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_PPAPI_BROKER_BUBBLE_MANAGE_LINK}, 1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOADS_LINK}, 149ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch {CONTENT_SETTINGS_TYPE_MIDI_SYSEX, IDS_MIDI_SYSEX_BUBBLE_MANAGE_LINK}, 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_manage_link(l10n_util::GetStringUTF8( 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetIdForContentType(kLinkIDs, arraysize(kLinkIDs), content_type()))); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingTitleAndLinkModel::OnManageLinkClicked() { 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (delegate_) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate_->ShowContentSettingsPage(content_type()); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void ContentSettingTitleAndLinkModel::SetLearnMoreLink() { 1616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) static const ContentSettingsTypeIdEntry kLearnMoreIDs[] = { 1626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_LEARN_MORE}, 1636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) }; 1646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) int learn_more_id = 1656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) GetIdForContentType(kLearnMoreIDs, arraysize(kLearnMoreIDs), 1666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) content_type()); 1676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (learn_more_id) 1686d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) set_learn_more_link(l10n_util::GetStringUTF8(learn_more_id)); 1696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 1706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)void ContentSettingTitleAndLinkModel::OnLearnMoreLinkClicked() { 1726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) if (delegate_) 1736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) delegate_->ShowLearnMorePage(content_type()); 1746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} 1756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingTitleLinkAndCustomModel 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public ContentSettingTitleAndLinkModel { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingTitleLinkAndCustomModel(Delegate* delegate, 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentSettingTitleLinkAndCustomModel() {} 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetCustomLink(); 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnCustomLinkClicked() OVERRIDE {} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingTitleLinkAndCustomModel::ContentSettingTitleLinkAndCustomModel( 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingTitleAndLinkModel( 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate, web_contents, profile, content_type) { 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetCustomLink(); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingTitleLinkAndCustomModel::SetCustomLink() { 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static const ContentSettingsTypeIdEntry kCustomIDs[] = { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_INFO}, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_LOAD_ALL}, 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_MIXEDSCRIPT, IDS_ALLOW_INSECURE_CONTENT_BUTTON}, 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int custom_link_id = 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetIdForContentType(kCustomIDs, arraysize(kCustomIDs), content_type()); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (custom_link_id) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_custom_link(l10n_util::GetStringUTF8(custom_link_id)); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingSingleRadioGroup 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public ContentSettingTitleLinkAndCustomModel { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingSingleRadioGroup(Delegate* delegate, 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentSettingSingleRadioGroup(); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool settings_changed() const; 2230f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) int selected_item() const { return selected_item_; } 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetRadioGroup(); 227a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void AddException(ContentSetting setting); 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnRadioClicked(int radio_index) OVERRIDE; 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting block_setting_; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int selected_item_; 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingSingleRadioGroup::ContentSettingSingleRadioGroup( 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingTitleLinkAndCustomModel(delegate, web_contents, profile, 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type), 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) block_setting_(CONTENT_SETTING_BLOCK), 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_item_(0) { 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetRadioGroup(); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingSingleRadioGroup::~ContentSettingSingleRadioGroup() { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (settings_changed()) { 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting = 2490f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) selected_item_ == kAllowButtonIndex ? 2500f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) CONTENT_SETTING_ALLOW : 2510f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) block_setting_; 252a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) AddException(setting); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ContentSettingSingleRadioGroup::settings_changed() const { 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return selected_item_ != bubble_content().radio_group.default_item; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Initialize the radio group by setting the appropriate labels for the 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// content type and setting the default value based on the content setting. 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingSingleRadioGroup::SetRadioGroup() { 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = web_contents()->GetURL(); 264a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 display_host; 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::AppendFormattedHost( 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url, 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->GetPrefs()->GetString(prefs::kAcceptLanguages), 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &display_host); 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (display_host.empty()) 2715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) display_host = base::ASCIIToUTF16(url.spec()); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabSpecificContentSettings* content_settings = 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool allowed = 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) !content_settings->IsContentBlocked(content_type()); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!allowed || 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_settings->IsContentAllowed(content_type())); 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RadioGroup radio_group; 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.url = url; 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const ContentSettingsTypeIdEntry kBlockedAllowIDs[] = { 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_UNBLOCK}, 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_IMAGES, IDS_BLOCKED_IMAGES_UNBLOCK}, 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDS_BLOCKED_JAVASCRIPT_UNBLOCK}, 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_UNBLOCK_ALL}, 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_UNBLOCK}, 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_BLOCKED_PPAPI_BROKER_UNBLOCK}, 2907dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOAD_UNBLOCK}, 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Fields as for kBlockedAllowIDs, above. 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const ContentSettingsTypeIdEntry kAllowedAllowIDs[] = { 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(bauerb): The string shouldn't be "unblock" (they weren't blocked). 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_UNBLOCK}, 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_ALLOWED_PPAPI_BROKER_NO_ACTION}, 2977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_ALLOWED_DOWNLOAD_NO_ACTION}, 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string radio_allow_label; 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (allowed) { 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int resource_id = GetIdForContentType(kAllowedAllowIDs, 3032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) arraysize(kAllowedAllowIDs), 3042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_type()); 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_allow_label = (content_type() == CONTENT_SETTINGS_TYPE_COOKIES) ? 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringFUTF8(resource_id, display_host) : 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF8(resource_id); 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_allow_label = l10n_util::GetStringFUTF8( 310a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) GetIdForContentType(kBlockedAllowIDs, arraysize(kBlockedAllowIDs), 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_type()), 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) display_host); 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const ContentSettingsTypeIdEntry kBlockedBlockIDs[] = { 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_NO_ACTION}, 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_IMAGES, IDS_BLOCKED_IMAGES_NO_ACTION}, 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_JAVASCRIPT, IDS_BLOCKED_JAVASCRIPT_NO_ACTION}, 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_PLUGINS, IDS_BLOCKED_PLUGINS_NO_ACTION}, 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {CONTENT_SETTINGS_TYPE_POPUPS, IDS_BLOCKED_POPUPS_NO_ACTION}, 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_BLOCKED_PPAPI_BROKER_NO_ACTION}, 3227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_BLOCKED_DOWNLOAD_NO_ACTION}, 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static const ContentSettingsTypeIdEntry kAllowedBlockIDs[] = { 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(bauerb): The string should say "block". 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_COOKIES, IDS_BLOCKED_COOKIES_NO_ACTION}, 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) {CONTENT_SETTINGS_TYPE_PPAPI_BROKER, IDS_ALLOWED_PPAPI_BROKER_BLOCK}, 3287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch {CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS, IDS_ALLOWED_DOWNLOAD_BLOCK}, 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string radio_block_label; 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (allowed) { 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int resource_id = GetIdForContentType(kAllowedBlockIDs, 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) arraysize(kAllowedBlockIDs), 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_type()); 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_block_label = (content_type() == CONTENT_SETTINGS_TYPE_COOKIES) ? 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringUTF8(resource_id) : 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) l10n_util::GetStringFUTF8(resource_id, display_host); 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_block_label = l10n_util::GetStringUTF8( 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetIdForContentType(kBlockedBlockIDs, arraysize(kBlockedBlockIDs), 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content_type())); 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.radio_items.push_back(radio_allow_label); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.radio_items.push_back(radio_block_label); 347a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ContentSetting setting; 348a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SettingSource setting_source = SETTING_SOURCE_NONE; 349a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool setting_is_wildcard = false; 350a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 351a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (content_type() == CONTENT_SETTINGS_TYPE_COOKIES) { 352a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) CookieSettings* cookie_settings = 353a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) CookieSettings::Factory::GetForProfile(profile()).get(); 354a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) setting = cookie_settings->GetCookieSetting( 355a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) url, url, true, &setting_source); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 357a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SettingInfo info; 358a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) HostContentSettingsMap* map = profile()->GetHostContentSettingsMap(); 3591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<base::Value> value = 3601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci map->GetWebsiteSetting(url, url, content_type(), std::string(), &info); 361a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) setting = content_settings::ValueToContentSetting(value.get()); 362a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) setting_source = info.source; 363a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) setting_is_wildcard = 364a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) info.primary_pattern == ContentSettingsPattern::Wildcard() && 365a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) info.secondary_pattern == ContentSettingsPattern::Wildcard(); 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3671e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 3681e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) if (content_type() == CONTENT_SETTINGS_TYPE_PLUGINS && 369a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) setting == CONTENT_SETTING_ALLOW && 370a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) setting_is_wildcard) { 3711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // In the corner case of unrecognized plugins (which are now blocked by 3721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // default) we indicate the blocked state in the UI and allow the user to 3731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) // whitelist. 3741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) radio_group.default_item = 1; 375a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } else if (setting == CONTENT_SETTING_ALLOW) { 3760f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) radio_group.default_item = kAllowButtonIndex; 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |block_setting_| is already set to |CONTENT_SETTING_BLOCK|. 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.default_item = 1; 380a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) block_setting_ = setting; 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 3835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) set_setting_is_managed(setting_source != SETTING_SOURCE_USER); 384a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (setting_source != SETTING_SOURCE_USER) { 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_radio_group_enabled(false); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_radio_group_enabled(true); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_item_ = radio_group.default_item; 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_radio_group(radio_group); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 393a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void ContentSettingSingleRadioGroup::AddException(ContentSetting setting) { 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (profile()) { 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->GetHostContentSettingsMap()->AddExceptionForURL( 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bubble_content().radio_group.url, 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bubble_content().radio_group.url, 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type(), 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setting); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingSingleRadioGroup::OnRadioClicked(int radio_index) { 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_item_ = radio_index; 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingCookiesBubbleModel : public ContentSettingSingleRadioGroup { 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingCookiesBubbleModel(Delegate* delegate, 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentSettingCookiesBubbleModel(); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnCustomLinkClicked() OVERRIDE; 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingCookiesBubbleModel::ContentSettingCookiesBubbleModel( 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingSingleRadioGroup( 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate, web_contents, profile, content_type) { 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(CONTENT_SETTINGS_TYPE_COOKIES, content_type); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_custom_link_enabled(true); 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingCookiesBubbleModel::~ContentSettingCookiesBubbleModel() { 432c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // On some plattforms e.g. MacOS X it is possible to close a tab while the 433ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch // cookies settings bubble is open. This resets the web contents to NULL. 434c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (settings_changed() && web_contents()) { 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CollectedCookiesInfoBarDelegate::Create( 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) InfoBarService::FromWebContents(web_contents())); 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingCookiesBubbleModel::OnCustomLinkClicked() { 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!web_contents()) 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_COLLECTED_COOKIES_SHOWN, 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<TabSpecificContentSettings>( 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents())), 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate()->ShowCollectedCookiesDialog(web_contents()); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingPluginBubbleModel : public ContentSettingSingleRadioGroup { 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingPluginBubbleModel(Delegate* delegate, 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type); 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4580f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) virtual ~ContentSettingPluginBubbleModel(); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnCustomLinkClicked() OVERRIDE; 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingPluginBubbleModel::ContentSettingPluginBubbleModel( 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingSingleRadioGroup( 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate, web_contents, profile, content_type) { 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(content_type, CONTENT_SETTINGS_TYPE_PLUGINS); 4725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Disable the "Run all plugins this time" link if the setting is managed and 4735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // can't be controlled by the user or if the user already clicked on the link 4745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // and ran all plugins. 4755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) set_custom_link_enabled(!setting_is_managed() && 4765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_contents && 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents( 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents)->load_plugins_link_enabled()); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4810f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)ContentSettingPluginBubbleModel::~ContentSettingPluginBubbleModel() { 4820f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (settings_changed()) { 4830f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) // If the user elected to allow all plugins then run plugins at this time. 4840f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (selected_item() == kAllowButtonIndex) 4850f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) OnCustomLinkClicked(); 4860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 4870f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 4880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingPluginBubbleModel::OnCustomLinkClicked() { 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction(UserMetricsAction("ClickToPlay_LoadAll_Bubble")); 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(web_contents()); 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(ENABLE_PLUGINS) 4935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(bauerb): We should send the identifiers of blocked plug-ins here. 4942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ChromePluginServiceFilter::GetInstance()->AuthorizeAllPlugins( 4955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) web_contents(), true, std::string()); 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_custom_link_enabled(false); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents())-> 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_load_plugins_link_enabled(false); 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingPopupBubbleModel : public ContentSettingSingleRadioGroup { 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingPopupBubbleModel(Delegate* delegate, 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentSettingPopupBubbleModel() {} 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetPopups(); 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnPopupClicked(int index) OVERRIDE; 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingPopupBubbleModel::ContentSettingPopupBubbleModel( 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingSingleRadioGroup( 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate, web_contents, profile, content_type) { 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetPopups(); 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingPopupBubbleModel::SetPopups() { 5273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::map<int32, GURL> blocked_popups = 5283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) PopupBlockerTabHelper::FromWebContents(web_contents()) 5293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ->GetBlockedPopupRequests(); 5303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) for (std::map<int32, GURL>::const_iterator iter = blocked_popups.begin(); 5313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) iter != blocked_popups.end(); 5323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ++iter) { 5333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::string title(iter->second.spec()); 5343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // The popup may not have a valid URL. 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (title.empty()) 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title = l10n_util::GetStringUTF8(IDS_TAB_LOADING_TITLE); 537ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch PopupItem popup_item( 5383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ui::ResourceBundle::GetSharedInstance().GetImageNamed( 5393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) IDR_DEFAULT_FAVICON), 5403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) title, 5413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) iter->first); 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add_popup(popup_item); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingPopupBubbleModel::OnPopupClicked(int index) { 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (web_contents()) { 5483551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) PopupBlockerTabHelper::FromWebContents(web_contents())-> 5493551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ShowBlockedPopup(bubble_content().popup_items[index].popup_id); 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// The model of the content settings bubble for media settings. 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ContentSettingMediaStreamBubbleModel 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : public ContentSettingTitleAndLinkModel { 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingMediaStreamBubbleModel(Delegate* delegate, 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* web_contents, 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile); 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~ContentSettingMediaStreamBubbleModel(); 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetTitle(); 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the data for the radio buttons of the bubble. 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetRadioGroup(); 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Sets the data for the media menus of the bubble. 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetMediaMenus(); 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Updates the camera and microphone setting with the passed |setting|. 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateSettings(ContentSetting setting); 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Updates the camera and microphone default device with the passed |type| 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // and device. 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateDefaultDeviceForType(content::MediaStreamType type, 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& device); 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // ContentSettingBubbleModel implementation. 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnRadioClicked(int radio_index) OVERRIDE; 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnMediaMenuClicked(content::MediaStreamType type, 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& selected_device) OVERRIDE; 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The index of the selected radio item. 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int selected_item_; 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The content settings that are associated with the individual radio 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // buttons. 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSetting radio_item_setting_[2]; 5867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // The state of the microphone and camera access. 5877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TabSpecificContentSettings::MicrophoneCameraState state_; 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ContentSettingMediaStreamBubbleModel::ContentSettingMediaStreamBubbleModel( 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Delegate* delegate, 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebContents* web_contents, 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile* profile) 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : ContentSettingTitleAndLinkModel( 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) delegate, web_contents, profile, CONTENT_SETTINGS_TYPE_MEDIASTREAM), 5967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) selected_item_(0), 5977d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_(TabSpecificContentSettings::MICROPHONE_CAMERA_NOT_ACCESSED) { 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(profile); 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Initialize the content settings associated with the individual radio 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // buttons. 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_item_setting_[0] = CONTENT_SETTING_ASK; 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_item_setting_[1] = CONTENT_SETTING_BLOCK; 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TabSpecificContentSettings* content_settings = 6057d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents); 6067d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) state_ = content_settings->GetMicrophoneCameraState(); 6077d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetTitle(); 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetRadioGroup(); 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SetMediaMenus(); 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)ContentSettingMediaStreamBubbleModel::~ContentSettingMediaStreamBubbleModel() { 614fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch // On some platforms (e.g. MacOS X) it is possible to close a tab while the 615c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // media stream bubble is open. This resets the web contents to NULL. 616c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!web_contents()) 617c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 618fb250657ef40d7500f20882d5c9909c1013367d3Ben Murdoch 61934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) bool media_setting_changed = false; 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (MediaMenuMap::const_iterator it = bubble_content().media_menus.begin(); 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) it != bubble_content().media_menus.end(); ++it) { 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (it->second.selected_device.id != it->second.default_device.id) { 6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateDefaultDeviceForType(it->first, it->second.selected_device.id); 62434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) media_setting_changed = true; 6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Update the media settings if the radio button selection was changed. 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (selected_item_ != bubble_content().radio_group.default_item) { 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) UpdateSettings(radio_item_setting_[selected_item_]); 63134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) media_setting_changed = true; 63234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } 63334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) 63434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // Trigger the reload infobar if the media setting has been changed. 63534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (media_setting_changed) { 63634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) MediaSettingChangedInfoBarDelegate::Create( 63734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) InfoBarService::FromWebContents(web_contents())); 6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaStreamBubbleModel::SetTitle() { 6427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int title_id = 0; 64334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) switch (state_) { 64434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_CAMERA_NOT_ACCESSED: 64534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // If neither microphone nor camera stream was accessed, then there is no 64634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // icon didplayed in the omnibox and no settings bubble availbale. Hence 64734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // there is no title. 64834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) NOTREACHED(); 64934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) return; 65034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_ACCESSED: 65134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) title_id = IDS_MICROPHONE_ACCESSED; 65234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 65334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case TabSpecificContentSettings::CAMERA_ACCESSED: 65434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) title_id = IDS_CAMERA_ACCESSED; 65534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 65634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_CAMERA_ACCESSED: 65734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) title_id = IDS_MICROPHONE_CAMERA_ALLOWED; 65834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 65934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_BLOCKED: 66034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) title_id = IDS_MICROPHONE_BLOCKED; 66134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 66234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case TabSpecificContentSettings::CAMERA_BLOCKED: 66334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) title_id = IDS_CAMERA_BLOCKED; 66434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 66534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_CAMERA_BLOCKED: 66634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) title_id = IDS_MICROPHONE_CAMERA_BLOCKED; 66734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 6687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_title(l10n_util::GetStringUTF8(title_id)); 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaStreamBubbleModel::SetRadioGroup() { 6733551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) TabSpecificContentSettings* content_settings = 6743551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 6753551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) GURL url = content_settings->media_stream_access_origin(); 6762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RadioGroup radio_group; 6772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_group.url = url; 6782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 679a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 display_host_utf16; 6802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::AppendFormattedHost( 6812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) url, 6822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile()->GetPrefs()->GetString(prefs::kAcceptLanguages), 6832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &display_host_utf16); 6845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) std::string display_host(base::UTF16ToUTF8(display_host_utf16)); 6852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (display_host.empty()) 6862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) display_host = url.spec(); 6872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int radio_allow_label_id = 0; 6897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int radio_block_label_id = 0; 69034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) switch (state_) { 69134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_CAMERA_NOT_ACCESSED: 69234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) NOTREACHED(); 69334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) return; 69434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_ACCESSED: 6957d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_allow_label_id = IDS_ALLOWED_MEDIASTREAM_MIC_NO_ACTION; 6967d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_block_label_id = IDS_ALLOWED_MEDIASTREAM_MIC_BLOCK; 69734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) selected_item_ = 0; 69834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 69934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case TabSpecificContentSettings::CAMERA_ACCESSED: 7007d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_allow_label_id = IDS_ALLOWED_MEDIASTREAM_CAMERA_NO_ACTION; 7017d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) radio_block_label_id = IDS_ALLOWED_MEDIASTREAM_CAMERA_BLOCK; 70234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) selected_item_ = 0; 70334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 70434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_CAMERA_ACCESSED: 70534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) radio_allow_label_id = IDS_ALLOWED_MEDIASTREAM_MIC_AND_CAMERA_NO_ACTION; 70634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) radio_block_label_id = IDS_ALLOWED_MEDIASTREAM_MIC_AND_CAMERA_BLOCK; 70734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) selected_item_ = 0; 70834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 70934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_BLOCKED: 71034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (url.SchemeIsSecure()) { 71134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) radio_allow_label_id = IDS_BLOCKED_MEDIASTREAM_MIC_ALLOW; 71234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) radio_item_setting_[0] = CONTENT_SETTING_ALLOW; 71334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } else { 71434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) radio_allow_label_id = IDS_BLOCKED_MEDIASTREAM_MIC_ASK; 71534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } 71634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) 71734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) radio_block_label_id = IDS_BLOCKED_MEDIASTREAM_MIC_NO_ACTION; 71834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) selected_item_ = 1; 71934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 72034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case TabSpecificContentSettings::CAMERA_BLOCKED: 72134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (url.SchemeIsSecure()) { 72234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) radio_allow_label_id = IDS_BLOCKED_MEDIASTREAM_CAMERA_ALLOW; 72334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) radio_item_setting_[0] = CONTENT_SETTING_ALLOW; 72434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } else { 72534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) radio_allow_label_id = IDS_BLOCKED_MEDIASTREAM_CAMERA_ASK; 72634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } 72734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) 72834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) radio_block_label_id = IDS_BLOCKED_MEDIASTREAM_CAMERA_NO_ACTION; 72934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) selected_item_ = 1; 73034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 73134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) case TabSpecificContentSettings::MICROPHONE_CAMERA_BLOCKED: 73234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (url.SchemeIsSecure()) { 73334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) radio_allow_label_id = IDS_BLOCKED_MEDIASTREAM_MIC_AND_CAMERA_ALLOW; 73434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) radio_item_setting_[0] = CONTENT_SETTING_ALLOW; 73534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } else { 73634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) radio_allow_label_id = IDS_BLOCKED_MEDIASTREAM_MIC_AND_CAMERA_ASK; 73734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) } 73834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) 73934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) radio_block_label_id = IDS_BLOCKED_MEDIASTREAM_MIC_AND_CAMERA_NO_ACTION; 74034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) selected_item_ = 1; 74134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) break; 7422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string radio_allow_label = l10n_util::GetStringFUTF8( 7455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) radio_allow_label_id, base::UTF8ToUTF16(display_host)); 7467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) std::string radio_block_label = 7477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) l10n_util::GetStringUTF8(radio_block_label_id); 7487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_group.default_item = selected_item_; 7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_group.radio_items.push_back(radio_allow_label); 7512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) radio_group.radio_items.push_back(radio_block_label); 7522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_radio_group(radio_group); 7542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_radio_group_enabled(true); 7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaStreamBubbleModel::UpdateSettings( 7582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSetting setting) { 7592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (profile()) { 7602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HostContentSettingsMap* content_settings = 7612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile()->GetHostContentSettingsMap(); 7623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) TabSpecificContentSettings* tab_content_settings = 7633551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 7642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The same patterns must be used as in other places (e.g. the infobar) in 7652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // order to override the existing rule. Otherwise a new rule is created. 7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // TODO(markusheintz): Extract to a helper so that there is only a single 7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // place to touch. 7682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsPattern primary_pattern = 7693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ContentSettingsPattern::FromURLNoWildcard( 7703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) tab_content_settings->media_stream_access_origin()); 7712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsPattern secondary_pattern = 7722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ContentSettingsPattern::Wildcard(); 77334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (state_ == TabSpecificContentSettings::MICROPHONE_ACCESSED || 77434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_ACCESSED || 77534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_BLOCKED || 77634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_BLOCKED) { 7777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content_settings->SetContentSetting( 7787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) primary_pattern, secondary_pattern, 7797d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC, std::string(), setting); 7807d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 78134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (state_ == TabSpecificContentSettings::CAMERA_ACCESSED || 78234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_ACCESSED || 78334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) state_ == TabSpecificContentSettings::CAMERA_BLOCKED || 78434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_BLOCKED) { 7857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) content_settings->SetContentSetting( 7867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) primary_pattern, secondary_pattern, 7877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) CONTENT_SETTINGS_TYPE_MEDIASTREAM_CAMERA, std::string(), setting); 7887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 7892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaStreamBubbleModel::UpdateDefaultDeviceForType( 7932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::MediaStreamType type, 7942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& device) { 7952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefService* prefs = profile()->GetPrefs(); 7962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (type == content::MEDIA_DEVICE_AUDIO_CAPTURE) { 7972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs->SetString(prefs::kDefaultAudioCaptureDevice, device); 7982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } else { 7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(content::MEDIA_DEVICE_VIDEO_CAPTURE, type); 8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) prefs->SetString(prefs::kDefaultVideoCaptureDevice, device); 8012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaStreamBubbleModel::SetMediaMenus() { 80568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) TabSpecificContentSettings* content_settings = 80668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 80768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) const std::string& requested_microphone = 80868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) content_settings->media_stream_requested_audio_device(); 8091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& requested_camera = 8101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content_settings->media_stream_requested_video_device(); 81168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Add microphone menu. 8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefService* prefs = profile()->GetPrefs(); 8142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaCaptureDevicesDispatcher* dispatcher = 8152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaCaptureDevicesDispatcher::GetInstance(); 8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::MediaStreamDevices& microphones = 8172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dispatcher->GetAudioCaptureDevices(); 8187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 81934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) bool show_mic_menu = 82034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) (state_ == TabSpecificContentSettings::MICROPHONE_ACCESSED || 82134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_ACCESSED || 82234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_BLOCKED || 82334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_BLOCKED); 82434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) bool show_camera_menu = 82534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) (state_ == TabSpecificContentSettings::CAMERA_ACCESSED || 82634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_ACCESSED || 82734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) state_ == TabSpecificContentSettings::CAMERA_BLOCKED || 82834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) state_ == TabSpecificContentSettings::MICROPHONE_CAMERA_BLOCKED); 82934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) DCHECK(show_mic_menu || show_camera_menu); 83034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) 83134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (show_mic_menu) { 8327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaMenu mic_menu; 8337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) mic_menu.label = l10n_util::GetStringUTF8(IDS_MEDIA_SELECTED_MIC_LABEL); 8347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!microphones.empty()) { 83568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string preferred_mic; 83668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (requested_microphone.empty()) { 83768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) preferred_mic = prefs->GetString(prefs::kDefaultAudioCaptureDevice); 83868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) mic_menu.disabled = false; 83968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } else { 84068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Set the |disabled| to true in order to disable the device selection 84168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // menu on the media settings bubble. This must be done if the website 84268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // manages the microphone devices itself. 84368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) preferred_mic = requested_microphone; 84468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) mic_menu.disabled = true; 84568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 84668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 8477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) mic_menu.default_device = GetMediaDeviceById(preferred_mic, microphones); 8487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) mic_menu.selected_device = mic_menu.default_device; 8497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 8507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) add_media_menu(content::MEDIA_DEVICE_AUDIO_CAPTURE, mic_menu); 8512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 85334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) if (show_camera_menu) { 8547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const content::MediaStreamDevices& cameras = 8557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) dispatcher->GetVideoCaptureDevices(); 8567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) MediaMenu camera_menu; 8577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) camera_menu.label = 8587d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) l10n_util::GetStringUTF8(IDS_MEDIA_SELECTED_CAMERA_LABEL); 8597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) if (!cameras.empty()) { 86068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) std::string preferred_camera; 86168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) if (requested_camera.empty()) { 8628bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) preferred_camera = prefs->GetString(prefs::kDefaultVideoCaptureDevice); 86368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) camera_menu.disabled = false; 86468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } else { 86568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // Disable the menu since the website is managing the camera devices 86668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // itself. 86768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) preferred_camera = requested_camera; 86868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) camera_menu.disabled = true; 86968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) } 87068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 8717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) camera_menu.default_device = 8727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) GetMediaDeviceById(preferred_camera, cameras); 8737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) camera_menu.selected_device = camera_menu.default_device; 8747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) } 8757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) add_media_menu(content::MEDIA_DEVICE_VIDEO_CAPTURE, camera_menu); 8762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 8772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaStreamBubbleModel::OnRadioClicked(int radio_index) { 8802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) selected_item_ = radio_index; 8812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void ContentSettingMediaStreamBubbleModel::OnMediaMenuClicked( 8842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) content::MediaStreamType type, 8852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& selected_device_id) { 8862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(type == content::MEDIA_DEVICE_AUDIO_CAPTURE || 8872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) type == content::MEDIA_DEVICE_VIDEO_CAPTURE); 8882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK_EQ(1U, bubble_content().media_menus.count(type)); 8892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaCaptureDevicesDispatcher* dispatcher = 8902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MediaCaptureDevicesDispatcher::GetInstance(); 8912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const content::MediaStreamDevices& devices = 8922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) (type == content::MEDIA_DEVICE_AUDIO_CAPTURE) ? 8932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dispatcher->GetAudioCaptureDevices() : 8942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) dispatcher->GetVideoCaptureDevices(); 8952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) set_selected_device(GetMediaDeviceById(selected_device_id, devices)); 8962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 8972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingDomainListBubbleModel 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public ContentSettingTitleAndLinkModel { 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingDomainListBubbleModel(Delegate* delegate, 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type); 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentSettingDomainListBubbleModel() {} 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void MaybeAddDomainList(const std::set<std::string>& hosts, int title_id); 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetDomainsAndCustomLink(); 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnCustomLinkClicked() OVERRIDE; 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingDomainListBubbleModel::ContentSettingDomainListBubbleModel( 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingTitleAndLinkModel( 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate, web_contents, profile, content_type) { 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(CONTENT_SETTINGS_TYPE_GEOLOCATION, content_type) << 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "SetDomains currently only supports geolocation content type"; 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetDomainsAndCustomLink(); 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingDomainListBubbleModel::MaybeAddDomainList( 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::set<std::string>& hosts, int title_id) { 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!hosts.empty()) { 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DomainList domain_list; 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) domain_list.title = l10n_util::GetStringUTF8(title_id); 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) domain_list.hosts = hosts; 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add_domain_list(domain_list); 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingDomainListBubbleModel::SetDomainsAndCustomLink() { 9365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 938ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const ContentSettingsUsagesState& usages = 939ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch content_settings->geolocation_usages_state(); 940ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ContentSettingsUsagesState::FormattedHostsPerState formatted_hosts_per_state; 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) unsigned int tab_state_flags = 0; 942ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch usages.GetDetailedInfo(&formatted_hosts_per_state, &tab_state_flags); 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Divide the tab's current geolocation users into sets according to their 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // permission state. 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MaybeAddDomainList(formatted_hosts_per_state[CONTENT_SETTING_ALLOW], 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_GEOLOCATION_BUBBLE_SECTION_ALLOWED); 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MaybeAddDomainList(formatted_hosts_per_state[CONTENT_SETTING_BLOCK], 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_GEOLOCATION_BUBBLE_SECTION_DENIED); 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 951ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (tab_state_flags & ContentSettingsUsagesState::TABSTATE_HAS_EXCEPTION) { 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_custom_link(l10n_util::GetStringUTF8( 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_GEOLOCATION_BUBBLE_CLEAR_LINK)); 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_custom_link_enabled(true); 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (tab_state_flags & 956ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch ContentSettingsUsagesState::TABSTATE_HAS_CHANGED) { 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_custom_link(l10n_util::GetStringUTF8( 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_GEOLOCATION_BUBBLE_REQUIRE_RELOAD_TO_CLEAR)); 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingDomainListBubbleModel::OnCustomLinkClicked() { 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!web_contents()) 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Reset this embedder's entry to default for each of the requesting 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // origins currently on the page. 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& embedder_url = web_contents()->GetURL(); 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents()); 970ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch const ContentSettingsUsagesState::StateMap& state_map = 971ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch content_settings->geolocation_usages_state().state_map(); 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HostContentSettingsMap* settings_map = 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile()->GetHostContentSettingsMap(); 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch for (ContentSettingsUsagesState::StateMap::const_iterator it = 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_map.begin(); it != state_map.end(); ++it) { 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) settings_map->SetContentSetting( 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURLNoWildcard(it->first), 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsPattern::FromURLNoWildcard(embedder_url), 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTINGS_TYPE_GEOLOCATION, 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string(), 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CONTENT_SETTING_DEFAULT); 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ContentSettingMixedScriptBubbleModel 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public ContentSettingTitleLinkAndCustomModel { 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingMixedScriptBubbleModel(Delegate* delegate, 9905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 9915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 9925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type); 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ContentSettingMixedScriptBubbleModel() {} 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnCustomLinkClicked() OVERRIDE; 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingMixedScriptBubbleModel::ContentSettingMixedScriptBubbleModel( 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingTitleLinkAndCustomModel( 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate, web_contents, profile, content_type) { 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(content_type, CONTENT_SETTINGS_TYPE_MIXEDSCRIPT); 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_custom_link_enabled(true); 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingMixedScriptBubbleModel::OnCustomLinkClicked() { 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RecordAction(UserMetricsAction("MixedScript_LoadAnyway_Bubble")); 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(web_contents()); 1014c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch web_contents()->SendToAllFrames( 1015c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch new ChromeViewMsg_SetAllowRunningInsecureContent(MSG_ROUTING_NONE, true)); 1016c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch web_contents()->GetMainFrame()->Send(new ChromeViewMsg_ReloadFrame( 1017c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch web_contents()->GetMainFrame()->GetRoutingID())); 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingRPHBubbleModel::ContentSettingRPHBubbleModel( 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry* registry, 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ContentSettingTitleAndLinkModel( 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delegate, web_contents, profile, content_type), 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_item_(0), 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_(registry), 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_handler_(ProtocolHandler::EmptyProtocolHandler()), 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) previous_handler_(ProtocolHandler::EmptyProtocolHandler()) { 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS, content_type); 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings* content_settings = 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents); 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_handler_ = content_settings->pending_protocol_handler(); 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) previous_handler_ = content_settings->previous_protocol_handler(); 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1039a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) base::string16 protocol; 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (pending_handler_.protocol() == "mailto") { 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protocol = l10n_util::GetStringUTF16( 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_REGISTER_PROTOCOL_HANDLER_MAILTO_NAME); 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else if (pending_handler_.protocol() == "webcal") { 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protocol = l10n_util::GetStringUTF16( 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_REGISTER_PROTOCOL_HANDLER_WEBCAL_NAME); 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 10475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) protocol = base::UTF8ToUTF16(pending_handler_.protocol()); 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1050cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) // Note that we ignore the |title| parameter. 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (previous_handler_.IsEmpty()) { 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_title(l10n_util::GetStringFUTF8( 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM, 10545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16(pending_handler_.url().host()), 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protocol)); 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_title(l10n_util::GetStringFUTF8( 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDS_REGISTER_PROTOCOL_HANDLER_CONFIRM_REPLACE, 10595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::UTF8ToUTF16(pending_handler_.url().host()), 1060cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) protocol, 1061cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) base::UTF8ToUTF16(previous_handler_.url().host()))); 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string radio_allow_label = 1065cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) l10n_util::GetStringUTF8(IDS_REGISTER_PROTOCOL_HANDLER_ACCEPT); 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string radio_deny_label = 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF8(IDS_REGISTER_PROTOCOL_HANDLER_DENY); 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string radio_ignore_label = 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l10n_util::GetStringUTF8(IDS_REGISTER_PROTOCOL_HANDLER_IGNORE); 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = web_contents->GetURL(); 10725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RadioGroup radio_group; 10735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.url = url; 10745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.radio_items.push_back(radio_allow_label); 10765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.radio_items.push_back(radio_deny_label); 10775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.radio_items.push_back(radio_ignore_label); 10785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSetting setting = 10795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_settings->pending_protocol_handler_setting(); 10805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (setting == CONTENT_SETTING_ALLOW) 10815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.default_item = RPH_ALLOW; 10825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (setting == CONTENT_SETTING_BLOCK) 10835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.default_item = RPH_BLOCK; 10845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 10855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) radio_group.default_item = RPH_IGNORE; 10865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_item_ = radio_group.default_item; 10885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_radio_group_enabled(true); 10895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_radio_group(radio_group); 10905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingRPHBubbleModel::OnRadioClicked(int radio_index) { 10935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (selected_item_ == radio_index) 10945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 10955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) selected_item_ = radio_index; 10975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (radio_index == RPH_ALLOW) 10995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RegisterProtocolHandler(); 11005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (radio_index == RPH_BLOCK) 11015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnregisterProtocolHandler(); 11025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else if (radio_index == RPH_IGNORE) 11035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IgnoreProtocolHandler(); 11045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) else 11055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 11065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingRPHBubbleModel::OnDoneClicked() { 11095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The user has one chance to deal with the RPH content setting UI, 11105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // then we remove it. 11115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents())-> 11125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearPendingProtocolHandler(); 11135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::current()->Notify( 11145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED, 11155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<WebContents>(web_contents()), 11165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::NoDetails()); 11175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingRPHBubbleModel::RegisterProtocolHandler() { 11205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A no-op if the handler hasn't been ignored, but needed in case the user 11215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // selects sequences like register/ignore/register. 11225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->RemoveIgnoredHandler(pending_handler_); 11235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->OnAcceptRegisterProtocolHandler(pending_handler_); 11255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents())-> 11265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_pending_protocol_handler_setting(CONTENT_SETTING_ALLOW); 11275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingRPHBubbleModel::UnregisterProtocolHandler() { 11305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->OnDenyRegisterProtocolHandler(pending_handler_); 11315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents())-> 11325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_pending_protocol_handler_setting(CONTENT_SETTING_BLOCK); 11335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearOrSetPreviousHandler(); 11345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingRPHBubbleModel::IgnoreProtocolHandler() { 11375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->OnIgnoreRegisterProtocolHandler(pending_handler_); 11385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TabSpecificContentSettings::FromWebContents(web_contents())-> 11395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set_pending_protocol_handler_setting(CONTENT_SETTING_DEFAULT); 11405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearOrSetPreviousHandler(); 11415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingRPHBubbleModel::ClearOrSetPreviousHandler() { 11445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (previous_handler_.IsEmpty()) { 11455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->ClearDefault(pending_handler_.protocol()); 11465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 11475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry_->OnAcceptRegisterProtocolHandler(previous_handler_); 11485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 11495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 11505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 11515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ContentSettingMidiSysExBubbleModel 1152ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch : public ContentSettingTitleAndLinkModel { 1153ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch public: 11545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ContentSettingMidiSysExBubbleModel(Delegate* delegate, 1155ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WebContents* web_contents, 1156ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch Profile* profile, 1157ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ContentSettingsType content_type); 11585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual ~ContentSettingMidiSysExBubbleModel() {} 1159ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1160ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch private: 1161ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void MaybeAddDomainList(const std::set<std::string>& hosts, int title_id); 1162ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch void SetDomainsAndCustomLink(); 1163ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch virtual void OnCustomLinkClicked() OVERRIDE; 1164ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}; 1165ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 11665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ContentSettingMidiSysExBubbleModel::ContentSettingMidiSysExBubbleModel( 1167ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch Delegate* delegate, 1168ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch WebContents* web_contents, 1169ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch Profile* profile, 1170ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ContentSettingsType content_type) 1171ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch : ContentSettingTitleAndLinkModel( 1172ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch delegate, web_contents, profile, content_type) { 1173ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DCHECK_EQ(CONTENT_SETTINGS_TYPE_MIDI_SYSEX, content_type); 1174ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch SetDomainsAndCustomLink(); 1175ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1176ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 11775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ContentSettingMidiSysExBubbleModel::MaybeAddDomainList( 1178ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const std::set<std::string>& hosts, int title_id) { 1179ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (!hosts.empty()) { 1180ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch DomainList domain_list; 1181ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch domain_list.title = l10n_util::GetStringUTF8(title_id); 1182ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch domain_list.hosts = hosts; 1183ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch add_domain_list(domain_list); 1184ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 1185ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1186ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 11875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ContentSettingMidiSysExBubbleModel::SetDomainsAndCustomLink() { 1188ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TabSpecificContentSettings* content_settings = 1189ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TabSpecificContentSettings::FromWebContents(web_contents()); 1190ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const ContentSettingsUsagesState& usages_state = 1191ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content_settings->midi_usages_state(); 1192ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ContentSettingsUsagesState::FormattedHostsPerState formatted_hosts_per_state; 1193ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch unsigned int tab_state_flags = 0; 1194ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch usages_state.GetDetailedInfo(&formatted_hosts_per_state, &tab_state_flags); 1195ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Divide the tab's current MIDI sysex users into sets according to their 1196ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // permission state. 1197ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch MaybeAddDomainList(formatted_hosts_per_state[CONTENT_SETTING_ALLOW], 1198ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch IDS_MIDI_SYSEX_BUBBLE_ALLOWED); 1199ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1200ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch MaybeAddDomainList(formatted_hosts_per_state[CONTENT_SETTING_BLOCK], 1201ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch IDS_MIDI_SYSEX_BUBBLE_DENIED); 1202ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1203ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (tab_state_flags & ContentSettingsUsagesState::TABSTATE_HAS_EXCEPTION) { 1204ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch set_custom_link(l10n_util::GetStringUTF8( 1205ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch IDS_MIDI_SYSEX_BUBBLE_CLEAR_LINK)); 1206ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch set_custom_link_enabled(true); 1207ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } else if (tab_state_flags & 1208ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ContentSettingsUsagesState::TABSTATE_HAS_CHANGED) { 1209ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch set_custom_link(l10n_util::GetStringUTF8( 1210ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch IDS_MIDI_SYSEX_BUBBLE_REQUIRE_RELOAD_TO_CLEAR)); 1211ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 1212ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1213ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 12145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ContentSettingMidiSysExBubbleModel::OnCustomLinkClicked() { 1215ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (!web_contents()) 1216ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch return; 1217ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // Reset this embedder's entry to default for each of the requesting 1218ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch // origins currently on the page. 1219ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TabSpecificContentSettings* content_settings = 1220ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch TabSpecificContentSettings::FromWebContents(web_contents()); 1221ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch const ContentSettingsUsagesState::StateMap& state_map = 1222ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch content_settings->midi_usages_state().state_map(); 1223ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch HostContentSettingsMap* settings_map = 1224ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile()->GetHostContentSettingsMap(); 1225ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 1226ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch for (ContentSettingsUsagesState::StateMap::const_iterator it = 1227ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch state_map.begin(); it != state_map.end(); ++it) { 1228ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch settings_map->SetContentSetting( 1229ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ContentSettingsPattern::FromURLNoWildcard(it->first), 1230ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ContentSettingsPattern::Wildcard(), 1231ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CONTENT_SETTINGS_TYPE_MIDI_SYSEX, 1232ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch std::string(), 1233ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch CONTENT_SETTING_DEFAULT); 1234ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 1235ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch} 1236ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 12375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 12385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel* 12395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingBubbleModel::CreateContentSettingBubbleModel( 12405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Delegate* delegate, 12415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 12425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 12435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) { 12445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_type == CONTENT_SETTINGS_TYPE_COOKIES) { 12455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ContentSettingCookiesBubbleModel(delegate, web_contents, profile, 12465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type); 12475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_type == CONTENT_SETTINGS_TYPE_POPUPS) { 12495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ContentSettingPopupBubbleModel(delegate, web_contents, profile, 12505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type); 12515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_type == CONTENT_SETTINGS_TYPE_GEOLOCATION) { 12535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ContentSettingDomainListBubbleModel(delegate, web_contents, 12545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile, content_type); 12555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (content_type == CONTENT_SETTINGS_TYPE_MEDIASTREAM) { 12572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new ContentSettingMediaStreamBubbleModel(delegate, web_contents, 12582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile); 12592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 12605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_type == CONTENT_SETTINGS_TYPE_PLUGINS) { 12615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ContentSettingPluginBubbleModel(delegate, web_contents, profile, 12625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type); 12635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_type == CONTENT_SETTINGS_TYPE_MIXEDSCRIPT) { 12655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ContentSettingMixedScriptBubbleModel(delegate, web_contents, 12665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile, content_type); 12675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 12685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (content_type == CONTENT_SETTINGS_TYPE_PROTOCOL_HANDLERS) { 12695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProtocolHandlerRegistry* registry = 12705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ProtocolHandlerRegistryFactory::GetForBrowserContext(profile); 12715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ContentSettingRPHBubbleModel(delegate, web_contents, profile, 12725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registry, content_type); 12735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1274ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch if (content_type == CONTENT_SETTINGS_TYPE_MIDI_SYSEX) { 12755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return new ContentSettingMidiSysExBubbleModel(delegate, web_contents, 1276ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch profile, content_type); 1277ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 12785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new ContentSettingSingleRadioGroup(delegate, web_contents, profile, 12795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_type); 12805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::ContentSettingBubbleModel( 12835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents, 12845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile* profile, 12855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentSettingsType content_type) 12865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : web_contents_(web_contents), 12875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_(profile), 12885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) content_type_(content_type), 12895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) setting_is_managed_(false) { 12905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED, 12915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<WebContents>(web_contents)); 12925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, chrome::NOTIFICATION_PROFILE_DESTROYED, 12935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<Profile>(profile_)); 12945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::~ContentSettingBubbleModel() { 12975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 12985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::RadioGroup::RadioGroup() : default_item(0) {} 13005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::RadioGroup::~RadioGroup() {} 13025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::DomainList::DomainList() {} 13045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::DomainList::~DomainList() {} 13065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 130768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)ContentSettingBubbleModel::MediaMenu::MediaMenu() : disabled(false) {} 130868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 130968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)ContentSettingBubbleModel::MediaMenu::~MediaMenu() {} 131068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) 13115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::BubbleContent::BubbleContent() 13125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : radio_group_enabled(false), 13135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) custom_link_enabled(false) { 13145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 13155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ContentSettingBubbleModel::BubbleContent::~BubbleContent() {} 13175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ContentSettingBubbleModel::Observe( 13195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int type, 13205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 13215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) { 13225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (type == content::NOTIFICATION_WEB_CONTENTS_DESTROYED) { 13235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(web_contents_, 13245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::Source<WebContents>(source).ptr()); 13255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) web_contents_ = NULL; 13265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 13275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(chrome::NOTIFICATION_PROFILE_DESTROYED, type); 13285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(profile_, content::Source<Profile>(source).ptr()); 13295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) profile_ = NULL; 13305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 13315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1332