blob: e1f5b729b4694875cbbad7aafc320075cbae37b2 [file] [log] [blame]
// Copyright 2015 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/ui/views/platform_keys_certificate_selector_chromeos.h"
#include <stddef.h>
#include <utility>
#include "base/callback_helpers.h"
#include "base/memory/ref_counted.h"
#include "base/strings/string16.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/font.h"
#include "ui/views/controls/styled_label.h"
namespace chromeos {
PlatformKeysCertificateSelector::PlatformKeysCertificateSelector(
const net::CertificateList& certificates,
const std::string& extension_name,
const CertificateSelectedCallback& callback,
content::WebContents* web_contents)
: CertificateSelector(certificates, web_contents),
extension_name_(extension_name),
callback_(callback) {
DCHECK(!callback_.is_null());
}
PlatformKeysCertificateSelector::~PlatformKeysCertificateSelector() {
// Ensure to call back even if the dialog was closed because of the views
// hierarchy being destroyed.
if (!callback_.is_null())
base::ResetAndReturn(&callback_).Run(nullptr);
}
void PlatformKeysCertificateSelector::Init() {
const base::string16 name = base::ASCIIToUTF16(extension_name_);
size_t offset;
const base::string16 text = l10n_util::GetStringFUTF16(
IDS_PLATFORM_KEYS_SELECT_CERT_DIALOG_TEXT, name, &offset);
scoped_ptr<views::StyledLabel> label(
new views::StyledLabel(text, nullptr /* no listener */));
views::StyledLabel::RangeStyleInfo bold_style;
bold_style.font_style = gfx::Font::BOLD;
label->AddStyleRange(gfx::Range(offset, offset + name.size()), bold_style);
CertificateSelector::InitWithText(std::move(label));
}
bool PlatformKeysCertificateSelector::Cancel() {
DCHECK(!callback_.is_null());
base::ResetAndReturn(&callback_).Run(nullptr);
return true;
}
bool PlatformKeysCertificateSelector::Accept() {
DCHECK(!callback_.is_null());
scoped_refptr<net::X509Certificate> cert = GetSelectedCert();
if (!cert)
return false;
base::ResetAndReturn(&callback_).Run(cert);
return true;
}
void ShowPlatformKeysCertificateSelector(
content::WebContents* web_contents,
const std::string& extension_name,
const net::CertificateList& certificates,
const base::Callback<void(const scoped_refptr<net::X509Certificate>&)>&
callback) {
PlatformKeysCertificateSelector* selector =
new PlatformKeysCertificateSelector(certificates, extension_name,
callback, web_contents);
selector->Init();
selector->Show();
}
} // namespace chromeos