Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/profiles/user_manager_view.h" | 5 #include "chrome/browser/ui/views/profiles/user_manager_view.h" |
| 6 | 6 |
| 7 #include "base/callback.h" | 7 #include "base/callback.h" |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
| 10 #include "build/build_config.h" | 10 #include "build/build_config.h" |
| 11 #include "chrome/browser/browser_process.h" | 11 #include "chrome/browser/browser_process.h" |
| 12 #include "chrome/browser/lifetime/keep_alive_types.h" | 12 #include "chrome/browser/lifetime/keep_alive_types.h" |
| 13 #include "chrome/browser/lifetime/scoped_keep_alive.h" | 13 #include "chrome/browser/lifetime/scoped_keep_alive.h" |
| 14 #include "chrome/browser/profiles/profile_avatar_icon_util.h" | 14 #include "chrome/browser/profiles/profile_avatar_icon_util.h" |
| 15 #include "chrome/browser/profiles/profile_manager.h" | 15 #include "chrome/browser/profiles/profile_manager.h" |
| 16 #include "chrome/browser/profiles/profile_metrics.h" | 16 #include "chrome/browser/profiles/profile_metrics.h" |
| 17 #include "chrome/browser/profiles/profile_window.h" | 17 #include "chrome/browser/profiles/profile_window.h" |
| 18 #include "chrome/browser/profiles/profiles_state.h" | 18 #include "chrome/browser/profiles/profiles_state.h" |
| 19 #include "chrome/browser/signin/signin_promo.h" | 19 #include "chrome/browser/signin/signin_promo.h" |
| 20 #include "chrome/browser/ui/browser.h" | 20 #include "chrome/browser/ui/browser.h" |
| 21 #include "chrome/browser/ui/browser_dialogs.h" | 21 #include "chrome/browser/ui/browser_dialogs.h" |
| 22 #include "chrome/browser/ui/browser_finder.h" | 22 #include "chrome/browser/ui/browser_finder.h" |
| 23 #include "chrome/browser/ui/browser_window.h" | 23 #include "chrome/browser/ui/browser_window.h" |
| 24 #include "chrome/browser/ui/user_manager.h" | 24 #include "chrome/browser/ui/user_manager.h" |
| 25 #include "chrome/common/url_constants.h" | |
| 25 #include "chrome/grit/chromium_strings.h" | 26 #include "chrome/grit/chromium_strings.h" |
| 26 #include "chrome/grit/generated_resources.h" | 27 #include "chrome/grit/generated_resources.h" |
| 27 #include "components/guest_view/browser/guest_view_manager.h" | 28 #include "components/guest_view/browser/guest_view_manager.h" |
| 28 #include "components/signin/core/common/profile_management_switches.h" | 29 #include "components/signin/core/common/profile_management_switches.h" |
| 29 #include "content/public/browser/navigation_details.h" | 30 #include "content/public/browser/navigation_details.h" |
| 30 #include "content/public/browser/render_widget_host_view.h" | 31 #include "content/public/browser/render_widget_host_view.h" |
| 31 #include "content/public/browser/web_contents.h" | 32 #include "content/public/browser/web_contents.h" |
| 32 #include "google_apis/gaia/gaia_urls.h" | 33 #include "google_apis/gaia/gaia_urls.h" |
| 33 #include "ui/base/l10n/l10n_util.h" | 34 #include "ui/base/l10n/l10n_util.h" |
| 34 #include "ui/display/display.h" | 35 #include "ui/display/display.h" |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 59 ReauthDelegate::ReauthDelegate(UserManagerView* parent, | 60 ReauthDelegate::ReauthDelegate(UserManagerView* parent, |
| 60 views::WebView* web_view, | 61 views::WebView* web_view, |
| 61 const std::string& email_address, | 62 const std::string& email_address, |
| 62 signin_metrics::Reason reason) | 63 signin_metrics::Reason reason) |
| 63 : parent_(parent), | 64 : parent_(parent), |
| 64 web_view_(web_view), | 65 web_view_(web_view), |
| 65 email_address_(email_address) { | 66 email_address_(email_address) { |
| 66 AddChildView(web_view_); | 67 AddChildView(web_view_); |
| 67 SetLayoutManager(new views::FillLayout()); | 68 SetLayoutManager(new views::FillLayout()); |
| 68 | 69 |
| 69 web_view->GetWebContents()->SetDelegate(this); | 70 web_view_->GetWebContents()->SetDelegate(this); |
| 70 | 71 |
| 71 // Load the re-auth URL, prepopulated with the user's email address. | 72 // Load the re-auth URL, prepopulated with the user's email address. |
| 72 // Add the index of the profile to the URL so that the inline login page | 73 // Add the index of the profile to the URL so that the inline login page |
| 73 // knows which profile to load and update the credentials. | 74 // knows which profile to load and update the credentials. |
| 74 GURL url = signin::GetReauthURLWithEmail( | 75 GURL url = signin::GetReauthURLWithEmail( |
| 75 signin_metrics::AccessPoint::ACCESS_POINT_USER_MANAGER, reason, | 76 signin_metrics::AccessPoint::ACCESS_POINT_USER_MANAGER, reason, |
| 76 email_address_); | 77 email_address_); |
| 77 web_view_->LoadInitialURL(url); | 78 web_view_->LoadInitialURL(url); |
| 78 } | 79 } |
| 79 | 80 |
| 80 ReauthDelegate::~ReauthDelegate() {} | 81 ReauthDelegate::~ReauthDelegate() {} |
| 81 | 82 |
| 82 gfx::Size ReauthDelegate::GetPreferredSize() const { | 83 gfx::Size ReauthDelegate::GetPreferredSize() const { |
| 83 return switches::UsePasswordSeparatedSigninFlow() ? | 84 return switches::UsePasswordSeparatedSigninFlow() ? |
| 84 gfx::Size(UserManager::kReauthDialogWidth, | 85 gfx::Size(UserManager::kReauthDialogWidth, |
| 85 UserManager::kReauthDialogHeight) : | 86 UserManager::kReauthDialogHeight) : |
| 86 gfx::Size(UserManager::kPasswordCombinedReauthDialogWidth, | 87 gfx::Size(UserManager::kPasswordCombinedReauthDialogWidth, |
| 87 UserManager::kPasswordCombinedReauthDialogHeight); | 88 UserManager::kPasswordCombinedReauthDialogHeight); |
| 88 } | 89 } |
| 89 | 90 |
| 91 void ReauthDelegate::DisplayErrorMessage() { | |
| 92 web_view_->LoadInitialURL(GURL(chrome::kChromeUISigninErrorURL)); | |
| 93 } | |
| 94 | |
| 90 bool ReauthDelegate::CanResize() const { | 95 bool ReauthDelegate::CanResize() const { |
| 91 return true; | 96 return true; |
| 92 } | 97 } |
| 93 | 98 |
| 94 bool ReauthDelegate::CanMaximize() const { | 99 bool ReauthDelegate::CanMaximize() const { |
| 95 return true; | 100 return true; |
| 96 } | 101 } |
| 97 | 102 |
| 98 bool ReauthDelegate::CanMinimize() const { | 103 bool ReauthDelegate::CanMinimize() const { |
| 99 return true; | 104 return true; |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 203 } | 208 } |
| 204 } | 209 } |
| 205 | 210 |
| 206 // static | 211 // static |
| 207 void UserManager::ShowReauthDialog(content::BrowserContext* browser_context, | 212 void UserManager::ShowReauthDialog(content::BrowserContext* browser_context, |
| 208 const std::string& email, | 213 const std::string& email, |
| 209 signin_metrics::Reason reason) { | 214 signin_metrics::Reason reason) { |
| 210 // This method should only be called if the user manager is already showing. | 215 // This method should only be called if the user manager is already showing. |
| 211 if (!IsShowing()) | 216 if (!IsShowing()) |
| 212 return; | 217 return; |
| 213 | |
| 214 instance_->ShowReauthDialog(browser_context, email, reason); | 218 instance_->ShowReauthDialog(browser_context, email, reason); |
| 215 } | 219 } |
| 216 | 220 |
| 217 // static | 221 // static |
| 218 void UserManager::HideReauthDialog() { | 222 void UserManager::HideReauthDialog() { |
| 219 // This method should only be called if the user manager is already showing. | 223 // This method should only be called if the user manager is already showing. |
| 220 if (!IsShowing()) | 224 if (instance_ && !instance_->GetWidget()->IsClosed()) |
|
sky
2016/09/20 23:30:19
Can you motivate why this change is needed?
zmin
2016/09/21 00:09:35
IsShowing will check the activate of User Manager
sky
2016/09/21 23:00:02
I think you are arguing for checking IsVisible(),
| |
| 221 return; | 225 instance_->HideReauthDialog(); |
| 222 | |
| 223 instance_->HideReauthDialog(); | |
| 224 } | 226 } |
| 225 | 227 |
| 226 // static | 228 // static |
| 227 void UserManager::AddOnUserManagerShownCallbackForTesting( | 229 void UserManager::AddOnUserManagerShownCallbackForTesting( |
| 228 const base::Closure& callback) { | 230 const base::Closure& callback) { |
| 229 DCHECK(!user_manager_shown_callback_for_testing_); | 231 DCHECK(!user_manager_shown_callback_for_testing_); |
| 230 user_manager_shown_callback_for_testing_ = new base::Closure(callback); | 232 user_manager_shown_callback_for_testing_ = new base::Closure(callback); |
| 231 } | 233 } |
| 232 | 234 |
| 235 // static | |
| 236 void UserManager::ShowSigninDialog(content::BrowserContext* browser_context, | |
| 237 const base::FilePath profile_path) { | |
| 238 instance_->SetSigninProfilePath(profile_path); | |
|
sky
2016/09/20 23:30:19
How do you know instance_ is non-null at the time
zmin
2016/09/21 00:09:35
Good catch, I shall add a check here.
zmin
2016/09/21 16:40:04
Done.
| |
| 239 ShowReauthDialog(browser_context, std::string(), | |
|
sky
2016/09/20 23:30:19
As someone not intimitely familiar with this code
zmin
2016/09/21 00:09:35
User manager only has ShowReauthDialog before beca
zmin
2016/09/21 02:56:08
I think it's more clear for the API or it will bec
| |
| 240 signin_metrics::Reason::REASON_SIGNIN_PRIMARY_ACCOUNT); | |
| 241 } | |
| 242 | |
| 243 // static | |
| 244 void UserManager::DisplayErrorMessage() { | |
| 245 // This method should only be called if the user manager is already showing. | |
| 246 if (instance_) | |
| 247 instance_->DisplayErrorMessage(); | |
| 248 } | |
| 249 | |
| 250 // static | |
| 251 base::FilePath UserManager::GetSigninProfilePath() { | |
| 252 return instance_->GetSigninProfilePath(); | |
| 253 } | |
| 254 | |
| 233 // UserManagerView ------------------------------------------------------------- | 255 // UserManagerView ------------------------------------------------------------- |
| 234 | 256 |
| 235 UserManagerView::UserManagerView() | 257 UserManagerView::UserManagerView() |
| 236 : web_view_(nullptr), | 258 : web_view_(nullptr), |
| 237 delegate_(nullptr), | 259 delegate_(nullptr), |
| 238 user_manager_started_showing_(base::Time()) { | 260 user_manager_started_showing_(base::Time()), |
| 261 signin_profile_path_(base::FilePath()) { | |
|
sky
2016/09/20 23:30:19
This is the default, so you don't need it.
zmin
2016/09/21 16:40:04
Done.
| |
| 239 keep_alive_.reset(new ScopedKeepAlive(KeepAliveOrigin::USER_MANAGER_VIEW, | 262 keep_alive_.reset(new ScopedKeepAlive(KeepAliveOrigin::USER_MANAGER_VIEW, |
| 240 KeepAliveRestartOption::DISABLED)); | 263 KeepAliveRestartOption::DISABLED)); |
| 241 } | 264 } |
| 242 | 265 |
| 243 UserManagerView::~UserManagerView() { | 266 UserManagerView::~UserManagerView() { |
| 244 HideReauthDialog(); | 267 HideReauthDialog(); |
| 245 } | 268 } |
| 246 | 269 |
| 247 // static | 270 // static |
| 248 void UserManagerView::OnSystemProfileCreated( | 271 void UserManagerView::OnSystemProfileCreated( |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 274 delegate_->GetWidget()->Show(); | 297 delegate_->GetWidget()->Show(); |
| 275 } | 298 } |
| 276 | 299 |
| 277 void UserManagerView::HideReauthDialog() { | 300 void UserManagerView::HideReauthDialog() { |
| 278 if (delegate_) { | 301 if (delegate_) { |
| 279 delegate_->CloseReauthDialog(); | 302 delegate_->CloseReauthDialog(); |
| 280 DCHECK(!delegate_); | 303 DCHECK(!delegate_); |
| 281 } | 304 } |
| 282 } | 305 } |
| 283 | 306 |
| 307 void UserManagerView::DisplayErrorMessage() { | |
|
sky
2016/09/20 23:30:19
Style guide says declaration and definition order
zmin
2016/09/21 16:40:04
Done.
| |
| 308 if (delegate_) { | |
|
sky
2016/09/20 23:30:19
no {}
zmin
2016/09/21 16:40:04
Done.
| |
| 309 delegate_->DisplayErrorMessage(); | |
| 310 } | |
| 311 } | |
| 312 | |
| 284 void UserManagerView::OnReauthDialogDestroyed() { | 313 void UserManagerView::OnReauthDialogDestroyed() { |
| 285 delegate_ = nullptr; | 314 delegate_ = nullptr; |
| 286 } | 315 } |
| 287 | 316 |
| 288 void UserManagerView::Init(Profile* system_profile, const GURL& url) { | 317 void UserManagerView::Init(Profile* system_profile, const GURL& url) { |
| 289 web_view_ = new views::WebView(system_profile); | 318 web_view_ = new views::WebView(system_profile); |
| 290 web_view_->set_allow_accelerators(true); | 319 web_view_->set_allow_accelerators(true); |
| 291 AddChildView(web_view_); | 320 AddChildView(web_view_); |
| 292 SetLayoutManager(new views::FillLayout); | 321 SetLayoutManager(new views::FillLayout); |
| 293 AddAccelerator(ui::Accelerator(ui::VKEY_W, ui::EF_CONTROL_DOWN)); | 322 AddAccelerator(ui::Accelerator(ui::VKEY_W, ui::EF_CONTROL_DOWN)); |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 401 // Now that the window is closed, we can allow a new one to be opened. | 430 // Now that the window is closed, we can allow a new one to be opened. |
| 402 // (WindowClosing comes in asynchronously from the call to Close() and we | 431 // (WindowClosing comes in asynchronously from the call to Close() and we |
| 403 // may have already opened a new instance). | 432 // may have already opened a new instance). |
| 404 if (instance_ == this) | 433 if (instance_ == this) |
| 405 instance_ = NULL; | 434 instance_ = NULL; |
| 406 } | 435 } |
| 407 | 436 |
| 408 bool UserManagerView::ShouldUseCustomFrame() const { | 437 bool UserManagerView::ShouldUseCustomFrame() const { |
| 409 return false; | 438 return false; |
| 410 } | 439 } |
| 440 | |
| 441 void UserManagerView::SetSigninProfilePath(const base::FilePath profile_path) { | |
| 442 signin_profile_path_ = profile_path; | |
| 443 } | |
| 444 | |
| 445 base::FilePath UserManagerView::GetSigninProfilePath() { | |
| 446 return signin_profile_path_; | |
| 447 } | |
| OLD | NEW |