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(); |
} |