| Index: chrome/browser/tab_contents/tab_contents.cc
|
| diff --git a/chrome/browser/tab_contents/tab_contents.cc b/chrome/browser/tab_contents/tab_contents.cc
|
| index db8e51ff8ee91b522d09951951007dbe0e73d708..1398303a23c0aa1fd5d96e39abd439a1c64ec7ba 100644
|
| --- a/chrome/browser/tab_contents/tab_contents.cc
|
| +++ b/chrome/browser/tab_contents/tab_contents.cc
|
| @@ -603,6 +603,18 @@ bool TabContents::IsContentBlocked(ContentSettingsType content_type) const {
|
| content_type == CONTENT_SETTINGS_TYPE_COOKIES)
|
| return content_blocked_[content_type];
|
|
|
| + if (content_type == CONTENT_SETTINGS_TYPE_GEOLOCATION) {
|
| + for (GeolocationContentSettings::const_iterator i =
|
| + geolocation_content_settings_.begin();
|
| + i != geolocation_content_settings_.end(); ++i ) {
|
| + if (i->second == CONTENT_SETTING_ALLOW)
|
| + return false;
|
| + }
|
| + // Note: this does not necessarily mean that Geolocation is blocked, rather
|
| + // that there are no frames currently using or allowed to use Geolocation.
|
| + return true;
|
| + }
|
| +
|
| NOTREACHED();
|
| return false;
|
| }
|
| @@ -1285,6 +1297,11 @@ void TabContents::ClearBlockedContentSettings() {
|
| content_blocked_[i] = false;
|
| }
|
|
|
| +// Resets the |geolocation_settings_| map.
|
| +void TabContents::ClearGeolocationContentSettings() {
|
| + geolocation_content_settings_.clear();
|
| +}
|
| +
|
| // Notifies the RenderWidgetHost instance about the fact that the page is
|
| // loading, or done loading and calls the base implementation.
|
| void TabContents::SetIsLoading(bool is_loading,
|
| @@ -1472,6 +1489,7 @@ void TabContents::DidNavigateMainFramePostCommit(
|
|
|
| // Clear "blocked" flags.
|
| ClearBlockedContentSettings();
|
| + ClearGeolocationContentSettings();
|
| if (delegate_)
|
| delegate_->OnBlockedContentChange(this);
|
| }
|
| @@ -2006,6 +2024,15 @@ void TabContents::OnContentBlocked(ContentSettingsType type) {
|
| delegate_->OnBlockedContentChange(this);
|
| }
|
|
|
| +void TabContents::OnGeolocationPermissionSet(
|
| + const std::string& host, bool allowed) {
|
| + geolocation_content_settings_[host] =
|
| + allowed ? CONTENT_SETTING_ALLOW : CONTENT_SETTING_BLOCK;
|
| + // TODO(bulach): rename OnBlockedContentChange to OnContentSettingsChange.
|
| + if (delegate_)
|
| + delegate_->OnBlockedContentChange(this);
|
| +}
|
| +
|
| RenderViewHostDelegate::View* TabContents::GetViewDelegate() {
|
| return view_.get();
|
| }
|
|
|