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

Unified Diff: chrome/browser/views/toolbar_view.cc

Issue 12895: Chromium-MultiProfile-Prototype... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 12 years 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/views/toolbar_view.h ('k') | chrome/common/chrome_switches.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/views/toolbar_view.cc
===================================================================
--- chrome/browser/views/toolbar_view.cc (revision 6272)
+++ chrome/browser/views/toolbar_view.cc (working copy)
@@ -19,6 +19,7 @@
#include "chrome/browser/navigation_controller.h"
#include "chrome/browser/navigation_entry.h"
#include "chrome/browser/profile.h"
+#include "chrome/browser/user_data_manager.h"
#include "chrome/browser/user_metrics.h"
#include "chrome/browser/views/dom_view.h"
#include "chrome/browser/views/go_button.h"
@@ -74,7 +75,9 @@
profile_(NULL),
acc_focused_view_(NULL),
browser_(browser),
- tab_(NULL) {
+ tab_(NULL),
+ profiles_helper_(new GetProfilesHelper(this)),
+ profiles_menu_(NULL) {
back_menu_model_.reset(new BackForwardMenuModel(
browser, BackForwardMenuModel::BACKWARD_MENU_DELEGATE));
forward_menu_model_.reset(new BackForwardMenuModel(
@@ -87,6 +90,7 @@
}
BrowserToolbarView::~BrowserToolbarView() {
+ profiles_helper_->OnDelegateDeleted();
}
void BrowserToolbarView::Init(Profile* profile) {
@@ -538,6 +542,16 @@
l10n_util::GetString(IDS_NEWWINDOW));
menu.AppendMenuItemWithLabel(IDC_GOOFFTHERECORD,
l10n_util::GetString(IDS_GOOFFTHERECORD));
+
+ // Enumerate profiles asynchronously and then create the parent menu item
+ // "Open new window in profile...". We will create the child menu items for
+ // this once the asynchronous call is done. See OnGetProfilesDone.
+ profiles_helper_->GetProfiles(NULL);
+ Menu* profiles_menu = menu.AppendSubMenu(
+ IDC_NEWPROFILEWINDOW,
+ l10n_util::GetString(IDS_NEWPROFILEWINDOW));
+ profiles_menu_ = profiles_menu;
+
menu.AppendSeparator();
menu.AppendMenuItemWithLabel(IDC_SHOW_BOOKMARKS_BAR,
l10n_util::GetString(IDS_SHOW_BOOKMARK_BAR));
@@ -565,6 +579,9 @@
menu.AppendMenuItemWithLabel(IDC_EXIT, l10n_util::GetString(IDS_EXIT));
menu.RunMenuAt(pt.x, pt.y);
+
+ // Menu is going away, so set the profiles menu pointer to NULL.
+ profiles_menu_ = NULL;
}
bool BrowserToolbarView::IsItemChecked(int id) const {
@@ -590,6 +607,39 @@
}
}
+void BrowserToolbarView::OnGetProfilesDone(
+ const std::vector<std::wstring>& profiles) {
+ // Nothing to do if the menu has gone away.
+ if (!profiles_menu_)
+ return;
+
+ // Store the latest list of profiles in the browser.
+ browser_->set_user_data_dir_profiles(profiles);
+
+ // Number of sub menu items that we can show directly.
+ const int sub_items_count = IDC_NEWPROFILEWINDOW_MAX_ID -
+ IDC_NEWPROFILEWINDOW_MIN_ID + 1;
+ std::vector<std::wstring>::const_iterator iter = profiles.begin();
+ // Add direct sub menu items for profiles.
+ for (int i = IDC_NEWPROFILEWINDOW_MIN_ID;
+ i <= IDC_NEWPROFILEWINDOW_MAX_ID && iter != profiles.end();
+ ++i, ++iter) {
+ profiles_menu_->AppendMenuItemWithLabel(i, *iter);
+ }
+ // If there are more profiles then show "Other" link.
+ if (iter != profiles.end()) {
+ profiles_menu_->AppendSeparator();
+ profiles_menu_->AppendMenuItemWithLabel(
+ IDC_SELECT_PROFILE,
+ l10n_util::GetString(IDS_NEWPROFILEWINDOW_OTHERPROFILE));
+ }
+ // Always show a link to select a new profile.
+ profiles_menu_->AppendSeparator();
+ profiles_menu_->AppendMenuItemWithLabel(
+ IDC_NEW_PROFILE,
+ l10n_util::GetString(IDS_SELECT_PROFILE_DIALOG_NEW_PROFILE_ENTRY));
+}
+
bool BrowserToolbarView::GetAccessibleRole(VARIANT* role) {
DCHECK(role);
@@ -698,6 +748,19 @@
}
}
+void BrowserToolbarView::ExecuteCommand(int id) {
+ // If the command id is for one of the sub-menu-items of the new profile
+ // window menu then we need to get the name of the profile from the menu
+ // item id and then pass on that to the browser to take action.
+ if (id >= IDC_NEWPROFILEWINDOW_MIN_ID && id <= IDC_NEWPROFILEWINDOW_MAX_ID) {
+ browser_->NewProfileWindowByIndex(id - IDC_NEWPROFILEWINDOW_MIN_ID);
+ return;
+ }
+
+ // For all other menu items, use the method in the base class.
+ EncodingMenuControllerDelegate::ExecuteCommand(id);
+}
+
bool BrowserToolbarView::GetAcceleratorInfo(int id,
views::Accelerator* accel) {
// The standard Ctrl-X, Ctrl-V and Ctrl-C are not defined as accelerators
« no previous file with comments | « chrome/browser/views/toolbar_view.h ('k') | chrome/common/chrome_switches.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698