Chromium Code Reviews| 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..8788df7033431810f7ee6f3349b26ae455c73dc6 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,66 @@ bool IsAddPersonEnabled() { |
| return service->GetBoolean(prefs::kBrowserAddPersonEnabled); |
| } |
| +class UrlHashHelper : public chrome::BrowserListObserver { |
|
tapted
2015/01/27 02:52:55
add a brief comment, it should say something about
Mike Lerman
2015/01/27 14:59:49
Comment added.
It's called a "hash" because that'
|
| + public: |
| + UrlHashHelper( |
| + Browser* browser, chrome::HostDesktopType desktop_type, std::string hash); |
|
tapted
2015/01/27 02:52:55
const reference `hash`
Mike Lerman
2015/01/27 14:59:49
Done.
|
| + ~UrlHashHelper() override; |
| + |
| + void ExecuteUrlHash(); |
| + |
| + // chrome::BrowserListObserver overrides: |
| + void OnBrowserRemoved(Browser* browser) override; |
| + |
| + private: |
| + Browser* browser_; |
| + Profile* profile_; |
| + chrome::HostDesktopType desktop_type_; |
| + std::string hash_; |
| +}; |
|
tapted
2015/01/27 02:52:55
nit: DISALLOW_COPY_AND_ASSIGN
Mike Lerman
2015/01/27 14:59:49
Done.
|
| + |
| +UrlHashHelper::UrlHashHelper( |
| + Browser* browser, chrome::HostDesktopType desktop_type, std::string hash) |
| + : browser_(browser), |
| + profile_(browser->profile()), |
| + desktop_type_(desktop_type), |
|
tapted
2015/01/27 02:52:55
Note there's also browser->host_desktop_type(), wh
Mike Lerman
2015/01/27 14:59:49
SGTM. Done.
|
| + hash_(hash) { |
| + BrowserList::AddObserver(this); |
| +} |
| + |
| +UrlHashHelper::~UrlHashHelper() { |
| + BrowserList::RemoveObserver(this); |
| +} |
| + |
| +void UrlHashHelper::OnBrowserRemoved(Browser* browser) { |
| + if (browser == browser_) |
| + browser_ = NULL; |
|
tapted
2015/01/27 02:52:55
nit: NULL -> nullptr.
Mike Lerman
2015/01/27 14:59:49
Done.
|
| +} |
| + |
| +void UrlHashHelper::ExecuteUrlHash() { |
| + if (browser_ == NULL) |
|
tapted
2015/01/27 02:52:55
NULL -> nullptr;
or, I'd probably go just `if (!b
Mike Lerman
2015/01/27 14:59:49
Done. I like that better, too :)
|
| + browser_ = chrome::FindLastActiveWithProfile(profile_, desktop_type_); |
| + |
| + if (browser_ != NULL) { |
| + if (hash_ == profiles::kUserManagerSelectProfileTaskManager) { |
| + chrome::OpenTaskManager(browser_); |
| + } else if (hash_ == profiles::kUserManagerSelectProfileAboutChrome) { |
| + chrome::ShowAboutChrome(browser_); |
| + } else if (hash_ == profiles::kUserManagerSelectProfileChromeSettings) { |
| + chrome::ShowSettings(browser_); |
| + } else if (hash_ == profiles::kUserManagerSelectProfileChromeMemory) { |
| + chrome::ShowMemory(browser_); |
| + } |
| + } |
| + |
| + if (hash_ == profiles::kUserManagerSelectProfileAppLauncher) { |
| + AppListService* app_list_service = AppListService::Get(desktop_type_); |
|
tapted
2015/01/27 02:52:55
note this desktop_type_ can be different to |brows
tapted
2015/01/27 02:56:36
uh.. to the `top` that was going to say (but I tho
Mike Lerman
2015/01/27 14:59:49
Done.
Mike Lerman
2015/01/27 14:59:49
Done.
|
| + app_list_service->ShowForProfile(profile_); |
| + } |
| + |
| + delete this; |
|
tapted
2015/01/27 02:52:55
Using base::Owned(..) rather than base::Unretained
Mike Lerman
2015/01/27 14:59:49
So base::Owned will take care of deleting the obje
tapted
2015/01/27 22:55:01
btw this is documented in base/bind_helpers.h
but
|
| +} |
| + |
| } // namespace |
| // ProfileUpdateObserver ------------------------------------------------------ |
| @@ -714,18 +776,13 @@ 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::Unretained(new UrlHashHelper(browser, |
| + desktop_type_, |
| + url_hash_)))); |
| } |
| // This call is last as it deletes this object. |