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

Unified Diff: chrome/browser/ui/toolbar/wrench_menu_model.cc

Issue 7138002: Add profiles to wrench menu (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 9 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/ui/toolbar/wrench_menu_model.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/toolbar/wrench_menu_model.cc
===================================================================
--- chrome/browser/ui/toolbar/wrench_menu_model.cc (revision 88807)
+++ chrome/browser/ui/toolbar/wrench_menu_model.cc (working copy)
@@ -9,6 +9,7 @@
#include "base/command_line.h"
#include "base/i18n/number_formatting.h"
+#include "base/path_service.h"
#include "base/string_number_conversions.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
@@ -17,13 +18,16 @@
#include "chrome/browser/defaults.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/browser/sync/profile_sync_service.h"
#include "chrome/browser/sync/sync_ui_util.h"
#include "chrome/browser/tabs/tab_strip_model.h"
#include "chrome/browser/task_manager/task_manager.h"
#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_window.h"
#include "chrome/browser/ui/toolbar/encoding_menu_controller.h"
#include "chrome/browser/upgrade_detector.h"
+#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
#include "chrome/common/profiling.h"
@@ -210,6 +214,95 @@
////////////////////////////////////////////////////////////////////////////////
+// ProfilesSubMenuModel
+
+ProfilesSubMenuModel::ProfilesSubMenuModel(
+ ui::SimpleMenuModel::Delegate* delegate, Browser* browser)
+ : SimpleMenuModel(this),
+ browser_(browser),
+ delegate_(delegate) {
+ Build();
+}
+
+void ProfilesSubMenuModel::Build() {
+ ProfileManager* profile_manager = g_browser_process->profile_manager();
+ size_t count = profile_manager->GetNumberOfProfiles();
+ for (size_t i = 0; i < count; ++i) {
+ AddCheckItem(COMMAND_SWITCH_TO_PROFILE + i,
+ profile_manager->GetNameOfProfileAtIndex(i));
+ }
+
+ AddSeparator();
+
+ const string16 short_product_name =
+ l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME);
+ AddItem(IDC_CREATE_NEW_PROFILE, l10n_util::GetStringFUTF16(
+ IDS_PROFILES_CREATE_NEW_PROFILE_OPTION, short_product_name));
+}
+
+class ProfileSwitchObserver : public ProfileManagerObserver {
+ virtual void OnProfileCreated(Profile* profile) OVERRIDE {
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+
+ Browser* browser = BrowserList::FindTabbedBrowser(profile, false);
+ if (browser)
+ browser->window()->Activate();
+ else
+ Browser::NewWindowWithProfile(profile);
+ }
+
+ virtual bool DeleteAfterCreation() OVERRIDE { return true; }
+};
+
+void ProfilesSubMenuModel::ExecuteCommand(int command_id) {
+ ProfileManager* profile_manager = g_browser_process->profile_manager();
+ size_t index = command_id;
+ if (index < profile_manager->GetNumberOfProfiles()) {
+ FilePath userDataFolder;
+ PathService::Get(chrome::DIR_USER_DATA, &userDataFolder);
+ FilePath profile_path =
+ profile_manager->GetFilePathOfProfileAtIndex(index, userDataFolder);
+
+ ProfileSwitchObserver* observer = new ProfileSwitchObserver;
+ // The observer is deleted by the manager when profile creation is finished.
+ profile_manager->CreateProfileAsync(profile_path, observer);
+ } else {
+ delegate_->ExecuteCommand(command_id);
+ }
+}
+
+bool ProfilesSubMenuModel::IsCommandIdChecked(int command_id) const {
+ ProfileManager* profile_manager = g_browser_process->profile_manager();
+ size_t index = command_id;
+ if (index < profile_manager->GetNumberOfProfiles()) {
+ FilePath userDataFolder;
+ PathService::Get(chrome::DIR_USER_DATA, &userDataFolder);
+ FilePath profile_path =
+ profile_manager->GetFilePathOfProfileAtIndex(index, userDataFolder);
+ return browser_->GetProfile()->GetPath() == profile_path;
+ }
+ return delegate_->IsCommandIdChecked(command_id);
+}
+
+bool ProfilesSubMenuModel::IsCommandIdEnabled(int command_id) const {
+ ProfileManager* profile_manager = g_browser_process->profile_manager();
+ size_t index = command_id;
+ if (index < profile_manager->GetNumberOfProfiles())
+ return true;
+ return delegate_->IsCommandIdEnabled(command_id);
+}
+
+bool ProfilesSubMenuModel::GetAcceleratorForCommandId(
+ int command_id,
+ ui::Accelerator* accelerator) {
+ ProfileManager* profile_manager = g_browser_process->profile_manager();
+ size_t index = command_id;
+ if (index < profile_manager->GetNumberOfProfiles())
+ return false;
+ return delegate_->GetAcceleratorForCommandId(command_id, accelerator);
+}
+
+////////////////////////////////////////////////////////////////////////////////
// WrenchMenuModel
WrenchMenuModel::WrenchMenuModel(ui::AcceleratorProvider* provider,
@@ -304,7 +397,14 @@
}
void WrenchMenuModel::ExecuteCommand(int command_id) {
- browser_->ExecuteCommand(command_id);
+ switch (command_id) {
+ case IDC_CREATE_NEW_PROFILE:
+ ProfileManager::CreateMultiProfileAsync();
+ break;
+ default:
+ browser_->ExecuteCommand(command_id);
+ break;
+ }
}
bool WrenchMenuModel::IsCommandIdChecked(int command_id) const {
@@ -318,11 +418,17 @@
}
bool WrenchMenuModel::IsCommandIdEnabled(int command_id) const {
- if (command_id == IDC_SHOW_BOOKMARK_BAR) {
- return !browser_->profile()->GetPrefs()->IsManagedPreference(
- prefs::kEnableBookmarkBar);
+ switch (command_id) {
+ case IDC_SHOW_BOOKMARK_BAR:
+ return !browser_->profile()->GetPrefs()->IsManagedPreference(
+ prefs::kEnableBookmarkBar);
+ case IDC_CREATE_NEW_PROFILE:
+ return true;
+ case IDC_PROFILE_MENU:
+ return true;
+ default:
+ return browser_->command_updater()->IsCommandEnabled(command_id);
}
- return browser_->command_updater()->IsCommandEnabled(command_id);
}
bool WrenchMenuModel::IsCommandIdVisible(int command_id) const {
@@ -458,6 +564,26 @@
AddItemWithStringId(IDC_SHOW_DOWNLOADS, IDS_SHOW_DOWNLOADS);
AddSeparator();
+#if !defined(OS_CHROMEOS)
+ const string16 short_product_name =
+ l10n_util::GetStringUTF16(IDS_SHORT_PRODUCT_NAME);
+ const CommandLine& browser_command_line = *CommandLine::ForCurrentProcess();
+ if (browser_command_line.HasSwitch(switches::kMultiProfiles)) {
+ if (g_browser_process->profile_manager()->GetNumberOfProfiles() > 1) {
+ profiles_sub_menu_model_.reset(new ProfilesSubMenuModel(this, browser_));
+ AddSubMenu(IDC_PROFILE_MENU, l10n_util::GetStringFUTF16(
+ IDS_PROFILES_MENU, short_product_name),
+ profiles_sub_menu_model_.get());
+ } else {
+ profiles_sub_menu_model_.reset();
+ AddItem(IDC_CREATE_NEW_PROFILE, l10n_util::GetStringFUTF16(
+ IDS_PROFILES_CREATE_NEW_PROFILE_OPTION, short_product_name));
+ }
+
+ AddSeparator();
+ }
+#endif
+
#if defined(OS_CHROMEOS)
AddItemWithStringId(IDC_OPTIONS, IDS_SETTINGS);
#elif defined(OS_MACOSX)
« no previous file with comments | « chrome/browser/ui/toolbar/wrench_menu_model.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698