Commit 092c72a9 authored by Yuheng Huang's avatar Yuheng Huang Committed by Commit Bot

Reland "Tab Search: Setup keyboard shortcut"

Cause of revert: The previous CL tried to add a key to
accelerators_cocoa.mm without adding to menu item
Solution: remove change in accelerators_cocoa.mm but keep the change in
global_keyboard_shortcuts_mac.mm

This is a reland of 9b3d32d9

Original change's description:
> Tab Search: Setup keyboard shortcut
>
> Setup ctrl(cmd on Mac) + shift + e as tab search keyboard shortcut
> for all desktop platforms
>
> Bug: 1099917,1112558
> Change-Id: I6c50b26714d678d0f89d2c846909ff0b802e4f0d
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2329944
> Commit-Queue: Yuheng Huang <yuhengh@chromium.org>
> Reviewed-by: Scott Violet <sky@chromium.org>
> Reviewed-by: Robert Liao <robliao@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#795750}

Bug: 1099917
Bug: 1112558
Change-Id: I4639649e6b0b839ead06aac1458c058f20db5fca
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2343300Reviewed-by: default avatarScott Violet <sky@chromium.org>
Commit-Queue: Yuheng Huang <yuhengh@chromium.org>
Cr-Commit-Position: refs/heads/master@{#796584}
parent dbfe98e5
...@@ -411,6 +411,9 @@ ...@@ -411,6 +411,9 @@
#define IDC_CONTENT_CONTEXT_QUICK_ANSWERS_INLINE_QUERY 52414 #define IDC_CONTENT_CONTEXT_QUICK_ANSWERS_INLINE_QUERY 52414
#endif #endif
// Tab Search
#define IDC_TAB_SEARCH 52500
// NOTE: The last valid command value is 57343 (0xDFFF) // NOTE: The last valid command value is 57343 (0xDFFF)
// See http://msdn.microsoft.com/en-us/library/t2zechd4(VS.71).aspx // See http://msdn.microsoft.com/en-us/library/t2zechd4(VS.71).aspx
......
...@@ -4,12 +4,14 @@ ...@@ -4,12 +4,14 @@
#include <stddef.h> #include <stddef.h>
#include "base/test/scoped_feature_list.h"
#include "chrome/app/chrome_command_ids.h" #include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/bookmarks/bookmark_model_factory.h"
#include "chrome/browser/ui/browser_command_controller.h" #include "chrome/browser/ui/browser_command_controller.h"
#include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/browser_finder.h" #include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/ui_features.h"
#include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h" #include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h"
#include "chrome/common/pref_names.h" #include "chrome/common/pref_names.h"
#include "chrome/common/url_constants.h" #include "chrome/common/url_constants.h"
...@@ -490,4 +492,16 @@ TEST_F(BrowserCommandsTest, ToggleCaretBrowsing) { ...@@ -490,4 +492,16 @@ TEST_F(BrowserCommandsTest, ToggleCaretBrowsing) {
} }
} }
TEST_F(BrowserCommandsTest, TabSearchDisabled) {
EXPECT_FALSE(chrome::IsCommandEnabled(browser(), IDC_TAB_SEARCH));
}
TEST_F(BrowserCommandsTest, TabSearchEnabled) {
base::test::ScopedFeatureList feature_list;
feature_list.InitAndEnableFeature(features::kTabSearch);
auto browser =
CreateBrowser(profile(), Browser::TYPE_NORMAL, false, window());
EXPECT_TRUE(chrome::IsCommandEnabled(browser.get(), IDC_TAB_SEARCH));
}
} // namespace } // namespace
...@@ -166,6 +166,7 @@ const std::vector<KeyboardShortcutData>& GetShortcutsNotPresentInMainMenu() { ...@@ -166,6 +166,7 @@ const std::vector<KeyboardShortcutData>& GetShortcutsNotPresentInMainMenu() {
{true, false, false, true, kVK_ANSI_L, IDC_SHOW_DOWNLOADS}, {true, false, false, true, kVK_ANSI_L, IDC_SHOW_DOWNLOADS},
{true, true, false, false, kVK_ANSI_C, IDC_DEV_TOOLS_INSPECT}, {true, true, false, false, kVK_ANSI_C, IDC_DEV_TOOLS_INSPECT},
{true, false, false, true, kVK_ANSI_C, IDC_DEV_TOOLS_INSPECT}, {true, false, false, true, kVK_ANSI_C, IDC_DEV_TOOLS_INSPECT},
{true, true, false, false, kVK_ANSI_E, IDC_TAB_SEARCH},
{true, false, false, true, kVK_DownArrow, IDC_FOCUS_NEXT_PANE}, {true, false, false, true, kVK_DownArrow, IDC_FOCUS_NEXT_PANE},
{true, false, false, true, kVK_UpArrow, IDC_FOCUS_PREVIOUS_PANE}, {true, false, false, true, kVK_UpArrow, IDC_FOCUS_PREVIOUS_PANE},
......
...@@ -29,14 +29,14 @@ constexpr char kAshAcceleratorsHash[] = "8c10cc51d4e84e4b94310bc91d15a0a8"; ...@@ -29,14 +29,14 @@ constexpr char kAshAcceleratorsHash[] = "8c10cc51d4e84e4b94310bc91d15a0a8";
#if BUILDFLAG(GOOGLE_CHROME_BRANDING) #if BUILDFLAG(GOOGLE_CHROME_BRANDING)
// Internal builds add an extra accelerator for the Feedback app. // Internal builds add an extra accelerator for the Feedback app.
// The total number of Chrome accelerators (available on Chrome OS). // The total number of Chrome accelerators (available on Chrome OS).
constexpr int kChromeAcceleratorsTotalNum = 95; constexpr int kChromeAcceleratorsTotalNum = 97;
// The hash of Chrome accelerators (available on Chrome OS). // The hash of Chrome accelerators (available on Chrome OS).
constexpr char kChromeAcceleratorsHash[] = "ef0b7eb1a1dabd26e964c6593e4698a4"; constexpr char kChromeAcceleratorsHash[] = "a5d5a245352c94b17618c6d9425a0a9b";
#else #else
// The total number of Chrome accelerators (available on Chrome OS). // The total number of Chrome accelerators (available on Chrome OS).
constexpr int kChromeAcceleratorsTotalNum = 95; constexpr int kChromeAcceleratorsTotalNum = 96;
// The hash of Chrome accelerators (available on Chrome OS). // The hash of Chrome accelerators (available on Chrome OS).
constexpr char kChromeAcceleratorsHash[] = "7d5afdffb1dcc73c3f6f73107b5d6651"; constexpr char kChromeAcceleratorsHash[] = "1c6a632c57e6e1033e482fc6ffc2184e";
#endif // BUILDFLAG(GOOGLE_CHROME_BRANDING) #endif // BUILDFLAG(GOOGLE_CHROME_BRANDING)
const char* BooleanToString(bool value) { const char* BooleanToString(bool value) {
......
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include "chrome/browser/ui/page_info/page_info_dialog.h" #include "chrome/browser/ui/page_info/page_info_dialog.h"
#include "chrome/browser/ui/singleton_tabs.h" #include "chrome/browser/ui/singleton_tabs.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/ui_features.h"
#include "chrome/browser/ui/web_applications/app_browser_controller.h" #include "chrome/browser/ui/web_applications/app_browser_controller.h"
#include "chrome/browser/ui/web_applications/web_app_dialog_utils.h" #include "chrome/browser/ui/web_applications/web_app_dialog_utils.h"
#include "chrome/browser/ui/web_applications/web_app_launch_utils.h" #include "chrome/browser/ui/web_applications/web_app_launch_utils.h"
...@@ -379,6 +380,9 @@ bool BrowserCommandController::ExecuteCommandWithDisposition( ...@@ -379,6 +380,9 @@ bool BrowserCommandController::ExecuteCommandWithDisposition(
case IDC_STOP: case IDC_STOP:
Stop(browser_); Stop(browser_);
break; break;
case IDC_TAB_SEARCH:
ShowTabSearch(browser_);
break;
// Window management commands // Window management commands
case IDC_NEW_WINDOW: case IDC_NEW_WINDOW:
...@@ -1042,6 +1046,11 @@ void BrowserCommandController::InitCommandState() { ...@@ -1042,6 +1046,11 @@ void BrowserCommandController::InitCommandState() {
command_updater_.UpdateCommandEnabled(IDC_WINDOW_CLOSE_OTHER_TABS, command_updater_.UpdateCommandEnabled(IDC_WINDOW_CLOSE_OTHER_TABS,
normal_window); normal_window);
command_updater_.UpdateCommandEnabled(
IDC_TAB_SEARCH, base::FeatureList::IsEnabled(features::kTabSearch) &&
browser_->is_type_normal() &&
!browser_->profile()->IsIncognitoProfile());
// Initialize other commands whose state changes based on various conditions. // Initialize other commands whose state changes based on various conditions.
UpdateCommandsForFullscreenMode(); UpdateCommandsForFullscreenMode();
UpdateCommandsForContentRestrictionState(); UpdateCommandsForContentRestrictionState();
......
...@@ -1216,6 +1216,10 @@ void FindInPage(Browser* browser, bool find_next, bool forward_direction) { ...@@ -1216,6 +1216,10 @@ void FindInPage(Browser* browser, bool find_next, bool forward_direction) {
browser->GetFindBarController()->Show(find_next, forward_direction); browser->GetFindBarController()->Show(find_next, forward_direction);
} }
void ShowTabSearch(Browser* browser) {
browser->window()->CreateTabSearchBubble();
}
bool CanCloseFind(Browser* browser) { bool CanCloseFind(Browser* browser) {
WebContents* current_tab = browser->tab_strip_model()->GetActiveWebContents(); WebContents* current_tab = browser->tab_strip_model()->GetActiveWebContents();
if (!current_tab) if (!current_tab)
......
...@@ -166,6 +166,7 @@ void Find(Browser* browser); ...@@ -166,6 +166,7 @@ void Find(Browser* browser);
void FindNext(Browser* browser); void FindNext(Browser* browser);
void FindPrevious(Browser* browser); void FindPrevious(Browser* browser);
void FindInPage(Browser* browser, bool find_next, bool forward_direction); void FindInPage(Browser* browser, bool find_next, bool forward_direction);
void ShowTabSearch(Browser* browser);
bool CanCloseFind(Browser* browser); bool CanCloseFind(Browser* browser);
void CloseFind(Browser* browser); void CloseFind(Browser* browser);
void Zoom(Browser* browser, content::PageZoom zoom); void Zoom(Browser* browser, content::PageZoom zoom);
......
...@@ -495,6 +495,9 @@ class BrowserWindow : public ui::BaseWindow { ...@@ -495,6 +495,9 @@ class BrowserWindow : public ui::BaseWindow {
// Shows a confirmation dialog about enabling caret browsing. // Shows a confirmation dialog about enabling caret browsing.
virtual void ShowCaretBrowsingDialog() = 0; virtual void ShowCaretBrowsingDialog() = 0;
// Create and open the tab search bubble.
virtual void CreateTabSearchBubble() = 0;
protected: protected:
friend class BrowserCloseManager; friend class BrowserCloseManager;
friend class BrowserView; friend class BrowserView;
......
...@@ -43,6 +43,8 @@ const AcceleratorMapping kAcceleratorMap[] = { ...@@ -43,6 +43,8 @@ const AcceleratorMapping kAcceleratorMap[] = {
{ui::VKEY_W, ui::EF_SHIFT_DOWN | ui::EF_PLATFORM_ACCELERATOR, {ui::VKEY_W, ui::EF_SHIFT_DOWN | ui::EF_PLATFORM_ACCELERATOR,
IDC_CLOSE_WINDOW}, IDC_CLOSE_WINDOW},
{ui::VKEY_F, ui::EF_PLATFORM_ACCELERATOR, IDC_FIND}, {ui::VKEY_F, ui::EF_PLATFORM_ACCELERATOR, IDC_FIND},
{ui::VKEY_E, ui::EF_SHIFT_DOWN | ui::EF_PLATFORM_ACCELERATOR,
IDC_TAB_SEARCH},
{ui::VKEY_G, ui::EF_PLATFORM_ACCELERATOR, IDC_FIND_NEXT}, {ui::VKEY_G, ui::EF_PLATFORM_ACCELERATOR, IDC_FIND_NEXT},
{ui::VKEY_G, ui::EF_SHIFT_DOWN | ui::EF_PLATFORM_ACCELERATOR, {ui::VKEY_G, ui::EF_SHIFT_DOWN | ui::EF_PLATFORM_ACCELERATOR,
IDC_FIND_PREVIOUS}, IDC_FIND_PREVIOUS},
......
...@@ -118,7 +118,9 @@ ...@@ -118,7 +118,9 @@
#include "chrome/browser/ui/views/sharing/sharing_dialog_view.h" #include "chrome/browser/ui/views/sharing/sharing_dialog_view.h"
#include "chrome/browser/ui/views/status_bubble_views.h" #include "chrome/browser/ui/views/status_bubble_views.h"
#include "chrome/browser/ui/views/tab_contents/chrome_web_contents_view_focus_helper.h" #include "chrome/browser/ui/views/tab_contents/chrome_web_contents_view_focus_helper.h"
#include "chrome/browser/ui/views/tab_search/tab_search_bubble_view.h"
#include "chrome/browser/ui/views/tabs/browser_tab_strip_controller.h" #include "chrome/browser/ui/views/tabs/browser_tab_strip_controller.h"
#include "chrome/browser/ui/views/tabs/new_tab_button.h"
#include "chrome/browser/ui/views/tabs/tab.h" #include "chrome/browser/ui/views/tabs/tab.h"
#include "chrome/browser/ui/views/tabs/tab_groups_iph_controller.h" #include "chrome/browser/ui/views/tabs/tab_groups_iph_controller.h"
#include "chrome/browser/ui/views/tabs/tab_strip.h" #include "chrome/browser/ui/views/tabs/tab_strip.h"
...@@ -2567,6 +2569,11 @@ const views::Widget* BrowserView::GetWidget() const { ...@@ -2567,6 +2569,11 @@ const views::Widget* BrowserView::GetWidget() const {
return View::GetWidget(); return View::GetWidget();
} }
void BrowserView::CreateTabSearchBubble() {
TabSearchBubbleView::CreateTabSearchBubble(browser_->profile(),
tabstrip_->tab_search_button());
}
void BrowserView::RevealTabStripIfNeeded() { void BrowserView::RevealTabStripIfNeeded() {
if (!immersive_mode_controller_->IsEnabled()) if (!immersive_mode_controller_->IsEnabled())
return; return;
......
...@@ -579,6 +579,9 @@ class BrowserView : public BrowserWindow, ...@@ -579,6 +579,9 @@ class BrowserView : public BrowserWindow,
std::vector<views::NativeViewHost*> GetNativeViewHostsForTopControlsSlide() std::vector<views::NativeViewHost*> GetNativeViewHostsForTopControlsSlide()
const; const;
// Create and open the tab search bubble.
void CreateTabSearchBubble() override;
private: private:
// Do not friend BrowserViewLayout. Use the BrowserViewLayoutDelegate // Do not friend BrowserViewLayout. Use the BrowserViewLayoutDelegate
// interface to keep these two classes decoupled and testable. // interface to keep these two classes decoupled and testable.
......
...@@ -233,6 +233,9 @@ class TabStrip : public views::AccessiblePaneView, ...@@ -233,6 +233,9 @@ class TabStrip : public views::AccessiblePaneView,
// Returns the NewTabButton. // Returns the NewTabButton.
NewTabButton* new_tab_button() { return new_tab_button_; } NewTabButton* new_tab_button() { return new_tab_button_; }
// Returns the TabSearchButton.
NewTabButton* tab_search_button() { return tab_search_button_; }
// Returns the index of the specified view in the model coordinate system, or // Returns the index of the specified view in the model coordinate system, or
// -1 if view is closing or not a tab. // -1 if view is closing or not a tab.
int GetModelIndexOf(const TabSlotView* view) const; int GetModelIndexOf(const TabSlotView* view) const;
......
...@@ -199,6 +199,8 @@ class TestBrowserWindow : public BrowserWindow { ...@@ -199,6 +199,8 @@ class TestBrowserWindow : public BrowserWindow {
void SetCloseCallback(base::OnceClosure close_callback); void SetCloseCallback(base::OnceClosure close_callback);
void CreateTabSearchBubble() override {}
protected: protected:
void DestroyBrowser() override {} void DestroyBrowser() override {}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment