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