Index: chrome/browser/ssl/ssl_add_cert_handler.cc |
diff --git a/chrome/browser/ssl/ssl_add_cert_handler.cc b/chrome/browser/ssl/ssl_add_cert_handler.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8c75d7d36b980e9bbab3b2735f04988aa9750663 |
--- /dev/null |
+++ b/chrome/browser/ssl/ssl_add_cert_handler.cc |
@@ -0,0 +1,69 @@ |
+// Copyright (c) 2010 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. |
+ |
+#include "chrome/browser/ssl/ssl_add_cert_handler.h" |
+ |
+#include "app/l10n_util.h" |
+#include "chrome/browser/browser_list.h" |
+#include "chrome/browser/browser.h" |
+#include "chrome/browser/browser_window.h" |
+#include "chrome/browser/chrome_thread.h" |
+#include "chrome/common/platform_util.h" |
+#include "grit/generated_resources.h" |
+#include "net/base/cert_database.h" |
+#include "net/base/net_errors.h" |
+#include "net/base/x509_certificate.h" |
+#include "net/url_request/url_request.h" |
+ |
+SSLAddCertHandler::SSLAddCertHandler(URLRequest* request, |
+ net::X509Certificate* cert) |
+ : cert_(cert) { |
+ // Stay alive until the UI completes and Finished() is called. |
+ AddRef(); |
+ ChromeThread::PostTask( |
+ ChromeThread::UI, FROM_HERE, |
+ NewRunnableMethod(this, &SSLAddCertHandler::RunUI)); |
+} |
+ |
+void SSLAddCertHandler::RunUI() { |
+ int cert_error; |
+ { |
+ net::CertDatabase db; |
+ cert_error = db.CheckUserCert(cert_); |
+ } |
+ if (cert_error != net::OK) { |
+ // TODO(snej): Map cert_error to a more specific error message. |
+ ShowError(l10n_util::GetStringUTF16(IDS_ADD_CERT_ERR_INVALID_CERT)); |
+ Finished(false); |
+ return; |
+ } |
+ AskToAddCert(); |
+} |
+ |
+#if !defined(OS_MACOSX) |
+void SSLAddCertHandler::AskToAddCert() { |
+ // TODO(snej): Someone should add Windows and GTK implementations with UI. |
+ Finished(true); |
+} |
+#endif |
+ |
+void SSLAddCertHandler::Finished(bool add_cert) { |
+ if (add_cert) { |
+ net::CertDatabase db; |
+ int cert_error = db.AddUserCert(cert_); |
+ if (cert_error != net::OK) { |
+ // TODO(snej): Map cert_error to a more specific error message. |
+ ShowError(l10n_util::GetStringUTF16(IDS_ADD_CERT_ERR_FAILED)); |
+ } |
+ } |
+ Release(); |
+} |
+ |
+void SSLAddCertHandler::ShowError(const string16& error) { |
+ Browser* browser = BrowserList::GetLastActive(); |
+ platform_util::SimpleErrorBox( |
+ browser ? browser->window()->GetNativeHandle() : NULL, |
+ l10n_util::GetStringUTF16(IDS_ADD_CERT_FAILURE_TITLE), |
+ error); |
+} |