// 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