| Index: chrome/browser/ui/webui/signin/user_manager_screen_handler.cc
|
| diff --git a/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc b/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc
|
| index 91a5bce179edad88405345fd32f252e11d843bb6..3466092df18e74547d2323adebab8ea08020ada2 100644
|
| --- a/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc
|
| +++ b/chrome/browser/ui/webui/signin/user_manager_screen_handler.cc
|
| @@ -21,10 +21,12 @@
|
| #include "chrome/browser/profiles/profile_window.h"
|
| #include "chrome/browser/profiles/profiles_state.h"
|
| #include "chrome/browser/signin/local_auth.h"
|
| +#include "chrome/browser/ui/app_list/app_list_service.h"
|
| #include "chrome/browser/ui/browser_commands.h"
|
| #include "chrome/browser/ui/browser_dialogs.h"
|
| #include "chrome/browser/ui/browser_finder.h"
|
| #include "chrome/browser/ui/browser_list.h"
|
| +#include "chrome/browser/ui/browser_list_observer.h"
|
| #include "chrome/browser/ui/chrome_pages.h"
|
| #include "chrome/browser/ui/singleton_tabs.h"
|
| #include "chrome/browser/ui/user_manager.h"
|
| @@ -143,6 +145,68 @@ bool IsAddPersonEnabled() {
|
| return service->GetBoolean(prefs::kBrowserAddPersonEnabled);
|
| }
|
|
|
| +// Executes the action specified by the URL's Hash parameter, if any. Deletes
|
| +// itself after the action would be performed.
|
| +class UrlHashHelper : public chrome::BrowserListObserver {
|
| + public:
|
| + UrlHashHelper(Browser* browser, const std::string& hash);
|
| + ~UrlHashHelper() override;
|
| +
|
| + void ExecuteUrlHash();
|
| +
|
| + // chrome::BrowserListObserver overrides:
|
| + void OnBrowserRemoved(Browser* browser) override;
|
| +
|
| + private:
|
| + Browser* browser_;
|
| + Profile* profile_;
|
| + chrome::HostDesktopType desktop_type_;
|
| + std::string hash_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(UrlHashHelper);
|
| +};
|
| +
|
| +UrlHashHelper::UrlHashHelper(Browser* browser, const std::string& hash)
|
| + : browser_(browser),
|
| + profile_(browser->profile()),
|
| + desktop_type_(browser->host_desktop_type()),
|
| + hash_(hash) {
|
| + BrowserList::AddObserver(this);
|
| +}
|
| +
|
| +UrlHashHelper::~UrlHashHelper() {
|
| + BrowserList::RemoveObserver(this);
|
| +}
|
| +
|
| +void UrlHashHelper::OnBrowserRemoved(Browser* browser) {
|
| + if (browser == browser_)
|
| + browser_ = nullptr;
|
| +}
|
| +
|
| +void UrlHashHelper::ExecuteUrlHash() {
|
| + if (hash_ == profiles::kUserManagerSelectProfileAppLauncher) {
|
| + AppListService* app_list_service = AppListService::Get(desktop_type_);
|
| + app_list_service->ShowForProfile(profile_);
|
| + return;
|
| + }
|
| +
|
| + Browser* target_browser = browser_;
|
| + if (!target_browser) {
|
| + target_browser = chrome::FindLastActiveWithProfile(profile_, desktop_type_);
|
| + if (!target_browser)
|
| + return;
|
| + }
|
| +
|
| + if (hash_ == profiles::kUserManagerSelectProfileTaskManager)
|
| + chrome::OpenTaskManager(target_browser);
|
| + else if (hash_ == profiles::kUserManagerSelectProfileAboutChrome)
|
| + chrome::ShowAboutChrome(target_browser);
|
| + else if (hash_ == profiles::kUserManagerSelectProfileChromeSettings)
|
| + chrome::ShowSettings(target_browser);
|
| + else if (hash_ == profiles::kUserManagerSelectProfileChromeMemory)
|
| + chrome::ShowMemory(target_browser);
|
| +}
|
| +
|
| } // namespace
|
|
|
| // ProfileUpdateObserver ------------------------------------------------------
|
| @@ -714,18 +778,11 @@ void UserManagerScreenHandler::OnBrowserWindowReady(Browser* browser) {
|
| info_cache.SetProfileSigninRequiredAtIndex(index, false);
|
| }
|
|
|
| - if (url_hash_ == profiles::kUserManagerSelectProfileTaskManager) {
|
| - base::MessageLoop::current()->PostTask(
|
| - FROM_HERE, base::Bind(&chrome::OpenTaskManager, browser));
|
| - } else if (url_hash_ == profiles::kUserManagerSelectProfileAboutChrome) {
|
| - base::MessageLoop::current()->PostTask(
|
| - FROM_HERE, base::Bind(&chrome::ShowAboutChrome, browser));
|
| - } else if (url_hash_ == profiles::kUserManagerSelectProfileChromeSettings) {
|
| - base::MessageLoop::current()->PostTask(
|
| - FROM_HERE, base::Bind(&chrome::ShowSettings, browser));
|
| - } else if (url_hash_ == profiles::kUserManagerSelectProfileChromeMemory) {
|
| + if (!url_hash_.empty()) {
|
| base::MessageLoop::current()->PostTask(
|
| - FROM_HERE, base::Bind(&chrome::ShowMemory, browser));
|
| + FROM_HERE,
|
| + base::Bind(&UrlHashHelper::ExecuteUrlHash,
|
| + base::Owned(new UrlHashHelper(browser, url_hash_))));
|
| }
|
|
|
| // This call is last as it deletes this object.
|
|
|