diff options
Diffstat (limited to 'chrome')
40 files changed, 486 insertions, 545 deletions
diff --git a/chrome/browser/alternate_nav_url_fetcher.cc b/chrome/browser/alternate_nav_url_fetcher.cc index 58e99c7..6eb4ca6 100644 --- a/chrome/browser/alternate_nav_url_fetcher.cc +++ b/chrome/browser/alternate_nav_url_fetcher.cc @@ -131,10 +131,6 @@ bool AlternateNavURLFetcher::LinkClicked(WindowOpenDisposition disposition) { return true; } -void AlternateNavURLFetcher::InfoBarClosed() { - delete this; -} - void AlternateNavURLFetcher::SetStatusFromURLFetch( const GURL& url, const net::URLRequestStatus& status, diff --git a/chrome/browser/alternate_nav_url_fetcher.h b/chrome/browser/alternate_nav_url_fetcher.h index 1f06b9a..c004826 100644 --- a/chrome/browser/alternate_nav_url_fetcher.h +++ b/chrome/browser/alternate_nav_url_fetcher.h @@ -47,7 +47,7 @@ class AlternateNavURLFetcher : public NotificationObserver, // NotificationObserver virtual void Observe(NotificationType type, const NotificationSource& source, - const NotificationDetails& details); + const NotificationDetails& details) OVERRIDE; // URLFetcher::Delegate virtual void OnURLFetchComplete(const URLFetcher* source, @@ -55,15 +55,14 @@ class AlternateNavURLFetcher : public NotificationObserver, const net::URLRequestStatus& status, int response_code, const ResponseCookies& cookies, - const std::string& data); + const std::string& data) OVERRIDE; // LinkInfoBarDelegate - virtual gfx::Image* GetIcon() const; - virtual Type GetInfoBarType() const; - virtual string16 GetMessageTextWithOffset(size_t* link_offset) const; - virtual string16 GetLinkText() const; - virtual bool LinkClicked(WindowOpenDisposition disposition); - virtual void InfoBarClosed(); + virtual gfx::Image* GetIcon() const OVERRIDE; + virtual Type GetInfoBarType() const OVERRIDE; + virtual string16 GetMessageTextWithOffset(size_t* link_offset) const OVERRIDE; + virtual string16 GetLinkText() const OVERRIDE; + virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE; // Sets |state_| to either SUCCEEDED or FAILED depending on the result of the // fetch. diff --git a/chrome/browser/autofill/autofill_cc_infobar_delegate.cc b/chrome/browser/autofill/autofill_cc_infobar_delegate.cc index 2a2aff0..49d16ae 100644 --- a/chrome/browser/autofill/autofill_cc_infobar_delegate.cc +++ b/chrome/browser/autofill/autofill_cc_infobar_delegate.cc @@ -28,6 +28,8 @@ AutofillCCInfoBarDelegate::AutofillCCInfoBarDelegate( } AutofillCCInfoBarDelegate::~AutofillCCInfoBarDelegate() { + if (!had_user_interaction_) + LogUserAction(AutofillMetrics::INFOBAR_IGNORED); } void AutofillCCInfoBarDelegate::LogUserAction( @@ -46,13 +48,6 @@ bool AutofillCCInfoBarDelegate::ShouldExpire( return false; } -void AutofillCCInfoBarDelegate::InfoBarClosed() { - if (!had_user_interaction_) - LogUserAction(AutofillMetrics::INFOBAR_IGNORED); - - delete this; -} - void AutofillCCInfoBarDelegate::InfoBarDismissed() { LogUserAction(AutofillMetrics::INFOBAR_DENIED); } diff --git a/chrome/browser/autofill/autofill_cc_infobar_delegate.h b/chrome/browser/autofill/autofill_cc_infobar_delegate.h index a686b93..91be6f8 100644 --- a/chrome/browser/autofill/autofill_cc_infobar_delegate.h +++ b/chrome/browser/autofill/autofill_cc_infobar_delegate.h @@ -36,17 +36,16 @@ class AutofillCCInfoBarDelegate : public ConfirmInfoBarDelegate { // ConfirmInfoBarDelegate: virtual bool ShouldExpire( - const NavigationController::LoadCommittedDetails& details) const; - virtual void InfoBarClosed(); - virtual void InfoBarDismissed(); - virtual gfx::Image* GetIcon() const; - virtual Type GetInfoBarType() const; - virtual string16 GetMessageText() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; - virtual bool Accept(); - virtual bool Cancel(); - virtual string16 GetLinkText(); - virtual bool LinkClicked(WindowOpenDisposition disposition); + const NavigationController::LoadCommittedDetails& details) const OVERRIDE; + virtual void InfoBarDismissed() OVERRIDE; + virtual gfx::Image* GetIcon() const OVERRIDE; + virtual Type GetInfoBarType() const OVERRIDE; + virtual string16 GetMessageText() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual bool Accept() OVERRIDE; + virtual bool Cancel() OVERRIDE; + virtual string16 GetLinkText() OVERRIDE; + virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE; // The credit card that should be saved if the user accepts the infobar. scoped_ptr<const CreditCard> credit_card_; diff --git a/chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.cc b/chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.cc index d9d3b9c..56fcc04 100644 --- a/chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.cc +++ b/chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.cc @@ -27,10 +27,6 @@ bool RegisterProtocolHandlerInfoBarDelegate::ShouldExpire( return false; } -void RegisterProtocolHandlerInfoBarDelegate::InfoBarClosed() { - delete this; -} - InfoBarDelegate::Type RegisterProtocolHandlerInfoBarDelegate::GetInfoBarType() const { return PAGE_ACTION_TYPE; diff --git a/chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.h b/chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.h index c6eaf21..f71f6aa 100644 --- a/chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.h +++ b/chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.h @@ -25,7 +25,6 @@ class RegisterProtocolHandlerInfoBarDelegate : public ConfirmInfoBarDelegate { // ConfirmInfoBarDelegate: virtual bool ShouldExpire(const NavigationController::LoadCommittedDetails& details) const OVERRIDE; - virtual void InfoBarClosed() OVERRIDE; virtual Type GetInfoBarType() const OVERRIDE; virtual string16 GetMessageText() const OVERRIDE; virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; diff --git a/chrome/browser/download/download_request_infobar_delegate.cc b/chrome/browser/download/download_request_infobar_delegate.cc index 9200878..ff33efc 100644 --- a/chrome/browser/download/download_request_infobar_delegate.cc +++ b/chrome/browser/download/download_request_infobar_delegate.cc @@ -18,12 +18,8 @@ DownloadRequestInfoBarDelegate::DownloadRequestInfoBarDelegate( } DownloadRequestInfoBarDelegate::~DownloadRequestInfoBarDelegate() { -} - -void DownloadRequestInfoBarDelegate::InfoBarClosed() { if (host_) host_->Cancel(); - delete this; } gfx::Image* DownloadRequestInfoBarDelegate::GetIcon() const { diff --git a/chrome/browser/download/download_request_infobar_delegate.h b/chrome/browser/download/download_request_infobar_delegate.h index 81a9898..23ca16a 100644 --- a/chrome/browser/download/download_request_infobar_delegate.h +++ b/chrome/browser/download/download_request_infobar_delegate.h @@ -30,11 +30,10 @@ class DownloadRequestInfoBarDelegate : public ConfirmInfoBarDelegate { virtual ~DownloadRequestInfoBarDelegate(); // ConfirmInfoBarDelegate: - virtual void InfoBarClosed(); - virtual gfx::Image* GetIcon() const; - virtual string16 GetMessageText() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; - virtual bool Accept(); + virtual gfx::Image* GetIcon() const OVERRIDE; + virtual string16 GetMessageText() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual bool Accept() OVERRIDE; DownloadRequestLimiter::TabDownloadState* host_; diff --git a/chrome/browser/extensions/extension_disabled_infobar_delegate.cc b/chrome/browser/extensions/extension_disabled_infobar_delegate.cc index e334fd2..d423427 100644 --- a/chrome/browser/extensions/extension_disabled_infobar_delegate.cc +++ b/chrome/browser/extensions/extension_disabled_infobar_delegate.cc @@ -87,16 +87,15 @@ class ExtensionDisabledInfobarDelegate : public ConfirmInfoBarDelegate, virtual ~ExtensionDisabledInfobarDelegate(); // ConfirmInfoBarDelegate: - virtual void InfoBarClosed(); - virtual string16 GetMessageText() const; - virtual int GetButtons() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; - virtual bool Accept(); + virtual string16 GetMessageText() const OVERRIDE; + virtual int GetButtons() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual bool Accept() OVERRIDE; // NotificationObserver: virtual void Observe(NotificationType type, const NotificationSource& source, - const NotificationDetails& details); + const NotificationDetails& details) OVERRIDE; NotificationRegistrar registrar_; TabContents* tab_contents_; @@ -122,10 +121,6 @@ ExtensionDisabledInfobarDelegate::ExtensionDisabledInfobarDelegate( ExtensionDisabledInfobarDelegate::~ExtensionDisabledInfobarDelegate() { } -void ExtensionDisabledInfobarDelegate::InfoBarClosed() { - delete this; -} - string16 ExtensionDisabledInfobarDelegate::GetMessageText() const { return l10n_util::GetStringFUTF16(extension_->is_app() ? IDS_APP_DISABLED_INFOBAR_LABEL : IDS_EXTENSION_DISABLED_INFOBAR_LABEL, diff --git a/chrome/browser/extensions/extension_infobar_delegate.cc b/chrome/browser/extensions/extension_infobar_delegate.cc index 0db3ae8..336f287 100644 --- a/chrome/browser/extensions/extension_infobar_delegate.cc +++ b/chrome/browser/extensions/extension_infobar_delegate.cc @@ -59,10 +59,6 @@ void ExtensionInfoBarDelegate::InfoBarDismissed() { closing_ = true; } -void ExtensionInfoBarDelegate::InfoBarClosed() { - delete this; -} - InfoBarDelegate::Type ExtensionInfoBarDelegate::GetInfoBarType() const { return PAGE_ACTION_TYPE; } diff --git a/chrome/browser/extensions/extension_infobar_delegate.h b/chrome/browser/extensions/extension_infobar_delegate.h index 884056e..9a3385d 100644 --- a/chrome/browser/extensions/extension_infobar_delegate.h +++ b/chrome/browser/extensions/extension_infobar_delegate.h @@ -43,17 +43,16 @@ class ExtensionInfoBarDelegate : public InfoBarDelegate, virtual ~ExtensionInfoBarDelegate(); // InfoBarDelegate: - virtual InfoBar* CreateInfoBar(); - virtual bool EqualsDelegate(InfoBarDelegate* delegate) const; - virtual void InfoBarDismissed(); - virtual void InfoBarClosed(); - virtual Type GetInfoBarType() const; - virtual ExtensionInfoBarDelegate* AsExtensionInfoBarDelegate(); + virtual InfoBar* CreateInfoBar() OVERRIDE; + virtual bool EqualsDelegate(InfoBarDelegate* delegate) const OVERRIDE; + virtual void InfoBarDismissed() OVERRIDE; + virtual Type GetInfoBarType() const OVERRIDE; + virtual ExtensionInfoBarDelegate* AsExtensionInfoBarDelegate() OVERRIDE; // NotificationObserver: virtual void Observe(NotificationType type, const NotificationSource& source, - const NotificationDetails& details); + const NotificationDetails& details) OVERRIDE; // The extension host we are showing the InfoBar for. The delegate needs to // own this since the InfoBar gets deleted and recreated when you switch tabs diff --git a/chrome/browser/extensions/theme_installed_infobar_delegate.cc b/chrome/browser/extensions/theme_installed_infobar_delegate.cc index 29e75ba..3f01810 100644 --- a/chrome/browser/extensions/theme_installed_infobar_delegate.cc +++ b/chrome/browser/extensions/theme_installed_infobar_delegate.cc @@ -69,10 +69,6 @@ bool ThemeInstalledInfoBarDelegate::Cancel() { return true; } -void ThemeInstalledInfoBarDelegate::InfoBarClosed() { - delete this; -} - gfx::Image* ThemeInstalledInfoBarDelegate::GetIcon() const { // TODO(aa): Reply with the theme's icon, but this requires reading it // asynchronously from disk. diff --git a/chrome/browser/extensions/theme_installed_infobar_delegate.h b/chrome/browser/extensions/theme_installed_infobar_delegate.h index bbde65c..f31b957 100644 --- a/chrome/browser/extensions/theme_installed_infobar_delegate.h +++ b/chrome/browser/extensions/theme_installed_infobar_delegate.h @@ -38,17 +38,17 @@ class ThemeInstalledInfoBarDelegate : public ConfirmInfoBarDelegate, private: // ConfirmInfoBarDelegate: - virtual void InfoBarClosed(); - virtual gfx::Image* GetIcon() const; - virtual ThemeInstalledInfoBarDelegate* AsThemePreviewInfobarDelegate(); - virtual string16 GetMessageText() const; - virtual int GetButtons() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; + virtual gfx::Image* GetIcon() const OVERRIDE; + virtual ThemeInstalledInfoBarDelegate* + AsThemePreviewInfobarDelegate() OVERRIDE; + virtual string16 GetMessageText() const OVERRIDE; + virtual int GetButtons() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; // NotificationObserver: virtual void Observe(NotificationType type, const NotificationSource& source, - const NotificationDetails& details); + const NotificationDetails& details) OVERRIDE; Profile* profile_; ThemeService* theme_service_; diff --git a/chrome/browser/geolocation/geolocation_permission_context.cc b/chrome/browser/geolocation/geolocation_permission_context.cc index 71d03d6..200b3c3 100644 --- a/chrome/browser/geolocation/geolocation_permission_context.cc +++ b/chrome/browser/geolocation/geolocation_permission_context.cc @@ -125,15 +125,14 @@ class GeolocationConfirmInfoBarDelegate : public ConfirmInfoBarDelegate { virtual ~GeolocationConfirmInfoBarDelegate(); // ConfirmInfoBarDelegate: - virtual void InfoBarClosed(); - virtual gfx::Image* GetIcon() const; - virtual Type GetInfoBarType() const; - virtual string16 GetMessageText() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; - virtual bool Accept(); - virtual bool Cancel(); - virtual string16 GetLinkText(); - virtual bool LinkClicked(WindowOpenDisposition disposition); + virtual gfx::Image* GetIcon() const OVERRIDE; + virtual Type GetInfoBarType() const OVERRIDE; + virtual string16 GetMessageText() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual bool Accept() OVERRIDE; + virtual bool Cancel() OVERRIDE; + virtual string16 GetLinkText() OVERRIDE; + virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE; TabContents* tab_contents_; GeolocationInfoBarQueueController* controller_; @@ -165,12 +164,8 @@ GeolocationConfirmInfoBarDelegate::GeolocationConfirmInfoBarDelegate( } GeolocationConfirmInfoBarDelegate::~GeolocationConfirmInfoBarDelegate() { -} - -void GeolocationConfirmInfoBarDelegate::InfoBarClosed() { controller_->OnInfoBarClosed(render_process_id_, render_view_id_, bridge_id_); - delete this; } gfx::Image* GeolocationConfirmInfoBarDelegate::GetIcon() const { diff --git a/chrome/browser/google/google_url_tracker.cc b/chrome/browser/google/google_url_tracker.cc index 22dd95c..66567bb 100644 --- a/chrome/browser/google/google_url_tracker.cc +++ b/chrome/browser/google/google_url_tracker.cc @@ -59,12 +59,8 @@ bool GoogleURLTrackerInfoBarDelegate::Cancel() { return true; } -void GoogleURLTrackerInfoBarDelegate::InfoBarClosed() { - google_url_tracker_->InfoBarClosed(); - delete this; -} - GoogleURLTrackerInfoBarDelegate::~GoogleURLTrackerInfoBarDelegate() { + google_url_tracker_->InfoBarClosed(); } string16 GoogleURLTrackerInfoBarDelegate::GetMessageText() const { diff --git a/chrome/browser/google/google_url_tracker.h b/chrome/browser/google/google_url_tracker.h index 2f67820..6de5002 100644 --- a/chrome/browser/google/google_url_tracker.h +++ b/chrome/browser/google/google_url_tracker.h @@ -168,9 +168,8 @@ class GoogleURLTrackerInfoBarDelegate : public ConfirmInfoBarDelegate { const GURL& new_google_url); // ConfirmInfoBarDelegate: - virtual bool Accept(); - virtual bool Cancel(); - virtual void InfoBarClosed(); + virtual bool Accept() OVERRIDE; + virtual bool Cancel() OVERRIDE; protected: virtual ~GoogleURLTrackerInfoBarDelegate(); @@ -180,8 +179,8 @@ class GoogleURLTrackerInfoBarDelegate : public ConfirmInfoBarDelegate { private: // ConfirmInfoBarDelegate: - virtual string16 GetMessageText() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; + virtual string16 GetMessageText() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; DISALLOW_COPY_AND_ASSIGN(GoogleURLTrackerInfoBarDelegate); }; diff --git a/chrome/browser/notifications/desktop_notification_service.cc b/chrome/browser/notifications/desktop_notification_service.cc index bfd179d..0d2711f 100644 --- a/chrome/browser/notifications/desktop_notification_service.cc +++ b/chrome/browser/notifications/desktop_notification_service.cc @@ -102,13 +102,12 @@ class NotificationPermissionInfoBarDelegate : public ConfirmInfoBarDelegate { virtual ~NotificationPermissionInfoBarDelegate(); // ConfirmInfoBarDelegate: - virtual void InfoBarClosed(); - virtual gfx::Image* GetIcon() const; - virtual Type GetInfoBarType() const; - virtual string16 GetMessageText() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; - virtual bool Accept(); - virtual bool Cancel(); + virtual gfx::Image* GetIcon() const OVERRIDE; + virtual Type GetInfoBarType() const OVERRIDE; + virtual string16 GetMessageText() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual bool Accept() OVERRIDE; + virtual bool Cancel() OVERRIDE; // The origin we are asking for permissions on. GURL origin_; @@ -151,9 +150,6 @@ NotificationPermissionInfoBarDelegate::NotificationPermissionInfoBarDelegate( NotificationPermissionInfoBarDelegate:: ~NotificationPermissionInfoBarDelegate() { -} - -void NotificationPermissionInfoBarDelegate::InfoBarClosed() { if (!action_taken_) UMA_HISTOGRAM_COUNTS("NotificationPermissionRequest.Ignored", 1); @@ -162,8 +158,6 @@ void NotificationPermissionInfoBarDelegate::InfoBarClosed() { host->Send(new DesktopNotificationMsg_PermissionRequestDone( route_id_, callback_context_)); } - - delete this; } gfx::Image* NotificationPermissionInfoBarDelegate::GetIcon() const { diff --git a/chrome/browser/omnibox_search_hint.cc b/chrome/browser/omnibox_search_hint.cc index 9053dd8..42f7de1 100644 --- a/chrome/browser/omnibox_search_hint.cc +++ b/chrome/browser/omnibox_search_hint.cc @@ -56,15 +56,14 @@ class HintInfoBar : public ConfirmInfoBarDelegate { // ConfirmInfoBarDelegate: virtual bool ShouldExpire( - const NavigationController::LoadCommittedDetails& details) const; - virtual void InfoBarDismissed(); - virtual void InfoBarClosed(); - virtual gfx::Image* GetIcon() const; - virtual Type GetInfoBarType() const; - virtual string16 GetMessageText() const; - virtual int GetButtons() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; - virtual bool Accept(); + const NavigationController::LoadCommittedDetails& details) const OVERRIDE; + virtual void InfoBarDismissed() OVERRIDE; + virtual gfx::Image* GetIcon() const OVERRIDE; + virtual Type GetInfoBarType() const OVERRIDE; + virtual string16 GetMessageText() const OVERRIDE; + virtual int GetButtons() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual bool Accept() OVERRIDE; // The omnibox hint that shows us. OmniboxSearchHint* omnibox_hint_; @@ -95,6 +94,8 @@ HintInfoBar::HintInfoBar(OmniboxSearchHint* omnibox_hint) } HintInfoBar::~HintInfoBar() { + if (!action_taken_) + UMA_HISTOGRAM_COUNTS("OmniboxSearchHint.Ignored", 1); } bool HintInfoBar::ShouldExpire( @@ -109,12 +110,6 @@ void HintInfoBar::InfoBarDismissed() { omnibox_hint_->DisableHint(); } -void HintInfoBar::InfoBarClosed() { - if (!action_taken_) - UMA_HISTOGRAM_COUNTS("OmniboxSearchHint.Ignored", 1); - delete this; -} - gfx::Image* HintInfoBar::GetIcon() const { return &ResourceBundle::GetSharedInstance().GetNativeImageNamed( IDR_INFOBAR_QUESTION_MARK); diff --git a/chrome/browser/password_manager_delegate_impl.cc b/chrome/browser/password_manager_delegate_impl.cc index 7a5a54d..1a518ba 100644 --- a/chrome/browser/password_manager_delegate_impl.cc +++ b/chrome/browser/password_manager_delegate_impl.cc @@ -41,13 +41,12 @@ class SavePasswordInfoBarDelegate : public ConfirmInfoBarDelegate { virtual ~SavePasswordInfoBarDelegate(); // ConfirmInfoBarDelegate - virtual void InfoBarClosed(); - virtual gfx::Image* GetIcon() const; - virtual Type GetInfoBarType() const; - virtual string16 GetMessageText() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; - virtual bool Accept(); - virtual bool Cancel(); + virtual gfx::Image* GetIcon() const OVERRIDE; + virtual Type GetInfoBarType() const OVERRIDE; + virtual string16 GetMessageText() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual bool Accept() OVERRIDE; + virtual bool Cancel() OVERRIDE; // The PasswordFormManager managing the form we're asking the user about, // and should update as per her decision. @@ -68,12 +67,8 @@ SavePasswordInfoBarDelegate::SavePasswordInfoBarDelegate( } SavePasswordInfoBarDelegate::~SavePasswordInfoBarDelegate() { -} - -void SavePasswordInfoBarDelegate::InfoBarClosed() { UMA_HISTOGRAM_ENUMERATION("PasswordManager.InfoBarResponse", infobar_response_, NUM_RESPONSE_TYPES); - delete this; } gfx::Image* SavePasswordInfoBarDelegate::GetIcon() const { diff --git a/chrome/browser/pdf_unsupported_feature.cc b/chrome/browser/pdf_unsupported_feature.cc index 7779560..3fd20fb 100644 --- a/chrome/browser/pdf_unsupported_feature.cc +++ b/chrome/browser/pdf_unsupported_feature.cc @@ -42,85 +42,81 @@ static const char kReaderUpdateUrl[] = // The info bar delegate used to ask the user if they want to use Adobe Reader // by default. We want the infobar to have [No][Yes], so we swap the text on // the buttons, and the meaning of the delegate callbacks. -class PDFEnableAdobeReaderConfirmInfoBarDelegate - : public ConfirmInfoBarDelegate { +class PDFEnableAdobeReaderInfoBarDelegate : public ConfirmInfoBarDelegate { public: - PDFEnableAdobeReaderConfirmInfoBarDelegate( - TabContents* tab_contents) - : ConfirmInfoBarDelegate(tab_contents), - tab_contents_(tab_contents) { - UserMetrics::RecordAction( - UserMetricsAction("PDF_EnableReaderInfoBarShown")); - } + explicit PDFEnableAdobeReaderInfoBarDelegate(TabContents* tab_contents); + virtual ~PDFEnableAdobeReaderInfoBarDelegate(); // ConfirmInfoBarDelegate - virtual void InfoBarClosed() { - delete this; - } + virtual void InfoBarDismissed() OVERRIDE; + virtual Type GetInfoBarType() const OVERRIDE; + virtual bool Accept() OVERRIDE; + virtual bool Cancel() OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual string16 GetMessageText() const OVERRIDE; - virtual void InfoBarDismissed() { - OnNo(); - } + private: + void OnYes(); + void OnNo(); - virtual Type GetInfoBarType() const { - return PAGE_ACTION_TYPE; - } + TabContents* tab_contents_; - virtual bool Accept() { - tab_contents_->profile()->GetPrefs()->SetBoolean( - prefs::kPluginsShowSetReaderDefaultInfobar, false); - return OnNo(); - } + DISALLOW_IMPLICIT_CONSTRUCTORS(PDFEnableAdobeReaderInfoBarDelegate); +}; - virtual bool Cancel() { - return OnYes(); - } +PDFEnableAdobeReaderInfoBarDelegate::PDFEnableAdobeReaderInfoBarDelegate( + TabContents* tab_contents) + : ConfirmInfoBarDelegate(tab_contents), + tab_contents_(tab_contents) { + UserMetrics::RecordAction(UserMetricsAction("PDF_EnableReaderInfoBarShown")); +} - virtual int GetButtons() const { - return BUTTON_OK | BUTTON_CANCEL; - } +PDFEnableAdobeReaderInfoBarDelegate::~PDFEnableAdobeReaderInfoBarDelegate() { +} - virtual string16 GetButtonLabel(InfoBarButton button) const { - switch (button) { - case BUTTON_OK: - return l10n_util::GetStringUTF16( - IDS_PDF_INFOBAR_NEVER_USE_READER_BUTTON); - case BUTTON_CANCEL: - return l10n_util::GetStringUTF16( - IDS_PDF_INFOBAR_ALWAYS_USE_READER_BUTTON); - default: - // All buttons are labeled above. - NOTREACHED() << "Bad button id " << button; - return string16(); - } - } +void PDFEnableAdobeReaderInfoBarDelegate::InfoBarDismissed() { + OnNo(); +} - virtual string16 GetMessageText() const { - return l10n_util::GetStringUTF16( - IDS_PDF_INFOBAR_QUESTION_ALWAYS_USE_READER); - } +InfoBarDelegate::Type + PDFEnableAdobeReaderInfoBarDelegate::GetInfoBarType() const { + return PAGE_ACTION_TYPE; +} - private: - bool OnYes() { - UserMetrics::RecordAction( - UserMetricsAction("PDF_EnableReaderInfoBarOK")); - webkit::npapi::PluginList::Singleton()->EnableGroup( - false, ASCIIToUTF16(chrome::ChromeContentClient::kPDFPluginName)); - webkit::npapi::PluginList::Singleton()->EnableGroup( - true, ASCIIToUTF16(webkit::npapi::PluginGroup::kAdobeReaderGroupName)); - return true; - } +bool PDFEnableAdobeReaderInfoBarDelegate::Accept() { + tab_contents_->profile()->GetPrefs()->SetBoolean( + prefs::kPluginsShowSetReaderDefaultInfobar, false); + OnNo(); + return true; +} - bool OnNo() { - UserMetrics::RecordAction( - UserMetricsAction("PDF_EnableReaderInfoBarCancel")); - return true; - } +bool PDFEnableAdobeReaderInfoBarDelegate::Cancel() { + OnYes(); + return true; +} - TabContents* tab_contents_; +string16 PDFEnableAdobeReaderInfoBarDelegate::GetButtonLabel( + InfoBarButton button) const { + return l10n_util::GetStringUTF16((button == BUTTON_OK) ? + IDS_PDF_INFOBAR_NEVER_USE_READER_BUTTON : + IDS_PDF_INFOBAR_ALWAYS_USE_READER_BUTTON); +} - DISALLOW_IMPLICIT_CONSTRUCTORS(PDFEnableAdobeReaderConfirmInfoBarDelegate); -}; +string16 PDFEnableAdobeReaderInfoBarDelegate::GetMessageText() const { + return l10n_util::GetStringUTF16(IDS_PDF_INFOBAR_QUESTION_ALWAYS_USE_READER); +} + +void PDFEnableAdobeReaderInfoBarDelegate::OnYes() { + UserMetrics::RecordAction(UserMetricsAction("PDF_EnableReaderInfoBarOK")); + webkit::npapi::PluginList::Singleton()->EnableGroup(false, + ASCIIToUTF16(chrome::ChromeContentClient::kPDFPluginName)); + webkit::npapi::PluginList::Singleton()->EnableGroup(true, + ASCIIToUTF16(webkit::npapi::PluginGroup::kAdobeReaderGroupName)); +} + +void PDFEnableAdobeReaderInfoBarDelegate::OnNo() { + UserMetrics::RecordAction(UserMetricsAction("PDF_EnableReaderInfoBarCancel")); +} // Launch the url to get the latest Adbobe Reader installer. void OpenReaderUpdateURL(TabContents* tab) { @@ -229,137 +225,128 @@ class PDFUnsupportedFeatureInterstitial : public ChromeInterstitialPage { // The info bar delegate used to inform the user that we don't support a feature // in the PDF. See the comment about how we swap buttons for -// PDFEnableAdobeReaderConfirmInfoBarDelegate. -class PDFUnsupportedFeatureConfirmInfoBarDelegate - : public ConfirmInfoBarDelegate { +// PDFEnableAdobeReaderInfoBarDelegate. +class PDFUnsupportedFeatureInfoBarDelegate : public ConfirmInfoBarDelegate { public: - PDFUnsupportedFeatureConfirmInfoBarDelegate( - TabContents* tab_contents, - PluginGroup* reader_group) // NULL if Adobe Reader isn't installed. - : ConfirmInfoBarDelegate(tab_contents), - tab_contents_(tab_contents), - reader_installed_(!!reader_group), - reader_vulnerable_(false) { - if (reader_installed_) { - UserMetrics::RecordAction(UserMetricsAction("PDF_UseReaderInfoBarShown")); - std::vector<WebPluginInfo> plugins = reader_group->web_plugin_infos(); - DCHECK_EQ(plugins.size(), 1u); - reader_webplugininfo_ = plugins[0]; - - reader_vulnerable_ = reader_group->IsVulnerable(); - if (!reader_vulnerable_) { - scoped_ptr<Version> version(PluginGroup::CreateVersionFromString( - reader_webplugininfo_.version)); - if (version.get()) { - if (version->components()[0] < kMinReaderVersionToUse) - reader_vulnerable_ = true; - } - } - } else { - UserMetrics::RecordAction( - UserMetricsAction("PDF_InstallReaderInfoBarShown")); - } - } + // |reader_group| is NULL if Adobe Reader isn't installed. + PDFUnsupportedFeatureInfoBarDelegate(TabContents* tab_contents, + PluginGroup* reader_group); + virtual ~PDFUnsupportedFeatureInfoBarDelegate(); // ConfirmInfoBarDelegate - virtual void InfoBarClosed() { - delete this; - } + virtual void InfoBarDismissed() OVERRIDE; + virtual Type GetInfoBarType() const OVERRIDE; + virtual bool Accept() OVERRIDE; + virtual bool Cancel() OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual string16 GetMessageText() const OVERRIDE; - virtual void InfoBarDismissed() { - OnNo(); - } + private: + bool OnYes(); + void OnNo(); - virtual Type GetInfoBarType() const { - return PAGE_ACTION_TYPE; - } + TabContents* tab_contents_; + bool reader_installed_; + bool reader_vulnerable_; + WebPluginInfo reader_webplugininfo_; - virtual bool Accept() { - return OnNo(); - } + DISALLOW_IMPLICIT_CONSTRUCTORS(PDFUnsupportedFeatureInfoBarDelegate); +}; - virtual bool Cancel() { - return OnYes(); +PDFUnsupportedFeatureInfoBarDelegate::PDFUnsupportedFeatureInfoBarDelegate( + TabContents* tab_contents, + PluginGroup* reader_group) + : ConfirmInfoBarDelegate(tab_contents), + tab_contents_(tab_contents), + reader_installed_(!!reader_group), + reader_vulnerable_(false) { + if (!reader_installed_) { + UserMetrics::RecordAction( + UserMetricsAction("PDF_InstallReaderInfoBarShown")); + return; } - virtual int GetButtons() const { - return BUTTON_OK | BUTTON_CANCEL; + UserMetrics::RecordAction(UserMetricsAction("PDF_UseReaderInfoBarShown")); + std::vector<WebPluginInfo> plugins = reader_group->web_plugin_infos(); + DCHECK_EQ(plugins.size(), 1u); + reader_webplugininfo_ = plugins[0]; + + reader_vulnerable_ = reader_group->IsVulnerable(); + if (!reader_vulnerable_) { + scoped_ptr<Version> version(PluginGroup::CreateVersionFromString( + reader_webplugininfo_.version)); + reader_vulnerable_ = + version.get() && (version->components()[0] < kMinReaderVersionToUse); } +} - virtual string16 GetButtonLabel(InfoBarButton button) const { - switch (button) { - case BUTTON_OK: - return l10n_util::GetStringUTF16( - IDS_CONFIRM_MESSAGEBOX_NO_BUTTON_LABEL); - case BUTTON_CANCEL: - return l10n_util::GetStringUTF16( - IDS_CONFIRM_MESSAGEBOX_YES_BUTTON_LABEL); - default: - // All buttons are labeled above. - NOTREACHED() << "Bad button id " << button; - return string16(); - } - } +PDFUnsupportedFeatureInfoBarDelegate::~PDFUnsupportedFeatureInfoBarDelegate() { +} - virtual string16 GetMessageText() const { - return l10n_util::GetStringUTF16(reader_installed_ ? - IDS_PDF_INFOBAR_QUESTION_READER_INSTALLED : - IDS_PDF_INFOBAR_QUESTION_READER_NOT_INSTALLED); - } +void PDFUnsupportedFeatureInfoBarDelegate::InfoBarDismissed() { + OnNo(); +} - private: - bool OnYes() { - if (!reader_installed_) { - UserMetrics::RecordAction( - UserMetricsAction("PDF_InstallReaderInfoBarOK")); - OpenReaderUpdateURL(tab_contents_); - return true; - } +InfoBarDelegate::Type + PDFUnsupportedFeatureInfoBarDelegate::GetInfoBarType() const { + return PAGE_ACTION_TYPE; +} - UserMetrics::RecordAction( - UserMetricsAction("PDF_UseReaderInfoBarOK")); - - if (reader_vulnerable_) { - PDFUnsupportedFeatureInterstitial* interstitial = new - PDFUnsupportedFeatureInterstitial( - tab_contents_, reader_webplugininfo_); - interstitial->Show(); - return true; - } +bool PDFUnsupportedFeatureInfoBarDelegate::Accept() { + OnNo(); + return true; +} - InfoBarDelegate* bar = NULL; - if (tab_contents_->profile()->GetPrefs()->GetBoolean( - prefs::kPluginsShowSetReaderDefaultInfobar)) { - bar = new PDFEnableAdobeReaderConfirmInfoBarDelegate(tab_contents_); - } +bool PDFUnsupportedFeatureInfoBarDelegate::Cancel() { + return OnYes(); +} - if (bar) { - OpenUsingReader(tab_contents_, reader_webplugininfo_, this, bar); - return false; - } else { - OpenUsingReader(tab_contents_, reader_webplugininfo_, NULL, NULL); - return true; - } +string16 PDFUnsupportedFeatureInfoBarDelegate::GetButtonLabel( + InfoBarButton button) const { + return l10n_util::GetStringUTF16((button == BUTTON_OK) ? + IDS_CONFIRM_MESSAGEBOX_NO_BUTTON_LABEL : + IDS_CONFIRM_MESSAGEBOX_YES_BUTTON_LABEL); +} + +string16 PDFUnsupportedFeatureInfoBarDelegate::GetMessageText() const { + return l10n_util::GetStringUTF16(reader_installed_ ? + IDS_PDF_INFOBAR_QUESTION_READER_INSTALLED : + IDS_PDF_INFOBAR_QUESTION_READER_NOT_INSTALLED); +} + +bool PDFUnsupportedFeatureInfoBarDelegate::OnYes() { + if (!reader_installed_) { + UserMetrics::RecordAction(UserMetricsAction("PDF_InstallReaderInfoBarOK")); + OpenReaderUpdateURL(tab_contents_); + return true; } - bool OnNo() { - if (reader_installed_) { - UserMetrics::RecordAction( - UserMetricsAction("PDF_UseReaderInfoBarCancel")); - } else { - UserMetrics::RecordAction( - UserMetricsAction("PDF_InstallReaderInfoBarCancel")); - } + UserMetrics::RecordAction(UserMetricsAction("PDF_UseReaderInfoBarOK")); + + if (reader_vulnerable_) { + PDFUnsupportedFeatureInterstitial* interstitial = + new PDFUnsupportedFeatureInterstitial(tab_contents_, + reader_webplugininfo_); + interstitial->Show(); return true; } - TabContents* tab_contents_; - bool reader_installed_; - bool reader_vulnerable_; - WebPluginInfo reader_webplugininfo_; + if (tab_contents_->profile()->GetPrefs()->GetBoolean( + prefs::kPluginsShowSetReaderDefaultInfobar)) { + InfoBarDelegate* bar = + new PDFEnableAdobeReaderInfoBarDelegate(tab_contents_); + OpenUsingReader(tab_contents_, reader_webplugininfo_, this, bar); + return false; + } - DISALLOW_IMPLICIT_CONSTRUCTORS(PDFUnsupportedFeatureConfirmInfoBarDelegate); -}; + OpenUsingReader(tab_contents_, reader_webplugininfo_, NULL, NULL); + return true; +} + +void PDFUnsupportedFeatureInfoBarDelegate::OnNo() { + UserMetrics::RecordAction(UserMetricsAction(reader_installed_ ? + "PDF_UseReaderInfoBarCancel" : "PDF_InstallReaderInfoBarCancel")); +} } // namespace @@ -386,6 +373,5 @@ void PDFHasUnsupportedFeature(TabContents* tab) { } } - tab->AddInfoBar(new PDFUnsupportedFeatureConfirmInfoBarDelegate( - tab, reader_group)); + tab->AddInfoBar(new PDFUnsupportedFeatureInfoBarDelegate(tab, reader_group)); } diff --git a/chrome/browser/plugin_installer_infobar_delegate.h b/chrome/browser/plugin_installer_infobar_delegate.h index a04bcac..d4065d5 100644 --- a/chrome/browser/plugin_installer_infobar_delegate.h +++ b/chrome/browser/plugin_installer_infobar_delegate.h @@ -20,14 +20,15 @@ class PluginInstallerInfoBarDelegate : public ConfirmInfoBarDelegate { virtual ~PluginInstallerInfoBarDelegate(); // ConfirmInfoBarDelegate: - virtual gfx::Image* GetIcon() const; - virtual PluginInstallerInfoBarDelegate* AsPluginInstallerInfoBarDelegate(); - virtual string16 GetMessageText() const; - virtual int GetButtons() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; - virtual bool Accept(); - virtual string16 GetLinkText(); - virtual bool LinkClicked(WindowOpenDisposition disposition); + virtual gfx::Image* GetIcon() const OVERRIDE; + virtual PluginInstallerInfoBarDelegate* + AsPluginInstallerInfoBarDelegate() OVERRIDE; + virtual string16 GetMessageText() const OVERRIDE; + virtual int GetButtons() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual bool Accept() OVERRIDE; + virtual string16 GetLinkText() OVERRIDE; + virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE; // The containing TabContents TabContents* tab_contents_; diff --git a/chrome/browser/plugin_observer.cc b/chrome/browser/plugin_observer.cc index 7e1d0a9..dabdac1 100644 --- a/chrome/browser/plugin_observer.cc +++ b/chrome/browser/plugin_observer.cc @@ -38,9 +38,8 @@ class PluginInfoBarDelegate : public ConfirmInfoBarDelegate { virtual ~PluginInfoBarDelegate(); // ConfirmInfoBarDelegate: - virtual void InfoBarClosed(); - virtual bool Cancel(); - virtual bool LinkClicked(WindowOpenDisposition disposition); + virtual bool Cancel() OVERRIDE; + virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE; virtual std::string GetLearnMoreURL() const = 0; @@ -65,10 +64,6 @@ PluginInfoBarDelegate::PluginInfoBarDelegate(TabContents* tab_contents, PluginInfoBarDelegate::~PluginInfoBarDelegate() { } -void PluginInfoBarDelegate::InfoBarClosed() { - delete this; -} - bool PluginInfoBarDelegate::Cancel() { tab_contents_->render_view_host()->Send(new ViewMsg_LoadBlockedPlugins( tab_contents_->render_view_host()->routing_id())); @@ -102,14 +97,13 @@ class BlockedPluginInfoBarDelegate : public PluginInfoBarDelegate { virtual ~BlockedPluginInfoBarDelegate(); // PluginInfoBarDelegate: - virtual string16 GetMessageText() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; - virtual bool Accept(); - virtual bool Cancel(); - virtual void InfoBarClosed(); - virtual void InfoBarDismissed(); - virtual bool LinkClicked(WindowOpenDisposition disposition); - virtual std::string GetLearnMoreURL() const; + virtual string16 GetMessageText() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual bool Accept() OVERRIDE; + virtual bool Cancel() OVERRIDE; + virtual void InfoBarDismissed() OVERRIDE; + virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE; + virtual std::string GetLearnMoreURL() const OVERRIDE; DISALLOW_COPY_AND_ASSIGN(BlockedPluginInfoBarDelegate); }; @@ -135,6 +129,7 @@ BlockedPluginInfoBarDelegate::BlockedPluginInfoBarDelegate( } BlockedPluginInfoBarDelegate::~BlockedPluginInfoBarDelegate() { + UserMetrics::RecordAction(UserMetricsAction("BlockedPluginInfobar.Closed")); } std::string BlockedPluginInfoBarDelegate::GetLearnMoreURL() const { @@ -171,11 +166,6 @@ void BlockedPluginInfoBarDelegate::InfoBarDismissed() { UserMetricsAction("BlockedPluginInfobar.Dismissed")); } -void BlockedPluginInfoBarDelegate::InfoBarClosed() { - UserMetrics::RecordAction(UserMetricsAction("BlockedPluginInfobar.Closed")); - PluginInfoBarDelegate::InfoBarClosed(); -} - bool BlockedPluginInfoBarDelegate::LinkClicked( WindowOpenDisposition disposition) { UserMetrics::RecordAction( @@ -195,14 +185,13 @@ class OutdatedPluginInfoBarDelegate : public PluginInfoBarDelegate { virtual ~OutdatedPluginInfoBarDelegate(); // PluginInfoBarDelegate: - virtual string16 GetMessageText() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; - virtual bool Accept(); - virtual bool Cancel(); - virtual void InfoBarClosed(); - virtual void InfoBarDismissed(); - virtual bool LinkClicked(WindowOpenDisposition disposition); - virtual std::string GetLearnMoreURL() const; + virtual string16 GetMessageText() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual bool Accept() OVERRIDE; + virtual bool Cancel() OVERRIDE; + virtual void InfoBarDismissed() OVERRIDE; + virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE; + virtual std::string GetLearnMoreURL() const OVERRIDE; GURL update_url_; @@ -238,6 +227,7 @@ OutdatedPluginInfoBarDelegate::OutdatedPluginInfoBarDelegate( } OutdatedPluginInfoBarDelegate::~OutdatedPluginInfoBarDelegate() { + UserMetrics::RecordAction(UserMetricsAction("OutdatedPluginInfobar.Closed")); } std::string OutdatedPluginInfoBarDelegate::GetLearnMoreURL() const { @@ -272,11 +262,6 @@ void OutdatedPluginInfoBarDelegate::InfoBarDismissed() { UserMetricsAction("OutdatedPluginInfobar.Dismissed")); } -void OutdatedPluginInfoBarDelegate::InfoBarClosed() { - UserMetrics::RecordAction(UserMetricsAction("OutdatedPluginInfobar.Closed")); - PluginInfoBarDelegate::InfoBarClosed(); -} - bool OutdatedPluginInfoBarDelegate::LinkClicked( WindowOpenDisposition disposition) { UserMetrics::RecordAction( diff --git a/chrome/browser/tab_contents/infobar_delegate.cc b/chrome/browser/tab_contents/infobar_delegate.cc index 7b4720e..d0b04b7 100644 --- a/chrome/browser/tab_contents/infobar_delegate.cc +++ b/chrome/browser/tab_contents/infobar_delegate.cc @@ -30,6 +30,7 @@ void InfoBarDelegate::InfoBarDismissed() { } void InfoBarDelegate::InfoBarClosed() { + delete this; } gfx::Image* InfoBarDelegate::GetIcon() const { diff --git a/chrome/browser/tab_contents/infobar_delegate.h b/chrome/browser/tab_contents/infobar_delegate.h index 4ee29c4..ea56a1e 100644 --- a/chrome/browser/tab_contents/infobar_delegate.h +++ b/chrome/browser/tab_contents/infobar_delegate.h @@ -28,23 +28,6 @@ class Image; // does not map to a specific InfoBar type. Instead, you must implement either // LinkInfoBarDelegate or ConfirmInfoBarDelegate, or override with your own // delegate for your own InfoBar variety. -// -// --- WARNING --- -// When creating your InfoBarDelegate subclass, it is recommended that you -// design it such that you instantiate a brand new delegate for every call to -// AddInfoBar, rather than re-using/sharing a delegate object. Otherwise, -// you need to consider the fact that more than one InfoBar instance can exist -// and reference the same delegate -- even though it is also true that we only -// ever fully show one infobar (they don't stack). The dual-references occur -// because a second InfoBar can be added while the first one is in the process -// of closing (the animations). This can cause problems because when the first -// one does finally fully close InfoBarDelegate::InfoBarClosed() is called, -// and the delegate is free to clean itself up or reset state, which may have -// fatal consequences for the InfoBar that was in the process of opening (or is -// now fully opened) -- it is referencing a delegate that may not even exist -// anymore. -// As such, it is generally much safer to dedicate a delegate instance to -// AddInfoBar! class InfoBarDelegate { public: // The type of the infobar. It controls its appearance, such as its background @@ -77,9 +60,9 @@ class InfoBarDelegate { // Called when the user clicks on the close button to dismiss the infobar. virtual void InfoBarDismissed(); - // Called after the InfoBar is closed. The delegate is free to delete itself - // at this point. - virtual void InfoBarClosed(); + // Called after the InfoBar is closed. Deletes |this|. + // TODO(pkasting): Get rid of this and delete delegates directly. + void InfoBarClosed(); // Return the icon to be shown for this InfoBar. If the returned Image is // NULL, no icon is shown. diff --git a/chrome/browser/tab_contents/simple_alert_infobar_delegate.cc b/chrome/browser/tab_contents/simple_alert_infobar_delegate.cc index 28220be..da52690 100644 --- a/chrome/browser/tab_contents/simple_alert_infobar_delegate.cc +++ b/chrome/browser/tab_contents/simple_alert_infobar_delegate.cc @@ -27,10 +27,6 @@ bool SimpleAlertInfoBarDelegate::ShouldExpire( return auto_expire_ && ConfirmInfoBarDelegate::ShouldExpire(details); } -void SimpleAlertInfoBarDelegate::InfoBarClosed() { - delete this; -} - gfx::Image* SimpleAlertInfoBarDelegate::GetIcon() const { return icon_; } diff --git a/chrome/browser/tab_contents/simple_alert_infobar_delegate.h b/chrome/browser/tab_contents/simple_alert_infobar_delegate.h index 1ef2539..1e30125 100644 --- a/chrome/browser/tab_contents/simple_alert_infobar_delegate.h +++ b/chrome/browser/tab_contents/simple_alert_infobar_delegate.h @@ -27,7 +27,6 @@ class SimpleAlertInfoBarDelegate : public ConfirmInfoBarDelegate { // ConfirmInfoBarDelegate: virtual bool ShouldExpire( const NavigationController::LoadCommittedDetails& details) const OVERRIDE; - virtual void InfoBarClosed() OVERRIDE; virtual gfx::Image* GetIcon() const OVERRIDE; virtual string16 GetMessageText() const OVERRIDE; virtual int GetButtons() const OVERRIDE; diff --git a/chrome/browser/tab_contents/tab_contents_ssl_helper.cc b/chrome/browser/tab_contents/tab_contents_ssl_helper.cc index acf72478..bf05599 100644 --- a/chrome/browser/tab_contents/tab_contents_ssl_helper.cc +++ b/chrome/browser/tab_contents/tab_contents_ssl_helper.cc @@ -42,13 +42,12 @@ class SSLCertAddedInfoBarDelegate : public ConfirmInfoBarDelegate { virtual ~SSLCertAddedInfoBarDelegate(); // ConfirmInfoBarDelegate: - virtual void InfoBarClosed(); - virtual gfx::Image* GetIcon() const; - virtual Type GetInfoBarType() const; - virtual string16 GetMessageText() const; - virtual int GetButtons() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; - virtual bool Accept(); + virtual gfx::Image* GetIcon() const OVERRIDE; + virtual Type GetInfoBarType() const OVERRIDE; + virtual string16 GetMessageText() const OVERRIDE; + virtual int GetButtons() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual bool Accept() OVERRIDE; TabContents* tab_contents_; // The TabContents we are attached to. scoped_refptr<net::X509Certificate> cert_; // The cert we added. @@ -65,11 +64,6 @@ SSLCertAddedInfoBarDelegate::SSLCertAddedInfoBarDelegate( SSLCertAddedInfoBarDelegate::~SSLCertAddedInfoBarDelegate() { } -void SSLCertAddedInfoBarDelegate::InfoBarClosed() { - // ConfirmInfoBarDelegate doesn't delete itself. - delete this; -} - gfx::Image* SSLCertAddedInfoBarDelegate::GetIcon() const { return GetCertIcon(); } diff --git a/chrome/browser/translate/translate_infobar_delegate.cc b/chrome/browser/translate/translate_infobar_delegate.cc index 3e67c22..5537e83 100644 --- a/chrome/browser/translate/translate_infobar_delegate.cc +++ b/chrome/browser/translate/translate_infobar_delegate.cc @@ -359,10 +359,6 @@ void TranslateInfoBarDelegate::InfoBarDismissed() { UMA_HISTOGRAM_COUNTS("Translate.DeclineTranslateCloseInfobar", 1); } -void TranslateInfoBarDelegate::InfoBarClosed() { - delete this; -} - gfx::Image* TranslateInfoBarDelegate::GetIcon() const { return &ResourceBundle::GetSharedInstance().GetNativeImageNamed( IDR_INFOBAR_TRANSLATE); diff --git a/chrome/browser/translate/translate_infobar_delegate.h b/chrome/browser/translate/translate_infobar_delegate.h index 9d763089..03c196e 100644 --- a/chrome/browser/translate/translate_infobar_delegate.h +++ b/chrome/browser/translate/translate_infobar_delegate.h @@ -159,12 +159,11 @@ class TranslateInfoBarDelegate : public InfoBarDelegate { typedef std::pair<std::string, string16> LanguageNamePair; // InfoBarDelegate: - virtual InfoBar* CreateInfoBar(); - virtual void InfoBarDismissed(); - virtual void InfoBarClosed(); - virtual gfx::Image* GetIcon() const; - virtual InfoBarDelegate::Type GetInfoBarType() const; - virtual TranslateInfoBarDelegate* AsTranslateInfoBarDelegate(); + virtual InfoBar* CreateInfoBar() OVERRIDE; + virtual void InfoBarDismissed() OVERRIDE; + virtual gfx::Image* GetIcon() const OVERRIDE; + virtual InfoBarDelegate::Type GetInfoBarType() const OVERRIDE; + virtual TranslateInfoBarDelegate* AsTranslateInfoBarDelegate() OVERRIDE; // Gets the host of the page being translated, or an empty string if no URL is // associated with the current page. diff --git a/chrome/browser/ui/browser_init.cc b/chrome/browser/ui/browser_init.cc index 86bb2ec..6700377 100644 --- a/chrome/browser/ui/browser_init.cc +++ b/chrome/browser/ui/browser_init.cc @@ -144,7 +144,6 @@ class DefaultBrowserInfoBarDelegate : public ConfirmInfoBarDelegate { // ConfirmInfoBarDelegate: virtual bool ShouldExpire( const NavigationController::LoadCommittedDetails& details) const OVERRIDE; - virtual void InfoBarClosed() OVERRIDE; virtual gfx::Image* GetIcon() const OVERRIDE; virtual string16 GetMessageText() const OVERRIDE; virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; @@ -182,6 +181,8 @@ DefaultBrowserInfoBarDelegate::DefaultBrowserInfoBarDelegate( } DefaultBrowserInfoBarDelegate::~DefaultBrowserInfoBarDelegate() { + if (!action_taken_) + UMA_HISTOGRAM_COUNTS("DefaultBrowserWarning.Ignored", 1); } bool DefaultBrowserInfoBarDelegate::ShouldExpire( @@ -189,12 +190,6 @@ bool DefaultBrowserInfoBarDelegate::ShouldExpire( return should_expire_; } -void DefaultBrowserInfoBarDelegate::InfoBarClosed() { - if (!action_taken_) - UMA_HISTOGRAM_COUNTS("DefaultBrowserWarning.Ignored", 1); - delete this; -} - gfx::Image* DefaultBrowserInfoBarDelegate::GetIcon() const { return &ResourceBundle::GetSharedInstance().GetNativeImageNamed( IDR_PRODUCT_ICON_32); @@ -305,7 +300,6 @@ class SessionCrashedInfoBarDelegate : public ConfirmInfoBarDelegate { virtual ~SessionCrashedInfoBarDelegate(); // ConfirmInfoBarDelegate: - virtual void InfoBarClosed() OVERRIDE; virtual gfx::Image* GetIcon() const OVERRIDE; virtual string16 GetMessageText() const OVERRIDE; virtual int GetButtons() const OVERRIDE; @@ -327,10 +321,6 @@ SessionCrashedInfoBarDelegate::SessionCrashedInfoBarDelegate( SessionCrashedInfoBarDelegate::~SessionCrashedInfoBarDelegate() { } -void SessionCrashedInfoBarDelegate::InfoBarClosed() { - delete this; -} - gfx::Image* SessionCrashedInfoBarDelegate::GetIcon() const { return &ResourceBundle::GetSharedInstance().GetNativeImageNamed( IDR_INFOBAR_RESTORE_SESSION); @@ -1081,29 +1071,13 @@ void BrowserInit::LaunchWithProfile::AddBadFlagsInfoBarIfNecessary( class DNSCertProvenanceCheckingInfoBar : public ConfirmInfoBarDelegate { public: - explicit DNSCertProvenanceCheckingInfoBar(TabContents* tab_contents) - : ConfirmInfoBarDelegate(tab_contents), - tab_contents_(tab_contents) { - } + explicit DNSCertProvenanceCheckingInfoBar(TabContents* tab_contents); + virtual ~DNSCertProvenanceCheckingInfoBar(); - virtual string16 GetMessageText() const { - return l10n_util::GetStringUTF16( - IDS_DNS_CERT_PROVENANCE_CHECKING_WARNING_MESSAGE); - } - - virtual int GetButtons() const { - return BUTTON_OK; - } - - virtual string16 GetButtonLabel(InfoBarButton button) const { - return l10n_util::GetStringUTF16(IDS_LEARN_MORE); - } - - virtual bool Accept() { - tab_contents_->OpenURL(GURL(kLearnMoreURL), GURL(), NEW_FOREGROUND_TAB, - PageTransition::AUTO_BOOKMARK); - return true; - } + virtual string16 GetMessageText() const OVERRIDE; + virtual int GetButtons() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual bool Accept() OVERRIDE; private: DISALLOW_COPY_AND_ASSIGN(DNSCertProvenanceCheckingInfoBar); @@ -1112,6 +1086,35 @@ class DNSCertProvenanceCheckingInfoBar : public ConfirmInfoBarDelegate { TabContents* const tab_contents_; }; +DNSCertProvenanceCheckingInfoBar::DNSCertProvenanceCheckingInfoBar( + TabContents* tab_contents) + : ConfirmInfoBarDelegate(tab_contents), + tab_contents_(tab_contents) { +} + +DNSCertProvenanceCheckingInfoBar::~DNSCertProvenanceCheckingInfoBar() { +} + +string16 DNSCertProvenanceCheckingInfoBar::GetMessageText() const { + return l10n_util::GetStringUTF16( + IDS_DNS_CERT_PROVENANCE_CHECKING_WARNING_MESSAGE); +} + +int DNSCertProvenanceCheckingInfoBar::GetButtons() const { + return BUTTON_OK; +} + +string16 DNSCertProvenanceCheckingInfoBar::GetButtonLabel( + InfoBarButton button) const { + return l10n_util::GetStringUTF16(IDS_LEARN_MORE); +} + +bool DNSCertProvenanceCheckingInfoBar::Accept() { + tab_contents_->OpenURL(GURL(kLearnMoreURL), GURL(), NEW_FOREGROUND_TAB, + PageTransition::AUTO_BOOKMARK); + return true; +} + // This is the page which provides information on DNS certificate provenance // checking. const char DNSCertProvenanceCheckingInfoBar::kLearnMoreURL[] = diff --git a/chrome/browser/ui/cocoa/infobars/infobar_container_controller_unittest.mm b/chrome/browser/ui/cocoa/infobars/infobar_container_controller_unittest.mm index c05a9ae..78e43e3 100644 --- a/chrome/browser/ui/cocoa/infobars/infobar_container_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/infobars/infobar_container_controller_unittest.mm @@ -53,26 +53,31 @@ TEST_F(InfoBarContainerControllerTest, AddAndRemoveInfoBars) { // Add three infobars and then remove them. // After each step check to make sure we have the correct number of // infobar subviews. - MockLinkInfoBarDelegate linkDelegate, linkDelegate2; - MockConfirmInfoBarDelegate confirmDelegate; - [controller_ addInfoBar:&linkDelegate animate:NO]; + // These delegates delete themselves when they're told their infobars have + // closed. + MockLinkInfoBarDelegate* linkDelegate = new MockLinkInfoBarDelegate(NULL); + MockLinkInfoBarDelegate* linkDelegate2 = new MockLinkInfoBarDelegate(NULL); + MockConfirmInfoBarDelegate* confirmDelegate = + new MockConfirmInfoBarDelegate(NULL); + + [controller_ addInfoBar:linkDelegate animate:NO]; EXPECT_EQ(1U, [[view subviews] count]); - [controller_ addInfoBar:&confirmDelegate animate:NO]; + [controller_ addInfoBar:confirmDelegate animate:NO]; EXPECT_EQ(2U, [[view subviews] count]); - [controller_ addInfoBar:&linkDelegate2 animate:NO]; + [controller_ addInfoBar:linkDelegate2 animate:NO]; EXPECT_EQ(3U, [[view subviews] count]); // Just to mix things up, remove them in a different order. - [controller_ closeInfoBarsForDelegate:&confirmDelegate animate:NO]; + [controller_ closeInfoBarsForDelegate:confirmDelegate animate:NO]; EXPECT_EQ(2U, [[view subviews] count]); - [controller_ closeInfoBarsForDelegate:&linkDelegate animate:NO]; + [controller_ closeInfoBarsForDelegate:linkDelegate animate:NO]; EXPECT_EQ(1U, [[view subviews] count]); - [controller_ closeInfoBarsForDelegate:&linkDelegate2 animate:NO]; + [controller_ closeInfoBarsForDelegate:linkDelegate2 animate:NO]; EXPECT_EQ(0U, [[view subviews] count]); } @@ -80,12 +85,18 @@ TEST_F(InfoBarContainerControllerTest, RemoveAllInfoBars) { NSView* view = [controller_ view]; // Add three infobars and then remove them all. - MockLinkInfoBarDelegate linkDelegate; - MockConfirmInfoBarDelegate confirmDelegate, confirmDelegate2; - [controller_ addInfoBar:&linkDelegate animate:NO]; - [controller_ addInfoBar:&confirmDelegate animate:NO]; - [controller_ addInfoBar:&confirmDelegate2 animate:NO]; + // These delegates delete themselves when they're told their infobars have + // closed. + MockLinkInfoBarDelegate* linkDelegate = new MockLinkInfoBarDelegate(NULL); + MockConfirmInfoBarDelegate* confirmDelegate = + new MockConfirmInfoBarDelegate(NULL); + MockConfirmInfoBarDelegate* confirmDelegate2 = + new MockConfirmInfoBarDelegate(NULL); + + [controller_ addInfoBar:linkDelegate animate:NO]; + [controller_ addInfoBar:confirmDelegate animate:NO]; + [controller_ addInfoBar:confirmDelegate2 animate:NO]; EXPECT_EQ(3U, [[view subviews] count]); [controller_ removeAllInfoBars]; diff --git a/chrome/browser/ui/cocoa/infobars/infobar_controller.mm b/chrome/browser/ui/cocoa/infobars/infobar_controller.mm index d45447f..c2e6d50 100644 --- a/chrome/browser/ui/cocoa/infobars/infobar_controller.mm +++ b/chrome/browser/ui/cocoa/infobars/infobar_controller.mm @@ -266,7 +266,7 @@ const float kAnimateCloseDuration = 0.12; if (!infoBarClosing_) return; - // Notify the delegate that the infobar was closed. The delegate may delete + // Notify the delegate that the infobar was closed. The delegate will delete // itself as a result of InfoBarClosed(), so we null out its pointer. if (delegate_) { delegate_->InfoBarClosed(); diff --git a/chrome/browser/ui/cocoa/infobars/infobar_controller_unittest.mm b/chrome/browser/ui/cocoa/infobars/infobar_controller_unittest.mm index 011e38b..2dc43f9 100644 --- a/chrome/browser/ui/cocoa/infobars/infobar_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/infobars/infobar_controller_unittest.mm @@ -70,42 +70,86 @@ namespace { /////////////////////////////////////////////////////////////////////////// // Test fixtures -class LinkInfoBarControllerTest : public CocoaTest { +class LinkInfoBarControllerTest : public CocoaTest, + public MockLinkInfoBarDelegate::Owner { public: virtual void SetUp() { CocoaTest::SetUp(); + delegate_ = new MockLinkInfoBarDelegate(this); controller_.reset( - [[LinkInfoBarController alloc] initWithDelegate:&delegate_]); + [[LinkInfoBarController alloc] initWithDelegate:delegate_]); container_.reset( [[InfoBarContainerTest alloc] initWithController:controller_]); [controller_ setContainerController:container_]; [[test_window() contentView] addSubview:[controller_ view]]; + closed_delegate_link_clicked_ = false; + } + + virtual void TearDown() { + if (delegate_) + delete delegate_; + CocoaTest::TearDown(); } protected: - MockLinkInfoBarDelegate delegate_; + // Hopefully-obvious: If this returns true, you must not deref |delegate_|! + bool delegate_closed() const { return delegate_ == NULL; } + + MockLinkInfoBarDelegate* delegate_; // Owns itself. scoped_nsobject<id> container_; scoped_nsobject<LinkInfoBarController> controller_; + bool closed_delegate_link_clicked_; + + private: + virtual void OnInfoBarDelegateClosed() { + closed_delegate_link_clicked_ = delegate_->link_clicked(); + delegate_ = NULL; + } }; -class ConfirmInfoBarControllerTest : public CocoaTest { +class ConfirmInfoBarControllerTest : public CocoaTest, + public MockConfirmInfoBarDelegate::Owner { public: virtual void SetUp() { CocoaTest::SetUp(); + delegate_ = new MockConfirmInfoBarDelegate(this); controller_.reset( - [[ConfirmInfoBarController alloc] initWithDelegate:&delegate_]); + [[ConfirmInfoBarController alloc] initWithDelegate:delegate_]); container_.reset( [[InfoBarContainerTest alloc] initWithController:controller_]); [controller_ setContainerController:container_]; [[test_window() contentView] addSubview:[controller_ view]]; + closed_delegate_ok_clicked_ = false; + closed_delegate_cancel_clicked_ = false; + closed_delegate_link_clicked_ = false; + } + + virtual void TearDown() { + if (delegate_) + delete delegate_; + CocoaTest::TearDown(); } protected: - MockConfirmInfoBarDelegate delegate_; + // Hopefully-obvious: If this returns true, you must not deref |delegate_|! + bool delegate_closed() const { return delegate_ == NULL; } + + MockConfirmInfoBarDelegate* delegate_; // Owns itself. scoped_nsobject<id> container_; scoped_nsobject<ConfirmInfoBarController> controller_; + bool closed_delegate_ok_clicked_; + bool closed_delegate_cancel_clicked_; + bool closed_delegate_link_clicked_; + + private: + virtual void OnInfoBarDelegateClosed() { + closed_delegate_ok_clicked_ = delegate_->ok_clicked(); + closed_delegate_cancel_clicked_ = delegate_->cancel_clicked(); + closed_delegate_link_clicked_ = delegate_->link_clicked(); + delegate_ = NULL; + } }; @@ -116,125 +160,124 @@ TEST_VIEW(LinkInfoBarControllerTest, [controller_ view]); TEST_F(LinkInfoBarControllerTest, ShowAndDismiss) { // Make sure someone looked at the message, link, and icon. - EXPECT_TRUE(delegate_.message_text_accessed()); - EXPECT_TRUE(delegate_.link_text_accessed()); - EXPECT_TRUE(delegate_.icon_accessed()); + EXPECT_TRUE(delegate_->message_text_accessed()); + EXPECT_TRUE(delegate_->link_text_accessed()); + EXPECT_TRUE(delegate_->icon_accessed()); - // Check that dismissing the infobar calls InfoBarClosed() on the delegate. + // Check that dismissing the infobar deletes the delegate. [controller_ dismiss:nil]; - EXPECT_FALSE(delegate_.link_clicked()); - EXPECT_TRUE(delegate_.closed()); + ASSERT_TRUE(delegate_closed()); + EXPECT_FALSE(closed_delegate_link_clicked_); } TEST_F(LinkInfoBarControllerTest, ShowAndClickLink) { // Check that clicking on the link calls LinkClicked() on the // delegate. It should also close the infobar. [controller_ linkClicked]; - EXPECT_TRUE(delegate_.link_clicked()); - EXPECT_TRUE(delegate_.closed()); + ASSERT_TRUE(delegate_closed()); + EXPECT_TRUE(closed_delegate_link_clicked_); } TEST_F(LinkInfoBarControllerTest, ShowAndClickLinkWithoutClosing) { - delegate_.set_dont_close_on_action(); + delegate_->set_dont_close_on_action(); // Check that clicking on the link calls LinkClicked() on the // delegate. It should not close the infobar. [controller_ linkClicked]; - EXPECT_TRUE(delegate_.link_clicked()); - EXPECT_FALSE(delegate_.closed()); + ASSERT_FALSE(delegate_closed()); + EXPECT_TRUE(delegate_->link_clicked()); } TEST_F(LinkInfoBarControllerTest, DeallocController) { - // Test that dealloc'ing the controller does not send an - // InfoBarClosed() message to the delegate. + // Test that dealloc'ing the controller does not delete the delegate. controller_.reset(nil); - EXPECT_FALSE(delegate_.closed()); + ASSERT_FALSE(delegate_closed()); } TEST_VIEW(ConfirmInfoBarControllerTest, [controller_ view]); TEST_F(ConfirmInfoBarControllerTest, ShowAndDismiss) { // Make sure someone looked at the message, link, and icon. - EXPECT_TRUE(delegate_.message_text_accessed()); - EXPECT_TRUE(delegate_.link_text_accessed()); - EXPECT_TRUE(delegate_.icon_accessed()); + EXPECT_TRUE(delegate_->message_text_accessed()); + EXPECT_TRUE(delegate_->link_text_accessed()); + EXPECT_TRUE(delegate_->icon_accessed()); // Check to make sure the infobar message was set properly. EXPECT_EQ(MockConfirmInfoBarDelegate::kMessage, base::SysNSStringToUTF8([controller_.get() labelString])); - // Check that dismissing the infobar calls InfoBarClosed() on the delegate. + // Check that dismissing the infobar deletes the delegate. [controller_ dismiss:nil]; - EXPECT_FALSE(delegate_.ok_clicked()); - EXPECT_FALSE(delegate_.cancel_clicked()); - EXPECT_FALSE(delegate_.link_clicked()); - EXPECT_TRUE(delegate_.closed()); + ASSERT_TRUE(delegate_closed()); + EXPECT_FALSE(closed_delegate_ok_clicked_); + EXPECT_FALSE(closed_delegate_cancel_clicked_); + EXPECT_FALSE(closed_delegate_link_clicked_); } TEST_F(ConfirmInfoBarControllerTest, ShowAndClickOK) { // Check that clicking the OK button calls Accept() and then closes // the infobar. [controller_ ok:nil]; - EXPECT_TRUE(delegate_.ok_clicked()); - EXPECT_FALSE(delegate_.cancel_clicked()); - EXPECT_FALSE(delegate_.link_clicked()); - EXPECT_TRUE(delegate_.closed()); + ASSERT_TRUE(delegate_closed()); + EXPECT_TRUE(closed_delegate_ok_clicked_); + EXPECT_FALSE(closed_delegate_cancel_clicked_); + EXPECT_FALSE(closed_delegate_link_clicked_); } TEST_F(ConfirmInfoBarControllerTest, ShowAndClickOKWithoutClosing) { - delegate_.set_dont_close_on_action(); + delegate_->set_dont_close_on_action(); // Check that clicking the OK button calls Accept() but does not close // the infobar. [controller_ ok:nil]; - EXPECT_TRUE(delegate_.ok_clicked()); - EXPECT_FALSE(delegate_.cancel_clicked()); - EXPECT_FALSE(delegate_.link_clicked()); - EXPECT_FALSE(delegate_.closed()); + ASSERT_FALSE(delegate_closed()); + EXPECT_TRUE(delegate_->ok_clicked()); + EXPECT_FALSE(delegate_->cancel_clicked()); + EXPECT_FALSE(delegate_->link_clicked()); } TEST_F(ConfirmInfoBarControllerTest, ShowAndClickCancel) { // Check that clicking the cancel button calls Cancel() and closes // the infobar. [controller_ cancel:nil]; - EXPECT_FALSE(delegate_.ok_clicked()); - EXPECT_TRUE(delegate_.cancel_clicked()); - EXPECT_FALSE(delegate_.link_clicked()); - EXPECT_TRUE(delegate_.closed()); + ASSERT_TRUE(delegate_closed()); + EXPECT_FALSE(closed_delegate_ok_clicked_); + EXPECT_TRUE(closed_delegate_cancel_clicked_); + EXPECT_FALSE(closed_delegate_link_clicked_); } TEST_F(ConfirmInfoBarControllerTest, ShowAndClickCancelWithoutClosing) { - delegate_.set_dont_close_on_action(); + delegate_->set_dont_close_on_action(); // Check that clicking the cancel button calls Cancel() but does not close // the infobar. [controller_ cancel:nil]; - EXPECT_FALSE(delegate_.ok_clicked()); - EXPECT_TRUE(delegate_.cancel_clicked()); - EXPECT_FALSE(delegate_.link_clicked()); - EXPECT_FALSE(delegate_.closed()); + ASSERT_FALSE(delegate_closed()); + EXPECT_FALSE(delegate_->ok_clicked()); + EXPECT_TRUE(delegate_->cancel_clicked()); + EXPECT_FALSE(delegate_->link_clicked()); } TEST_F(ConfirmInfoBarControllerTest, ShowAndClickLink) { // Check that clicking on the link calls LinkClicked() on the // delegate. It should also close the infobar. [controller_ linkClicked]; - EXPECT_FALSE(delegate_.ok_clicked()); - EXPECT_FALSE(delegate_.cancel_clicked()); - EXPECT_TRUE(delegate_.link_clicked()); - EXPECT_TRUE(delegate_.closed()); + ASSERT_TRUE(delegate_closed()); + EXPECT_FALSE(closed_delegate_ok_clicked_); + EXPECT_FALSE(closed_delegate_cancel_clicked_); + EXPECT_TRUE(closed_delegate_link_clicked_); } TEST_F(ConfirmInfoBarControllerTest, ShowAndClickLinkWithoutClosing) { - delegate_.set_dont_close_on_action(); + delegate_->set_dont_close_on_action(); // Check that clicking on the link calls LinkClicked() on the // delegate. It should not close the infobar. [controller_ linkClicked]; - EXPECT_FALSE(delegate_.ok_clicked()); - EXPECT_FALSE(delegate_.cancel_clicked()); - EXPECT_TRUE(delegate_.link_clicked()); - EXPECT_FALSE(delegate_.closed()); + ASSERT_FALSE(delegate_closed()); + EXPECT_FALSE(delegate_->ok_clicked()); + EXPECT_FALSE(delegate_->cancel_clicked()); + EXPECT_TRUE(delegate_->link_clicked()); } TEST_F(ConfirmInfoBarControllerTest, ResizeView) { diff --git a/chrome/browser/ui/cocoa/infobars/mock_confirm_infobar_delegate.cc b/chrome/browser/ui/cocoa/infobars/mock_confirm_infobar_delegate.cc index 6cc13bf..25df444 100644 --- a/chrome/browser/ui/cocoa/infobars/mock_confirm_infobar_delegate.cc +++ b/chrome/browser/ui/cocoa/infobars/mock_confirm_infobar_delegate.cc @@ -9,23 +9,21 @@ const char MockConfirmInfoBarDelegate::kMessage[] = "MockConfirmInfoBarMessage"; -MockConfirmInfoBarDelegate::MockConfirmInfoBarDelegate() +MockConfirmInfoBarDelegate::MockConfirmInfoBarDelegate(Owner* owner) : ConfirmInfoBarDelegate(NULL), + owner_(owner), closes_on_action_(true), icon_accessed_(false), message_text_accessed_(false), link_text_accessed_(false), ok_clicked_(false), cancel_clicked_(false), - link_clicked_(false), - closed_(false) { + link_clicked_(false) { } MockConfirmInfoBarDelegate::~MockConfirmInfoBarDelegate() { -} - -void MockConfirmInfoBarDelegate::InfoBarClosed() { - closed_ = true; + if (owner_) + owner_->OnInfoBarDelegateClosed(); } gfx::Image* MockConfirmInfoBarDelegate::GetIcon() const { diff --git a/chrome/browser/ui/cocoa/infobars/mock_confirm_infobar_delegate.h b/chrome/browser/ui/cocoa/infobars/mock_confirm_infobar_delegate.h index 7a05597..f392b0c 100644 --- a/chrome/browser/ui/cocoa/infobars/mock_confirm_infobar_delegate.h +++ b/chrome/browser/ui/cocoa/infobars/mock_confirm_infobar_delegate.h @@ -15,7 +15,16 @@ class SkBitmap; class MockConfirmInfoBarDelegate : public ConfirmInfoBarDelegate { public: - MockConfirmInfoBarDelegate(); + // Called when |this| is about to be destroyed. + class Owner { + public: + virtual void OnInfoBarDelegateClosed() = 0; + + protected: + virtual ~Owner() {} + }; + + explicit MockConfirmInfoBarDelegate(Owner* owner); virtual ~MockConfirmInfoBarDelegate(); void set_dont_close_on_action() { closes_on_action_ = false; } @@ -25,13 +34,11 @@ class MockConfirmInfoBarDelegate : public ConfirmInfoBarDelegate { bool ok_clicked() const { return ok_clicked_; } bool cancel_clicked() const { return cancel_clicked_; } bool link_clicked() const { return link_clicked_; } - bool closed() const { return closed_; } static const char kMessage[]; private: // ConfirmInfoBarDelegate: - virtual void InfoBarClosed() OVERRIDE; virtual gfx::Image* GetIcon() const OVERRIDE; virtual string16 GetMessageText() const OVERRIDE; virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; @@ -40,6 +47,7 @@ class MockConfirmInfoBarDelegate : public ConfirmInfoBarDelegate { virtual string16 GetLinkText() OVERRIDE; virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE; + Owner* owner_; // Determines whether the infobar closes when an action is taken or not. bool closes_on_action_; mutable bool icon_accessed_; @@ -48,7 +56,6 @@ class MockConfirmInfoBarDelegate : public ConfirmInfoBarDelegate { bool ok_clicked_; bool cancel_clicked_; bool link_clicked_; - bool closed_; DISALLOW_COPY_AND_ASSIGN(MockConfirmInfoBarDelegate); }; diff --git a/chrome/browser/ui/cocoa/infobars/mock_link_infobar_delegate.cc b/chrome/browser/ui/cocoa/infobars/mock_link_infobar_delegate.cc index 8c7d4f6..f0070d0 100644 --- a/chrome/browser/ui/cocoa/infobars/mock_link_infobar_delegate.cc +++ b/chrome/browser/ui/cocoa/infobars/mock_link_infobar_delegate.cc @@ -10,21 +10,19 @@ const char MockLinkInfoBarDelegate::kMessage[] = "MockLinkInfoBarMessage "; const char MockLinkInfoBarDelegate::kLink[] = "http://dev.chromium.org"; -MockLinkInfoBarDelegate::MockLinkInfoBarDelegate() +MockLinkInfoBarDelegate::MockLinkInfoBarDelegate(Owner* owner) : LinkInfoBarDelegate(NULL), + owner_(owner), closes_on_action_(true), icon_accessed_(false), message_text_accessed_(false), link_text_accessed_(false), - link_clicked_(false), - closed_(false) { + link_clicked_(false) { } MockLinkInfoBarDelegate::~MockLinkInfoBarDelegate() { -} - -void MockLinkInfoBarDelegate::InfoBarClosed() { - closed_ = true; + if (owner_) + owner_->OnInfoBarDelegateClosed(); } gfx::Image* MockLinkInfoBarDelegate::GetIcon() const { diff --git a/chrome/browser/ui/cocoa/infobars/mock_link_infobar_delegate.h b/chrome/browser/ui/cocoa/infobars/mock_link_infobar_delegate.h index a4f6ff7..477620b 100644 --- a/chrome/browser/ui/cocoa/infobars/mock_link_infobar_delegate.h +++ b/chrome/browser/ui/cocoa/infobars/mock_link_infobar_delegate.h @@ -15,7 +15,16 @@ class SkBitmap; class MockLinkInfoBarDelegate : public LinkInfoBarDelegate { public: - MockLinkInfoBarDelegate(); + // Called when |this| is about to be destroyed. + class Owner { + public: + virtual void OnInfoBarDelegateClosed() = 0; + + protected: + virtual ~Owner() {} + }; + + explicit MockLinkInfoBarDelegate(Owner* owner); virtual ~MockLinkInfoBarDelegate(); void set_dont_close_on_action() { closes_on_action_ = false; } @@ -23,26 +32,24 @@ class MockLinkInfoBarDelegate : public LinkInfoBarDelegate { bool message_text_accessed() const { return message_text_accessed_; } bool link_text_accessed() const { return link_text_accessed_; } bool link_clicked() const { return link_clicked_; } - bool closed() const { return closed_; } static const char kMessage[]; static const char kLink[]; private: // LinkInfoBarDelegate: - virtual void InfoBarClosed() OVERRIDE; virtual gfx::Image* GetIcon() const OVERRIDE; virtual string16 GetMessageTextWithOffset(size_t* link_offset) const OVERRIDE; virtual string16 GetLinkText() const OVERRIDE; virtual bool LinkClicked(WindowOpenDisposition disposition) OVERRIDE; + Owner* owner_; // Determines whether the infobar closes when an action is taken or not. bool closes_on_action_; mutable bool icon_accessed_; mutable bool message_text_accessed_; mutable bool link_text_accessed_; bool link_clicked_; - bool closed_; DISALLOW_COPY_AND_ASSIGN(MockLinkInfoBarDelegate); }; diff --git a/chrome/browser/ui/cocoa/keystone_infobar.mm b/chrome/browser/ui/cocoa/keystone_infobar.mm index d218199..265d122 100644 --- a/chrome/browser/ui/cocoa/keystone_infobar.mm +++ b/chrome/browser/ui/cocoa/keystone_infobar.mm @@ -47,13 +47,12 @@ class KeystonePromotionInfoBarDelegate : public ConfirmInfoBarDelegate { // ConfirmInfoBarDelegate virtual bool ShouldExpire( - const NavigationController::LoadCommittedDetails& details) const; - virtual void InfoBarClosed(); - virtual gfx::Image* GetIcon() const; - virtual string16 GetMessageText() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; - virtual bool Accept(); - virtual bool Cancel(); + const NavigationController::LoadCommittedDetails& details) const OVERRIDE; + virtual gfx::Image* GetIcon() const OVERRIDE; + virtual string16 GetMessageText() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual bool Accept() OVERRIDE; + virtual bool Cancel() OVERRIDE; // The TabContents' profile. Profile* profile_; // weak @@ -88,10 +87,6 @@ bool KeystonePromotionInfoBarDelegate::ShouldExpire( return can_expire_; } -void KeystonePromotionInfoBarDelegate::InfoBarClosed() { - delete this; -} - gfx::Image* KeystonePromotionInfoBarDelegate::GetIcon() const { return &ResourceBundle::GetSharedInstance().GetNativeImageNamed( IDR_PRODUCT_ICON_32); diff --git a/chrome/browser/ui/collected_cookies_infobar_delegate.cc b/chrome/browser/ui/collected_cookies_infobar_delegate.cc index 9c503a7..5e97a7d 100644 --- a/chrome/browser/ui/collected_cookies_infobar_delegate.cc +++ b/chrome/browser/ui/collected_cookies_infobar_delegate.cc @@ -34,8 +34,8 @@ int CollectedCookiesInfoBarDelegate::GetButtons() const { return BUTTON_OK; } -string16 CollectedCookiesInfoBarDelegate::GetButtonLabel(InfoBarButton button) - const { +string16 CollectedCookiesInfoBarDelegate::GetButtonLabel( + InfoBarButton button) const { DCHECK_EQ(BUTTON_OK, button); return l10n_util::GetStringUTF16(IDS_COLLECTED_COOKIES_INFOBAR_BUTTON); } diff --git a/chrome/browser/ui/collected_cookies_infobar_delegate.h b/chrome/browser/ui/collected_cookies_infobar_delegate.h index b9be902..fd2bf8e 100644 --- a/chrome/browser/ui/collected_cookies_infobar_delegate.h +++ b/chrome/browser/ui/collected_cookies_infobar_delegate.h @@ -18,12 +18,12 @@ class CollectedCookiesInfoBarDelegate : public ConfirmInfoBarDelegate { private: // ConfirmInfoBarDelegate overrides. - virtual gfx::Image* GetIcon() const; - virtual Type GetInfoBarType() const; - virtual string16 GetMessageText() const; - virtual int GetButtons() const; - virtual string16 GetButtonLabel(InfoBarButton button) const; - virtual bool Accept(); + virtual gfx::Image* GetIcon() const OVERRIDE; + virtual Type GetInfoBarType() const OVERRIDE; + virtual string16 GetMessageText() const OVERRIDE; + virtual int GetButtons() const OVERRIDE; + virtual string16 GetButtonLabel(InfoBarButton button) const OVERRIDE; + virtual bool Accept() OVERRIDE; TabContents* tab_contents_; |