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. |