summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-14 21:12:34 +0000
committerananta@chromium.org <ananta@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-14 21:12:34 +0000
commit78c22e5f292255bde5ff243bbffed1cc9d3414cd (patch)
treeefc3c405e92e18959846486e6c5186f09fd36a4a /chrome
parente4418719a6c994f36221d9fda919770858e8e2c6 (diff)
downloadchromium_src-78c22e5f292255bde5ff243bbffed1cc9d3414cd.zip
chromium_src-78c22e5f292255bde5ff243bbffed1cc9d3414cd.tar.gz
chromium_src-78c22e5f292255bde5ff243bbffed1cc9d3414cd.tar.bz2
Ensure that the new window/new incognito window option does not show up in the context menu
on the bookmarks bar on normal and incognito browser windows respectively. The metro specific behavior in the bookmark bar is contained in the BookmarkContextMenuControllerViewsWin class which subclasses the BookmarkContextMenuControllerViews class. An instance of these classes is created via a factory Create function on the BookmarkContextMenuControllerViews class. BUG=124404 R=sky Review URL: https://chromiumcodereview.appspot.com/10535159 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@142229 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/ui/views/bookmarks/bookmark_context_menu.cc4
-rw-r--r--chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views.cc143
-rw-r--r--chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views.h39
-rw-r--r--chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views_win.cc99
-rw-r--r--chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views_win.h33
-rw-r--r--chrome/chrome_browser.gypi2
6 files changed, 247 insertions, 73 deletions
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_context_menu.cc b/chrome/browser/ui/views/bookmarks/bookmark_context_menu.cc
index 5a8f993..a377916 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_context_menu.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_context_menu.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -30,7 +30,7 @@ BookmarkContextMenu::BookmarkContextMenu(
const std::vector<const BookmarkNode*>& selection,
bool close_on_remove)
: ALLOW_THIS_IN_INITIALIZER_LIST(
- controller_(new BookmarkContextMenuControllerViews(parent_widget,
+ controller_(BookmarkContextMenuControllerViews::Create(parent_widget,
this, profile, page_navigator, parent, selection))),
parent_widget_(parent_widget),
ALLOW_THIS_IN_INITIALIZER_LIST(menu_(new views::MenuItemView(this))),
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views.cc b/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views.cc
index 942be77..3c30377 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views.cc
+++ b/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views.cc
@@ -23,77 +23,26 @@
using content::PageNavigator;
using content::UserMetricsAction;
-BookmarkContextMenuControllerViews::BookmarkContextMenuControllerViews(
- views::Widget* parent_widget,
- BookmarkContextMenuControllerViewsDelegate* delegate,
- Profile* profile,
- PageNavigator* navigator,
- const BookmarkNode* parent,
- const std::vector<const BookmarkNode*>& selection)
- : parent_widget_(parent_widget),
- delegate_(delegate),
- profile_(profile),
- navigator_(navigator),
- parent_(parent),
- selection_(selection),
- model_(profile->GetBookmarkModel()) {
- DCHECK(profile_);
- DCHECK(model_->IsLoaded());
- model_->AddObserver(this);
+#if !defined(OS_WIN)
+// static
+BookmarkContextMenuControllerViews* BookmarkContextMenuControllerViews::Create(
+ views::Widget* parent_widget,
+ BookmarkContextMenuControllerViewsDelegate* delegate,
+ Profile* profile,
+ content::PageNavigator* navigator,
+ const BookmarkNode* parent,
+ const std::vector<const BookmarkNode*>& selection) {
+ return new BookmarkContextMenuControllerViews(parent_widget, delegate,
+ profile, navigator, parent,
+ selection);
}
+#endif // !defined(OS_WIN)
BookmarkContextMenuControllerViews::~BookmarkContextMenuControllerViews() {
if (model_)
model_->RemoveObserver(this);
}
-void BookmarkContextMenuControllerViews::BuildMenu() {
- if (selection_.size() == 1 && selection_[0]->is_url()) {
- delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL,
- IDS_BOOKMARK_BAR_OPEN_IN_NEW_TAB);
- delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW,
- IDS_BOOKMARK_BAR_OPEN_IN_NEW_WINDOW);
- delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO,
- IDS_BOOKMARK_BAR_OPEN_INCOGNITO);
- } else {
- delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL,
- IDS_BOOKMARK_BAR_OPEN_ALL);
- delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW,
- IDS_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW);
- delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO,
- IDS_BOOKMARK_BAR_OPEN_ALL_INCOGNITO);
- }
-
- delegate_->AddSeparator();
- if (selection_.size() == 1 && selection_[0]->is_folder()) {
- delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_RENAME_FOLDER,
- IDS_BOOKMARK_BAR_RENAME_FOLDER);
- } else {
- delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_EDIT,
- IDS_BOOKMARK_BAR_EDIT);
- }
-
- delegate_->AddSeparator();
- delegate_->AddItemWithStringId(IDC_CUT, IDS_CUT);
- delegate_->AddItemWithStringId(IDC_COPY, IDS_COPY);
- delegate_->AddItemWithStringId(IDC_PASTE, IDS_PASTE);
-
- delegate_->AddSeparator();
- delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_REMOVE,
- IDS_BOOKMARK_BAR_REMOVE);
-
- delegate_->AddSeparator();
- delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK,
- IDS_BOOKMARK_BAR_ADD_NEW_BOOKMARK);
- delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_NEW_FOLDER,
- IDS_BOOKMARK_BAR_NEW_FOLDER);
-
- delegate_->AddSeparator();
- delegate_->AddItemWithStringId(IDC_BOOKMARK_MANAGER, IDS_BOOKMARK_MANAGER);
- delegate_->AddCheckboxItem(IDC_BOOKMARK_BAR_ALWAYS_SHOW,
- IDS_SHOW_BOOKMARK_BAR);
-}
-
void BookmarkContextMenuControllerViews::ExecuteCommand(int id) {
BookmarkModel* model = RemoveModelObserver();
@@ -293,6 +242,72 @@ bool BookmarkContextMenuControllerViews::IsCommandEnabled(int id) const {
return true;
}
+void BookmarkContextMenuControllerViews::BuildMenu() {
+ if (selection_.size() == 1 && selection_[0]->is_url()) {
+ delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL,
+ IDS_BOOKMARK_BAR_OPEN_IN_NEW_TAB);
+ delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW,
+ IDS_BOOKMARK_BAR_OPEN_IN_NEW_WINDOW);
+ delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO,
+ IDS_BOOKMARK_BAR_OPEN_INCOGNITO);
+ } else {
+ delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL,
+ IDS_BOOKMARK_BAR_OPEN_ALL);
+ delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW,
+ IDS_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW);
+ delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO,
+ IDS_BOOKMARK_BAR_OPEN_ALL_INCOGNITO);
+ }
+
+ delegate_->AddSeparator();
+ if (selection_.size() == 1 && selection_[0]->is_folder()) {
+ delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_RENAME_FOLDER,
+ IDS_BOOKMARK_BAR_RENAME_FOLDER);
+ } else {
+ delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_EDIT,
+ IDS_BOOKMARK_BAR_EDIT);
+ }
+
+ delegate_->AddSeparator();
+ delegate_->AddItemWithStringId(IDC_CUT, IDS_CUT);
+ delegate_->AddItemWithStringId(IDC_COPY, IDS_COPY);
+ delegate_->AddItemWithStringId(IDC_PASTE, IDS_PASTE);
+
+ delegate_->AddSeparator();
+ delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_REMOVE,
+ IDS_BOOKMARK_BAR_REMOVE);
+
+ delegate_->AddSeparator();
+ delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_ADD_NEW_BOOKMARK,
+ IDS_BOOKMARK_BAR_ADD_NEW_BOOKMARK);
+ delegate_->AddItemWithStringId(IDC_BOOKMARK_BAR_NEW_FOLDER,
+ IDS_BOOKMARK_BAR_NEW_FOLDER);
+
+ delegate_->AddSeparator();
+ delegate_->AddItemWithStringId(IDC_BOOKMARK_MANAGER, IDS_BOOKMARK_MANAGER);
+ delegate_->AddCheckboxItem(IDC_BOOKMARK_BAR_ALWAYS_SHOW,
+ IDS_SHOW_BOOKMARK_BAR);
+}
+
+BookmarkContextMenuControllerViews::BookmarkContextMenuControllerViews(
+ views::Widget* parent_widget,
+ BookmarkContextMenuControllerViewsDelegate* delegate,
+ Profile* profile,
+ PageNavigator* navigator,
+ const BookmarkNode* parent,
+ const std::vector<const BookmarkNode*>& selection)
+ : parent_widget_(parent_widget),
+ delegate_(delegate),
+ profile_(profile),
+ navigator_(navigator),
+ parent_(parent),
+ selection_(selection),
+ model_(profile->GetBookmarkModel()) {
+ DCHECK(profile_);
+ DCHECK(model_->IsLoaded());
+ model_->AddObserver(this);
+}
+
void BookmarkContextMenuControllerViews::BookmarkModelChanged() {
delegate_->CloseMenu();
}
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views.h b/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views.h
index 5a7de19..3bdbb0f 100644
--- a/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views.h
+++ b/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views.h
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -47,27 +47,30 @@ class BookmarkContextMenuControllerViewsDelegate {
// menu shown for any bookmark item.
class BookmarkContextMenuControllerViews : public BaseBookmarkModelObserver {
public:
- // Creates the bookmark context menu.
+ // Factory function for creating an instance of the
+ // BookmarkContextMenuControllerViews class which in turn creates the
+ // bookmark context menu.
// |parent_widget| is the window that this menu should be added to.
// |delegate| is described above.
// |profile| is used for opening urls as well as enabling 'open incognito'.
// |navigator| is used if |browser| is null, and is provided for testing.
// |parent| is the parent for newly created nodes if |selection| is empty.
// |selection| is the nodes the context menu operates on and may be empty.
- BookmarkContextMenuControllerViews(
+ static BookmarkContextMenuControllerViews* Create(
views::Widget* parent_widget,
BookmarkContextMenuControllerViewsDelegate* delegate,
Profile* profile,
content::PageNavigator* navigator,
const BookmarkNode* parent,
const std::vector<const BookmarkNode*>& selection);
+
virtual ~BookmarkContextMenuControllerViews();
- void BuildMenu();
+ virtual void ExecuteCommand(int id);
+ virtual bool IsItemChecked(int id) const;
+ virtual bool IsCommandEnabled(int id) const;
- void ExecuteCommand(int id);
- bool IsItemChecked(int id) const;
- bool IsCommandEnabled(int id) const;
+ void BuildMenu();
Profile* profile() const { return profile_; }
@@ -76,6 +79,28 @@ class BookmarkContextMenuControllerViews : public BaseBookmarkModelObserver {
}
content::PageNavigator* navigator() const { return navigator_; }
+ views::Widget* parent_widget() const { return parent_widget_; }
+
+ const std::vector<const BookmarkNode*>& selection() const {
+ return selection_;
+ }
+
+ protected:
+ // Creates the bookmark context menu.
+ // |parent_widget| is the window that this menu should be added to.
+ // |delegate| is described above.
+ // |profile| is used for opening urls as well as enabling 'open incognito'.
+ // |navigator| is used if |browser| is null, and is provided for testing.
+ // |parent| is the parent for newly created nodes if |selection| is empty.
+ // |selection| is the nodes the context menu operates on and may be empty.
+ BookmarkContextMenuControllerViews(
+ views::Widget* parent_widget,
+ BookmarkContextMenuControllerViewsDelegate* delegate,
+ Profile* profile,
+ content::PageNavigator* navigator,
+ const BookmarkNode* parent,
+ const std::vector<const BookmarkNode*>& selection);
+
private:
// Overridden from BaseBookmarkModelObserver:
// Any change to the model results in closing the menu.
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views_win.cc b/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views_win.cc
new file mode 100644
index 0000000..e23d7a9
--- /dev/null
+++ b/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views_win.cc
@@ -0,0 +1,99 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views_win.h"
+
+#include "base/win/metro.h"
+#include "chrome/app/chrome_command_ids.h"
+#include "chrome/browser/bookmarks/bookmark_utils.h"
+#include "chrome/browser/profiles/profile.h"
+#include "content/public/browser/user_metrics.h"
+#include "grit/generated_resources.h"
+#include "ui/views/widget/widget.h"
+
+using content::UserMetricsAction;
+
+// static
+BookmarkContextMenuControllerViews* BookmarkContextMenuControllerViews::Create(
+ views::Widget* parent_widget,
+ BookmarkContextMenuControllerViewsDelegate* delegate,
+ Profile* profile,
+ content::PageNavigator* navigator,
+ const BookmarkNode* parent,
+ const std::vector<const BookmarkNode*>& selection) {
+ return new BookmarkContextMenuControllerViewsWin(parent_widget, delegate,
+ profile, navigator, parent,
+ selection);
+}
+
+BookmarkContextMenuControllerViewsWin::BookmarkContextMenuControllerViewsWin(
+ views::Widget* parent_widget,
+ BookmarkContextMenuControllerViewsDelegate* delegate,
+ Profile* profile,
+ content::PageNavigator* navigator,
+ const BookmarkNode* parent,
+ const std::vector<const BookmarkNode*>& selection)
+ : BookmarkContextMenuControllerViews(parent_widget, delegate, profile,
+ navigator, parent, selection) {
+}
+
+BookmarkContextMenuControllerViewsWin
+ ::~BookmarkContextMenuControllerViewsWin() {
+}
+
+void BookmarkContextMenuControllerViewsWin::ExecuteCommand(int id) {
+ if (base::win::GetMetroModule()) {
+ switch (id) {
+ // We need to handle the open in new window and open in incognito window
+ // commands to ensure that they first look for an existing browser object
+ // to handle the request. If we find one then a new foreground tab is
+ // opened, else a new browser object is created.
+ case IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW:
+ case IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO: {
+ Profile* profile_to_use = profile();
+ if (id == IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW) {
+ if (profile_to_use->IsOffTheRecord())
+ profile_to_use = profile_to_use->GetOriginalProfile();
+
+ content::RecordAction(
+ UserMetricsAction("BookmarkBar_ContextMenu_OpenAllInNewWindow"));
+ } else {
+ if (!profile_to_use->IsOffTheRecord())
+ profile_to_use = profile_to_use->GetOffTheRecordProfile();
+
+ content::RecordAction(
+ UserMetricsAction("BookmarkBar_ContextMenu_OpenAllIncognito"));
+ }
+ // Passing in NULL for the PageNavigator ensures that we first look for
+ // an existing browser window to handle the request before trying to
+ // create one.
+ bookmark_utils::OpenAll(parent_widget()->GetNativeWindow(),
+ profile_to_use, NULL, selection(),
+ NEW_FOREGROUND_TAB);
+ bookmark_utils::RecordBookmarkLaunch(
+ bookmark_utils::LAUNCH_CONTEXT_MENU);
+ return;
+ }
+
+ default:
+ break;
+ }
+ }
+ BookmarkContextMenuControllerViews::ExecuteCommand(id);
+}
+
+bool BookmarkContextMenuControllerViewsWin::IsCommandEnabled(int id) const {
+ // In Windows 8 metro mode no new window option on a regular chrome window
+ // and no new incognito window option on an incognito chrome window.
+ if (base::win::GetMetroModule()) {
+ if (id == IDC_BOOKMARK_BAR_OPEN_ALL_NEW_WINDOW &&
+ !profile()->IsOffTheRecord()) {
+ return false;
+ } else if (id == IDC_BOOKMARK_BAR_OPEN_ALL_INCOGNITO &&
+ profile()->IsOffTheRecord()) {
+ return false;
+ }
+ }
+ return BookmarkContextMenuControllerViews::IsCommandEnabled(id);
+}
diff --git a/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views_win.h b/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views_win.h
new file mode 100644
index 0000000..f4fd5e6
--- /dev/null
+++ b/chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views_win.h
@@ -0,0 +1,33 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_CONTEXT_MENU_CONTROLLER_VIEWS_WIN_H_
+#define CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_CONTEXT_MENU_CONTROLLER_VIEWS_WIN_H_
+#pragma once
+
+#include <vector>
+
+#include "chrome/browser/ui/views/bookmarks/bookmark_context_menu_controller_views.h"
+
+class BookmarkContextMenuControllerViewsWin
+ : public BookmarkContextMenuControllerViews {
+ public:
+ BookmarkContextMenuControllerViewsWin(
+ views::Widget* parent_widget,
+ BookmarkContextMenuControllerViewsDelegate* delegate,
+ Profile* profile,
+ content::PageNavigator* navigator,
+ const BookmarkNode* parent,
+ const std::vector<const BookmarkNode*>& selection);
+ virtual ~BookmarkContextMenuControllerViewsWin();
+
+ // BookmarkContextMenuControllerViews overrides
+ virtual void ExecuteCommand(int id) OVERRIDE;
+ virtual bool IsCommandEnabled(int id) const OVERRIDE;
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(BookmarkContextMenuControllerViewsWin);
+};
+
+#endif // CHROME_BROWSER_UI_VIEWS_BOOKMARKS_BOOKMARK_CONTEXT_MENU_CONTROLLER_VIEWS_WIN_H_
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index b1cde9d..cdf4a8b 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -3416,6 +3416,8 @@
'browser/ui/views/bookmarks/bookmark_context_menu.h',
'browser/ui/views/bookmarks/bookmark_context_menu_controller_views.cc',
'browser/ui/views/bookmarks/bookmark_context_menu_controller_views.h',
+ 'browser/ui/views/bookmarks/bookmark_context_menu_controller_views_win.cc',
+ 'browser/ui/views/bookmarks/bookmark_context_menu_controller_views_win.h',
'browser/ui/views/bookmarks/bookmark_editor_view.cc',
'browser/ui/views/bookmarks/bookmark_editor_view.h',
'browser/ui/views/bookmarks/bookmark_menu_controller_views.cc',