Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(124)

Side by Side Diff: chrome/browser/ui/views/passwords/manage_passwords_bubble_view.cc

Issue 2907983002: Allow dialogs to use a custom View as their title. (Closed)
Patch Set: pass strings by reference Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h" 5 #include "chrome/browser/ui/views/passwords/manage_passwords_bubble_view.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/metrics/user_metrics.h" 8 #include "base/metrics/user_metrics.h"
9 #include "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "base/timer/timer.h" 10 #include "base/timer/timer.h"
(...skipping 14 matching lines...) Expand all
25 #include "chrome/browser/ui/views/passwords/manage_passwords_icon_views.h" 25 #include "chrome/browser/ui/views/passwords/manage_passwords_icon_views.h"
26 #include "chrome/grit/generated_resources.h" 26 #include "chrome/grit/generated_resources.h"
27 #include "components/strings/grit/components_strings.h" 27 #include "components/strings/grit/components_strings.h"
28 #include "ui/base/l10n/l10n_util.h" 28 #include "ui/base/l10n/l10n_util.h"
29 #include "ui/base/material_design/material_design_controller.h" 29 #include "ui/base/material_design/material_design_controller.h"
30 #include "ui/base/resource/resource_bundle.h" 30 #include "ui/base/resource/resource_bundle.h"
31 #include "ui/base/ui_features.h" 31 #include "ui/base/ui_features.h"
32 #include "ui/gfx/color_palette.h" 32 #include "ui/gfx/color_palette.h"
33 #include "ui/gfx/image/image_skia.h" 33 #include "ui/gfx/image/image_skia.h"
34 #include "ui/native_theme/native_theme.h" 34 #include "ui/native_theme/native_theme.h"
35 #include "ui/views/bubble/bubble_frame_view.h"
35 #include "ui/views/controls/button/blue_button.h" 36 #include "ui/views/controls/button/blue_button.h"
36 #include "ui/views/controls/button/md_text_button.h" 37 #include "ui/views/controls/button/md_text_button.h"
37 #include "ui/views/controls/link.h" 38 #include "ui/views/controls/link.h"
38 #include "ui/views/controls/link_listener.h" 39 #include "ui/views/controls/link_listener.h"
39 #include "ui/views/controls/separator.h" 40 #include "ui/views/controls/separator.h"
40 #include "ui/views/controls/styled_label.h" 41 #include "ui/views/controls/styled_label.h"
41 #include "ui/views/controls/styled_label_listener.h"
42 #include "ui/views/layout/fill_layout.h" 42 #include "ui/views/layout/fill_layout.h"
43 #include "ui/views/layout/grid_layout.h" 43 #include "ui/views/layout/grid_layout.h"
44 #include "ui/views/widget/widget.h" 44 #include "ui/views/widget/widget.h"
45 45
46 #if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) 46 #if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER)
47 #include "chrome/browser/ui/views/frame/browser_view.h" 47 #include "chrome/browser/ui/views/frame/browser_view.h"
48 #endif 48 #endif
49 49
50 #if defined(OS_WIN) 50 #if defined(OS_WIN)
51 #include "chrome/browser/ui/views/desktop_ios_promotion/desktop_ios_promotion_bu bble_view.h" 51 #include "chrome/browser/ui/views/desktop_ios_promotion/desktop_ios_promotion_bu bble_view.h"
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 break; 163 break;
164 } 164 }
165 } 165 }
166 166
167 views::StyledLabel::RangeStyleInfo GetLinkStyle() { 167 views::StyledLabel::RangeStyleInfo GetLinkStyle() {
168 auto result = views::StyledLabel::RangeStyleInfo::CreateForLink(); 168 auto result = views::StyledLabel::RangeStyleInfo::CreateForLink();
169 result.disable_line_wrapping = false; 169 result.disable_line_wrapping = false;
170 return result; 170 return result;
171 } 171 }
172 172
173 // If a special title is required (i.e. one that contains links), creates a
174 // title view and a row for it in |layout|.
175 // TODO(estade): this should be removed and a replaced by a normal title (via
176 // GetWindowTitle).
177 void AddTitleRowWithLink(views::GridLayout* layout,
178 ManagePasswordsBubbleModel* model,
179 views::StyledLabelListener* listener) {
180 if (model->title_brand_link_range().is_empty())
181 return;
182
183 views::StyledLabel* title_label =
184 new views::StyledLabel(model->title(), listener);
185 title_label->SetBaseFontList(views::style::GetFont(
186 views::style::CONTEXT_DIALOG_TITLE, views::style::STYLE_PRIMARY));
187 title_label->AddStyleRange(model->title_brand_link_range(), GetLinkStyle());
188 layout->StartRow(0, SINGLE_VIEW_COLUMN_SET);
189 layout->AddView(title_label);
190 layout->AddPaddingRow(0, ChromeLayoutProvider::Get()
191 ->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS)
192 .top());
193 }
194
195 } // namespace 173 } // namespace
196 174
197 // ManagePasswordsBubbleView::AutoSigninView ---------------------------------- 175 // ManagePasswordsBubbleView::AutoSigninView ----------------------------------
198 176
199 // A view containing just one credential that was used for for automatic signing 177 // A view containing just one credential that was used for for automatic signing
200 // in. 178 // in.
201 class ManagePasswordsBubbleView::AutoSigninView 179 class ManagePasswordsBubbleView::AutoSigninView
202 : public views::View, 180 : public views::View,
203 public views::ButtonListener, 181 public views::ButtonListener,
204 public views::WidgetObserver { 182 public views::WidgetObserver {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 void ManagePasswordsBubbleView::AutoSigninView::OnTimer() { 261 void ManagePasswordsBubbleView::AutoSigninView::OnTimer() {
284 parent_->model()->OnAutoSignInToastTimeout(); 262 parent_->model()->OnAutoSignInToastTimeout();
285 parent_->CloseBubble(); 263 parent_->CloseBubble();
286 } 264 }
287 265
288 // ManagePasswordsBubbleView::PendingView ------------------------------------- 266 // ManagePasswordsBubbleView::PendingView -------------------------------------
289 267
290 // A view offering the user the ability to save credentials. Contains a 268 // A view offering the user the ability to save credentials. Contains a
291 // single ManagePasswordItemsView, along with a "Save Passwords" button 269 // single ManagePasswordItemsView, along with a "Save Passwords" button
292 // and a "Never" button. 270 // and a "Never" button.
293 class ManagePasswordsBubbleView::PendingView 271 class ManagePasswordsBubbleView::PendingView : public views::View,
294 : public views::View, 272 public views::ButtonListener {
295 public views::ButtonListener,
296 public views::StyledLabelListener {
297 public: 273 public:
298 explicit PendingView(ManagePasswordsBubbleView* parent); 274 explicit PendingView(ManagePasswordsBubbleView* parent);
299 ~PendingView() override; 275 ~PendingView() override;
300 276
301 private: 277 private:
302 // views::ButtonListener: 278 // views::ButtonListener:
303 void ButtonPressed(views::Button* sender, const ui::Event& event) override; 279 void ButtonPressed(views::Button* sender, const ui::Event& event) override;
304 280
305 // views::StyledLabelListener:
306 void StyledLabelLinkClicked(views::StyledLabel* label,
307 const gfx::Range& range,
308 int event_flags) override;
309
310 ManagePasswordsBubbleView* parent_; 281 ManagePasswordsBubbleView* parent_;
311 282
312 views::Button* save_button_; 283 views::Button* save_button_;
313 views::Button* never_button_; 284 views::Button* never_button_;
314 285
315 DISALLOW_COPY_AND_ASSIGN(PendingView); 286 DISALLOW_COPY_AND_ASSIGN(PendingView);
316 }; 287 };
317 288
318 ManagePasswordsBubbleView::PendingView::PendingView( 289 ManagePasswordsBubbleView::PendingView::PendingView(
319 ManagePasswordsBubbleView* parent) 290 ManagePasswordsBubbleView* parent)
320 : parent_(parent) { 291 : parent_(parent) {
321 views::GridLayout* layout = new views::GridLayout(this); 292 views::GridLayout* layout = new views::GridLayout(this);
322 layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0)); 293 layout->set_minimum_size(gfx::Size(kDesiredBubbleWidth, 0));
323 SetLayoutManager(layout); 294 SetLayoutManager(layout);
324 295
325 // Create the pending credential item, save button and refusal combobox. 296 // Create the pending credential item, save button and refusal combobox.
326 ManagePasswordItemsView* item = nullptr; 297 ManagePasswordItemsView* item = nullptr;
327 if (!parent->model()->pending_password().username_value.empty()) { 298 if (!parent->model()->pending_password().username_value.empty()) {
328 item = new ManagePasswordItemsView(parent_->model(), 299 item = new ManagePasswordItemsView(parent_->model(),
329 &parent->model()->pending_password()); 300 &parent->model()->pending_password());
330 } 301 }
331 save_button_ = views::MdTextButton::CreateSecondaryUiBlueButton( 302 save_button_ = views::MdTextButton::CreateSecondaryUiBlueButton(
332 this, l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SAVE_BUTTON)); 303 this, l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_SAVE_BUTTON));
333 never_button_ = views::MdTextButton::CreateSecondaryUiButton( 304 never_button_ = views::MdTextButton::CreateSecondaryUiButton(
334 this, 305 this,
335 l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_BUBBLE_BLACKLIST_BUTTON)); 306 l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_BUBBLE_BLACKLIST_BUTTON));
336 307
337 // Title row.
338 BuildColumnSet(layout, SINGLE_VIEW_COLUMN_SET); 308 BuildColumnSet(layout, SINGLE_VIEW_COLUMN_SET);
339 AddTitleRowWithLink(layout, parent_->model(), this);
340 309
341 // Credential row. 310 // Credential row.
342 if (item) { 311 if (item) {
343 layout->StartRow(0, SINGLE_VIEW_COLUMN_SET); 312 layout->StartRow(0, SINGLE_VIEW_COLUMN_SET);
344 layout->AddView(item); 313 layout->AddView(item);
345 layout->AddPaddingRow(0, 314 layout->AddPaddingRow(0,
346 ChromeLayoutProvider::Get() 315 ChromeLayoutProvider::Get()
347 ->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS) 316 ->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS)
348 .bottom()); 317 .bottom());
349 } 318 }
(...skipping 21 matching lines...) Expand all
371 } 340 }
372 } else if (sender == never_button_) { 341 } else if (sender == never_button_) {
373 parent_->model()->OnNeverForThisSiteClicked(); 342 parent_->model()->OnNeverForThisSiteClicked();
374 } else { 343 } else {
375 NOTREACHED(); 344 NOTREACHED();
376 } 345 }
377 346
378 parent_->CloseBubble(); 347 parent_->CloseBubble();
379 } 348 }
380 349
381 void ManagePasswordsBubbleView::PendingView::StyledLabelLinkClicked(
382 views::StyledLabel* label,
383 const gfx::Range& range,
384 int event_flags) {
385 DCHECK_EQ(range, parent_->model()->title_brand_link_range());
386 parent_->model()->OnBrandLinkClicked();
387 }
388
389 // ManagePasswordsBubbleView::ManageView -------------------------------------- 350 // ManagePasswordsBubbleView::ManageView --------------------------------------
390 351
391 // A view offering the user a list of their currently saved credentials 352 // A view offering the user a list of their currently saved credentials
392 // for the current page, along with a "Manage passwords" link and a 353 // for the current page, along with a "Manage passwords" link and a
393 // "Done" button. 354 // "Done" button.
394 class ManagePasswordsBubbleView::ManageView : public views::View, 355 class ManagePasswordsBubbleView::ManageView : public views::View,
395 public views::ButtonListener, 356 public views::ButtonListener,
396 public views::LinkListener { 357 public views::LinkListener {
397 public: 358 public:
398 explicit ManageView(ManagePasswordsBubbleView* parent); 359 explicit ManageView(ManagePasswordsBubbleView* parent);
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 } 580 }
620 581
621 // ManagePasswordsBubbleView::UpdatePendingView ------------------------------- 582 // ManagePasswordsBubbleView::UpdatePendingView -------------------------------
622 583
623 // A view offering the user the ability to update credentials. Contains a 584 // A view offering the user the ability to update credentials. Contains a
624 // single ManagePasswordItemsView (in case of one credentials) or 585 // single ManagePasswordItemsView (in case of one credentials) or
625 // CredentialsSelectionView otherwise, along with a "Update Passwords" button 586 // CredentialsSelectionView otherwise, along with a "Update Passwords" button
626 // and a rejection button. 587 // and a rejection button.
627 class ManagePasswordsBubbleView::UpdatePendingView 588 class ManagePasswordsBubbleView::UpdatePendingView
628 : public views::View, 589 : public views::View,
629 public views::ButtonListener, 590 public views::ButtonListener {
630 public views::StyledLabelListener {
631 public: 591 public:
632 explicit UpdatePendingView(ManagePasswordsBubbleView* parent); 592 explicit UpdatePendingView(ManagePasswordsBubbleView* parent);
633 ~UpdatePendingView() override; 593 ~UpdatePendingView() override;
634 594
635 private: 595 private:
636 // views::ButtonListener: 596 // views::ButtonListener:
637 void ButtonPressed(views::Button* sender, const ui::Event& event) override; 597 void ButtonPressed(views::Button* sender, const ui::Event& event) override;
638 598
639 // views::StyledLabelListener:
640 void StyledLabelLinkClicked(views::StyledLabel* label,
641 const gfx::Range& range,
642 int event_flags) override;
643
644 ManagePasswordsBubbleView* parent_; 599 ManagePasswordsBubbleView* parent_;
645 600
646 CredentialsSelectionView* selection_view_; 601 CredentialsSelectionView* selection_view_;
647 602
648 views::Button* update_button_; 603 views::Button* update_button_;
649 views::Button* nope_button_; 604 views::Button* nope_button_;
650 605
651 DISALLOW_COPY_AND_ASSIGN(UpdatePendingView); 606 DISALLOW_COPY_AND_ASSIGN(UpdatePendingView);
652 }; 607 };
653 608
(...skipping 13 matching lines...) Expand all
667 } else { 622 } else {
668 item = new ManagePasswordItemsView(parent_->model(), 623 item = new ManagePasswordItemsView(parent_->model(),
669 &parent->model()->pending_password()); 624 &parent->model()->pending_password());
670 } 625 }
671 nope_button_ = views::MdTextButton::CreateSecondaryUiButton( 626 nope_button_ = views::MdTextButton::CreateSecondaryUiButton(
672 this, l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_CANCEL_BUTTON)); 627 this, l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_CANCEL_BUTTON));
673 628
674 update_button_ = views::MdTextButton::CreateSecondaryUiBlueButton( 629 update_button_ = views::MdTextButton::CreateSecondaryUiBlueButton(
675 this, l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_UPDATE_BUTTON)); 630 this, l10n_util::GetStringUTF16(IDS_PASSWORD_MANAGER_UPDATE_BUTTON));
676 631
677 // Title row.
678 BuildColumnSet(layout, SINGLE_VIEW_COLUMN_SET); 632 BuildColumnSet(layout, SINGLE_VIEW_COLUMN_SET);
679 AddTitleRowWithLink(layout, parent_->model(), this);
680 633
681 // Credential row. 634 // Credential row.
682 layout->StartRow(0, SINGLE_VIEW_COLUMN_SET); 635 layout->StartRow(0, SINGLE_VIEW_COLUMN_SET);
683 layout->AddView(item); 636 layout->AddView(item);
684 layout->AddPaddingRow( 637 layout->AddPaddingRow(
685 0, 638 0,
686 layout_provider->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS).bottom()); 639 layout_provider->GetInsetsMetric(views::INSETS_DIALOG_CONTENTS).bottom());
687 640
688 // Button row. 641 // Button row.
689 BuildColumnSet(layout, DOUBLE_BUTTON_COLUMN_SET); 642 BuildColumnSet(layout, DOUBLE_BUTTON_COLUMN_SET);
(...skipping 19 matching lines...) Expand all
709 *selection_view_->GetSelectedCredentials()); 662 *selection_view_->GetSelectedCredentials());
710 } else { 663 } else {
711 parent_->model()->OnUpdateClicked(parent_->model()->pending_password()); 664 parent_->model()->OnUpdateClicked(parent_->model()->pending_password());
712 } 665 }
713 } else { 666 } else {
714 parent_->model()->OnNopeUpdateClicked(); 667 parent_->model()->OnNopeUpdateClicked();
715 } 668 }
716 parent_->CloseBubble(); 669 parent_->CloseBubble();
717 } 670 }
718 671
719 void ManagePasswordsBubbleView::UpdatePendingView::StyledLabelLinkClicked(
720 views::StyledLabel* label,
721 const gfx::Range& range,
722 int event_flags) {
723 DCHECK_EQ(range, parent_->model()->title_brand_link_range());
724 parent_->model()->OnBrandLinkClicked();
725 }
726
727 // ManagePasswordsBubbleView -------------------------------------------------- 672 // ManagePasswordsBubbleView --------------------------------------------------
728 673
729 // static 674 // static
730 ManagePasswordsBubbleView* ManagePasswordsBubbleView::manage_passwords_bubble_ = 675 ManagePasswordsBubbleView* ManagePasswordsBubbleView::manage_passwords_bubble_ =
731 NULL; 676 NULL;
732 677
733 #if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER) 678 #if !defined(OS_MACOSX) || BUILDFLAG(MAC_VIEWS_BROWSER)
734 // static 679 // static
735 void ManagePasswordsBubbleView::ShowBubble( 680 void ManagePasswordsBubbleView::ShowBubble(
736 content::WebContents* web_contents, 681 content::WebContents* web_contents,
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
826 SetLayoutManager(new views::FillLayout); 771 SetLayoutManager(new views::FillLayout);
827 772
828 CreateChild(); 773 CreateChild();
829 } 774 }
830 775
831 void ManagePasswordsBubbleView::CloseBubble() { 776 void ManagePasswordsBubbleView::CloseBubble() {
832 mouse_handler_.reset(); 777 mouse_handler_.reset();
833 LocationBarBubbleDelegateView::CloseBubble(); 778 LocationBarBubbleDelegateView::CloseBubble();
834 } 779 }
835 780
781 views::View* ManagePasswordsBubbleView::CreateTitleView(
782 const base::string16& title_text) {
783 title_view_ = new views::StyledLabel(title_text, this);
784 title_view_->SetBaseFontList(views::style::GetFont(
785 views::style::CONTEXT_DIALOG_TITLE, views::style::STYLE_PRIMARY));
786 if (!model_.title_brand_link_range().is_empty())
787 title_view_->AddStyleRange(model_.title_brand_link_range(), GetLinkStyle());
788 return title_view_;
789 }
790
836 base::string16 ManagePasswordsBubbleView::GetWindowTitle() const { 791 base::string16 ManagePasswordsBubbleView::GetWindowTitle() const {
837 return model_.title(); 792 return model_.title();
838 } 793 }
839 794
840 gfx::ImageSkia ManagePasswordsBubbleView::GetWindowIcon() { 795 gfx::ImageSkia ManagePasswordsBubbleView::GetWindowIcon() {
841 #if defined(OS_WIN) 796 #if defined(OS_WIN)
842 if (model_.state() == password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE) { 797 if (model_.state() == password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE) {
843 return desktop_ios_promotion::GetPromoImage( 798 return desktop_ios_promotion::GetPromoImage(
844 GetNativeTheme()->GetSystemColor( 799 GetNativeTheme()->GetSystemColor(
845 ui::NativeTheme::kColorId_TextfieldDefaultColor)); 800 ui::NativeTheme::kColorId_TextfieldDefaultColor));
846 } 801 }
847 #endif 802 #endif
848 return gfx::ImageSkia(); 803 return gfx::ImageSkia();
849 } 804 }
850 805
851 bool ManagePasswordsBubbleView::ShouldShowWindowTitle() const {
852 // Since bubble titles don't support links, fall back to a custom title view
853 // if we need to show a link. Only use the normal title path if there's no
854 // link.
855 return model_.title_brand_link_range().is_empty();
856 }
857
858 bool ManagePasswordsBubbleView::ShouldShowWindowIcon() const { 806 bool ManagePasswordsBubbleView::ShouldShowWindowIcon() const {
859 return model_.state() == password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE; 807 return model_.state() == password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE;
860 } 808 }
861 809
862 bool ManagePasswordsBubbleView::ShouldShowCloseButton() const { 810 bool ManagePasswordsBubbleView::ShouldShowCloseButton() const {
863 return model_.state() == password_manager::ui::PENDING_PASSWORD_STATE || 811 return model_.state() == password_manager::ui::PENDING_PASSWORD_STATE ||
864 model_.state() == password_manager::ui::CHROME_SIGN_IN_PROMO_STATE || 812 model_.state() == password_manager::ui::CHROME_SIGN_IN_PROMO_STATE ||
865 model_.state() == password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE; 813 model_.state() == password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE;
866 } 814 }
867 815
816 void ManagePasswordsBubbleView::StyledLabelLinkClicked(
817 views::StyledLabel* label,
818 const gfx::Range& range,
819 int event_flags) {
820 DCHECK_EQ(range, model_.title_brand_link_range());
Peter Kasting 2017/06/17 01:16:20 Nit: (expected, actual)
Bret 2017/06/21 22:37:54 Done.
821 model_.OnBrandLinkClicked();
822 }
823
868 void ManagePasswordsBubbleView::Refresh() { 824 void ManagePasswordsBubbleView::Refresh() {
869 RemoveAllChildViews(true); 825 RemoveAllChildViews(true);
870 initially_focused_view_ = NULL; 826 initially_focused_view_ = NULL;
871 CreateChild(); 827 CreateChild();
872 // Show/hide the close button. 828 // Show/hide the close button.
873 GetWidget()->non_client_view()->ResetWindowControls(); 829 GetWidget()->non_client_view()->ResetWindowControls();
874 GetWidget()->UpdateWindowIcon(); 830 GetWidget()->UpdateWindowIcon();
875 GetWidget()->UpdateWindowTitle(); 831 SetupTitleView();
876 if (model_.state() == password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE) { 832 if (model_.state() == password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE) {
877 // Update the height and keep the existing width. 833 // Update the height and keep the existing width.
878 gfx::Rect bubble_bounds = GetWidget()->GetWindowBoundsInScreen(); 834 gfx::Rect bubble_bounds = GetWidget()->GetWindowBoundsInScreen();
879 bubble_bounds.set_height( 835 bubble_bounds.set_height(
880 GetWidget()->GetRootView()->GetHeightForWidth(bubble_bounds.width())); 836 GetWidget()->GetRootView()->GetHeightForWidth(bubble_bounds.width()));
881 GetWidget()->SetBounds(bubble_bounds); 837 GetWidget()->SetBounds(bubble_bounds);
882 } else { 838 } else {
883 SizeToContents(); 839 SizeToContents();
884 } 840 }
885 } 841 }
(...skipping 15 matching lines...) Expand all
901 } else if (model_.state() == 857 } else if (model_.state() ==
902 password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE) { 858 password_manager::ui::CHROME_DESKTOP_IOS_PROMO_STATE) {
903 AddChildView(new DesktopIOSPromotionBubbleView( 859 AddChildView(new DesktopIOSPromotionBubbleView(
904 model_.GetProfile(), 860 model_.GetProfile(),
905 desktop_ios_promotion::PromotionEntryPoint::SAVE_PASSWORD_BUBBLE)); 861 desktop_ios_promotion::PromotionEntryPoint::SAVE_PASSWORD_BUBBLE));
906 #endif 862 #endif
907 } else { 863 } else {
908 AddChildView(new ManageView(this)); 864 AddChildView(new ManageView(this));
909 } 865 }
910 } 866 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698