diff options
author | joth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-25 20:46:02 +0000 |
---|---|---|
committer | joth@chromium.org <joth@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-25 20:46:02 +0000 |
commit | 1fbdf78da077cf0f8a4f34b3d1753aaa9e511781 (patch) | |
tree | dd7d6fa687a0d16537e5bc40629ced34cac1bb01 /chrome/browser/content_setting_bubble_model.cc | |
parent | 6d9a36f8262936f7ef730bfdac7a1058aa1d99d6 (diff) | |
download | chromium_src-1fbdf78da077cf0f8a4f34b3d1753aaa9e511781.zip chromium_src-1fbdf78da077cf0f8a4f34b3d1753aaa9e511781.tar.gz chromium_src-1fbdf78da077cf0f8a4f34b3d1753aaa9e511781.tar.bz2 |
Adds geolocaiton support to the location bar content image model and content bubble model.
Most of these edits were lifted out of http://codereview.chromium.org/650180
TODO: add geolocation support to the views in the three UI platforms for the bubble model.
(NOTE this change results in poorly formed bubble contents for the geolocaiton bubble, this will be fixed up in the following CLs)
BUG=11246
TEST=open a site that uses geolocaiton, select allow/deny & click the icon.
Review URL: http://codereview.chromium.org/1344002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@42665 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/content_setting_bubble_model.cc')
-rw-r--r-- | chrome/browser/content_setting_bubble_model.cc | 69 |
1 files changed, 68 insertions, 1 deletions
diff --git a/chrome/browser/content_setting_bubble_model.cc b/chrome/browser/content_setting_bubble_model.cc index e361b12..14eda47 100644 --- a/chrome/browser/content_setting_bubble_model.cc +++ b/chrome/browser/content_setting_bubble_model.cc @@ -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 @@ class ContentSettingTitleAndLinkModel : public ContentSettingBubbleModel { 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 @@ class ContentSettingTitleAndLinkModel : public ContentSettingBubbleModel { 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 @@ class ContentSettingSingleRadioGroup : public ContentSettingTitleAndLinkModel { 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 @@ class ContentSettingSingleRadioGroup : public ContentSettingTitleAndLinkModel { 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 ContentSettingPopupBubbleModel : public ContentSettingSingleRadioGroup { } }; +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 domain_lists[CONTENT_SETTING_NUM_SETTINGS]; + for (TabContents::GeolocationContentSettings::const_iterator it = + settings.begin(); it != settings.end(); ++it) { + domain_lists[it->second].hosts.push_back(it->first); + } + MaybeAddDomainList(&domain_lists[CONTENT_SETTING_ALLOW], + IDS_GEOLOCATION_BUBBLE_SECTION_ALLOWED); + MaybeAddDomainList(&domain_lists[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 @@ ContentSettingBubbleModel* 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); } |