From c433f18f2cd98afd02169363614cb49d5eae4aba Mon Sep 17 00:00:00 2001 From: "oshima@google.com" Date: Fri, 4 Nov 2011 21:22:24 +0000 Subject: Enable CertificateViewer Use ConstrainedWindow for CertificateViewer Renamed webui/certificate_viwer.cc|h to webui/certificate_viewer_webui.cc to avoid conflict with chrome/browser/certificate_viewer.cc BUG=97841 TEST=none Review URL: http://codereview.chromium.org/8351075 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@108715 0039d316-1c4b-4281-b951-d872f2087c98 --- chrome/browser/ui/constrained_window.cc | 15 + chrome/browser/ui/constrained_window.h | 6 +- .../ui/views/constrained_html_delegate_views.cc | 5 +- .../browser/ui/views/constrained_window_views.cc | 4 + chrome/browser/ui/views/constrained_window_views.h | 1 + chrome/browser/ui/views/stubs_aura.cc | 6 +- chrome/browser/ui/webui/certificate_viewer.cc | 406 -------------------- chrome/browser/ui/webui/certificate_viewer.h | 106 ------ .../browser/ui/webui/certificate_viewer_webui.cc | 423 +++++++++++++++++++++ chrome/browser/ui/webui/certificate_viewer_webui.h | 106 ++++++ .../ui/webui/html_dialog_tab_contents_delegate.cc | 3 +- .../ui/webui/html_dialog_tab_contents_delegate.h | 6 +- .../html_dialog_tab_contents_delegate_unittest.cc | 2 +- chrome/chrome_browser.gypi | 13 +- 14 files changed, 576 insertions(+), 526 deletions(-) create mode 100644 chrome/browser/ui/constrained_window.cc delete mode 100644 chrome/browser/ui/webui/certificate_viewer.cc delete mode 100644 chrome/browser/ui/webui/certificate_viewer.h create mode 100644 chrome/browser/ui/webui/certificate_viewer_webui.cc create mode 100644 chrome/browser/ui/webui/certificate_viewer_webui.h diff --git a/chrome/browser/ui/constrained_window.cc b/chrome/browser/ui/constrained_window.cc new file mode 100644 index 0000000..d00c070 --- /dev/null +++ b/chrome/browser/ui/constrained_window.cc @@ -0,0 +1,15 @@ +// Copyright (c) 2011 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/constrained_window.h" + +#include "base/logging.h" + +void ConstrainedWindow::FocusConstrainedWindow() { +} + +gfx::NativeWindow ConstrainedWindow::GetNativeWindow() { + NOTREACHED(); + return NULL; +} diff --git a/chrome/browser/ui/constrained_window.h b/chrome/browser/ui/constrained_window.h index 77e13ac..c3bdf25 100644 --- a/chrome/browser/ui/constrained_window.h +++ b/chrome/browser/ui/constrained_window.h @@ -7,6 +7,7 @@ #pragma once #include "build/build_config.h" +#include "ui/gfx/native_widget_types.h" /////////////////////////////////////////////////////////////////////////////// // ConstrainedWindow @@ -24,7 +25,10 @@ class ConstrainedWindow { virtual void CloseConstrainedWindow() = 0; // Sets focus on the Constrained Window. - virtual void FocusConstrainedWindow() {} + virtual void FocusConstrainedWindow(); + + // Returns the native window of the constrained window. + virtual gfx::NativeWindow GetNativeWindow(); protected: virtual ~ConstrainedWindow() {} diff --git a/chrome/browser/ui/views/constrained_html_delegate_views.cc b/chrome/browser/ui/views/constrained_html_delegate_views.cc index 0f56930..2797243 100644 --- a/chrome/browser/ui/views/constrained_html_delegate_views.cc +++ b/chrome/browser/ui/views/constrained_html_delegate_views.cc @@ -41,7 +41,7 @@ class ConstrainedHtmlDelegateViews : public TabContentsContainer, } virtual void WindowClosing() OVERRIDE { if (!closed_via_webui_) - html_delegate_->OnDialogClosed(""); + html_delegate_->OnDialogClosed(std::string()); } virtual views::Widget* GetWidget() OVERRIDE { return View::GetWidget(); @@ -56,6 +56,9 @@ class ConstrainedHtmlDelegateViews : public TabContentsContainer, // HtmlDialogTabContentsDelegate interface. void HandleKeyboardEvent(const NativeWebKeyboardEvent& event) OVERRIDE {} + virtual void CloseContents(TabContents* source) OVERRIDE { + window_->CloseConstrainedWindow(); + } // Overridden from TabContentsContainer. virtual gfx::Size GetPreferredSize() OVERRIDE { diff --git a/chrome/browser/ui/views/constrained_window_views.cc b/chrome/browser/ui/views/constrained_window_views.cc index 2af44a8..0e69865 100644 --- a/chrome/browser/ui/views/constrained_window_views.cc +++ b/chrome/browser/ui/views/constrained_window_views.cc @@ -644,6 +644,10 @@ void ConstrainedWindowViews::FocusConstrainedWindow() { } } +gfx::NativeView ConstrainedWindowViews::GetNativeWindow() { + return Widget::GetNativeWindow(); +} + //////////////////////////////////////////////////////////////////////////////// // ConstrainedWindowViews, views::Window overrides: diff --git a/chrome/browser/ui/views/constrained_window_views.h b/chrome/browser/ui/views/constrained_window_views.h index 9c5fbc1..fd3583f 100644 --- a/chrome/browser/ui/views/constrained_window_views.h +++ b/chrome/browser/ui/views/constrained_window_views.h @@ -69,6 +69,7 @@ class ConstrainedWindowViews : public views::Widget, virtual void ShowConstrainedWindow() OVERRIDE; virtual void CloseConstrainedWindow() OVERRIDE; virtual void FocusConstrainedWindow() OVERRIDE; + virtual gfx::NativeWindow GetNativeWindow() OVERRIDE; private: // Overridden from views::Widget: diff --git a/chrome/browser/ui/views/stubs_aura.cc b/chrome/browser/ui/views/stubs_aura.cc index f7d270f..037617f 100644 --- a/chrome/browser/ui/views/stubs_aura.cc +++ b/chrome/browser/ui/views/stubs_aura.cc @@ -88,12 +88,12 @@ void ShowCryptoModulePasswordDialog( } // namespace browser - +#if defined(OS_WIN) void ShowCertificateViewer(gfx::NativeWindow parent, net::X509Certificate* cert) { - // TODO(beng); - NOTIMPLEMENTED(); + // No certificate viewer on Windows. } +#endif // static FirstRunBubble* FirstRunBubble::Show( diff --git a/chrome/browser/ui/webui/certificate_viewer.cc b/chrome/browser/ui/webui/certificate_viewer.cc deleted file mode 100644 index 8e012ff..0000000 --- a/chrome/browser/ui/webui/certificate_viewer.cc +++ /dev/null @@ -1,406 +0,0 @@ -// Copyright (c) 2011 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 "base/bind.h" -#include "base/bind_helpers.h" -#include "base/i18n/time_formatting.h" -#include "base/utf_string_conversions.h" -#include "base/string_number_conversions.h" -#include "chrome/browser/certificate_viewer.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/browser_dialogs.h" -#include "chrome/browser/ui/browser_list.h" -#include "chrome/browser/ui/gtk/certificate_dialogs.h" -#include "chrome/browser/ui/webui/certificate_viewer.h" -#include "chrome/browser/ui/webui/chrome_web_ui.h" -#include "chrome/common/net/x509_certificate_model.h" -#include "chrome/common/url_constants.h" -#include "content/browser/tab_contents/tab_contents.h" -#include "ui/base/l10n/l10n_util.h" -#include "grit/generated_resources.h" - -namespace { - -// Default width/height of the dialog. -const int kDefaultWidth = 530; -const int kDefaultHeight = 600; - -} // namespace - -// Shows a certificate using the native or WebUI certificate viewer on -// platforms where we supply our own (Mac and Windows have one built into the -// OS we use instead). -void ShowCertificateViewer(gfx::NativeWindow parent, - net::X509Certificate* cert) { -#if defined(USE_AURA) || defined(OS_CHROMEOS) - CertificateViewerDialog::ShowDialog(parent, cert); -#else - // TODO(rbyers): Decide whether to replace the GTK certificate viewier on - // Linux with the WebUI version, and (either way) remove this IsMoreWebUI - // check. - if (ChromeWebUI::IsMoreWebUI()) - CertificateViewerDialog::ShowDialog(parent, cert); - else - ShowNativeCertificateViewer(parent, cert); -#endif -} - -//////////////////////////////////////////////////////////////////////////////// -// CertificateViewerDialog - -void CertificateViewerDialog::ShowDialog(gfx::NativeWindow parent, - net::X509Certificate* cert) { - CertificateViewerDialog* dialog = new CertificateViewerDialog(cert); - dialog->Show(parent); -} - -CertificateViewerDialog::CertificateViewerDialog(net::X509Certificate* cert) - : cert_(cert), window_(NULL) { - // Construct the dialog title from the certificate. - net::X509Certificate::OSCertHandles cert_chain; - x509_certificate_model::GetCertChainFromCert(cert_->os_cert_handle(), - &cert_chain); - title_ = l10n_util::GetStringFUTF16(IDS_CERT_INFO_DIALOG_TITLE, - UTF8ToUTF16(x509_certificate_model::GetTitle(cert_chain.front()))); -} - -CertificateViewerDialog::~CertificateViewerDialog() { -} - -void CertificateViewerDialog::Show(gfx::NativeWindow parent) { - Browser* browser = BrowserList::GetLastActive(); - DCHECK(browser); - window_ = browser->BrowserShowHtmlDialog(this, parent); -} - -bool CertificateViewerDialog::IsDialogModal() const { - return false; -} - -string16 CertificateViewerDialog::GetDialogTitle() const { - return title_; -} - -GURL CertificateViewerDialog::GetDialogContentURL() const { - return GURL(chrome::kChromeUICertificateViewerURL); -} - -void CertificateViewerDialog::GetWebUIMessageHandlers( - std::vector* handlers) const { - handlers->push_back(new CertificateViewerDialogHandler(window_, cert_)); -} - -void CertificateViewerDialog::GetDialogSize(gfx::Size* size) const { - size->SetSize(kDefaultWidth, kDefaultHeight); -} - -std::string CertificateViewerDialog::GetDialogArgs() const { - return std::string(); -} - -void CertificateViewerDialog::OnDialogClosed(const std::string& json_retval) { - delete this; -} - -void CertificateViewerDialog::OnCloseContents(TabContents* source, - bool* out_close_dialog) { - if (out_close_dialog) - *out_close_dialog = true; -} - -bool CertificateViewerDialog::ShouldShowDialogTitle() const { - return true; -} - -bool CertificateViewerDialog::HandleContextMenu( - const ContextMenuParams& params) { - return true; -} - -//////////////////////////////////////////////////////////////////////////////// -// CertificateViewerDialogHandler - -CertificateViewerDialogHandler::CertificateViewerDialogHandler( - gfx::NativeWindow window, - net::X509Certificate* cert) : cert_(cert), window_(window) { - x509_certificate_model::GetCertChainFromCert(cert_->os_cert_handle(), - &cert_chain_); -} - -CertificateViewerDialogHandler::~CertificateViewerDialogHandler() { -} - -void CertificateViewerDialogHandler::RegisterMessages() { - web_ui_->RegisterMessageCallback("exportCertificate", - base::Bind(&CertificateViewerDialogHandler::ExportCertificate, - base::Unretained(this))); - web_ui_->RegisterMessageCallback("requestCertificateInfo", - base::Bind(&CertificateViewerDialogHandler::RequestCertificateInfo, - base::Unretained(this))); - web_ui_->RegisterMessageCallback("requestCertificateFields", - base::Bind(&CertificateViewerDialogHandler::RequestCertificateFields, - base::Unretained(this))); -} - -void CertificateViewerDialogHandler::ExportCertificate( - const base::ListValue* args) { - int cert_index; - double val; - if (!(args->GetDouble(0, &val))) - return; - cert_index = (int)val; - if (cert_index < 0 || cert_index >= (int)cert_chain_.size()) - return; - - ShowCertExportDialog(web_ui_->tab_contents(), - window_, - cert_chain_[cert_index]); -} - -void CertificateViewerDialogHandler::RequestCertificateInfo( - const base::ListValue* args) { - // Certificate information. The keys in this dictionary's general key - // correspond to the IDs in the Html page. - DictionaryValue cert_info; - net::X509Certificate::OSCertHandle cert_hnd = cert_->os_cert_handle(); - - // Get the certificate chain. - net::X509Certificate::OSCertHandles cert_chain; - x509_certificate_model::GetCertChainFromCert(cert_hnd, &cert_chain); - - // Certificate usage. - std::vector usages; - x509_certificate_model::GetUsageStrings(cert_hnd, &usages); - std::string usagestr; - for (std::vector::iterator it = usages.begin(); - it != usages.end(); ++it) { - if (usagestr.length() > 0) { - usagestr += "\n"; - } - usagestr += *it; - } - cert_info.SetString("general.usages", usagestr); - - // Standard certificate details. - const std::string alternative_text = - l10n_util::GetStringUTF8(IDS_CERT_INFO_FIELD_NOT_PRESENT); - cert_info.SetString("general.title", l10n_util::GetStringFUTF8( - IDS_CERT_INFO_DIALOG_TITLE, UTF8ToUTF16(x509_certificate_model::GetTitle( - cert_chain.front())))); - - // Issued to information. - cert_info.SetString("general.issued-cn", - x509_certificate_model::GetSubjectCommonName(cert_hnd, alternative_text)); - cert_info.SetString("general.issued-o", - x509_certificate_model::GetSubjectOrgName(cert_hnd, alternative_text)); - cert_info.SetString("general.issued-ou", - x509_certificate_model::GetSubjectOrgUnitName(cert_hnd, - alternative_text)); - cert_info.SetString("general.issued-sn", - x509_certificate_model::GetSerialNumberHexified(cert_hnd, - alternative_text)); - - // Issuer information. - cert_info.SetString("general.issuer-cn", - x509_certificate_model::GetIssuerCommonName(cert_hnd, alternative_text)); - cert_info.SetString("general.issuer-o", - x509_certificate_model::GetIssuerOrgName(cert_hnd, alternative_text)); - cert_info.SetString("general.issuer-ou", - x509_certificate_model::GetIssuerOrgUnitName(cert_hnd, alternative_text)); - - // Validity period. - base::Time issued, expires; - std::string issued_str, expires_str; - if (x509_certificate_model::GetTimes(cert_hnd, &issued, &expires)) { - issued_str = UTF16ToUTF8( - base::TimeFormatShortDateNumeric(issued)); - expires_str = UTF16ToUTF8( - base::TimeFormatShortDateNumeric(expires)); - } else { - issued_str = alternative_text; - expires_str = alternative_text; - } - cert_info.SetString("general.issue-date", issued_str); - cert_info.SetString("general.expiry-date", expires_str); - - cert_info.SetString("general.sha256", - x509_certificate_model::HashCertSHA256(cert_hnd)); - cert_info.SetString("general.sha1", - x509_certificate_model::HashCertSHA1(cert_hnd)); - - // Certificate hierarchy is constructed from bottom up. - ListValue* children = NULL; - int index = 0; - for (net::X509Certificate::OSCertHandles::const_iterator i = - cert_chain.begin(); i != cert_chain.end(); ++i, ++index) { - DictionaryValue* cert_node = new DictionaryValue(); - ListValue cert_details; - cert_node->SetString("label", x509_certificate_model::GetTitle(*i).c_str()); - cert_node->SetDouble("payload.index", index); - // Add the child from the previous iteration. - if (children) - cert_node->Set("children", children); - - // Add this node to the children list for the next iteration. - children = new ListValue(); - children->Append(cert_node); - } - // Set the last node as the top of the certificate hierarchy. - cert_info.Set("hierarchy", children); - - // Send certificate information to javascript. - web_ui_->CallJavascriptFunction("cert_viewer.getCertificateInfo", cert_info); -} - -void CertificateViewerDialogHandler::RequestCertificateFields( - const base::ListValue* args) { - int cert_index; - double val; - if (!(args->GetDouble(0, &val))) - return; - cert_index = (int)val; - if (cert_index < 0 || cert_index >= (int)cert_chain_.size()) - return; - net::X509Certificate::OSCertHandle cert = cert_chain_[cert_index]; - - ListValue root_list; - DictionaryValue* node_details; - DictionaryValue* alt_node_details; - ListValue* cert_sub_fields; - root_list.Append(node_details = new DictionaryValue()); - node_details->SetString("label", x509_certificate_model::GetTitle(cert)); - - ListValue* cert_fields; - node_details->Set("children", cert_fields = new ListValue()); - cert_fields->Append(node_details = new DictionaryValue()); - - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE)); - node_details->Set("children", cert_fields = new ListValue()); - - // Main certificate fields. - cert_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_VERSION)); - std::string version = x509_certificate_model::GetVersion(cert); - if (!version.empty()) - node_details->SetString("payload.val", - l10n_util::GetStringFUTF8(IDS_CERT_DETAILS_VERSION_FORMAT, - UTF8ToUTF16(version))); - - cert_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SERIAL_NUMBER)); - node_details->SetString("payload.val", - x509_certificate_model::GetSerialNumberHexified(cert, - l10n_util::GetStringUTF8(IDS_CERT_INFO_FIELD_NOT_PRESENT))); - - cert_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE_SIG_ALG)); - node_details->SetString("payload.val", - x509_certificate_model::ProcessSecAlgorithmSignature(cert)); - - cert_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_ISSUER)); - node_details->SetString("payload.val", - x509_certificate_model::GetIssuerName(cert)); - - // Validity period. - cert_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_VALIDITY)); - - node_details->Set("children", cert_sub_fields = new ListValue()); - cert_sub_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_NOT_BEFORE)); - cert_sub_fields->Append(alt_node_details = new DictionaryValue()); - alt_node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_NOT_AFTER)); - base::Time issued, expires; - if (x509_certificate_model::GetTimes(cert, &issued, &expires)) { - node_details->SetString("payload.val", - UTF16ToUTF8(base::TimeFormatShortDateAndTime(issued))); - alt_node_details->SetString("payload.val", - UTF16ToUTF8(base::TimeFormatShortDateAndTime(expires))); - } - - cert_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT)); - node_details->SetString("payload.val", - x509_certificate_model::GetSubjectName(cert)); - - // Subject key information. - cert_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY_INFO)); - - node_details->Set("children", cert_sub_fields = new ListValue()); - cert_sub_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY_ALG)); - node_details->SetString("payload.val", - x509_certificate_model::ProcessSecAlgorithmSubjectPublicKey(cert)); - cert_sub_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY)); - node_details->SetString("payload.val", - x509_certificate_model::ProcessSubjectPublicKeyInfo(cert)); - - // Extensions. - x509_certificate_model::Extensions extensions; - x509_certificate_model::GetExtensions( - l10n_util::GetStringUTF8(IDS_CERT_EXTENSION_CRITICAL), - l10n_util::GetStringUTF8(IDS_CERT_EXTENSION_NON_CRITICAL), - cert, &extensions); - - if (!extensions.empty()) { - cert_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_EXTENSIONS)); - - node_details->Set("children", cert_sub_fields = new ListValue()); - for (x509_certificate_model::Extensions::const_iterator i = - extensions.begin(); i != extensions.end(); ++i) { - cert_sub_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", i->name); - node_details->SetString("payload.val", i->value); - } - } - - cert_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE_SIG_ALG)); - node_details->SetString("payload.val", - x509_certificate_model::ProcessSecAlgorithmSignatureWrap(cert)); - - cert_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE_SIG_VALUE)); - node_details->SetString("payload.val", - x509_certificate_model::ProcessRawBitsSignatureWrap(cert)); - - cert_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_INFO_FINGERPRINTS_GROUP)); - node_details->Set("children", cert_sub_fields = new ListValue()); - - cert_sub_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_INFO_SHA256_FINGERPRINT_LABEL)); - node_details->SetString("payload.val", - x509_certificate_model::HashCertSHA256(cert)); - cert_sub_fields->Append(node_details = new DictionaryValue()); - node_details->SetString("label", - l10n_util::GetStringUTF8(IDS_CERT_INFO_SHA1_FINGERPRINT_LABEL)); - node_details->SetString("payload.val", - x509_certificate_model::HashCertSHA1(cert)); - - // Send certificate information to javascript. - web_ui_->CallJavascriptFunction("cert_viewer.getCertificateFields", - root_list); -} diff --git a/chrome/browser/ui/webui/certificate_viewer.h b/chrome/browser/ui/webui/certificate_viewer.h deleted file mode 100644 index 93566e0..0000000 --- a/chrome/browser/ui/webui/certificate_viewer.h +++ /dev/null @@ -1,106 +0,0 @@ -// Copyright (c) 2011 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. - -#ifndef CHROME_BROWSER_UI_WEBUI_CERTIFICATE_VIEWER_H_ -#define CHROME_BROWSER_UI_WEBUI_CERTIFICATE_VIEWER_H_ -#pragma once - -#include "base/values.h" -#include "chrome/browser/ui/webui/html_dialog_ui.h" -#include "net/base/x509_certificate.h" -#include "ui/gfx/native_widget_types.h" - -// Displays the native or WebUI certificate viewer dialog for the given -// certificate. -void ShowCertificateViewer(gfx::NativeWindow parent, - net::X509Certificate*); - -// Dialog for displaying detailed certificate information. This is used in linux -// and chromeos builds to display detailed information in a floating dialog when -// the user clicks on "Certificate Information" from the lock icon of a web site -// or "View" from the Certificate Manager. -class CertificateViewerDialog : private HtmlDialogUIDelegate { - public: - // Shows the certificate viewer dialog for the passed in certificate. - static void ShowDialog(gfx::NativeWindow parent, - net::X509Certificate* cert); - virtual ~CertificateViewerDialog(); - - private: - // Construct a certificate viewer for the passed in certificate. A reference - // to the certificate pointer is added for the lifetime of the certificate - // viewer. - explicit CertificateViewerDialog(net::X509Certificate* cert); - - // Show the dialog using the given parent window. - void Show(gfx::NativeWindow parent); - - // Overridden from HtmlDialogUI::Delegate: - virtual bool IsDialogModal() const OVERRIDE; - virtual string16 GetDialogTitle() const OVERRIDE; - virtual GURL GetDialogContentURL() const OVERRIDE; - virtual void GetWebUIMessageHandlers( - std::vector* handlers) const OVERRIDE; - virtual void GetDialogSize(gfx::Size* size) const OVERRIDE; - virtual std::string GetDialogArgs() const OVERRIDE; - virtual void OnDialogClosed(const std::string& json_retval) OVERRIDE; - virtual void OnCloseContents( - TabContents* source, bool* out_close_dialog) OVERRIDE; - virtual bool ShouldShowDialogTitle() const OVERRIDE; - virtual bool HandleContextMenu(const ContextMenuParams& params) OVERRIDE; - - // The certificate being viewed. - scoped_refptr cert_; - - // The window displaying this dialog. - gfx::NativeWindow window_; - - // The title of the certificate viewer dialog, Certificate Viewer: CN. - string16 title_; - - DISALLOW_COPY_AND_ASSIGN(CertificateViewerDialog); -}; - -// Dialog handler which handles calls from the JS WebUI code to view certificate -// details and export the certificate. -class CertificateViewerDialogHandler : public WebUIMessageHandler { - public: - CertificateViewerDialogHandler(gfx::NativeWindow window, - net::X509Certificate* cert); - virtual ~CertificateViewerDialogHandler(); - - // Overridden from WebUIMessageHandler - virtual void RegisterMessages(); - - private: - // Brings up the export certificate dialog for the chosen certificate in the - // chain. - // - // The input is an integer index to the certificate in the chain to export. - void ExportCertificate(const base::ListValue* args); - - // Gets the details for a specific certificate in the certificate chain. Calls - // the javascript function cert_viewer.getCertificateFields with a tree - // structure containing the fields and values for certain nodes. - // - // The input is an integer index to the certificate in the chain to view. - void RequestCertificateFields(const base::ListValue* args); - - // Extracts the certificate details and returns them to the javascript - // function cert_viewer.getCertificateInfo in a dictionary structure. - void RequestCertificateInfo(const base::ListValue* args); - - // The certificate being viewed. - scoped_refptr cert_; - - // The dialog window. - gfx::NativeWindow window_; - - // The certificate chain. - net::X509Certificate::OSCertHandles cert_chain_; - - DISALLOW_COPY_AND_ASSIGN(CertificateViewerDialogHandler); -}; - -#endif // CHROME_BROWSER_UI_WEBUI_CERTIFICATE_VIEWER_H_ diff --git a/chrome/browser/ui/webui/certificate_viewer_webui.cc b/chrome/browser/ui/webui/certificate_viewer_webui.cc new file mode 100644 index 0000000..f17a4fe --- /dev/null +++ b/chrome/browser/ui/webui/certificate_viewer_webui.cc @@ -0,0 +1,423 @@ +// Copyright (c) 2011 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/webui/certificate_viewer_webui.h" + +#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/i18n/time_formatting.h" +#include "base/utf_string_conversions.h" +#include "base/string_number_conversions.h" +#include "chrome/browser/certificate_viewer.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_dialogs.h" +#include "chrome/browser/ui/browser_list.h" +#include "chrome/browser/ui/gtk/certificate_dialogs.h" +#include "chrome/browser/ui/webui/chrome_web_ui.h" +#include "chrome/common/net/x509_certificate_model.h" +#include "chrome/common/url_constants.h" +#include "content/browser/tab_contents/tab_contents.h" +#include "ui/base/l10n/l10n_util.h" +#include "grit/generated_resources.h" + +#if defined(USE_AURA) +#include "chrome/browser/ui/constrained_window.h" +#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" +#include "chrome/browser/ui/webui/constrained_html_ui.h" +#endif + +namespace { + +// Default width/height of the dialog. +const int kDefaultWidth = 530; +const int kDefaultHeight = 600; + +} // namespace + +// Shows a certificate using the native or WebUI certificate viewer on +// platforms where we supply our own (Mac and Windows have one built into the +// OS we use instead). +void ShowCertificateViewer(gfx::NativeWindow parent, + net::X509Certificate* cert) { +#if defined(USE_AURA) || defined(OS_CHROMEOS) + CertificateViewerDialog::ShowDialog(parent, cert); +#else + // TODO(rbyers): Decide whether to replace the GTK certificate viewier on + // Linux with the WebUI version, and (either way) remove this IsMoreWebUI + // check. + if (ChromeWebUI::IsMoreWebUI()) + CertificateViewerDialog::ShowDialog(parent, cert); + else + ShowNativeCertificateViewer(parent, cert); +#endif +} + +//////////////////////////////////////////////////////////////////////////////// +// CertificateViewerDialog + +void CertificateViewerDialog::ShowDialog(gfx::NativeWindow parent, + net::X509Certificate* cert) { + CertificateViewerDialog* dialog = new CertificateViewerDialog(cert); + dialog->Show(parent); +} + +CertificateViewerDialog::CertificateViewerDialog(net::X509Certificate* cert) + : cert_(cert), window_(NULL) { + // Construct the dialog title from the certificate. + net::X509Certificate::OSCertHandles cert_chain; + x509_certificate_model::GetCertChainFromCert(cert_->os_cert_handle(), + &cert_chain); + title_ = l10n_util::GetStringFUTF16(IDS_CERT_INFO_DIALOG_TITLE, + UTF8ToUTF16(x509_certificate_model::GetTitle(cert_chain.front()))); +} + +CertificateViewerDialog::~CertificateViewerDialog() { +} + +void CertificateViewerDialog::Show(gfx::NativeWindow parent) { + // TODO(oshima): Should get browser from parent. + Browser* browser = BrowserList::GetLastActive(); + DCHECK(browser); +#if defined(USE_AURA) + TabContentsWrapper* current_wrapper = + browser->GetSelectedTabContentsWrapper(); + window_ = ConstrainedHtmlUI::CreateConstrainedHtmlDialog( + current_wrapper->profile(), + this, + current_wrapper)->window()->GetNativeWindow(); +#else + window_ = browser->BrowserShowHtmlDialog(this, parent); +#endif +} + +bool CertificateViewerDialog::IsDialogModal() const { + return false; +} + +string16 CertificateViewerDialog::GetDialogTitle() const { + return title_; +} + +GURL CertificateViewerDialog::GetDialogContentURL() const { + return GURL(chrome::kChromeUICertificateViewerURL); +} + +void CertificateViewerDialog::GetWebUIMessageHandlers( + std::vector* handlers) const { + handlers->push_back(new CertificateViewerDialogHandler(window_, cert_)); +} + +void CertificateViewerDialog::GetDialogSize(gfx::Size* size) const { + size->SetSize(kDefaultWidth, kDefaultHeight); +} + +std::string CertificateViewerDialog::GetDialogArgs() const { + return std::string(); +} + +void CertificateViewerDialog::OnDialogClosed(const std::string& json_retval) { + delete this; +} + +void CertificateViewerDialog::OnCloseContents(TabContents* source, + bool* out_close_dialog) { + if (out_close_dialog) + *out_close_dialog = true; +} + +bool CertificateViewerDialog::ShouldShowDialogTitle() const { + return true; +} + +bool CertificateViewerDialog::HandleContextMenu( + const ContextMenuParams& params) { + return true; +} + +//////////////////////////////////////////////////////////////////////////////// +// CertificateViewerDialogHandler + +CertificateViewerDialogHandler::CertificateViewerDialogHandler( + gfx::NativeWindow window, + net::X509Certificate* cert) : cert_(cert), window_(window) { + x509_certificate_model::GetCertChainFromCert(cert_->os_cert_handle(), + &cert_chain_); +} + +CertificateViewerDialogHandler::~CertificateViewerDialogHandler() { +} + +void CertificateViewerDialogHandler::RegisterMessages() { + web_ui_->RegisterMessageCallback("exportCertificate", + base::Bind(&CertificateViewerDialogHandler::ExportCertificate, + base::Unretained(this))); + web_ui_->RegisterMessageCallback("requestCertificateInfo", + base::Bind(&CertificateViewerDialogHandler::RequestCertificateInfo, + base::Unretained(this))); + web_ui_->RegisterMessageCallback("requestCertificateFields", + base::Bind(&CertificateViewerDialogHandler::RequestCertificateFields, + base::Unretained(this))); +} + +void CertificateViewerDialogHandler::ExportCertificate( + const base::ListValue* args) { + int cert_index; + double val; + if (!(args->GetDouble(0, &val))) + return; + cert_index = (int)val; + if (cert_index < 0 || cert_index >= (int)cert_chain_.size()) + return; + + ShowCertExportDialog(web_ui_->tab_contents(), + window_, + cert_chain_[cert_index]); +} + +void CertificateViewerDialogHandler::RequestCertificateInfo( + const base::ListValue* args) { + // Certificate information. The keys in this dictionary's general key + // correspond to the IDs in the Html page. + DictionaryValue cert_info; + net::X509Certificate::OSCertHandle cert_hnd = cert_->os_cert_handle(); + + // Get the certificate chain. + net::X509Certificate::OSCertHandles cert_chain; + x509_certificate_model::GetCertChainFromCert(cert_hnd, &cert_chain); + + // Certificate usage. + std::vector usages; + x509_certificate_model::GetUsageStrings(cert_hnd, &usages); + std::string usagestr; + for (std::vector::iterator it = usages.begin(); + it != usages.end(); ++it) { + if (usagestr.length() > 0) { + usagestr += "\n"; + } + usagestr += *it; + } + cert_info.SetString("general.usages", usagestr); + + // Standard certificate details. + const std::string alternative_text = + l10n_util::GetStringUTF8(IDS_CERT_INFO_FIELD_NOT_PRESENT); + cert_info.SetString("general.title", l10n_util::GetStringFUTF8( + IDS_CERT_INFO_DIALOG_TITLE, UTF8ToUTF16(x509_certificate_model::GetTitle( + cert_chain.front())))); + + // Issued to information. + cert_info.SetString("general.issued-cn", + x509_certificate_model::GetSubjectCommonName(cert_hnd, alternative_text)); + cert_info.SetString("general.issued-o", + x509_certificate_model::GetSubjectOrgName(cert_hnd, alternative_text)); + cert_info.SetString("general.issued-ou", + x509_certificate_model::GetSubjectOrgUnitName(cert_hnd, + alternative_text)); + cert_info.SetString("general.issued-sn", + x509_certificate_model::GetSerialNumberHexified(cert_hnd, + alternative_text)); + + // Issuer information. + cert_info.SetString("general.issuer-cn", + x509_certificate_model::GetIssuerCommonName(cert_hnd, alternative_text)); + cert_info.SetString("general.issuer-o", + x509_certificate_model::GetIssuerOrgName(cert_hnd, alternative_text)); + cert_info.SetString("general.issuer-ou", + x509_certificate_model::GetIssuerOrgUnitName(cert_hnd, alternative_text)); + + // Validity period. + base::Time issued, expires; + std::string issued_str, expires_str; + if (x509_certificate_model::GetTimes(cert_hnd, &issued, &expires)) { + issued_str = UTF16ToUTF8( + base::TimeFormatShortDateNumeric(issued)); + expires_str = UTF16ToUTF8( + base::TimeFormatShortDateNumeric(expires)); + } else { + issued_str = alternative_text; + expires_str = alternative_text; + } + cert_info.SetString("general.issue-date", issued_str); + cert_info.SetString("general.expiry-date", expires_str); + + cert_info.SetString("general.sha256", + x509_certificate_model::HashCertSHA256(cert_hnd)); + cert_info.SetString("general.sha1", + x509_certificate_model::HashCertSHA1(cert_hnd)); + + // Certificate hierarchy is constructed from bottom up. + ListValue* children = NULL; + int index = 0; + for (net::X509Certificate::OSCertHandles::const_iterator i = + cert_chain.begin(); i != cert_chain.end(); ++i, ++index) { + DictionaryValue* cert_node = new DictionaryValue(); + ListValue cert_details; + cert_node->SetString("label", x509_certificate_model::GetTitle(*i).c_str()); + cert_node->SetDouble("payload.index", index); + // Add the child from the previous iteration. + if (children) + cert_node->Set("children", children); + + // Add this node to the children list for the next iteration. + children = new ListValue(); + children->Append(cert_node); + } + // Set the last node as the top of the certificate hierarchy. + cert_info.Set("hierarchy", children); + + // Send certificate information to javascript. + web_ui_->CallJavascriptFunction("cert_viewer.getCertificateInfo", cert_info); +} + +void CertificateViewerDialogHandler::RequestCertificateFields( + const base::ListValue* args) { + int cert_index; + double val; + if (!(args->GetDouble(0, &val))) + return; + cert_index = (int)val; + if (cert_index < 0 || cert_index >= (int)cert_chain_.size()) + return; + net::X509Certificate::OSCertHandle cert = cert_chain_[cert_index]; + + ListValue root_list; + DictionaryValue* node_details; + DictionaryValue* alt_node_details; + ListValue* cert_sub_fields; + root_list.Append(node_details = new DictionaryValue()); + node_details->SetString("label", x509_certificate_model::GetTitle(cert)); + + ListValue* cert_fields; + node_details->Set("children", cert_fields = new ListValue()); + cert_fields->Append(node_details = new DictionaryValue()); + + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE)); + node_details->Set("children", cert_fields = new ListValue()); + + // Main certificate fields. + cert_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_DETAILS_VERSION)); + std::string version = x509_certificate_model::GetVersion(cert); + if (!version.empty()) + node_details->SetString("payload.val", + l10n_util::GetStringFUTF8(IDS_CERT_DETAILS_VERSION_FORMAT, + UTF8ToUTF16(version))); + + cert_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SERIAL_NUMBER)); + node_details->SetString("payload.val", + x509_certificate_model::GetSerialNumberHexified(cert, + l10n_util::GetStringUTF8(IDS_CERT_INFO_FIELD_NOT_PRESENT))); + + cert_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE_SIG_ALG)); + node_details->SetString("payload.val", + x509_certificate_model::ProcessSecAlgorithmSignature(cert)); + + cert_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_DETAILS_ISSUER)); + node_details->SetString("payload.val", + x509_certificate_model::GetIssuerName(cert)); + + // Validity period. + cert_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_DETAILS_VALIDITY)); + + node_details->Set("children", cert_sub_fields = new ListValue()); + cert_sub_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_DETAILS_NOT_BEFORE)); + cert_sub_fields->Append(alt_node_details = new DictionaryValue()); + alt_node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_DETAILS_NOT_AFTER)); + base::Time issued, expires; + if (x509_certificate_model::GetTimes(cert, &issued, &expires)) { + node_details->SetString("payload.val", + UTF16ToUTF8(base::TimeFormatShortDateAndTime(issued))); + alt_node_details->SetString("payload.val", + UTF16ToUTF8(base::TimeFormatShortDateAndTime(expires))); + } + + cert_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT)); + node_details->SetString("payload.val", + x509_certificate_model::GetSubjectName(cert)); + + // Subject key information. + cert_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY_INFO)); + + node_details->Set("children", cert_sub_fields = new ListValue()); + cert_sub_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY_ALG)); + node_details->SetString("payload.val", + x509_certificate_model::ProcessSecAlgorithmSubjectPublicKey(cert)); + cert_sub_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_DETAILS_SUBJECT_KEY)); + node_details->SetString("payload.val", + x509_certificate_model::ProcessSubjectPublicKeyInfo(cert)); + + // Extensions. + x509_certificate_model::Extensions extensions; + x509_certificate_model::GetExtensions( + l10n_util::GetStringUTF8(IDS_CERT_EXTENSION_CRITICAL), + l10n_util::GetStringUTF8(IDS_CERT_EXTENSION_NON_CRITICAL), + cert, &extensions); + + if (!extensions.empty()) { + cert_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_DETAILS_EXTENSIONS)); + + node_details->Set("children", cert_sub_fields = new ListValue()); + for (x509_certificate_model::Extensions::const_iterator i = + extensions.begin(); i != extensions.end(); ++i) { + cert_sub_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", i->name); + node_details->SetString("payload.val", i->value); + } + } + + cert_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE_SIG_ALG)); + node_details->SetString("payload.val", + x509_certificate_model::ProcessSecAlgorithmSignatureWrap(cert)); + + cert_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_DETAILS_CERTIFICATE_SIG_VALUE)); + node_details->SetString("payload.val", + x509_certificate_model::ProcessRawBitsSignatureWrap(cert)); + + cert_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_INFO_FINGERPRINTS_GROUP)); + node_details->Set("children", cert_sub_fields = new ListValue()); + + cert_sub_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_INFO_SHA256_FINGERPRINT_LABEL)); + node_details->SetString("payload.val", + x509_certificate_model::HashCertSHA256(cert)); + cert_sub_fields->Append(node_details = new DictionaryValue()); + node_details->SetString("label", + l10n_util::GetStringUTF8(IDS_CERT_INFO_SHA1_FINGERPRINT_LABEL)); + node_details->SetString("payload.val", + x509_certificate_model::HashCertSHA1(cert)); + + // Send certificate information to javascript. + web_ui_->CallJavascriptFunction("cert_viewer.getCertificateFields", + root_list); +} diff --git a/chrome/browser/ui/webui/certificate_viewer_webui.h b/chrome/browser/ui/webui/certificate_viewer_webui.h new file mode 100644 index 0000000..1cfd822 --- /dev/null +++ b/chrome/browser/ui/webui/certificate_viewer_webui.h @@ -0,0 +1,106 @@ +// Copyright (c) 2011 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. + +#ifndef CHROME_BROWSER_UI_WEBUI_CERTIFICATE_VIEWER_WEBUI_H_ +#define CHROME_BROWSER_UI_WEBUI_CERTIFICATE_VIEWER_WEBUI_H_ +#pragma once + +#include "base/values.h" +#include "chrome/browser/ui/webui/html_dialog_ui.h" +#include "net/base/x509_certificate.h" +#include "ui/gfx/native_widget_types.h" + +// Displays the native or WebUI certificate viewer dialog for the given +// certificate. +void ShowCertificateViewer(gfx::NativeWindow parent, + net::X509Certificate*); + +// Dialog for displaying detailed certificate information. This is used in linux +// and chromeos builds to display detailed information in a floating dialog when +// the user clicks on "Certificate Information" from the lock icon of a web site +// or "View" from the Certificate Manager. +class CertificateViewerDialog : private HtmlDialogUIDelegate { + public: + // Shows the certificate viewer dialog for the passed in certificate. + static void ShowDialog(gfx::NativeWindow parent, + net::X509Certificate* cert); + virtual ~CertificateViewerDialog(); + + private: + // Construct a certificate viewer for the passed in certificate. A reference + // to the certificate pointer is added for the lifetime of the certificate + // viewer. + explicit CertificateViewerDialog(net::X509Certificate* cert); + + // Show the dialog using the given parent window. + void Show(gfx::NativeWindow parent); + + // Overridden from HtmlDialogUI::Delegate: + virtual bool IsDialogModal() const OVERRIDE; + virtual string16 GetDialogTitle() const OVERRIDE; + virtual GURL GetDialogContentURL() const OVERRIDE; + virtual void GetWebUIMessageHandlers( + std::vector* handlers) const OVERRIDE; + virtual void GetDialogSize(gfx::Size* size) const OVERRIDE; + virtual std::string GetDialogArgs() const OVERRIDE; + virtual void OnDialogClosed(const std::string& json_retval) OVERRIDE; + virtual void OnCloseContents( + TabContents* source, bool* out_close_dialog) OVERRIDE; + virtual bool ShouldShowDialogTitle() const OVERRIDE; + virtual bool HandleContextMenu(const ContextMenuParams& params) OVERRIDE; + + // The certificate being viewed. + scoped_refptr cert_; + + // The window displaying this dialog. + gfx::NativeWindow window_; + + // The title of the certificate viewer dialog, Certificate Viewer: CN. + string16 title_; + + DISALLOW_COPY_AND_ASSIGN(CertificateViewerDialog); +}; + +// Dialog handler which handles calls from the JS WebUI code to view certificate +// details and export the certificate. +class CertificateViewerDialogHandler : public WebUIMessageHandler { + public: + CertificateViewerDialogHandler(gfx::NativeWindow window, + net::X509Certificate* cert); + virtual ~CertificateViewerDialogHandler(); + + // Overridden from WebUIMessageHandler + virtual void RegisterMessages(); + + private: + // Brings up the export certificate dialog for the chosen certificate in the + // chain. + // + // The input is an integer index to the certificate in the chain to export. + void ExportCertificate(const base::ListValue* args); + + // Gets the details for a specific certificate in the certificate chain. Calls + // the javascript function cert_viewer.getCertificateFields with a tree + // structure containing the fields and values for certain nodes. + // + // The input is an integer index to the certificate in the chain to view. + void RequestCertificateFields(const base::ListValue* args); + + // Extracts the certificate details and returns them to the javascript + // function cert_viewer.getCertificateInfo in a dictionary structure. + void RequestCertificateInfo(const base::ListValue* args); + + // The certificate being viewed. + scoped_refptr cert_; + + // The dialog window. + gfx::NativeWindow window_; + + // The certificate chain. + net::X509Certificate::OSCertHandles cert_chain_; + + DISALLOW_COPY_AND_ASSIGN(CertificateViewerDialogHandler); +}; + +#endif // CHROME_BROWSER_UI_WEBUI_CERTIFICATE_VIEWER_WEBUI_H_ diff --git a/chrome/browser/ui/webui/html_dialog_tab_contents_delegate.cc b/chrome/browser/ui/webui/html_dialog_tab_contents_delegate.cc index c9c2dcb..2bc1ef0 100644 --- a/chrome/browser/ui/webui/html_dialog_tab_contents_delegate.cc +++ b/chrome/browser/ui/webui/html_dialog_tab_contents_delegate.cc @@ -83,7 +83,8 @@ void HtmlDialogTabContentsDelegate::AddNewContents( } } -bool HtmlDialogTabContentsDelegate::IsPopup(const TabContents* source) const { +bool HtmlDialogTabContentsDelegate::IsPopupOrPanel( + const TabContents* source) const { // This needs to return true so that we are allowed to be resized by our // contents. return true; diff --git a/chrome/browser/ui/webui/html_dialog_tab_contents_delegate.h b/chrome/browser/ui/webui/html_dialog_tab_contents_delegate.h index 8353bc6..6670578 100644 --- a/chrome/browser/ui/webui/html_dialog_tab_contents_delegate.h +++ b/chrome/browser/ui/webui/html_dialog_tab_contents_delegate.h @@ -49,11 +49,11 @@ class HtmlDialogTabContentsDelegate : public TabContentsDelegate { TabContents* new_contents, WindowOpenDisposition disposition, const gfx::Rect& initial_pos, - bool user_gesture); - virtual bool IsPopup(const TabContents* source) const; + bool user_gesture) OVERRIDE; + virtual bool IsPopupOrPanel(const TabContents* source) const OVERRIDE; virtual bool ShouldAddNavigationToHistory( const history::HistoryAddPageArgs& add_page_args, - content::NavigationType navigation_type); + content::NavigationType navigation_type) OVERRIDE; private: Profile* profile_; // Weak pointer. Always an original profile. diff --git a/chrome/browser/ui/webui/html_dialog_tab_contents_delegate_unittest.cc b/chrome/browser/ui/webui/html_dialog_tab_contents_delegate_unittest.cc index 93353a4..9a5f22e 100644 --- a/chrome/browser/ui/webui/html_dialog_tab_contents_delegate_unittest.cc +++ b/chrome/browser/ui/webui/html_dialog_tab_contents_delegate_unittest.cc @@ -53,7 +53,7 @@ class HtmlDialogTabContentsDelegateTest : public BrowserWithTestWindowTest { TEST_F(HtmlDialogTabContentsDelegateTest, DoNothingMethodsTest) { // None of the following calls should do anything. - EXPECT_TRUE(test_tab_contents_delegate_->IsPopup(NULL)); + EXPECT_TRUE(test_tab_contents_delegate_->IsPopupOrPanel(NULL)); scoped_refptr should_add_args( new history::HistoryAddPageArgs( GURL(), base::Time::Now(), 0, 0, GURL(), history::RedirectList(), diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi index 978c959..ed148ae 100644 --- a/chrome/chrome_browser.gypi +++ b/chrome/chrome_browser.gypi @@ -2889,6 +2889,7 @@ 'browser/ui/content_settings/content_setting_bubble_model.h', 'browser/ui/content_settings/content_setting_image_model.cc', 'browser/ui/content_settings/content_setting_image_model.h', + 'browser/ui/constrained_window.cc', 'browser/ui/constrained_window.h', 'browser/ui/constrained_window_tab_helper.cc', 'browser/ui/constrained_window_tab_helper.h', @@ -3638,8 +3639,8 @@ 'browser/ui/webui/bookmarks_ui.h', 'browser/ui/webui/bug_report_ui.cc', 'browser/ui/webui/bug_report_ui.h', - 'browser/ui/webui/certificate_viewer.cc', - 'browser/ui/webui/certificate_viewer.h', + 'browser/ui/webui/certificate_viewer_webui.cc', + 'browser/ui/webui/certificate_viewer_webui.h', 'browser/ui/webui/certificate_viewer_ui.cc', 'browser/ui/webui/certificate_viewer_ui.h', 'browser/ui/webui/chrome_url_data_manager.cc', @@ -4216,6 +4217,10 @@ ['exclude', '^browser/ui/views/task_manager_view.cc'], ['exclude', '^browser/ui/views/task_manager_view.h'], ['exclude', '^browser/ui/views/user_data_dir_dialog.cc'], + ['include', '^browser/ui/webui/certificate_viewer_webui.cc'], + ['include', '^browser/ui/webui/certificate_viewer_webui.h'], + ['include', '^browser/ui/webui/certificate_viewer_ui.cc'], + ['include', '^browser/ui/webui/certificate_viewer_ui.h'], ['include', '^browser/ui/webui/collected_cookies_ui_delegate.cc'], ['include', '^browser/ui/webui/collected_cookies_ui_delegate.h'], ['include', '^browser/ui/webui/cookies_tree_model_adapter.cc'], @@ -4281,8 +4286,8 @@ # native certificate viewers). ['os_posix == 0 or OS == "mac"', { 'sources/': [ - ['exclude', '^browser/ui/webui/certificate_viewer.cc'], - ['exclude', '^browser/ui/webui/certificate_viewer.h'], + ['exclude', '^browser/ui/webui/certificate_viewer_webui.cc'], + ['exclude', '^browser/ui/webui/certificate_viewer_webui.h'], ['exclude', '^browser/ui/webui/certificate_viewer_ui.cc'], ['exclude', '^browser/ui/webui/certificate_viewer_ui.h'], ], -- cgit v1.1