Allow Escape key to close Find dialog

As an extension of the work to prepopulate Find with selection, it was
determined that being able to close the find widget without having to
put keyboard focus back into it (via Ctrl+F) helped eliminate another
keystroke.

Related patch:
https://chromium-review.googlesource.com/c/chromium/src/+/1644229


Bug: 935157
Change-Id: I8e9fa9d568a3b89bcd5855fd2e6d8751995313bb
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1674468
Reviewed-by: Scott Violet <[email protected]>
Reviewed-by: Peter Kasting <[email protected]>
Commit-Queue: Jeff Fisher <[email protected]>
Cr-Commit-Position: refs/heads/master@{#673530}
diff --git a/chrome/browser/ui/browser_command_controller.cc b/chrome/browser/ui/browser_command_controller.cc
index 784bf153..55be14f0 100644
--- a/chrome/browser/ui/browser_command_controller.cc
+++ b/chrome/browser/ui/browser_command_controller.cc
@@ -298,6 +298,12 @@
   UpdateReloadStopState(is_loading, force);
 }
 
+void BrowserCommandController::FindBarVisibilityChanged() {
+  if (is_locked_fullscreen_)
+    return;
+  UpdateCloseFindOrStop();
+}
+
 void BrowserCommandController::ExtensionStateChanged() {
   // Extensions may disable the bookmark editing commands.
   UpdateCommandsForBookmarkEditing();
@@ -565,6 +571,12 @@
     case IDC_FIND_PREVIOUS:
       FindPrevious(browser_);
       break;
+    case IDC_CLOSE_FIND_OR_STOP:
+      if (CanCloseFind(browser_))
+        CloseFind(browser_);
+      else if (IsCommandEnabled(IDC_STOP))
+        ExecuteCommand(IDC_STOP);
+      break;
 
     // Zoom
     case IDC_ZOOM_PLUS:
@@ -1376,6 +1388,7 @@
 
   window()->UpdateReloadStopState(is_loading, force);
   command_updater_.UpdateCommandEnabled(IDC_STOP, is_loading);
+  UpdateCloseFindOrStop();
 }
 
 void BrowserCommandController::UpdateTabRestoreCommandState() {
@@ -1403,6 +1416,11 @@
   command_updater_.UpdateCommandEnabled(IDC_FIND_PREVIOUS, enabled);
 }
 
+void BrowserCommandController::UpdateCloseFindOrStop() {
+  bool enabled = CanCloseFind(browser_) || IsCommandEnabled(IDC_STOP);
+  command_updater_.UpdateCommandEnabled(IDC_CLOSE_FIND_OR_STOP, enabled);
+}
+
 void BrowserCommandController::UpdateCommandsForMediaRouter() {
   if (is_locked_fullscreen_)
     return;