172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file. 4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/tab_contents/tab_contents_ssl_helper.h" 6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/basictypes.h" 83345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/string_number_conversions.h" 93345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/utf_string_conversions.h" 103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/browser/ssl/ssl_add_cert_handler.h" 11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/ssl/ssl_client_auth_handler.h" 12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "chrome/browser/ssl_client_certificate_selector.h" 13dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/tab_contents/confirm_infobar_delegate.h" 14dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/tab_contents/simple_alert_infobar_delegate.h" 15dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/certificate_viewer.h" 16dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "content/browser/tab_contents/tab_contents.h" 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_details.h" 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_source.h" 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "grit/generated_resources.h" 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "grit/theme_resources.h" 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "net/base/net_errors.h" 2272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h" 2372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h" 243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace { 263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 273345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickSkBitmap* GetCertIcon() { 283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // TODO(davidben): use a more appropriate icon. 293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return ResourceBundle::GetSharedInstance().GetBitmapNamed( 303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick IDR_INFOBAR_SAVE_PASSWORD); 313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 3372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 3472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// SSLCertAddedInfoBarDelegate ------------------------------------------------ 3572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass SSLCertAddedInfoBarDelegate : public ConfirmInfoBarDelegate { 373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SSLCertAddedInfoBarDelegate(TabContents* tab_contents, 3972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen net::X509Certificate* cert); 403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick private: 4272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~SSLCertAddedInfoBarDelegate(); 4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // ConfirmInfoBarDelegate: 4572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void InfoBarClosed(); 4672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual SkBitmap* GetIcon() const; 4772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual Type GetInfoBarType() const; 4872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual string16 GetMessageText() const; 4972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual int GetButtons() const; 5072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual string16 GetButtonLabel(InfoBarButton button) const; 5172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual bool Accept(); 5272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 5372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContents* tab_contents_; // The TabContents we are attached to. 5472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen scoped_refptr<net::X509Certificate> cert_; // The cert we added. 553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenSSLCertAddedInfoBarDelegate::SSLCertAddedInfoBarDelegate( 5872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContents* tab_contents, 5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen net::X509Certificate* cert) 6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : ConfirmInfoBarDelegate(tab_contents), 6172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen tab_contents_(tab_contents), 6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen cert_(cert) { 6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 6472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenSSLCertAddedInfoBarDelegate::~SSLCertAddedInfoBarDelegate() { 6672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 6772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 6872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid SSLCertAddedInfoBarDelegate::InfoBarClosed() { 6972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // ConfirmInfoBarDelegate doesn't delete itself. 7072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen delete this; 7172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 7272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 7372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenSkBitmap* SSLCertAddedInfoBarDelegate::GetIcon() const { 7472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return GetCertIcon(); 7572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 7672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 7772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenInfoBarDelegate::Type SSLCertAddedInfoBarDelegate::GetInfoBarType() const { 7872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return PAGE_ACTION_TYPE; 7972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 8072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 8172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenstring16 SSLCertAddedInfoBarDelegate::GetMessageText() const { 8272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // TODO(evanm): GetDisplayName should return UTF-16. 8372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return l10n_util::GetStringFUTF16(IDS_ADD_CERT_SUCCESS_INFOBAR_LABEL, 8472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen UTF8ToUTF16(cert_->issuer().GetDisplayName())); 8572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenint SSLCertAddedInfoBarDelegate::GetButtons() const { 8872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return BUTTON_OK; 8972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 9072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 9172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenstring16 SSLCertAddedInfoBarDelegate::GetButtonLabel( 9272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen InfoBarButton button) const { 9372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DCHECK_EQ(BUTTON_OK, button); 9472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return l10n_util::GetStringUTF16(IDS_ADD_CERT_SUCCESS_INFOBAR_BUTTON); 9572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 9672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 9772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenbool SSLCertAddedInfoBarDelegate::Accept() { 9872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ShowCertificateViewer(tab_contents_->GetMessageBoxRootWindow(), cert_); 9972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen return false; // Hiding the infobar just as the dialog opens looks weird. 10072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 10172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} // namespace 1033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 10472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 10572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// TabContentsSSLHelper::SSLAddCertData --------------------------------------- 10672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass TabContentsSSLHelper::SSLAddCertData : public NotificationObserver { 1083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick public: 10972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen explicit SSLAddCertData(TabContents* tab_contents); 11072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~SSLAddCertData(); 1113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Displays |delegate| as an infobar in |tab_|, replacing our current one if 1133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // still active. 11472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void ShowInfoBar(InfoBarDelegate* delegate); 11572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 11672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // Same as above, for the common case of wanting to show a simple alert 11772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // message. 11872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void ShowErrorInfoBar(const string16& message); 11972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 12072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen private: 12172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // NotificationObserver: 1223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick virtual void Observe(NotificationType type, 1233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick const NotificationSource& source, 12472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NotificationDetails& details); 1253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 12672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen TabContents* tab_contents_; 1273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick InfoBarDelegate* infobar_delegate_; 1283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NotificationRegistrar registrar_; 1293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick DISALLOW_COPY_AND_ASSIGN(SSLAddCertData); 1313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}; 132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 13372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTabContentsSSLHelper::SSLAddCertData::SSLAddCertData(TabContents* tab_contents) 13472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen : tab_contents_(tab_contents), 13572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen infobar_delegate_(NULL) { 13672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Source<TabContents> source(tab_contents_); 13772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen registrar_.Add(this, NotificationType::TAB_CONTENTS_INFOBAR_REMOVED, source); 13872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen registrar_.Add(this, NotificationType::TAB_CONTENTS_INFOBAR_REPLACED, source); 13972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 14072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 14172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian MonsenTabContentsSSLHelper::SSLAddCertData::~SSLAddCertData() { 14272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 14372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 14472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid TabContentsSSLHelper::SSLAddCertData::ShowInfoBar( 14572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen InfoBarDelegate* delegate) { 14672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (infobar_delegate_) 14772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen tab_contents_->ReplaceInfoBar(infobar_delegate_, delegate); 14872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen else 14972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen tab_contents_->AddInfoBar(delegate); 15072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen infobar_delegate_ = delegate; 15172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 15272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 15372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid TabContentsSSLHelper::SSLAddCertData::ShowErrorInfoBar( 15472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const string16& message) { 15572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ShowInfoBar(new SimpleAlertInfoBarDelegate(tab_contents_, GetCertIcon(), 15672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen message, true)); 15772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 15872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 15972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenvoid TabContentsSSLHelper::SSLAddCertData::Observe( 16072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen NotificationType type, 16172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NotificationSource& source, 16272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen const NotificationDetails& details) { 16372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen typedef std::pair<InfoBarDelegate*, InfoBarDelegate*> InfoBarDelegatePair; 16472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen if (infobar_delegate_ == 16572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ((type.value == NotificationType::TAB_CONTENTS_INFOBAR_REMOVED) ? 16672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Details<InfoBarDelegate>(details).ptr() : 16772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen Details<InfoBarDelegatePair>(details).ptr()->first)) 16872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen infobar_delegate_ = NULL; 16972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen} 17072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 17172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 17272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// TabContentsSSLHelper ------------------------------------------------------- 17372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 174c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTabContentsSSLHelper::TabContentsSSLHelper(TabContents* tab_contents) 175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch : tab_contents_(tab_contents) { 176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 178c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochTabContentsSSLHelper::~TabContentsSSLHelper() { 179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid TabContentsSSLHelper::ShowClientCertificateRequestDialog( 182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch scoped_refptr<SSLClientAuthHandler> handler) { 183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch browser::ShowSSLClientCertificateSelector( 1843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick tab_contents_, handler->cert_request_info(), handler); 1853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid TabContentsSSLHelper::OnVerifyClientCertificateError( 1883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<SSLAddCertHandler> handler, int error_code) { 1893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SSLAddCertData* add_cert_data = GetAddCertData(handler); 1903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Display an infobar with the error message. 1913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // TODO(davidben): Display a more user-friendly error string. 1923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick add_cert_data->ShowErrorInfoBar( 1933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringFUTF16(IDS_ADD_CERT_ERR_INVALID_CERT, 1943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick base::IntToString16(-error_code), 1953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASCIIToUTF16(net::ErrorToString(error_code)))); 1963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 1973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 1983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid TabContentsSSLHelper::AskToAddClientCertificate( 1993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<SSLAddCertHandler> handler) { 2003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick NOTREACHED(); // Not implemented yet. 2013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid TabContentsSSLHelper::OnAddClientCertificateSuccess( 2043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<SSLAddCertHandler> handler) { 2053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SSLAddCertData* add_cert_data = GetAddCertData(handler); 2063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Display an infobar to inform the user. 2073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick add_cert_data->ShowInfoBar( 2083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick new SSLCertAddedInfoBarDelegate(tab_contents_, handler->cert())); 2093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid TabContentsSSLHelper::OnAddClientCertificateError( 2123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<SSLAddCertHandler> handler, int error_code) { 2133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SSLAddCertData* add_cert_data = GetAddCertData(handler); 2143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Display an infobar with the error message. 2153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // TODO(davidben): Display a more user-friendly error string. 2163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick add_cert_data->ShowErrorInfoBar( 2173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick l10n_util::GetStringFUTF16(IDS_ADD_CERT_ERR_FAILED, 2183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick base::IntToString16(-error_code), 2193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick ASCIIToUTF16(net::ErrorToString(error_code)))); 2203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid TabContentsSSLHelper::OnAddClientCertificateFinished( 2233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick scoped_refptr<SSLAddCertHandler> handler) { 2243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Clean up. 2253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick request_id_to_add_cert_data_.erase(handler->network_request_id()); 2263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} 2273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 2283345a6884c488ff3a535c2c9acdd33d74b37e311Iain MerrickTabContentsSSLHelper::SSLAddCertData* TabContentsSSLHelper::GetAddCertData( 2293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick SSLAddCertHandler* handler) { 2303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Find/create the slot. 2313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick linked_ptr<SSLAddCertData>& ptr_ref = 2323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick request_id_to_add_cert_data_[handler->network_request_id()]; 2333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick // Fill it if necessary. 2343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick if (!ptr_ref.get()) 23572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen ptr_ref.reset(new SSLAddCertData(tab_contents_)); 2363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick return ptr_ref.get(); 237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch} 238