manage_passwords_bubble_view.cc revision effb81e5f8246d0db0270817048dc992db66e9fb
1ec8605f1d7ec846dbf51047bfd5c56d32d1ff91cArgyrios Kyrtzidis// Copyright 2013 The Chromium Authors. All rights reserved. 29fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis// Use of this source code is governed by a BSD-style license that can be 39fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis// found in the LICENSE file. 49fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis 59fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h" 69fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis 79fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "chrome/browser/chrome_notification_types.h" 89fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "chrome/browser/ui/browser.h" 99fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "chrome/browser/ui/browser_finder.h" 10ec8605f1d7ec846dbf51047bfd5c56d32d1ff91cArgyrios Kyrtzidis#include "chrome/browser/ui/browser_window.h" 119fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "chrome/browser/ui/passwords/manage_passwords_bubble_model.h" 129fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "chrome/browser/ui/views/frame/browser_view.h" 139fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "chrome/browser/ui/views/location_bar/location_bar_view.h" 14ec8605f1d7ec846dbf51047bfd5c56d32d1ff91cArgyrios Kyrtzidis#include "chrome/browser/ui/views/passwords/manage_password_item_view.h" 15ec8605f1d7ec846dbf51047bfd5c56d32d1ff91cArgyrios Kyrtzidis#include "chrome/browser/ui/views/passwords/manage_passwords_icon_view.h" 169fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "content/public/browser/notification_source.h" 17ca804539d908d3a0e8c72a0df5f1f571d29490bbTed Kremenek#include "content/public/browser/web_contents_view.h" 189fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "grit/generated_resources.h" 19b3d74da3e1620c9a7a378afb5f244e4987e6713eArgyrios Kyrtzidis#include "ui/base/l10n/l10n_util.h" 209fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "ui/gfx/text_utils.h" 219fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "ui/views/controls/button/blue_button.h" 229fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "ui/views/controls/button/label_button.h" 239fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "ui/views/layout/grid_layout.h" 249fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis#include "ui/views/layout/layout_constants.h" 259fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis 269fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis 279fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis// Helpers -------------------------------------------------------------------- 289fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis 299fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidisnamespace { 309fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis 319fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis// Updates either the biggest possible width for the username field in the 329fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis// manage passwords bubble or the biggest possible width for the password field. 339fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidisvoid UpdateBiggestWidth(const autofill::PasswordForm& password_form, 349fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis bool username, 359fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis int* biggest_width) { 369fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis const gfx::FontList font_list; 37cfa88f893915ceb8ae4ce2f17c46c24a4d67502fDmitri Gribenko base::string16 display_string(username ? 389fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis password_form.username_value : 399fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis ManagePasswordItemView::GetPasswordDisplayString( 409fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis password_form.password_value)); 41cfa88f893915ceb8ae4ce2f17c46c24a4d67502fDmitri Gribenko *biggest_width = std::max(gfx::GetStringWidth(display_string, font_list), 429fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis *biggest_width); 439fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis} 449fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis 459fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis} // namespace 46769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 47769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 48769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis// ManagePasswordsBubbleView -------------------------------------------------- 499fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis 509fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis// static 519fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios KyrtzidisManagePasswordsBubbleView* ManagePasswordsBubbleView::manage_passwords_bubble_ = 529fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis NULL; 539fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis 549fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis// static 559fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidisvoid ManagePasswordsBubbleView::ShowBubble(content::WebContents* web_contents, 569fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis ManagePasswordsIconView* icon_view) { 579fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis Browser* browser = chrome::FindBrowserWithWebContents(web_contents); 589fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis DCHECK(browser); 599fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis DCHECK(browser->window()); 609fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis DCHECK(browser->fullscreen_controller()); 619fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis DCHECK(!IsShowing()); 62769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 63769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis BrowserView* browser_view = BrowserView::GetBrowserViewForBrowser(browser); 64769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis bool is_fullscreen = browser_view->IsFullscreen(); 65769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis views::View* anchor_view = is_fullscreen ? 66769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis NULL : browser_view->GetLocationBarView()->manage_passwords_icon_view(); 679be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek manage_passwords_bubble_ = 689be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek new ManagePasswordsBubbleView(web_contents, anchor_view, icon_view); 699be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek 709be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek if (is_fullscreen) { 719be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek manage_passwords_bubble_->set_parent_window( 729be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek web_contents->GetView()->GetTopLevelNativeWindow()); 739be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek } 749be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek 759be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek views::BubbleDelegateView::CreateBubble(manage_passwords_bubble_); 769be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek 779be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek // Adjust for fullscreen after creation as it relies on the content size. 789be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek if (is_fullscreen) { 799be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek manage_passwords_bubble_->AdjustForFullscreen( 809be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek browser_view->GetBoundsInScreen()); 819be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek } 829be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek 839be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek manage_passwords_bubble_->GetWidget()->Show(); 849be6e7ce5788e50c62d40c59b0bbc2ea423683f7Ted Kremenek} 85769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 86769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis// static 87769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidisvoid ManagePasswordsBubbleView::CloseBubble() { 88769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis if (manage_passwords_bubble_) 89cfa88f893915ceb8ae4ce2f17c46c24a4d67502fDmitri Gribenko manage_passwords_bubble_->Close(); 90769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis} 91769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 92769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis// static 93cfa88f893915ceb8ae4ce2f17c46c24a4d67502fDmitri Gribenkobool ManagePasswordsBubbleView::IsShowing() { 94769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis // The bubble may be in the process of closing. 95769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis return (manage_passwords_bubble_ != NULL) && 96769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis manage_passwords_bubble_->GetWidget()->IsVisible(); 97769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis} 98769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 99769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios KyrtzidisManagePasswordsBubbleView::ManagePasswordsBubbleView( 100769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis content::WebContents* web_contents, 101769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis views::View* anchor_view, 102769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis ManagePasswordsIconView* icon_view) 103769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis : BubbleDelegateView( 104769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis anchor_view, 105769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis anchor_view ? 106769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis views::BubbleBorder::TOP_RIGHT : views::BubbleBorder::NONE), 107769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis manage_passwords_bubble_model_( 108cfa88f893915ceb8ae4ce2f17c46c24a4d67502fDmitri Gribenko new ManagePasswordsBubbleModel(web_contents)), 109769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis icon_view_(icon_view) { 110769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis // Compensate for built-in vertical padding in the anchor view's image. 111769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis set_anchor_view_insets(gfx::Insets(5, 0, 5, 0)); 112cfa88f893915ceb8ae4ce2f17c46c24a4d67502fDmitri Gribenko set_notify_enter_exit_on_child(true); 113769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis} 114769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 115769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios KyrtzidisManagePasswordsBubbleView::~ManagePasswordsBubbleView() {} 116769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 117769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidisint ManagePasswordsBubbleView::GetMaximumUsernameOrPasswordWidth( 118769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis bool username) { 119769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis int biggest_width = 0; 120769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis if (manage_passwords_bubble_model_->manage_passwords_bubble_state() != 121769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis ManagePasswordsBubbleModel::PASSWORD_TO_BE_SAVED) { 122769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis // If we are in the PASSWORD_TO_BE_SAVED state we only display the 123769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis // password that was just submitted and should not take these into account. 124769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis for (autofill::PasswordFormMap::const_iterator i( 125de507eaf3cb54d3cb234dc14499c10ab3373d15fJordan Rose manage_passwords_bubble_model_->best_matches().begin()); 126769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis i != manage_passwords_bubble_model_->best_matches().end(); ++i) { 127769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis UpdateBiggestWidth((*i->second), username, &biggest_width); 128769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis } 129769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis } 130769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis if (manage_passwords_bubble_model_->password_submitted()) { 131769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis UpdateBiggestWidth(manage_passwords_bubble_model_->pending_credentials(), 132769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis username, &biggest_width); 133769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis } 134769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis return biggest_width; 135769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis} 136769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 137769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidisvoid ManagePasswordsBubbleView::AdjustForFullscreen( 138769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis const gfx::Rect& screen_bounds) { 139769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis if (GetAnchorView()) 140de507eaf3cb54d3cb234dc14499c10ab3373d15fJordan Rose return; 141769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 142769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis // The bubble's padding from the screen edge, used in fullscreen. 143769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis const int kFullscreenPaddingEnd = 20; 144769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis const size_t bubble_half_width = width() / 2; 145769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis const int x_pos = base::i18n::IsRTL() ? 146769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis screen_bounds.x() + bubble_half_width + kFullscreenPaddingEnd : 147769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis screen_bounds.right() - bubble_half_width - kFullscreenPaddingEnd; 148769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis SetAnchorRect(gfx::Rect(x_pos, screen_bounds.y(), 0, 0)); 149769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis} 150769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 151769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidisvoid ManagePasswordsBubbleView::Close() { 152769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis GetWidget()->Close(); 15396479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose} 15496479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose 15596479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rosevoid ManagePasswordsBubbleView::Init() { 15696479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose using views::GridLayout; 15796479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose 15896479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose GridLayout* layout = new GridLayout(this); 15996479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose SetLayoutManager(layout); 16096479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose 16196479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose // This calculates the necessary widths for the list of credentials in the 16296479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose // bubble. We do not need to clamp the password field width because 16396479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose // ManagePasswordItemView::GetPasswordFisplayString() does this. 16496479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose 16596479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose const int predefined_username_field_max_width = 16696479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose gfx::FontList().GetExpectedTextWidth(22); 16796479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose const int max_username_or_password_width = 16896479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose std::min(GetMaximumUsernameOrPasswordWidth(true), 16996479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose predefined_username_field_max_width); 17096479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose const int first_field_width = std::max(max_username_or_password_width, 17196479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose views::Label(l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_DELETED)). 17296479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose GetPreferredSize().width()); 17396479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose 17496479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose const int second_field_width = std::max( 17596479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose GetMaximumUsernameOrPasswordWidth(false), 17696479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose views::Label(l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_UNDO)). 17796479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose GetPreferredSize().width()); 17896479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose 17996479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose const int kSingleColumnSetId = 0; 18096479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose views::ColumnSet* column_set = layout->AddColumnSet(kSingleColumnSetId); 18196479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose column_set->AddPaddingColumn(0, views::kPanelHorizMargin); 18296479da6ad9d921d875e7be29fe1bfa127be8069Jordan Rose column_set->AddColumn(GridLayout::LEADING, GridLayout::FILL, 0, 183769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis GridLayout::USE_PREF, 0, 0); 184769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis column_set->AddPaddingColumn(0, views::kPanelHorizMargin); 185390909c89c98ab1807e15e033a72e975f866fb23Anna Zaks 186390909c89c98ab1807e15e033a72e975f866fb23Anna Zaks ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 187769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis views::Label* title_label = 188390909c89c98ab1807e15e033a72e975f866fb23Anna Zaks new views::Label(manage_passwords_bubble_model_->title()); 189769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis title_label->SetMultiLine(true); 190769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis title_label->SetFontList(rb->GetFontList(ui::ResourceBundle::MediumFont)); 191769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 192769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis layout->StartRowWithPadding(0, kSingleColumnSetId, 193769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis 0, views::kRelatedControlSmallVerticalSpacing); 194769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis layout->AddView(title_label); 195769ce3e93ad35bd9ac28e4d8b8f035ae4fd9a5b5Argyrios Kyrtzidis layout->AddPaddingRow(0, views::kUnrelatedControlVerticalSpacing); 1969fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis 1979fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis if (manage_passwords_bubble_model_->manage_passwords_bubble_state() == 1989fb9474c5b267400d4abfbff63c8b39f378235d4Argyrios Kyrtzidis ManagePasswordsBubbleModel::PASSWORD_TO_BE_SAVED) { 199312dbec867f6b8d6b86fd562c53352cd4db27468Argyrios Kyrtzidis const int kSingleColumnCredentialsId = 1; 200312dbec867f6b8d6b86fd562c53352cd4db27468Argyrios Kyrtzidis views::ColumnSet* single_column = 201390909c89c98ab1807e15e033a72e975f866fb23Anna Zaks layout->AddColumnSet(kSingleColumnCredentialsId); 202390909c89c98ab1807e15e033a72e975f866fb23Anna Zaks single_column->AddPaddingColumn(0, views::kPanelHorizMargin); 203312dbec867f6b8d6b86fd562c53352cd4db27468Argyrios Kyrtzidis single_column->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, 204390909c89c98ab1807e15e033a72e975f866fb23Anna Zaks GridLayout::USE_PREF, 0, 0); 205312dbec867f6b8d6b86fd562c53352cd4db27468Argyrios Kyrtzidis single_column->AddPaddingColumn(0, views::kPanelHorizMargin); 206312dbec867f6b8d6b86fd562c53352cd4db27468Argyrios Kyrtzidis 207312dbec867f6b8d6b86fd562c53352cd4db27468Argyrios Kyrtzidis layout->StartRow(0, kSingleColumnCredentialsId); 208312dbec867f6b8d6b86fd562c53352cd4db27468Argyrios Kyrtzidis ManagePasswordItemView* item = new ManagePasswordItemView( 209312dbec867f6b8d6b86fd562c53352cd4db27468Argyrios Kyrtzidis manage_passwords_bubble_model_, 210312dbec867f6b8d6b86fd562c53352cd4db27468Argyrios Kyrtzidis manage_passwords_bubble_model_->pending_credentials(), 211312dbec867f6b8d6b86fd562c53352cd4db27468Argyrios Kyrtzidis first_field_width, second_field_width); 212312dbec867f6b8d6b86fd562c53352cd4db27468Argyrios Kyrtzidis item->SetBorder(views::Border::CreateSolidSidedBorder( 213312dbec867f6b8d6b86fd562c53352cd4db27468Argyrios Kyrtzidis 1, 214312dbec867f6b8d6b86fd562c53352cd4db27468Argyrios Kyrtzidis 0, 21530726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis 1, 21630726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis 0, 21730726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis GetNativeTheme()->GetSystemColor( 21830726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis ui::NativeTheme::kColorId_EnabledMenuButtonBorderColor))); 21930726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis layout->AddView(item); 22030726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis 22130726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis const int kDoubleColumnSetId = 2; 22230726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis views::ColumnSet* double_column_set = 22330726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis layout->AddColumnSet(kDoubleColumnSetId); 22430726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis double_column_set->AddPaddingColumn(0, views::kPanelHorizMargin); 22530726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis double_column_set->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 1, 22630726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis GridLayout::USE_PREF, 0, 0); 22730726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis double_column_set->AddPaddingColumn(0, views::kRelatedButtonHSpacing); 22830726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis double_column_set->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0, 22930726c6baee1417307236e854f1474fdb3cedb98Argyrios Kyrtzidis GridLayout::USE_PREF, 0, 0); 230344c77aac25e5d960aced3f45fbaa09853383f6dAnna Zaks double_column_set->AddPaddingColumn(0, views::kPanelHorizMargin); 231af5800a1e287990bb547e052f257adeeae5ab476Argyrios Kyrtzidis 232344c77aac25e5d960aced3f45fbaa09853383f6dAnna Zaks cancel_button_ = new views::LabelButton( 233344c77aac25e5d960aced3f45fbaa09853383f6dAnna Zaks this, l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_CANCEL_BUTTON)); 234344c77aac25e5d960aced3f45fbaa09853383f6dAnna Zaks cancel_button_->SetStyle(views::Button::STYLE_BUTTON); 235af5800a1e287990bb547e052f257adeeae5ab476Argyrios Kyrtzidis save_button_ = new views::BlueButton( 236af5800a1e287990bb547e052f257adeeae5ab476Argyrios Kyrtzidis this, l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SAVE_BUTTON)); 237af5800a1e287990bb547e052f257adeeae5ab476Argyrios Kyrtzidis 238af5800a1e287990bb547e052f257adeeae5ab476Argyrios Kyrtzidis layout->StartRowWithPadding(0, kDoubleColumnSetId, 239af5800a1e287990bb547e052f257adeeae5ab476Argyrios Kyrtzidis 0, views::kRelatedControlVerticalSpacing); 240344c77aac25e5d960aced3f45fbaa09853383f6dAnna Zaks layout->AddView(save_button_); 241344c77aac25e5d960aced3f45fbaa09853383f6dAnna Zaks layout->AddView(cancel_button_); 242af5800a1e287990bb547e052f257adeeae5ab476Argyrios Kyrtzidis layout->AddPaddingRow(0, views::kRelatedControlVerticalSpacing); 243af5800a1e287990bb547e052f257adeeae5ab476Argyrios Kyrtzidis } else { 244af5800a1e287990bb547e052f257adeeae5ab476Argyrios Kyrtzidis const int kSingleButtonSetId = 3; 245cc05d511b26ac6dc80fcbcc78ac305d2755aa0b9Argyrios Kyrtzidis views::ColumnSet* single_column_set = 246cc05d511b26ac6dc80fcbcc78ac305d2755aa0b9Argyrios Kyrtzidis layout->AddColumnSet(kSingleButtonSetId); 247f236b6503a4dbc44c1fccb8756bd57c9d0efdf05Anna Zaks single_column_set->AddPaddingColumn(0, views::kPanelHorizMargin); 248f236b6503a4dbc44c1fccb8756bd57c9d0efdf05Anna Zaks single_column_set->AddColumn(GridLayout::LEADING, GridLayout::CENTER, 1, 249f236b6503a4dbc44c1fccb8756bd57c9d0efdf05Anna Zaks GridLayout::USE_PREF, 0, 0); 250cc05d511b26ac6dc80fcbcc78ac305d2755aa0b9Argyrios Kyrtzidis single_column_set->AddPaddingColumn(0, 251cc05d511b26ac6dc80fcbcc78ac305d2755aa0b9Argyrios Kyrtzidis views::kUnrelatedControlHorizontalSpacing); 252cc05d511b26ac6dc80fcbcc78ac305d2755aa0b9Argyrios Kyrtzidis single_column_set->AddColumn(GridLayout::TRAILING, GridLayout::CENTER, 0, 253cc05d511b26ac6dc80fcbcc78ac305d2755aa0b9Argyrios Kyrtzidis GridLayout::USE_PREF, 0, 0); 254cc05d511b26ac6dc80fcbcc78ac305d2755aa0b9Argyrios Kyrtzidis single_column_set->AddPaddingColumn(0, views::kPanelHorizMargin); 255cc05d511b26ac6dc80fcbcc78ac305d2755aa0b9Argyrios Kyrtzidis 256cc05d511b26ac6dc80fcbcc78ac305d2755aa0b9Argyrios Kyrtzidis const int kSingleColumnCredentialsId = 1; 257cc05d511b26ac6dc80fcbcc78ac305d2755aa0b9Argyrios Kyrtzidis views::ColumnSet* single_column = 258cc05d511b26ac6dc80fcbcc78ac305d2755aa0b9Argyrios Kyrtzidis layout->AddColumnSet(kSingleColumnCredentialsId); 259cc05d511b26ac6dc80fcbcc78ac305d2755aa0b9Argyrios Kyrtzidis single_column->AddPaddingColumn(0, views::kPanelHorizMargin); 260cc05d511b26ac6dc80fcbcc78ac305d2755aa0b9Argyrios Kyrtzidis single_column->AddColumn(GridLayout::FILL, GridLayout::FILL, 1, 261183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis GridLayout::USE_PREF, 0, 0); 262183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis single_column->AddPaddingColumn(0, views::kPanelHorizMargin); 26323111dcd66ee242bb5caf1ecab01bd930ee42c4cTed Kremenek 264183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis if (!manage_passwords_bubble_model_->best_matches().empty()) { 265183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis for (autofill::PasswordFormMap::const_iterator i( 266183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis manage_passwords_bubble_model_->best_matches().begin()); 267183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis i != manage_passwords_bubble_model_->best_matches().end(); ++i) { 268183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis layout->StartRow(0, kSingleColumnCredentialsId); 269183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis ManagePasswordItemView* item = new ManagePasswordItemView( 270183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis manage_passwords_bubble_model_, *i->second, first_field_width, 271183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis second_field_width); 272183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis if (i == manage_passwords_bubble_model_->best_matches().begin()) { 273183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis item->SetBorder(views::Border::CreateSolidSidedBorder( 274183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 1, 275183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 0, 276183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 1, 277183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 0, 278183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis GetNativeTheme()->GetSystemColor( 279183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis ui::NativeTheme::kColorId_EnabledMenuButtonBorderColor))); 280183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis } else { 281183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis item->SetBorder(views::Border::CreateSolidSidedBorder( 282183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 0, 283183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 0, 284183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 1, 285183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 0, 286183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis GetNativeTheme()->GetSystemColor( 287183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis ui::NativeTheme::kColorId_EnabledMenuButtonBorderColor))); 288183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis } 289183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis layout->AddView(item); 290183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis } 291183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis } else if (!manage_passwords_bubble_model_->password_submitted()) { 292183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis views::Label* empty_label = new views::Label( 29323111dcd66ee242bb5caf1ecab01bd930ee42c4cTed Kremenek l10n_util::GetStringUTF16(IDS_MANAGE_PASSWORDS_NO_PASSWORDS)); 29418c66fdc3c4008d335885695fe36fb5353c5f672Ted Kremenek empty_label->SetMultiLine(true); 29523111dcd66ee242bb5caf1ecab01bd930ee42c4cTed Kremenek layout->StartRow(0, kSingleColumnSetId); 296bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks layout->AddView(empty_label); 297537716ad8dd10f984b6cfe6985afade1185c5e3cJordy Rose } 29866c40400e7d6272b0cd675ada18dd62c1f0362c7Anna Zaks 299740d490593e0de8732a697c9f77b90ddd463863bJordan Rose if (manage_passwords_bubble_model_->password_submitted()) { 30035bdbf40624beba3fc00cb72ab444659939c1a6bTed Kremenek layout->StartRow(0, kSingleColumnCredentialsId); 30166c40400e7d6272b0cd675ada18dd62c1f0362c7Anna Zaks ManagePasswordItemView* item = new ManagePasswordItemView( 302183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis manage_passwords_bubble_model_, 303183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis manage_passwords_bubble_model_->pending_credentials(), 30418c66fdc3c4008d335885695fe36fb5353c5f672Ted Kremenek first_field_width, second_field_width); 30523111dcd66ee242bb5caf1ecab01bd930ee42c4cTed Kremenek if (manage_passwords_bubble_model_->best_matches().empty()) { 306183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis item->SetBorder(views::Border::CreateSolidSidedBorder( 307183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 1, 308183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 0, 309183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 1, 310183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 0, 311183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis GetNativeTheme()->GetSystemColor( 312183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis ui::NativeTheme::kColorId_EnabledMenuButtonBorderColor))); 313183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis } else { 314183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis item->SetBorder(views::Border::CreateSolidSidedBorder( 315183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 0, 316183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 0, 317183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 1, 318183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis 0, 319183ff98f425d470c2a0276880aaf43496c9dad14Argyrios Kyrtzidis GetNativeTheme()->GetSystemColor( 320bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks ui::NativeTheme::kColorId_EnabledMenuButtonBorderColor))); 321bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks } 322bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks layout->AddView(item); 323da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev } 324bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks 325bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks manage_link_ = 326233e26acc0ff2a1098f4c813f69286fce840a422Anna Zaks new views::Link(manage_passwords_bubble_model_->manage_link()); 32741988f331a74a72cf243a2a68ffb56418e9a174eAnna Zaks manage_link_->SetUnderline(false); 328da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev manage_link_->set_listener(this); 329da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev layout->StartRowWithPadding(0, kSingleButtonSetId, 330da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev 0, views::kRelatedControlVerticalSpacing); 331da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev layout->AddView(manage_link_); 33241988f331a74a72cf243a2a68ffb56418e9a174eAnna Zaks 33341988f331a74a72cf243a2a68ffb56418e9a174eAnna Zaks done_button_ = 33441988f331a74a72cf243a2a68ffb56418e9a174eAnna Zaks new views::LabelButton(this, l10n_util::GetStringUTF16(IDS_DONE)); 335da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev done_button_->SetStyle(views::Button::STYLE_BUTTON); 336da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev layout->AddView(done_button_); 337da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev } 338da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev} 339da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev 340b7a747b0c271faeeb8d0f886f0e691eb25f637d9Anton Yartsevvoid ManagePasswordsBubbleView::WindowClosing() { 341b7a747b0c271faeeb8d0f886f0e691eb25f637d9Anton Yartsev // Close() closes the window asynchronously, so by the time we reach here, 342b7a747b0c271faeeb8d0f886f0e691eb25f637d9Anton Yartsev // |manage_passwords_bubble_| may have already been reset. 343da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev if (manage_passwords_bubble_ == this) 344da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev manage_passwords_bubble_ = NULL; 345da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev} 346da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev 347da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsevvoid ManagePasswordsBubbleView::ButtonPressed(views::Button* sender, 348da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev const ui::Event& event) { 349da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev if (sender == save_button_) 350da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev manage_passwords_bubble_model_->OnSaveClicked(); 351da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev else if (sender == cancel_button_) 352bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks manage_passwords_bubble_model_->OnCancelClicked(); 353bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks else 354bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks DCHECK_EQ(done_button_, sender); 355bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks icon_view_->SetTooltip( 356bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks manage_passwords_bubble_model_->manage_passwords_bubble_state() == 357bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks ManagePasswordsBubbleModel::PASSWORD_TO_BE_SAVED); 358bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks Close(); 359bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks} 360bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks 361bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaksvoid ManagePasswordsBubbleView::LinkClicked(views::Link* source, 362bf53dfac8195835028bd6347433f7dbebcc29fc1Anna Zaks int event_flags) { 36341988f331a74a72cf243a2a68ffb56418e9a174eAnna Zaks DCHECK_EQ(source, manage_link_); 36441988f331a74a72cf243a2a68ffb56418e9a174eAnna Zaks manage_passwords_bubble_model_->OnManageLinkClicked(); 36541988f331a74a72cf243a2a68ffb56418e9a174eAnna Zaks} 366da8d37ce42d2db4e1e76ee6f7f38f10f6b0ef0f8Anton Yartsev