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

Side by Side Diff: chrome/browser/ui/views/profiles/force_signout_dialog.cc

Issue 2862653002: If force-sign-in policy is enabled, popup warning dialog before window closing if auth token becom… (Closed)
Patch Set: cr Created 3 years, 7 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
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/ui/views/profiles/force_signout_dialog.h"
6
7 #include <memory>
8 #include <string>
9 #include <utility>
10
11 #include "base/strings/string16.h"
12 #include "chrome/browser/profiles/profile.h"
13 #include "chrome/browser/ui/browser.h"
14 #include "chrome/browser/ui/browser_list.h"
15 #include "chrome/browser/ui/tabs/tab_strip_model.h"
16 #include "chrome/browser/ui/views/frame/browser_view.h"
17 #include "chrome/browser/ui/views/profiles/force_signout_dialog_view.h"
18 #include "chrome/grit/generated_resources.h"
19 #include "components/signin/core/browser/signin_manager.h"
20
21 namespace {
22
23 void Signout(SigninManager* signin_manager) {
24 signin_manager->SignOut(
25 signin_metrics::AUTHENTICATION_FAILED_WITH_FORCE_SIGNIN,
26 signin_metrics::SignoutDelete::KEEPING);
27 }
28
29 bool IsMatchingBrowser(Browser* browser, Profile* profile) {
30 return browser->profile()->GetOriginalProfile() ==
31 profile->GetOriginalProfile() &&
32 !browser->tab_strip_model()->empty() &&
33 BrowserView::GetBrowserViewForBrowser(browser)->frame()->IsVisible();
34 }
35
36 // Find a browser that is assoicated with |profile| to show the dialog for
37 // Sign out warning.
38 Browser* FindBrowserWithProfile(Profile* profile) {
39 Browser* browser = BrowserList::GetInstance()->GetLastActive();
40 if (browser && IsMatchingBrowser(browser, profile))
41 return browser;
42 for (auto* browser : *BrowserList::GetInstance()) {
43 if (IsMatchingBrowser(browser, profile)) {
44 return browser;
45 }
46 }
47 return nullptr;
48 }
49
50 } // namespace
51
52 ForceSignoutDialog::ForceSignoutDialog(Browser* browser,
53 SigninManager* signin_manager,
54 const base::Closure& signout_timer)
55 : BrowserModalDialog(),
56 browser_(browser),
57 signin_manager_(signin_manager),
58 signout_timer_(signout_timer),
59 dialog_view_(nullptr) {}
60
61 ForceSignoutDialog::~ForceSignoutDialog() {
62 BrowserList::RemoveObserver(this);
63 }
64
65 // static
66 ForceSignoutDialog* ForceSignoutDialog::ShowDialog(
67 Profile* profile,
68 SigninManager* signin_manager,
69 const base::Closure& signout_timer) {
70 Browser* browser = FindBrowserWithProfile(profile);
71 if (browser == nullptr) { // If there is no browser, we can just sign
72 // out profile directly.
73 Signout(signin_manager);
74 return nullptr;
75 }
76
77 std::unique_ptr<ForceSignoutDialog> dialog =
78 base::MakeUnique<ForceSignoutDialog>(browser, signin_manager,
79 signout_timer);
80 ForceSignoutDialog* dialog_ptr = dialog.get();
81 ForceSignoutDialogView* dialog_view =
82 new ForceSignoutDialogView(browser, std::move(dialog));
83 dialog_ptr->dialog_view_ = dialog_view;
84 BrowserList::AddObserver(dialog_ptr);
85
86 return dialog_ptr;
87 }
88
89 void ForceSignoutDialog::ActivateModalDialog(Browser* other_browser) {
90 if (dialog_view_) {
91 if (browser_ && browser_ != other_browser) {
92 browser_->window()->FlashFrame(true);
93 browser_->window()->Activate();
94 }
95 dialog_view_->ActivateModalDialog();
96 }
97 }
98
99 bool ForceSignoutDialog::IsShowing() {
100 return dialog_view_ && dialog_view_->IsShowing();
101 }
102
103 void ForceSignoutDialog::OnBrowserRemoved(Browser* browser) {
104 if (browser_ == browser)
105 browser_ = nullptr;
106 }
107
108 void ForceSignoutDialog::OnAccept() {
109 Signout(signin_manager_);
110 }
111
112 void ForceSignoutDialog::OnCancel() {
113 if (!signout_timer_.is_null())
114 signout_timer_.Run();
115 }
116
117 std::string ForceSignoutDialog::GetEmail() {
118 return signin_manager_->GetAuthenticatedAccountInfo().email;
119 }
120
121 bool ForceSignoutDialog::IsDelayAllowed() {
122 return !signout_timer_.is_null();
123 }
124
125 void ForceSignoutDialog::OnViewClosing() {
126 dialog_view_ = nullptr;
127 }
128
129 ForceSignoutDialogView* ForceSignoutDialog::GetDialogViewForTesting() {
130 return dialog_view_;
131 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698