| Index: chrome/browser/geolocation/chrome_geolocation_permission_context.cc
|
| diff --git a/chrome/browser/geolocation/chrome_geolocation_permission_context.cc b/chrome/browser/geolocation/chrome_geolocation_permission_context.cc
|
| index f97d1dc78430f26a4900c5b2fd23b779795d6638..4be6d372d68490c9fe7e1bf90a8eca2397f371c9 100644
|
| --- a/chrome/browser/geolocation/chrome_geolocation_permission_context.cc
|
| +++ b/chrome/browser/geolocation/chrome_geolocation_permission_context.cc
|
| @@ -24,6 +24,7 @@
|
| #include "chrome/common/pref_names.h"
|
| #include "content/browser/geolocation/geolocation_provider.h"
|
| #include "content/browser/renderer_host/render_view_host.h"
|
| +#include "content/browser/tab_contents/navigation_details.h"
|
| #include "content/browser/tab_contents/tab_contents.h"
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/notification_registrar.h"
|
| @@ -131,6 +132,8 @@ class GeolocationConfirmInfoBarDelegate : public ConfirmInfoBarDelegate {
|
| virtual ~GeolocationConfirmInfoBarDelegate();
|
|
|
| // ConfirmInfoBarDelegate:
|
| + virtual bool ShouldExpire(
|
| + const content::LoadCommittedDetails& details) const OVERRIDE;
|
| virtual gfx::Image* GetIcon() const OVERRIDE;
|
| virtual Type GetInfoBarType() const OVERRIDE;
|
| virtual string16 GetMessageText() const OVERRIDE;
|
| @@ -144,6 +147,10 @@ class GeolocationConfirmInfoBarDelegate : public ConfirmInfoBarDelegate {
|
| int render_process_id_;
|
| int render_view_id_;
|
| int bridge_id_;
|
| + // The unique id of the committed NavigationEntry of the TabContents that we
|
| + // were opened for. Used to help expire on navigations.
|
| + int committed_contents_unique_id_;
|
| +
|
| GURL requesting_frame_url_;
|
| std::string display_languages_;
|
|
|
| @@ -165,6 +172,10 @@ GeolocationConfirmInfoBarDelegate::GeolocationConfirmInfoBarDelegate(
|
| bridge_id_(bridge_id),
|
| requesting_frame_url_(requesting_frame_url),
|
| display_languages_(display_languages) {
|
| + const NavigationEntry* committed_entry =
|
| + infobar_helper->tab_contents()->controller().GetLastCommittedEntry();
|
| + committed_contents_unique_id_ = committed_entry ?
|
| + committed_entry->unique_id() : 0;
|
| }
|
|
|
| GeolocationConfirmInfoBarDelegate::~GeolocationConfirmInfoBarDelegate() {
|
| @@ -172,6 +183,15 @@ GeolocationConfirmInfoBarDelegate::~GeolocationConfirmInfoBarDelegate() {
|
| bridge_id_);
|
| }
|
|
|
| +bool GeolocationConfirmInfoBarDelegate::ShouldExpire(
|
| + const content::LoadCommittedDetails& details) const {
|
| + if (details.did_replace_entry || !details.is_navigation_to_different_page())
|
| + return false;
|
| + return committed_contents_unique_id_ != details.entry->unique_id() ||
|
| + content::PageTransitionStripQualifier(details.entry->transition_type()) ==
|
| + content::PAGE_TRANSITION_RELOAD;
|
| +}
|
| +
|
| gfx::Image* GeolocationConfirmInfoBarDelegate::GetIcon() const {
|
| return &ResourceBundle::GetSharedInstance().GetNativeImageNamed(
|
| IDR_GEOLOCATION_INFOBAR_ICON);
|
|
|