Commit 9253d98c authored by alicet@chromium.org's avatar alicet@chromium.org

add crypto module password dialog view and test.

move cryto_module_password_dialog.cc out of gtk dir into cyrpto_module_password_dialog_view.cc and crypto_module_password_dialog.cc. crypto_module_password_dialog_view.cc needs views lib, and so it is not linked into all platform.

BUG=97844
TEST=None


Review URL: http://codereview.chromium.org/8115020

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@112314 0039d316-1c4b-4281-b951-d872f2087c98
parent af33ec48
......@@ -4,21 +4,22 @@
#include "chrome/browser/ui/crypto_module_password_dialog.h"
#include <gtk/gtk.h>
#include "base/basictypes.h"
#include "base/bind.h"
#include "base/synchronization/waitable_event.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/ui/gtk/gtk_util.h"
#include "content/public/browser/browser_thread.h"
#include "chrome/browser/ui/views/window.h"
#include "crypto/crypto_module_blocking_password_delegate.h"
#include "content/public/browser/browser_thread.h"
#include "googleurl/src/gurl.h"
#include "grit/generated_resources.h"
#include "ui/base/gtk/gtk_hig_constants.h"
#include "ui/base/gtk/gtk_signal.h"
#include "ui/base/l10n/l10n_util.h"
#if defined(TOOLKIT_VIEWS)
#include "chrome/browser/ui/views/crypto_module_password_dialog_view.h"
#include "ui/views/widget/widget.h"
#endif
using content::BrowserThread;
namespace {
......@@ -31,17 +32,18 @@ class CryptoModuleBlockingDialogDelegate
: event_(false, false),
reason_(reason),
server_(server),
password_(),
cancelled_(false) {
}
~CryptoModuleBlockingDialogDelegate() {
virtual ~CryptoModuleBlockingDialogDelegate() {
// Make sure we clear the password in memory.
password_.replace(0, password_.size(), password_.size(), 0);
}
// crypto::CryptoModuleBlockingDialogDelegate implementation.
virtual std::string RequestPassword(const std::string& slot_name, bool retry,
bool* cancelled) {
virtual std::string RequestPassword(const std::string& slot_name,
bool retry,
bool* cancelled) OVERRIDE {
DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI));
DCHECK(!event_.IsSignaled());
event_.Reset();
......@@ -61,13 +63,17 @@ class CryptoModuleBlockingDialogDelegate
}
private:
void ShowDialog(const std::string& slot_name, bool retry) {
void ShowDialog(const std::string& slot_name,
bool retry) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
ShowCryptoModulePasswordDialog(
slot_name, retry, reason_, server_,
base::Bind(&CryptoModuleBlockingDialogDelegate::GotPassword,
// We block on event_ until the task completes, so
// there's no need to ref-count.
base::Unretained(this)));
}
void GotPassword(const char* password) {
if (password)
password_ = password;
......@@ -75,6 +81,7 @@ class CryptoModuleBlockingDialogDelegate
cancelled_ = true;
event_.Signal();
}
base::WaitableEvent event_;
browser::CryptoModulePasswordReason reason_;
std::string server_;
......@@ -83,137 +90,6 @@ class CryptoModuleBlockingDialogDelegate
DISALLOW_COPY_AND_ASSIGN(CryptoModuleBlockingDialogDelegate);
};
// TODO(mattm): change into a constrained dialog.
class CryptoModulePasswordDialog {
public:
CryptoModulePasswordDialog(
const std::string& slot_name,
bool retry,
browser::CryptoModulePasswordReason reason,
const std::string& server,
const browser::CryptoModulePasswordCallback& callback);
~CryptoModulePasswordDialog() {}
void Show();
private:
CHROMEGTK_CALLBACK_1(CryptoModulePasswordDialog, void, OnResponse, int);
CHROMEGTK_CALLBACK_0(CryptoModulePasswordDialog, void, OnWindowDestroy);
browser::CryptoModulePasswordCallback callback_;
GtkWidget* dialog_;
GtkWidget* password_entry_;
DISALLOW_COPY_AND_ASSIGN(CryptoModulePasswordDialog);
};
CryptoModulePasswordDialog::CryptoModulePasswordDialog(
const std::string& slot_name,
bool retry,
browser::CryptoModulePasswordReason reason,
const std::string& server,
const browser::CryptoModulePasswordCallback& callback)
: callback_(callback) {
dialog_ = gtk_dialog_new_with_buttons(
l10n_util::GetStringUTF8(IDS_CRYPTO_MODULE_AUTH_DIALOG_TITLE).c_str(),
NULL,
GTK_DIALOG_NO_SEPARATOR,
NULL); // Populate the buttons later, for control over the OK button.
gtk_dialog_add_button(GTK_DIALOG(dialog_),
GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT);
GtkWidget* ok_button = gtk_util::AddButtonToDialog(
dialog_,
l10n_util::GetStringUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_OK_BUTTON_LABEL).c_str(),
GTK_STOCK_OK,
GTK_RESPONSE_ACCEPT);
gtk_widget_set_can_default(ok_button, TRUE);
gtk_dialog_set_default_response(GTK_DIALOG(dialog_), GTK_RESPONSE_ACCEPT);
// Select an appropriate text for the reason.
std::string text;
const string16& server16 = UTF8ToUTF16(server);
const string16& slot16 = UTF8ToUTF16(slot_name);
switch (reason) {
case browser::kCryptoModulePasswordKeygen:
text = l10n_util::GetStringFUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_KEYGEN, slot16, server16);
break;
case browser::kCryptoModulePasswordCertEnrollment:
text = l10n_util::GetStringFUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_ENROLLMENT, slot16, server16);
break;
case browser::kCryptoModulePasswordClientAuth:
text = l10n_util::GetStringFUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CLIENT_AUTH, slot16, server16);
break;
case browser::kCryptoModulePasswordListCerts:
text = l10n_util::GetStringFUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_LIST_CERTS, slot16);
break;
case browser::kCryptoModulePasswordCertImport:
text = l10n_util::GetStringFUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_IMPORT, slot16);
break;
case browser::kCryptoModulePasswordCertExport:
text = l10n_util::GetStringFUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_EXPORT, slot16);
break;
default:
NOTREACHED();
}
GtkWidget* label = gtk_label_new(text.c_str());
gtk_label_set_line_wrap(GTK_LABEL(label), TRUE);
gtk_util::LeftAlignMisc(label);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_)->vbox), label,
FALSE, FALSE, 0);
password_entry_ = gtk_entry_new();
gtk_entry_set_activates_default(GTK_ENTRY(password_entry_), TRUE);
gtk_entry_set_visibility(GTK_ENTRY(password_entry_), FALSE);
GtkWidget* password_box = gtk_hbox_new(FALSE, ui::kLabelSpacing);
gtk_box_pack_start(GTK_BOX(password_box),
gtk_label_new(l10n_util::GetStringUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_PASSWORD_FIELD).c_str()),
FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(password_box), password_entry_,
TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dialog_)->vbox), password_box,
FALSE, FALSE, 0);
g_signal_connect(dialog_, "response",
G_CALLBACK(OnResponseThunk), this);
g_signal_connect(dialog_, "destroy",
G_CALLBACK(OnWindowDestroyThunk), this);
}
void CryptoModulePasswordDialog::Show() {
gtk_util::ShowDialog(dialog_);
}
void CryptoModulePasswordDialog::OnResponse(GtkWidget* dialog,
int response_id) {
if (response_id == GTK_RESPONSE_ACCEPT)
callback_.Run(gtk_entry_get_text(GTK_ENTRY(password_entry_)));
else
callback_.Run(static_cast<const char*>(NULL));
// This will cause gtk to zero out the buffer. (see
// gtk_entry_buffer_normal_delete_text:
// http://git.gnome.org/browse/gtk+/tree/gtk/gtkentrybuffer.c#n187)
gtk_editable_delete_text(GTK_EDITABLE(password_entry_), 0, -1);
gtk_widget_destroy(dialog_);
}
void CryptoModulePasswordDialog::OnWindowDestroy(GtkWidget* widget) {
delete this;
}
} // namespace
namespace browser {
......@@ -224,8 +100,13 @@ void ShowCryptoModulePasswordDialog(
CryptoModulePasswordReason reason,
const std::string& server,
const CryptoModulePasswordCallback& callback) {
(new CryptoModulePasswordDialog(slot_name, retry, reason, server,
callback))->Show();
#if defined(TOOLKIT_VIEWS)
CryptoModulePasswordDialogView* dialog =
new CryptoModulePasswordDialogView(
slot_name, reason, server, callback);
views::Widget* widget = CreateViewsWindow(NULL, dialog, STYLE_GENERIC);
widget->Show();
#endif
}
crypto::CryptoModuleBlockingPasswordDelegate*
......@@ -234,5 +115,4 @@ crypto::CryptoModuleBlockingPasswordDelegate*
const std::string& server) {
return new CryptoModuleBlockingDialogDelegate(reason, server);
}
} // namespace browser
// 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/views/crypto_module_password_dialog_view.h"
#include "base/basictypes.h"
#include "base/bind.h"
#include "base/utf_string_conversions.h"
#include "googleurl/src/gurl.h"
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/views/controls/label.h"
#include "ui/views/controls/button/text_button.h"
#include "ui/views/controls/textfield/textfield.h"
#include "ui/views/layout/grid_layout.h"
#include "ui/views/layout/layout_constants.h"
int kInputPasswordMinWidth = 8;
namespace browser {
// CryptoModulePasswordDialogView
////////////////////////////////////////////////////////////////////////////////
CryptoModulePasswordDialogView::CryptoModulePasswordDialogView(
const std::string& slot_name,
browser::CryptoModulePasswordReason reason,
const std::string& server,
const base::Callback<void(const char*)>& callback)
: callback_(callback) {
Init(server, slot_name, reason);
}
void CryptoModulePasswordDialogView::Init(
const std::string& server,
const std::string& slot_name,
browser::CryptoModulePasswordReason reason) {
// Select an appropriate text for the reason.
std::string text;
const string16& server16 = UTF8ToUTF16(server);
const string16& slot16 = UTF8ToUTF16(slot_name);
switch (reason) {
case browser::kCryptoModulePasswordKeygen:
text = l10n_util::GetStringFUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_KEYGEN, slot16, server16);
break;
case browser::kCryptoModulePasswordCertEnrollment:
text = l10n_util::GetStringFUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_ENROLLMENT, slot16, server16);
break;
case browser::kCryptoModulePasswordClientAuth:
text = l10n_util::GetStringFUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CLIENT_AUTH, slot16, server16);
break;
case browser::kCryptoModulePasswordListCerts:
text = l10n_util::GetStringFUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_LIST_CERTS, slot16);
break;
case browser::kCryptoModulePasswordCertImport:
text = l10n_util::GetStringFUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_IMPORT, slot16);
break;
case browser::kCryptoModulePasswordCertExport:
text = l10n_util::GetStringFUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_TEXT_CERT_EXPORT, slot16);
break;
default:
NOTREACHED();
}
reason_label_ = new views::Label(UTF8ToUTF16(text));
reason_label_->SetMultiLine(true);
password_label_ = new views::Label(l10n_util::GetStringUTF16(
IDS_CRYPTO_MODULE_AUTH_DIALOG_PASSWORD_FIELD));
password_entry_ = new views::Textfield(views::Textfield::STYLE_PASSWORD);
password_entry_->SetController(this);
views::GridLayout* layout = views::GridLayout::CreatePanel(this);
SetLayoutManager(layout);
views::ColumnSet* reason_column_set = layout->AddColumnSet(0);
reason_column_set->AddColumn(
views::GridLayout::LEADING, views::GridLayout::LEADING, 1,
views::GridLayout::USE_PREF, 0, 0);
views::ColumnSet* column_set = layout->AddColumnSet(1);
column_set->AddColumn(views::GridLayout::LEADING,
views::GridLayout::LEADING, 0,
views::GridLayout::USE_PREF, 0, 0);
column_set->AddPaddingColumn(
0, views::kUnrelatedControlLargeHorizontalSpacing);
column_set->AddColumn(views::GridLayout::FILL, views::GridLayout::FILL, 1,
views::GridLayout::USE_PREF, 0, 0);
layout->StartRow(0, 0);
layout->AddView(reason_label_);
layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing);
layout->StartRow(0, 1);
layout->AddView(password_label_);
layout->AddView(password_entry_);
}
views::View* CryptoModulePasswordDialogView::GetInitiallyFocusedView() {
return password_entry_;
}
bool CryptoModulePasswordDialogView::IsModal() const {
return true;
}
views::View* CryptoModulePasswordDialogView::GetContentsView() {
return this;
}
string16 CryptoModulePasswordDialogView::GetDialogButtonLabel(
ui::DialogButton button) const {
if (button == ui::DIALOG_BUTTON_OK)
return UTF8ToUTF16(l10n_util::GetStringUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_OK_BUTTON_LABEL));
else if (button == ui::DIALOG_BUTTON_CANCEL)
return UTF8ToUTF16(l10n_util::GetStringUTF8(IDS_CANCEL));
const string16 empty;
return empty;
}
bool CryptoModulePasswordDialogView::Accept() {
callback_.Run(UTF16ToUTF8(password_entry_->text()).c_str());
const string16 empty;
password_entry_->SetText(empty);
return true;
}
bool CryptoModulePasswordDialogView::Cancel() {
callback_.Run(static_cast<const char*>(NULL));
const string16 empty;
password_entry_->SetText(empty);
return true;
}
bool CryptoModulePasswordDialogView::HandleKeyEvent(
views::Textfield* sender,
const views::KeyEvent& keystroke) {
return false;
}
string16 CryptoModulePasswordDialogView::GetWindowTitle() const {
return UTF8ToUTF16(l10n_util::GetStringUTF8(
IDS_CRYPTO_MODULE_AUTH_DIALOG_TITLE));
}
} // namespace browser
// 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_VIEWS_CRYPTO_MODULE_PASSWORD_DIALOG_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_CRYPTO_MODULE_PASSWORD_DIALOG_VIEW_H_
#pragma once
#include <string>
#include <vector>
#include "base/callback.h"
#include "base/gtest_prod_util.h"
#include "chrome/browser/ui/crypto_module_password_dialog.h"
#include "ui/views/controls/textfield/textfield_controller.h"
#include "ui/views/window/dialog_delegate.h"
namespace views {
class Textfield;
class Label;
}
namespace browser {
// CryptoModulePasswordDialogView
// Dialog view for crypto module password interaction.
/////////////////////////////////////////////////////////////////////////
class CryptoModulePasswordDialogView : public views::DialogDelegateView,
public views::TextfieldController {
public:
CryptoModulePasswordDialogView(
const std::string& slot_name,
browser::CryptoModulePasswordReason reason,
const std::string& server,
const base::Callback<void(const char*)>& callback);
virtual ~CryptoModulePasswordDialogView() {}
// views::DialogDelegate:
virtual bool Accept();
virtual bool Cancel();
string16 GetDialogButtonLabel(
ui::DialogButton button) const;
// views::WidgetDelegate:
virtual views::View* GetInitiallyFocusedView();
virtual bool IsModal() const;
virtual views::View* GetContentsView();
// views::View:
virtual string16 GetWindowTitle() const;
// views::TextfieldController:
virtual bool HandleKeyEvent(views::Textfield* sender,
const views::KeyEvent& keystroke);
virtual void ContentsChanged(views::Textfield* sender,
const string16& new_contents) {}
private:
// Initialize views and layout.
void Init(const std::string& server,
const std::string& slot_name,
browser::CryptoModulePasswordReason reason);
views::Label* title_label_;
views::Label* reason_label_;
views::Label* password_label_;
views::Textfield* password_entry_;
const base::Callback<void(const char*)> callback_;
FRIEND_TEST_ALL_PREFIXES(CryptoModulePasswordDialogViewTest, TestAccept);
DISALLOW_COPY_AND_ASSIGN(CryptoModulePasswordDialogView);
};
} // namespace browser
#endif // CHROME_BROWSER_UI_VIEWS_CRYPTO_MODULE_PASSWORD_DIALOG_VIEW_H_
// 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 <string>
#include "base/basictypes.h"
#include "base/bind.h"
#include "base/utf_string_conversions.h"
#include "chrome/browser/ui/crypto_module_password_dialog.h"
#include "chrome/browser/ui/views/crypto_module_password_dialog_view.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/views/controls/textfield/textfield.h"
std::string kSlotName = "slot";
std::string kServer = "server";
namespace browser {
CryptoModulePasswordReason kReason = kCryptoModulePasswordKeygen;
class CryptoModulePasswordDialogViewTest : public testing::Test {
public:
CryptoModulePasswordDialogViewTest() {}
~CryptoModulePasswordDialogViewTest() {}
void Capture(const char* text) {
text_ = text;
}
void CreateDialogCrypto(const CryptoModulePasswordCallback& callback) {
dialog_.reset(new CryptoModulePasswordDialogView(
kSlotName, kReason, kServer, callback));
}
browser::CryptoModulePasswordCallback* callback_;
std::string text_;
scoped_ptr<CryptoModulePasswordDialogView> dialog_;
};
TEST_F(CryptoModulePasswordDialogViewTest, TestAccept) {
browser::CryptoModulePasswordCallback cb(
base::Bind(&browser::CryptoModulePasswordDialogViewTest::Capture,
base::Unretained(this)));
CreateDialogCrypto(cb);
EXPECT_EQ(dialog_->password_entry_, dialog_->GetInitiallyFocusedView());
EXPECT_TRUE(dialog_->IsModal());
const std::string kPassword = "diAl0g";
dialog_->password_entry_->SetText(UTF8ToUTF16(kPassword));
EXPECT_TRUE(dialog_->Accept());
EXPECT_EQ(kPassword, text_);
const string16 empty;
EXPECT_EQ(empty, dialog_->password_entry_->text());
}
} // namespace browser
......@@ -49,27 +49,6 @@ void ShowAboutIPCDialog() {
NOTIMPLEMENTED();
}
#if defined(USE_NSS)
crypto::CryptoModuleBlockingPasswordDelegate*
NewCryptoModuleBlockingDialogDelegate(
CryptoModulePasswordReason reason,
const std::string& server) {
// TODO(saintlou):
NOTIMPLEMENTED();
return NULL;
}
void ShowCryptoModulePasswordDialog(
const std::string& module_name,
bool retry,
CryptoModulePasswordReason reason,
const std::string& server,
const CryptoModulePasswordCallback& callback) {
// TODO(saintlou):
NOTIMPLEMENTED();
}
#endif
} // namespace browser
#if defined(OS_WIN)
......
......@@ -2898,6 +2898,7 @@
'browser/ui/constrained_window_tab_helper.h',
'browser/ui/constrained_window_tab_helper_delegate.cc',
'browser/ui/constrained_window_tab_helper_delegate.h',
'browser/ui/crypto_module_password_dialog.cc',
'browser/ui/crypto_module_password_dialog.h',
'browser/ui/crypto_module_password_dialog_nss.cc',
'browser/ui/crypto_module_password_dialog_openssl.cc',
......@@ -2974,7 +2975,6 @@
'browser/ui/gtk/content_setting_bubble_gtk.h',
'browser/ui/gtk/create_application_shortcuts_dialog_gtk.cc',
'browser/ui/gtk/create_application_shortcuts_dialog_gtk.h',
'browser/ui/gtk/crypto_module_password_dialog.cc',
'browser/ui/gtk/custom_button.cc',
'browser/ui/gtk/custom_button.h',
'browser/ui/gtk/custom_drag.cc',
......@@ -3332,6 +3332,8 @@
'browser/ui/views/cookie_info_view.h',
'browser/ui/views/create_application_shortcut_view.cc',
'browser/ui/views/create_application_shortcut_view.h',
'browser/ui/views/crypto_module_password_dialog_view.cc',
'browser/ui/views/crypto_module_password_dialog_view.h',
'browser/ui/views/critical_notification_bubble_view.cc',
'browser/ui/views/critical_notification_bubble_view.h',
'browser/ui/views/database_info_view.cc',
......@@ -4377,6 +4379,7 @@
'browser/ui/browser_list_stub.cc',
'browser/ui/certificate_dialogs.cc',
'browser/ui/certificate_dialogs.h',
'browser/ui/crypto_module_password_dialog.cc',
'browser/ui/crypto_module_password_dialog_nss.cc',
'browser/ui/panels/panel_browser_frame_view.cc',
'browser/ui/panels/panel_browser_frame_view.h',
......@@ -4546,6 +4549,7 @@
'browser/ui/browser_list_stub.cc',
'browser/ui/certificate_dialogs.cc',
'browser/ui/certificate_dialogs.h',
'browser/ui/crypto_module_password_dialog.cc',
'browser/ui/crypto_module_password_dialog_nss.cc',
'browser/ui/login/login_prompt_ui.cc',
'browser/ui/panels/panel_mouse_watcher_timer.cc',
......@@ -4632,7 +4636,6 @@
['include', '^browser/ui/gtk/collected_cookies_gtk.h'],
['include', '^browser/ui/gtk/constrained_window_gtk.cc'],
['include', '^browser/ui/gtk/constrained_window_gtk.h'],
['include', '^browser/ui/gtk/crypto_module_password_dialog.cc'],
['include', '^browser/ui/gtk/download/download_started_animation_gtk.cc'],
['include', '^browser/ui/gtk/edit_search_engine_dialog.cc'],
['include', '^browser/ui/gtk/edit_search_engine_dialog.h'],
......@@ -4712,6 +4715,8 @@
['include', '^browser/ui/views/content_setting_bubble_contents.h'],
['include', '^browser/ui/views/create_application_shortcut_view.cc'],
['include', '^browser/ui/views/create_application_shortcut_view.h'],
['include', '^browser/ui/views/crypto_module_password_dialog_view.cc'],
['include', '^browser/ui/views/crypto_module_password_dialog_view.h'],
['include', '^browser/ui/views/detachable_toolbar_view.cc'],
['include', '^browser/ui/views/detachable_toolbar_view.h'],
['include', '^browser/ui/views/dialog_stubs_gtk.cc'],
......
......@@ -577,6 +577,7 @@
'sources!': [
# TODO(port)
'browser/npapi_interactive_test.cc',
'browser/ui/views/crypto_module_password_dialog_view_unittest.cc',
'browser/ui/views/bookmarks/bookmark_bar_view_test.cc',
'browser/ui/views/button_dropdown_test.cc',
'browser/ui/views/find_bar_host_interactive_uitest.cc',
......@@ -1887,6 +1888,7 @@
'browser/ui/views/bookmarks/bookmark_context_menu_test.cc',
'browser/ui/views/bookmarks/bookmark_editor_view_unittest.cc',
'browser/ui/views/bubble/border_contents_unittest.cc',
'browser/ui/views/crypto_module_password_dialog_view_unittest.cc',
'browser/ui/views/extensions/browser_action_drag_data_unittest.cc',
'browser/ui/views/first_run_bubble_unittest.cc',
'browser/ui/views/first_run_search_engine_view_unittest.cc',
......@@ -2958,6 +2960,7 @@
'browser/tab_first_render_watcher_browsertest.cc',
'browser/ui/panels/panel_browser_view_browsertest.cc',
'browser/ui/views/browser_actions_container_browsertest.cc',
'browser/ui/views/crypto_module_password_dialog_view_unittest.cc',
'browser/ui/views/dom_view_browsertest.cc',
'browser/ui/views/html_dialog_view_browsertest.cc',
],
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment