| Index: chrome/browser/gtk/certificate_dialogs.cc
|
| ===================================================================
|
| --- chrome/browser/gtk/certificate_dialogs.cc (revision 71352)
|
| +++ chrome/browser/gtk/certificate_dialogs.cc (working copy)
|
| @@ -1,184 +0,0 @@
|
| -// 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.
|
| -
|
| -// TODO(mattm): this isn't gtk specific, it shouldn't be under the gtk dir
|
| -
|
| -#include "chrome/browser/gtk/certificate_dialogs.h"
|
| -
|
| -
|
| -#include <vector>
|
| -
|
| -#include "app/l10n_util.h"
|
| -#include "base/base64.h"
|
| -#include "base/file_util.h"
|
| -#include "base/logging.h"
|
| -#include "base/scoped_ptr.h"
|
| -#include "base/task.h"
|
| -#include "chrome/browser/browser_thread.h"
|
| -#include "chrome/browser/shell_dialogs.h"
|
| -#include "chrome/common/net/x509_certificate_model.h"
|
| -#include "grit/generated_resources.h"
|
| -
|
| -namespace {
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// General utility functions.
|
| -
|
| -class Writer : public Task {
|
| - public:
|
| - Writer(const FilePath& path, const std::string& data)
|
| - : path_(path), data_(data) {
|
| - }
|
| -
|
| - virtual void Run() {
|
| - int bytes_written = file_util::WriteFile(path_, data_.data(), data_.size());
|
| - if (bytes_written != static_cast<ssize_t>(data_.size())) {
|
| - LOG(ERROR) << "Writing " << path_.value() << " ("
|
| - << data_.size() << "B) returned " << bytes_written;
|
| - }
|
| - }
|
| - private:
|
| - FilePath path_;
|
| - std::string data_;
|
| -};
|
| -
|
| -void WriteFileOnFileThread(const FilePath& path, const std::string& data) {
|
| - BrowserThread::PostTask(
|
| - BrowserThread::FILE, FROM_HERE, new Writer(path, data));
|
| -}
|
| -
|
| -std::string WrapAt64(const std::string &str) {
|
| - std::string result;
|
| - for (size_t i = 0; i < str.size(); i += 64) {
|
| - result.append(str, i, 64); // Append clamps the len arg internally.
|
| - result.append("\r\n");
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -std::string GetBase64String(net::X509Certificate::OSCertHandle cert) {
|
| - std::string base64;
|
| - if (!base::Base64Encode(
|
| - x509_certificate_model::GetDerString(cert), &base64)) {
|
| - LOG(ERROR) << "base64 encoding error";
|
| - return "";
|
| - }
|
| - return "-----BEGIN CERTIFICATE-----\r\n" +
|
| - WrapAt64(base64) +
|
| - "-----END CERTIFICATE-----\r\n";
|
| -}
|
| -
|
| -////////////////////////////////////////////////////////////////////////////////
|
| -// General utility functions.
|
| -
|
| -class Exporter : public SelectFileDialog::Listener {
|
| - public:
|
| - Exporter(gfx::NativeWindow parent, net::X509Certificate::OSCertHandle cert);
|
| - ~Exporter();
|
| -
|
| - // SelectFileDialog::Listener implemenation.
|
| - virtual void FileSelected(const FilePath& path,
|
| - int index, void* params);
|
| - virtual void FileSelectionCanceled(void* params);
|
| - private:
|
| - scoped_refptr<SelectFileDialog> select_file_dialog_;
|
| -
|
| - // The certificate hierarchy (leaf cert first).
|
| - net::X509Certificate::OSCertHandles cert_chain_list_;
|
| -};
|
| -
|
| -Exporter::Exporter(gfx::NativeWindow parent,
|
| - net::X509Certificate::OSCertHandle cert)
|
| - : select_file_dialog_(SelectFileDialog::Create(this)) {
|
| - x509_certificate_model::GetCertChainFromCert(cert, &cert_chain_list_);
|
| -
|
| - // TODO(mattm): should this default to some directory?
|
| - // Maybe SavePackage::GetSaveDirPreference? (Except that it's private.)
|
| - FilePath suggested_path("certificate");
|
| - std::string cert_title = x509_certificate_model::GetTitle(cert);
|
| - if (!cert_title.empty())
|
| - suggested_path = FilePath(cert_title);
|
| -
|
| - ShowCertSelectFileDialog(select_file_dialog_.get(),
|
| - SelectFileDialog::SELECT_SAVEAS_FILE,
|
| - suggested_path,
|
| - parent,
|
| - NULL);
|
| -}
|
| -
|
| -Exporter::~Exporter() {
|
| - x509_certificate_model::DestroyCertChain(&cert_chain_list_);
|
| -}
|
| -
|
| -void Exporter::FileSelected(const FilePath& path, int index, void* params) {
|
| - std::string data;
|
| - switch (index) {
|
| - case 2:
|
| - for (size_t i = 0; i < cert_chain_list_.size(); ++i)
|
| - data += GetBase64String(cert_chain_list_[i]);
|
| - break;
|
| - case 3:
|
| - data = x509_certificate_model::GetDerString(cert_chain_list_[0]);
|
| - break;
|
| - case 4:
|
| - data = x509_certificate_model::GetCMSString(cert_chain_list_, 0, 1);
|
| - break;
|
| - case 5:
|
| - data = x509_certificate_model::GetCMSString(
|
| - cert_chain_list_, 0, cert_chain_list_.size());
|
| - break;
|
| - case 1:
|
| - default:
|
| - data = GetBase64String(cert_chain_list_[0]);
|
| - break;
|
| - }
|
| -
|
| - if (!data.empty())
|
| - WriteFileOnFileThread(path, data);
|
| -
|
| - delete this;
|
| -}
|
| -
|
| -void Exporter::FileSelectionCanceled(void* params) {
|
| - delete this;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -void ShowCertSelectFileDialog(SelectFileDialog* select_file_dialog,
|
| - SelectFileDialog::Type type,
|
| - const FilePath& suggested_path,
|
| - gfx::NativeWindow parent,
|
| - void* params) {
|
| - SelectFileDialog::FileTypeInfo file_type_info;
|
| - file_type_info.extensions.resize(5);
|
| - file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("pem"));
|
| - file_type_info.extensions[0].push_back(FILE_PATH_LITERAL("crt"));
|
| - file_type_info.extension_description_overrides.push_back(
|
| - l10n_util::GetStringUTF16(IDS_CERT_EXPORT_TYPE_BASE64));
|
| - file_type_info.extensions[1].push_back(FILE_PATH_LITERAL("pem"));
|
| - file_type_info.extensions[1].push_back(FILE_PATH_LITERAL("crt"));
|
| - file_type_info.extension_description_overrides.push_back(
|
| - l10n_util::GetStringUTF16(IDS_CERT_EXPORT_TYPE_BASE64_CHAIN));
|
| - file_type_info.extensions[2].push_back(FILE_PATH_LITERAL("der"));
|
| - file_type_info.extension_description_overrides.push_back(
|
| - l10n_util::GetStringUTF16(IDS_CERT_EXPORT_TYPE_DER));
|
| - file_type_info.extensions[3].push_back(FILE_PATH_LITERAL("p7c"));
|
| - file_type_info.extension_description_overrides.push_back(
|
| - l10n_util::GetStringUTF16(IDS_CERT_EXPORT_TYPE_PKCS7));
|
| - file_type_info.extensions[4].push_back(FILE_PATH_LITERAL("p7c"));
|
| - file_type_info.extension_description_overrides.push_back(
|
| - l10n_util::GetStringUTF16(IDS_CERT_EXPORT_TYPE_PKCS7_CHAIN));
|
| - file_type_info.include_all_files = true;
|
| - select_file_dialog->SelectFile(
|
| - type, string16(),
|
| - suggested_path, &file_type_info, 1,
|
| - FILE_PATH_LITERAL("crt"), parent,
|
| - params);
|
| -}
|
| -
|
| -void ShowCertExportDialog(gfx::NativeWindow parent,
|
| - net::X509Certificate::OSCertHandle cert) {
|
| - new Exporter(parent, cert);
|
| -}
|
|
|