Index: chrome/browser/tab_contents/tab_contents_ssl_helper.cc |
=================================================================== |
--- chrome/browser/tab_contents/tab_contents_ssl_helper.cc (revision 71863) |
+++ chrome/browser/tab_contents/tab_contents_ssl_helper.cc (working copy) |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2011 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -29,134 +29,152 @@ |
IDR_INFOBAR_SAVE_PASSWORD); |
} |
+ |
+// SSLCertAddedInfoBarDelegate ------------------------------------------------ |
+ |
class SSLCertAddedInfoBarDelegate : public ConfirmInfoBarDelegate { |
public: |
SSLCertAddedInfoBarDelegate(TabContents* tab_contents, |
- net::X509Certificate* cert) |
- : ConfirmInfoBarDelegate(tab_contents), |
- tab_contents_(tab_contents), |
- cert_(cert) { |
- } |
+ net::X509Certificate* cert); |
- virtual ~SSLCertAddedInfoBarDelegate() { |
- } |
+ private: |
+ virtual ~SSLCertAddedInfoBarDelegate(); |
- // Overridden from ConfirmInfoBarDelegate: |
- virtual string16 GetMessageText() const { |
- // TODO(evanm): GetDisplayName should return UTF-16. |
- return l10n_util::GetStringFUTF16( |
- IDS_ADD_CERT_SUCCESS_INFOBAR_LABEL, |
- UTF8ToUTF16(cert_->issuer().GetDisplayName())); |
- } |
+ // ConfirmInfoBarDelegate: |
+ virtual void InfoBarClosed(); |
+ virtual SkBitmap* GetIcon() const; |
+ virtual Type GetInfoBarType() const; |
+ virtual string16 GetMessageText() const; |
+ virtual int GetButtons() const; |
+ virtual string16 GetButtonLabel(InfoBarButton button) const; |
+ virtual bool Accept(); |
- virtual SkBitmap* GetIcon() const { |
- return GetCertIcon(); |
- } |
+ // The TabContents we are attached to |
+ TabContents* tab_contents_; |
+ // The cert we added. |
+ scoped_refptr<net::X509Certificate> cert_; |
+}; |
- virtual int GetButtons() const { |
- return BUTTON_OK; |
- } |
+SSLCertAddedInfoBarDelegate::SSLCertAddedInfoBarDelegate( |
+ TabContents* tab_contents, |
+ net::X509Certificate* cert) |
+ : ConfirmInfoBarDelegate(tab_contents), |
+ tab_contents_(tab_contents), |
+ cert_(cert) { |
+} |
- virtual string16 GetButtonLabel(InfoBarButton button) const { |
- switch (button) { |
- case BUTTON_OK: |
- return l10n_util::GetStringUTF16(IDS_ADD_CERT_SUCCESS_INFOBAR_BUTTON); |
- default: |
- return string16(); |
- } |
- } |
+SSLCertAddedInfoBarDelegate::~SSLCertAddedInfoBarDelegate() { |
+} |
- virtual Type GetInfoBarType() { |
- return PAGE_ACTION_TYPE; |
- } |
+void SSLCertAddedInfoBarDelegate::InfoBarClosed() { |
+ // ConfirmInfoBarDelegate doesn't delete itself. |
+ delete this; |
+} |
- virtual bool Accept() { |
- ShowCertificateViewer(tab_contents_->GetMessageBoxRootWindow(), cert_); |
- return false; // Hiding the infobar just as the dialog opens looks weird. |
- } |
+SkBitmap* SSLCertAddedInfoBarDelegate::GetIcon() const { |
+ return GetCertIcon(); |
+} |
- virtual void InfoBarClosed() { |
- // ConfirmInfoBarDelegate doesn't delete itself. |
- delete this; |
- } |
+InfoBarDelegate::Type SSLCertAddedInfoBarDelegate::GetInfoBarType() const { |
+ return PAGE_ACTION_TYPE; |
+} |
- private: |
- // The TabContents we are attached to |
- TabContents* tab_contents_; |
- // The cert we added. |
- scoped_refptr<net::X509Certificate> cert_; |
-}; |
+string16 SSLCertAddedInfoBarDelegate::GetMessageText() const { |
+ // TODO(evanm): GetDisplayName should return UTF-16. |
+ return l10n_util::GetStringFUTF16(IDS_ADD_CERT_SUCCESS_INFOBAR_LABEL, |
+ UTF8ToUTF16(cert_->issuer().GetDisplayName())); |
+} |
+int SSLCertAddedInfoBarDelegate::GetButtons() const { |
+ return BUTTON_OK; |
+} |
+ |
+string16 SSLCertAddedInfoBarDelegate::GetButtonLabel( |
+ InfoBarButton button) const { |
+ DCHECK_EQ(BUTTON_OK, button); |
+ return l10n_util::GetStringUTF16(IDS_ADD_CERT_SUCCESS_INFOBAR_BUTTON); |
+} |
+ |
+bool SSLCertAddedInfoBarDelegate::Accept() { |
+ ShowCertificateViewer(tab_contents_->GetMessageBoxRootWindow(), cert_); |
+ return false; // Hiding the infobar just as the dialog opens looks weird. |
+} |
+ |
} // namespace |
+ |
+// TabContentsSSLHelper::SSLAddCertData --------------------------------------- |
+ |
class TabContentsSSLHelper::SSLAddCertData : public NotificationObserver { |
public: |
- SSLAddCertData(TabContents* tab, SSLAddCertHandler* handler) |
- : tab_(tab), |
- handler_(handler), |
- infobar_delegate_(NULL) { |
- // Listen for disappearing InfoBars. |
- Source<TabContents> tc_source(tab_); |
- registrar_.Add(this, NotificationType::TAB_CONTENTS_INFOBAR_REMOVED, |
- tc_source); |
- registrar_.Add(this, NotificationType::TAB_CONTENTS_INFOBAR_REPLACED, |
- tc_source); |
- } |
- ~SSLAddCertData() {} |
+ SSLAddCertData(TabContents* tab, SSLAddCertHandler* handler); |
+ virtual ~SSLAddCertData(); |
// Displays |delegate| as an infobar in |tab_|, replacing our current one if |
// still active. |
- void ShowInfoBar(InfoBarDelegate* delegate) { |
- if (infobar_delegate_) { |
- tab_->ReplaceInfoBar(infobar_delegate_, delegate); |
- } else { |
- tab_->AddInfoBar(delegate); |
- } |
- infobar_delegate_ = delegate; |
- } |
+ void ShowInfoBar(InfoBarDelegate* delegate); |
- void ShowErrorInfoBar(const string16& message) { |
- ShowInfoBar( |
- new SimpleAlertInfoBarDelegate(tab_, message, GetCertIcon(), true)); |
- } |
+ // Same as above, for the common case of wanting to show a simple alert |
+ // message. |
+ void ShowErrorInfoBar(const string16& message); |
- // NotificationObserver implementation. |
+ private: |
+ // NotificationObserver: |
virtual void Observe(NotificationType type, |
const NotificationSource& source, |
- const NotificationDetails& details) { |
- switch (type.value) { |
- case NotificationType::TAB_CONTENTS_INFOBAR_REMOVED: |
- InfoBarClosed(Details<InfoBarDelegate>(details).ptr()); |
- break; |
- case NotificationType::TAB_CONTENTS_INFOBAR_REPLACED: |
- typedef std::pair<InfoBarDelegate*, InfoBarDelegate*> |
- InfoBarDelegatePair; |
- InfoBarClosed(Details<InfoBarDelegatePair>(details).ptr()->first); |
- break; |
- default: |
- NOTREACHED(); |
- break; |
- } |
- } |
+ const NotificationDetails& details); |
- private: |
- void InfoBarClosed(InfoBarDelegate* delegate) { |
- if (infobar_delegate_ == delegate) |
- infobar_delegate_ = NULL; |
- } |
- |
- // The TabContents we are attached to. |
- TabContents* tab_; |
- // The handler we call back to. |
- scoped_refptr<SSLAddCertHandler> handler_; |
- // The current InfoBarDelegate we're displaying. |
+ TabContents* tab_contents_; |
+ scoped_refptr<SSLAddCertHandler> handler_; // The handler we call back to. |
InfoBarDelegate* infobar_delegate_; |
- |
NotificationRegistrar registrar_; |
DISALLOW_COPY_AND_ASSIGN(SSLAddCertData); |
}; |
+TabContentsSSLHelper::SSLAddCertData::SSLAddCertData(TabContents* tab_contents, |
+ SSLAddCertHandler* handler) |
+ : tab_contents_(tab_contents), |
+ handler_(handler), |
+ infobar_delegate_(NULL) { |
+ Source<TabContents> source(tab_contents_); |
+ registrar_.Add(this, NotificationType::TAB_CONTENTS_INFOBAR_REMOVED, source); |
+ registrar_.Add(this, NotificationType::TAB_CONTENTS_INFOBAR_REPLACED, source); |
+} |
+ |
+TabContentsSSLHelper::SSLAddCertData::~SSLAddCertData() { |
+} |
+ |
+void TabContentsSSLHelper::SSLAddCertData::ShowInfoBar( |
+ InfoBarDelegate* delegate) { |
+ if (infobar_delegate_) |
+ tab_contents_->ReplaceInfoBar(infobar_delegate_, delegate); |
+ else |
+ tab_contents_->AddInfoBar(delegate); |
+ infobar_delegate_ = delegate; |
+} |
+ |
+void TabContentsSSLHelper::SSLAddCertData::ShowErrorInfoBar( |
+ const string16& message) { |
+ ShowInfoBar(new SimpleAlertInfoBarDelegate(tab_contents_, GetCertIcon(), |
+ message, true)); |
+} |
+ |
+void TabContentsSSLHelper::SSLAddCertData::Observe( |
+ NotificationType type, |
+ const NotificationSource& source, |
+ const NotificationDetails& details) { |
+ typedef std::pair<InfoBarDelegate*, InfoBarDelegate*> InfoBarDelegatePair; |
+ if (infobar_delegate_ == |
+ ((type.value == NotificationType::TAB_CONTENTS_INFOBAR_REMOVED) ? |
+ Details<InfoBarDelegate>(details).ptr() : |
+ Details<InfoBarDelegatePair>(details).ptr()->first)) |
+ infobar_delegate_ = NULL; |
+} |
+ |
+ |
+// TabContentsSSLHelper ------------------------------------------------------- |
+ |
TabContentsSSLHelper::TabContentsSSLHelper(TabContents* tab_contents) |
: tab_contents_(tab_contents) { |
} |