Index: chrome/browser/content_setting_bubble_model.cc |
=================================================================== |
--- chrome/browser/content_setting_bubble_model.cc (revision 42668) |
+++ chrome/browser/content_setting_bubble_model.cc (working copy) |
@@ -6,6 +6,7 @@ |
#include "app/l10n_util.h" |
#include "chrome/browser/blocked_popup_container.h" |
+#include "chrome/browser/geolocation/geolocation_content_settings_map.h" |
#include "chrome/browser/host_content_settings_map.h" |
#include "chrome/browser/pref_service.h" |
#include "chrome/browser/profile.h" |
@@ -33,8 +34,10 @@ |
IDS_BLOCKED_JAVASCRIPT_TITLE, |
IDS_BLOCKED_PLUGINS_TITLE, |
IDS_BLOCKED_POPUPS_TITLE, |
+ 0, // Geolocation does not have an overall title. |
}; |
- set_title(l10n_util::GetStringUTF8(kTitleIDs[content_type()])); |
+ if (kTitleIDs[content_type()]) |
+ set_title(l10n_util::GetStringUTF8(kTitleIDs[content_type()])); |
} |
void SetManageLink() { |
@@ -44,6 +47,7 @@ |
IDS_BLOCKED_JAVASCRIPT_LINK, |
IDS_BLOCKED_PLUGINS_LINK, |
IDS_BLOCKED_POPUPS_LINK, |
+ IDS_GEOLOCATION_BUBBLE_MANAGE_LINK, |
}; |
set_manage_link(l10n_util::GetStringUTF8(kLinkIDs[content_type()])); |
} |
@@ -80,6 +84,7 @@ |
IDS_BLOCKED_JAVASCRIPT_UNBLOCK, |
IDS_BLOCKED_PLUGINS_UNBLOCK, |
IDS_BLOCKED_POPUPS_UNBLOCK, |
+ 0, // We don't manage geolocation here. |
}; |
std::string radio_allow_label; |
radio_allow_label = l10n_util::GetStringFUTF8( |
@@ -91,6 +96,7 @@ |
IDS_BLOCKED_JAVASCRIPT_NO_ACTION, |
IDS_BLOCKED_PLUGINS_NO_ACTION, |
IDS_BLOCKED_POPUPS_NO_ACTION, |
+ 0, // We don't manage geolocation here. |
}; |
std::string radio_block_label; |
radio_block_label = l10n_util::GetStringFUTF8( |
@@ -149,6 +155,63 @@ |
} |
}; |
+class ContentSettingDomainListBubbleModel |
+ : public ContentSettingTitleAndLinkModel { |
+ public: |
+ ContentSettingDomainListBubbleModel(TabContents* tab_contents, |
+ Profile* profile, |
+ ContentSettingsType content_type) |
+ : ContentSettingTitleAndLinkModel(tab_contents, profile, content_type) { |
+ DCHECK_EQ(CONTENT_SETTINGS_TYPE_GEOLOCATION, content_type) << |
+ "SetDomains currently only supports geolocation content type"; |
+ SetDomains(); |
+ SetClearLink(); |
+ } |
+ |
+ private: |
+ void MaybeAddDomainList(DomainList* domain_list, int title_id) { |
+ if (!domain_list->hosts.empty()) { |
+ domain_list->title = l10n_util::GetStringUTF8(title_id); |
+ add_domain_list(*domain_list); |
+ } |
+ } |
+ void SetDomains() { |
+ const TabContents::GeolocationContentSettings& settings = |
+ tab_contents()->geolocation_content_settings(); |
+ |
+ // Divide the tab's current geolocation users into sets according to their |
+ // permission state. |
+ DomainList domains[CONTENT_SETTING_NUM_SETTINGS]; |
+ for (TabContents::GeolocationContentSettings::const_iterator it = |
+ settings.begin(); it != settings.end(); ++it) { |
+ domains[it->second].hosts.insert(it->first.host()); |
+ } |
+ MaybeAddDomainList(&domains[CONTENT_SETTING_ALLOW], |
+ IDS_GEOLOCATION_BUBBLE_SECTION_ALLOWED); |
+ MaybeAddDomainList(&domains[CONTENT_SETTING_BLOCK], |
+ IDS_GEOLOCATION_BUBBLE_SECTION_DENIED); |
+ } |
+ void SetClearLink() { |
+ set_clear_link(l10n_util::GetStringUTF8(IDS_GEOLOCATION_BUBBLE_CLEAR_LINK)); |
+ } |
+ virtual void OnClearLinkClicked() { |
+ if (!tab_contents()) |
+ return; |
+ // Reset this embedder's entry to default for each of the requesting |
+ // origins currently on the page. |
+ const GURL& embedder_url = tab_contents()->GetURL(); |
+ const TabContents::GeolocationContentSettings& settings = |
+ tab_contents()->geolocation_content_settings(); |
+ GeolocationContentSettingsMap* settings_map = |
+ profile()->GetGeolocationContentSettingsMap(); |
+ for (TabContents::GeolocationContentSettings::const_iterator it = |
+ settings.begin(); it != settings.end(); ++it) { |
+ settings_map->SetContentSetting(it->first, embedder_url, |
+ CONTENT_SETTING_DEFAULT); |
+ } |
+ } |
+}; |
+ |
// static |
ContentSettingBubbleModel* |
ContentSettingBubbleModel::CreateContentSettingBubbleModel( |
@@ -163,6 +226,10 @@ |
return new ContentSettingPopupBubbleModel(tab_contents, profile, |
content_type); |
} |
+ if (content_type == CONTENT_SETTINGS_TYPE_GEOLOCATION) { |
+ return new ContentSettingDomainListBubbleModel(tab_contents, profile, |
+ content_type); |
+ } |
return new ContentSettingSingleRadioGroup(tab_contents, profile, |
content_type); |
} |
Property changes on: chrome/browser/content_setting_bubble_model.cc |
___________________________________________________________________ |
Name: svn:eol-style |
+ LF |