Re-connect search on MD downloads

Also fix "Clear all" for a Polymer world.

Prev CL: https://codereview.chromium.org/1259363004/

R=michaelpg@chromium.org
BUG=425626

Review URL: https://codereview.chromium.org/1264553002

Cr-Commit-Position: refs/heads/master@{#341181}
diff --git a/chrome/browser/resources/md_downloads/manager.js b/chrome/browser/resources/md_downloads/manager.js
index f1c629b4c..657e842 100644
--- a/chrome/browser/resources/md_downloads/manager.js
+++ b/chrome/browser/resources/md_downloads/manager.js
@@ -44,7 +44,7 @@
           e.canExecute = this.$.toolbar.canUndo();
           break;
         case 'clear-all-command':
-          e.canExecute = true;
+          e.canExecute = this.$.toolbar.canClearAll();
           break;
       }
     },
@@ -157,7 +157,7 @@
       this.hasDownloads_ = this.size_() > 0;
 
       if (loadTimeData.getBoolean('allowDeletingHistory'))
-        this.$.toolbar.canClearAll = this.hasDownloads_;
+        this.$.toolbar.downloadsShowing = this.hasDownloads_;
 
       this.onResize_();
     },
diff --git a/chrome/browser/resources/md_downloads/toolbar.html b/chrome/browser/resources/md_downloads/toolbar.html
index 5db4bae..1ae8853 100644
--- a/chrome/browser/resources/md_downloads/toolbar.html
+++ b/chrome/browser/resources/md_downloads/toolbar.html
@@ -3,6 +3,7 @@
 <link rel="import" href="chrome://resources/polymer/v1_0/paper-icon-button/paper-icon-button.html">
 <link rel="import" href="chrome://resources/cr_elements/v1_0/cr_button/cr_button.html">
 <link rel="import" href="chrome://resources/cr_elements/v1_0/cr_input/cr_input.html">
+<link rel="import" href="chrome://resources/html/assert.html">
 <link rel="import" href="chrome://resources/html/cr.html">
 
 <dom-module id="downloads-toolbar">
@@ -12,8 +13,7 @@
     </div>
     <div id="actions">
       <cr-button id="clear-all" i18n-content="clearAll"
-          on-click="onClearAllClick_"
-          hidden$="[[!canClearAll]]"></cr-button>
+          on-click="onClearAllClick_"></cr-button>
       <cr-button id="open-downloads-folder" i18n-content="openDownloadsFolder"
           on-click="onOpenDownloadsFolderClick_"></cr-button>
     </div>
diff --git a/chrome/browser/resources/md_downloads/toolbar.js b/chrome/browser/resources/md_downloads/toolbar.js
index 61716d4..647778d 100644
--- a/chrome/browser/resources/md_downloads/toolbar.js
+++ b/chrome/browser/resources/md_downloads/toolbar.js
@@ -13,9 +13,10 @@
     },
 
     properties: {
-      canClearAll: {
+      downloadsShowing: {
         type: Boolean,
         value: false,
+        observer: 'onDownloadsShowingChange_',
       },
 
       showingSearch_: {
@@ -26,15 +27,45 @@
 
     /** @return {boolean} Whether removal can be undone. */
     canUndo: function() {
-      return this.$['search-term'] != document.activeElement;
+      return !this.$['search-term'].shadowRoot.activeElement;
+    },
+
+    /** @return {boolean} Whether "Clear all" should be allowed. */
+    canClearAll: function() {
+      return !this.$['search-term'].value && this.downloadsShowing;
+    },
+
+    ready: function() {
+      var term = this.$['search-term'];
+      term.addEventListener('input', this.onSearchTermInput_.bind(this));
+      term.addEventListener('keydown', this.onSearchTermKeydown_.bind(this));
     },
 
     /** @private */
     onClearAllClick_: function() {
+      assert(this.canClearAll());
       this.actionService_.clearAll();
     },
 
     /** @private */
+    onDownloadsShowingChange_: function() {
+      this.updateClearAll_();
+    },
+
+    /** @private */
+    onSearchTermInput_: function() {
+      this.actionService_.search(this.$['search-term'].value);
+      this.updateClearAll_();
+    },
+
+    /** @private */
+    onSearchTermKeydown_: function(e) {
+      assert(this.showingSearch_);
+      if (e.keyIdentifier == 'U+001B')  // Escape.
+        this.toggleShowingSearch_();
+    },
+
+    /** @private */
     onOpenDownloadsFolderClick_: function() {
       this.actionService_.openDownloadsFolder();
     },
@@ -42,6 +73,18 @@
     /** @private */
     toggleShowingSearch_: function() {
       this.showingSearch_ = !this.showingSearch_;
+
+      if (this.showingSearch_) {
+        this.$['search-term'].focus();
+      } else {
+        this.$['search-term'].value = '';
+        this.onSearchTermInput_();
+      }
+    },
+
+    /** @private */
+    updateClearAll_: function() {
+      this.$['clear-all'].hidden = !this.canClearAll();
     },
   });
 
diff --git a/ui/webui/resources/cr_elements/v1_0/cr_input/cr_input.js b/ui/webui/resources/cr_elements/v1_0/cr_input/cr_input.js
index 362d0c76..2dec111 100644
--- a/ui/webui/resources/cr_elements/v1_0/cr_input/cr_input.js
+++ b/ui/webui/resources/cr_elements/v1_0/cr_input/cr_input.js
@@ -86,7 +86,7 @@
    * Focuses the 'input' element.
    */
   focus: function() {
-    this.$.input.focus();
+    this.$.input.inputElement.focus();
   },
 
   /** @override */