2011-02-25 Andrey Kosyakov <caseq@chromium.org>
authorcaseq@chromium.org <caseq@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 2 Mar 2011 09:40:17 +0000 (09:40 +0000)
committercaseq@chromium.org <caseq@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 2 Mar 2011 09:40:17 +0000 (09:40 +0000)
        Reviewed by Pavel Feldman.

        Web Inspector: factor search logic out of inspector.js
        https://bugs.webkit.org/show_bug.cgi?id=54965

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.switchToAndFocus):
        (WebInspector.ElementsPanel.prototype._updateMatchesCount):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.searchCanceled):
        (WebInspector.Panel.prototype.performSearch.updateMatchesCount):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.searchCanceled):
        (WebInspector.ScriptsPanel.prototype.performSearch.finishedCallback):
        (WebInspector.ScriptsPanel.prototype.performSearch):
        * inspector/front-end/SearchController.js: Added.
        (WebInspector.SearchController):
        (WebInspector.SearchController.prototype.updateSearchMatchesCount):
        (WebInspector.SearchController.prototype.updateSearchLabel):
        (WebInspector.SearchController.prototype.cancelSearch):
        (WebInspector.SearchController.prototype.handleShortcut):
        (WebInspector.SearchController.prototype.activePanelChanged.performPanelSearch):
        (WebInspector.SearchController.prototype.activePanelChanged):
        (WebInspector.SearchController.prototype._updateSearchMatchesCount):
        (WebInspector.SearchController.prototype._focusSearchField):
        (WebInspector.SearchController.prototype._onSearchFieldManualFocus):
        (WebInspector.SearchController.prototype._onKeyDown):
        (WebInspector.SearchController.prototype._onSearch):
        (WebInspector.SearchController.prototype._performSearch):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.set currentPanel):
        (WebInspector.set attached):
        (WebInspector.doLoadedDone):
        (WebInspector.documentKeyDown):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@80102 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/WebCore.gypi
Source/WebCore/WebCore.vcproj/WebCore.vcproj
Source/WebCore/inspector/front-end/ElementsPanel.js
Source/WebCore/inspector/front-end/Panel.js
Source/WebCore/inspector/front-end/ScriptsPanel.js
Source/WebCore/inspector/front-end/SearchController.js [new file with mode: 0755]
Source/WebCore/inspector/front-end/WebKit.qrc
Source/WebCore/inspector/front-end/inspector.html
Source/WebCore/inspector/front-end/inspector.js

index 019dcf5..cf668ff 100644 (file)
@@ -1,3 +1,45 @@
+2011-02-25  Andrey Kosyakov  <caseq@chromium.org>
+
+        Reviewed by Pavel Feldman.
+
+        Web Inspector: factor search logic out of inspector.js
+        https://bugs.webkit.org/show_bug.cgi?id=54965
+
+        * WebCore.gypi:
+        * WebCore.vcproj/WebCore.vcproj:
+        * inspector/front-end/ElementsPanel.js:
+        (WebInspector.ElementsPanel.prototype.searchCanceled):
+        (WebInspector.ElementsPanel.prototype.switchToAndFocus):
+        (WebInspector.ElementsPanel.prototype._updateMatchesCount):
+        * inspector/front-end/Panel.js:
+        (WebInspector.Panel.prototype.searchCanceled):
+        (WebInspector.Panel.prototype.performSearch.updateMatchesCount):
+        * inspector/front-end/ScriptsPanel.js:
+        (WebInspector.ScriptsPanel.prototype.searchCanceled):
+        (WebInspector.ScriptsPanel.prototype.performSearch.finishedCallback):
+        (WebInspector.ScriptsPanel.prototype.performSearch):
+        * inspector/front-end/SearchController.js: Added.
+        (WebInspector.SearchController):
+        (WebInspector.SearchController.prototype.updateSearchMatchesCount):
+        (WebInspector.SearchController.prototype.updateSearchLabel):
+        (WebInspector.SearchController.prototype.cancelSearch):
+        (WebInspector.SearchController.prototype.handleShortcut):
+        (WebInspector.SearchController.prototype.activePanelChanged.performPanelSearch):
+        (WebInspector.SearchController.prototype.activePanelChanged):
+        (WebInspector.SearchController.prototype._updateSearchMatchesCount):
+        (WebInspector.SearchController.prototype._focusSearchField):
+        (WebInspector.SearchController.prototype._onSearchFieldManualFocus):
+        (WebInspector.SearchController.prototype._onKeyDown):
+        (WebInspector.SearchController.prototype._onSearch):
+        (WebInspector.SearchController.prototype._performSearch):
+        * inspector/front-end/WebKit.qrc:
+        * inspector/front-end/inspector.html:
+        * inspector/front-end/inspector.js:
+        (WebInspector.set currentPanel):
+        (WebInspector.set attached):
+        (WebInspector.doLoadedDone):
+        (WebInspector.documentKeyDown):
+
 2011-03-02  Renata Hodovan  <reni@webkit.org>
 
         Reviewed by Andreas Kling.
index c3c1ff0..bbdc915 100644 (file)
             'inspector/front-end/ScriptFormatter.js',
             'inspector/front-end/ScriptFormatterWorker.js',
             'inspector/front-end/ScriptsPanel.js',
+            'inspector/front-end/SearchController.js',
             'inspector/front-end/ShortcutsHelp.js',
             'inspector/front-end/ShowMoreDataGridNode.js',
             'inspector/front-end/Section.js',
index 46ccc2c..d29af07 100755 (executable)
                                        >
                                </File>
                                <File
+                                       RelativePath="..\inspector\front-end\SearchController.js"
+                                       >
+                               </File>
+                               <File
                                        RelativePath="..\inspector\front-end\Section.js"
                                        >
                                </File>
index eda932b..8137019 100644 (file)
@@ -222,7 +222,7 @@ WebInspector.ElementsPanel.prototype = {
         delete this._searchQuery;
         this._hideSearchHighlights();
 
-        WebInspector.updateSearchMatchesCount(0, this);
+        WebInspector.searchController.updateSearchMatchesCount(0, this);
 
         delete this._currentSearchResultIndex;
         this._searchResults = [];
@@ -264,14 +264,14 @@ WebInspector.ElementsPanel.prototype = {
     switchToAndFocus: function(node)
     {
         // Reset search restore.
-        WebInspector.cancelSearch();
+        WebInspector.searchController.cancelSearch();
         WebInspector.currentPanel = this;
         this.focusedDOMNode = node;
     },
 
     _updateMatchesCount: function()
     {
-        WebInspector.updateSearchMatchesCount(this._searchResults.length, this);
+        WebInspector.searchController.updateSearchMatchesCount(this._searchResults.length, this);
         this._matchesCountUpdateTimeout = null;
         this._updatedMatchCountOnce = true;
     },
index 758c56d..d9b54d4 100644 (file)
@@ -110,7 +110,7 @@ WebInspector.Panel.prototype = {
             }
         }
 
-        WebInspector.updateSearchMatchesCount(0, this);
+        WebInspector.searchController.updateSearchMatchesCount(0, this);
 
         if (this._currentSearchChunkIntervalIdentifier) {
             clearInterval(this._currentSearchChunkIntervalIdentifier);
@@ -139,7 +139,7 @@ WebInspector.Panel.prototype = {
 
         function updateMatchesCount()
         {
-            WebInspector.updateSearchMatchesCount(this._totalSearchMatches, this);
+            WebInspector.searchController.updateSearchMatchesCount(this._totalSearchMatches, this);
             matchesCountUpdateTimeout = null;
         }
 
index e54b35e..b1f72a4 100644 (file)
@@ -984,8 +984,6 @@ WebInspector.ScriptsPanel.prototype = {
 
     searchCanceled: function()
     {
-        WebInspector.updateSearchMatchesCount(0, this);
-
         if (this._searchView)
             this._searchView.searchCanceled();
 
@@ -995,6 +993,8 @@ WebInspector.ScriptsPanel.prototype = {
 
     performSearch: function(query)
     {
+        WebInspector.searchController.updateSearchMatchesCount(0, this);
+
         if (!this.visibleView)
             return;
 
@@ -1009,7 +1009,7 @@ WebInspector.ScriptsPanel.prototype = {
             if (!searchMatches)
                 return;
 
-            WebInspector.updateSearchMatchesCount(searchMatches, this);
+            WebInspector.searchController.updateSearchMatchesCount(searchMatches, this);
             view.jumpToFirstSearchResult();
         }
 
diff --git a/Source/WebCore/inspector/front-end/SearchController.js b/Source/WebCore/inspector/front-end/SearchController.js
new file mode 100755 (executable)
index 0000000..735c424
--- /dev/null
@@ -0,0 +1,269 @@
+/*
+ * Copyright (C) 2006, 2007, 2008 Apple Inc.  All rights reserved.
+ * Copyright (C) 2007 Matt Lilek (pewtermoose@gmail.com).
+ * Copyright (C) 2009 Joseph Pecoraro
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer.
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution.
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+WebInspector.SearchController = function()
+{
+    this.element = document.getElementById("search");
+    this._matchesElement = document.getElementById("search-results-matches");
+    this._toolbarLabelElement = document.getElementById("search-toolbar-label");
+
+    this.element.addEventListener("search", this._onSearch.bind(this), false); // when the search is emptied
+    this.element.addEventListener("mousedown", this._onSearchFieldManualFocus.bind(this), false); // when the search field is manually selected
+    this.element.addEventListener("keydown", this._onKeyDown.bind(this), true);
+}
+
+WebInspector.SearchController.prototype = {
+    updateSearchMatchesCount: function(matches, panel)
+    {
+        if (!panel)
+            panel = WebInspector.currentPanel;
+
+        panel.currentSearchMatches = matches;
+
+        if (panel === WebInspector.currentPanel)
+            this._updateSearchMatchesCount(WebInspector.currentPanel.currentQuery && matches);
+    },
+
+    updateSearchLabel: function()
+    {
+        var panelName = WebInspector.currentPanel && WebInspector.currentPanel.toolbarItemLabel;
+        if (!panelName)
+            return;
+        var newLabel = WebInspector.UIString("Search %s", panelName);
+        if (WebInspector.attached)
+            this.element.setAttribute("placeholder", newLabel);
+        else {
+            this.element.removeAttribute("placeholder");
+            this._toolbarLabelElement.textContent = newLabel;
+        }
+    },
+
+    cancelSearch: function()
+    {
+        this.element.value = "";
+        this._performSearch("");
+    },
+
+    handleShortcut: function(event)
+    {
+        var isMac = WebInspector.isMac();
+
+        switch (event.keyIdentifier) {
+            case "U+0046": // F key
+                if (isMac)
+                    var isFindKey = event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
+                else
+                    var isFindKey = event.ctrlKey && !event.metaKey && !event.altKey && !event.shiftKey;
+
+                if (isFindKey) {
+                    this._focusSearchField();
+                    event.handled = true;
+                }
+                break;
+
+
+            case "F3":
+                if (!isMac) {
+                    this._focusSearchField();
+                    event.handled = true;
+                }
+                break;
+
+            case "U+0047": // G key
+                var currentPanel = WebInspector.currentPanel;
+
+                if (isMac && event.metaKey && !event.ctrlKey && !event.altKey) {
+                    if (event.shiftKey) {
+                        if (currentPanel.jumpToPreviousSearchResult)
+                            currentPanel.jumpToPreviousSearchResult();
+                    } else if (currentPanel.jumpToNextSearchResult)
+                        currentPanel.jumpToNextSearchResult();
+                    event.handled = true;
+                }
+                break;
+        }
+    },
+
+    activePanelChanged: function()
+    {
+        this.updateSearchLabel();
+
+        if (!this._currentQuery)
+            return;
+         
+        panel = WebInspector.currentPanel;
+        if (panel.performSearch) {
+            function performPanelSearch()
+            {
+                this._updateSearchMatchesCount();
+
+                panel.currentQuery = this._currentQuery;
+                panel.performSearch(this._currentQuery);
+            }
+
+            // Perform the search on a timeout so the panel switches fast.
+            setTimeout(performPanelSearch.bind(this), 0);
+        } else {
+            // Update to show Not found for panels that can't be searched.
+            this._updateSearchMatchesCount();
+        }
+    },
+
+    _updateSearchMatchesCount: function(matches)
+    {
+        if (matches == null) {
+            this._matchesElement.addStyleClass("hidden");
+            return;
+        }
+
+        if (matches) {
+            if (matches === 1)
+                var matchesString = WebInspector.UIString("1 match");
+            else
+                var matchesString = WebInspector.UIString("%d matches", matches);
+        } else
+            var matchesString = WebInspector.UIString("Not Found");
+
+        this._matchesElement.removeStyleClass("hidden");
+        this._matchesElement.textContent = matchesString;
+        WebInspector.toolbar.resize();
+    },
+
+    _focusSearchField: function()
+    {
+        this.element.focus();
+        this.element.select();
+    },
+
+    _onSearchFieldManualFocus: function(event)
+    {
+        WebInspector.currentFocusElement = event.target;
+    },
+
+    _onKeyDown: function(event)
+    {
+        // Escape Key will clear the field and clear the search results
+        if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.code) {
+            // If focus belongs here and text is empty - nothing to do, return unhandled.
+            // When search was selected manually and is currently blank, we'd like Esc stay unhandled
+            // and hit console drawer handler.
+            if (event.target.value === "" && this.currentFocusElement === this.previousFocusElement)
+                return;
+            event.preventDefault();
+            event.stopPropagation();
+
+            this.cancelSearch(event);
+            WebInspector.currentFocusElement = WebInspector.previousFocusElement;
+            if (WebInspector.currentFocusElement === event.target)
+                WebInspector.currentFocusElement.currentFocusElement.select();
+            return false;
+        }
+
+        if (!isEnterKey(event))
+            return false;
+
+        // Select all of the text so the user can easily type an entirely new query.
+        event.target.select();
+
+        // Only call performSearch if the Enter key was pressed. Otherwise the search
+        // performance is poor because of searching on every key. The search field has
+        // the incremental attribute set, so we still get incremental searches.
+        this._onSearch(event);
+
+        // Call preventDefault since this was the Enter key. This prevents a "search" event
+        // from firing for key down. This stops performSearch from being called twice in a row.
+        event.preventDefault();
+    },
+
+    _onSearch: function(event)
+    {
+        var forceSearch = event.keyIdentifier === "Enter";
+        this._performSearch(event.target.value, forceSearch, event.shiftKey, false);
+    },
+
+    _performSearch: function(query, forceSearch, isBackwardSearch, repeatSearch)
+    {
+        var isShortSearch = (query.length < 3);
+
+        // Clear a leftover short search flag due to a non-conflicting forced search.
+        if (isShortSearch && this._shortSearchWasForcedByKeyEvent && this._currentQuery !== query)
+            delete this._shortSearchWasForcedByKeyEvent;
+
+        // Indicate this was a forced search on a short query.
+        if (isShortSearch && forceSearch)
+            this._shortSearchWasForcedByKeyEvent = true;
+
+        if (!query || !query.length || (!forceSearch && isShortSearch)) {
+            // Prevent clobbering a short search forced by the user.
+            if (this._shortSearchWasForcedByKeyEvent) {
+                delete this._shortSearchWasForcedByKeyEvent;
+                return;
+            }
+
+            delete this._currentQuery;
+
+            for (var panelName in WebInspector.panels) {
+                var panel = WebInspector.panels[panelName];
+                var hadCurrentQuery = !!panel.currentQuery;
+                delete panel.currentQuery;
+                if (hadCurrentQuery && panel.searchCanceled)
+                    panel.searchCanceled();
+            }
+
+            this._updateSearchMatchesCount();
+
+            return;
+        }
+
+        var currentPanel = WebInspector.currentPanel;
+        if (!repeatSearch && query === currentPanel.currentQuery && currentPanel.currentQuery === this._currentQuery) {
+            // When this is the same query and a forced search, jump to the next
+            // search result for a good user experience.
+            if (forceSearch) {
+                if (!isBackwardSearch && currentPanel.jumpToNextSearchResult)
+                    currentPanel.jumpToNextSearchResult();
+                else if (isBackwardSearch && currentPanel.jumpToPreviousSearchResult)
+                    currentPanel.jumpToPreviousSearchResult();
+            }
+            return;
+        }
+
+        this._currentQuery = query;
+
+        this._updateSearchMatchesCount();
+
+        if (!currentPanel.performSearch)
+            return;
+
+        currentPanel.currentQuery = query;
+        currentPanel.performSearch(query);
+    }
+}
index f34d704..91d72d8 100644 (file)
@@ -87,6 +87,7 @@
     <file>ScriptFormatter.js</file>
     <file>ScriptFormatterWorker.js</file>
     <file>ScriptsPanel.js</file>
+    <file>SearchController.js</file>
     <file>Section.js</file>
     <file>Settings.js</file>
     <file>ShortcutsHelp.js</file>
index 7c46ba0..d6c810e 100644 (file)
@@ -157,6 +157,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     <script type="text/javascript" src="HAREntry.js"></script>
     <script type="text/javascript" src="CookieParser.js"></script>
     <script type="text/javascript" src="Toolbar.js"></script>
+    <script type="text/javascript" src="SearchController.js"></script>
 </head>
 <body class="detached">
     <div id="toolbar">
index d554f79..c3a17bd 100644 (file)
@@ -153,30 +153,10 @@ var WebInspector = {
 
         this._currentPanel = x;
 
-        this.updateSearchLabel();
-
         if (x) {
             x.show();
-
-            if (this.currentQuery) {
-                if (x.performSearch) {
-                    function performPanelSearch()
-                    {
-                        this.updateSearchMatchesCount();
-
-                        x.currentQuery = this.currentQuery;
-                        x.performSearch(this.currentQuery);
-                    }
-
-                    // Perform the search on a timeout so the panel switches fast.
-                    setTimeout(performPanelSearch.bind(this), 0);
-                } else {
-                    // Update to show Not found for panels that can't be searched.
-                    this.updateSearchMatchesCount();
-                }
-            }
+            WebInspector.searchController.activePanelChanged();
         }
-
         for (var panelName in WebInspector.panels) {
             if (WebInspector.panels[panelName] === x) {
                 WebInspector.settings.lastActivePanel = panelName;
@@ -248,8 +228,6 @@ var WebInspector = {
 
         this._attached = x;
 
-        this.updateSearchLabel();
-
         var dockToggleButton = document.getElementById("dock-status-bar-item");
         var body = document.body;
 
@@ -262,10 +240,11 @@ var WebInspector = {
             body.addStyleClass("detached");
             dockToggleButton.title = WebInspector.UIString("Dock to main window.");
         }
-        if (this.drawer)
-            this.drawer.resize();
-        if (this.toolbar)
-            this.toolbar.resize();
+
+        // This may be called before onLoadedDone, hence the bulk of inspector objects may 
+        // not be created yet.
+        if (WebInspector.searchController)
+            WebInspector.searchController.updateSearchLabel();
     },
 
     get errors()
@@ -494,6 +473,7 @@ WebInspector.doLoadedDone = function()
     this.debuggerModel = new WebInspector.DebuggerModel();
 
     this.breakpointManager = new WebInspector.BreakpointManager();
+    this.searchController = new WebInspector.SearchController();
 
     this.panels = {};
     this._createPanels();
@@ -534,11 +514,6 @@ WebInspector.doLoadedDone = function()
     errorWarningCount.addEventListener("click", this.showConsole.bind(this), false);
     this._updateErrorAndWarningCounts();
 
-    var searchField = document.getElementById("search");
-    searchField.addEventListener("search", this.performSearch.bind(this), false); // when the search is emptied
-    searchField.addEventListener("mousedown", this._searchFieldManualFocus.bind(this), false); // when the search field is manually selected
-    searchField.addEventListener("keydown", this._searchKeyDown.bind(this), true);
-
     this.extensionServer.initExtensions();
 
     function onPopulateScriptObjects()
@@ -768,6 +743,12 @@ WebInspector.documentKeyDown = function(event)
         }
     }
 
+    WebInspector.searchController.handleShortcut(event);
+    if (event.handled) {
+        event.preventDefault();
+        return;
+    }
+
     var isMac = WebInspector.isMac();
     switch (event.keyIdentifier) {
         case "Left":
@@ -794,36 +775,6 @@ WebInspector.documentKeyDown = function(event)
             this.drawer.visible = !this.drawer.visible;
             break;
 
-        case "U+0046": // F key
-            if (isMac)
-                var isFindKey = event.metaKey && !event.ctrlKey && !event.altKey && !event.shiftKey;
-            else
-                var isFindKey = event.ctrlKey && !event.metaKey && !event.altKey && !event.shiftKey;
-
-            if (isFindKey) {
-                WebInspector.focusSearchField();
-                event.preventDefault();
-            }
-            break;
-
-        case "F3":
-            if (!isMac) {
-                WebInspector.focusSearchField();
-                event.preventDefault();
-            }
-            break;
-
-        case "U+0047": // G key
-            if (isMac && event.metaKey && !event.ctrlKey && !event.altKey) {
-                if (event.shiftKey) {
-                    if (this.currentPanel.jumpToPreviousSearchResult)
-                        this.currentPanel.jumpToPreviousSearchResult();
-                } else if (this.currentPanel.jumpToNextSearchResult)
-                    this.currentPanel.jumpToNextSearchResult();
-                event.preventDefault();
-            }
-            break;
-
         // Windows and Mac have two different definitions of [, so accept both.
         case "U+005B":
         case "U+00DB": // [ key
@@ -990,27 +941,6 @@ WebInspector.animateStyle = function(animations, duration, callback)
     };
 }
 
-WebInspector.updateSearchLabel = function()
-{
-    if (!this.currentPanel)
-        return;
-
-    var newLabel = WebInspector.UIString("Search %s", this.currentPanel.toolbarItemLabel);
-    if (this.attached)
-        document.getElementById("search").setAttribute("placeholder", newLabel);
-    else {
-        document.getElementById("search").removeAttribute("placeholder");
-        document.getElementById("search-toolbar-label").textContent = newLabel;
-    }
-}
-
-WebInspector.focusSearchField = function()
-{
-    var searchField = document.getElementById("search");
-    searchField.focus();
-    searchField.select();
-}
-
 WebInspector.toggleAttach = function()
 {
     if (!this.attached)
@@ -1468,117 +1398,6 @@ WebInspector.addMainEventListeners = function(doc)
     doc.addEventListener("click", this.documentClick.bind(this), true);
 }
 
-WebInspector._searchFieldManualFocus = function(event)
-{
-    this.currentFocusElement = event.target;
-    this._previousFocusElement = event.target;
-}
-
-WebInspector._searchKeyDown = function(event)
-{
-    // Escape Key will clear the field and clear the search results
-    if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.code) {
-        // If focus belongs here and text is empty - nothing to do, return unhandled.
-        if (event.target.value === "" && this.currentFocusElement === this.previousFocusElement)
-            return;
-        event.preventDefault();
-        event.stopPropagation();
-        // When search was selected manually and is currently blank, we'd like Esc stay unhandled
-        // and hit console drawer handler.
-        event.target.value = "";
-
-        this.performSearch(event);
-        this.currentFocusElement = this.previousFocusElement;
-        if (this.currentFocusElement === event.target)
-            this.currentFocusElement.select();
-        return false;
-    }
-
-    if (!isEnterKey(event))
-        return false;
-
-    // Select all of the text so the user can easily type an entirely new query.
-    event.target.select();
-
-    // Only call performSearch if the Enter key was pressed. Otherwise the search
-    // performance is poor because of searching on every key. The search field has
-    // the incremental attribute set, so we still get incremental searches.
-    this.performSearch(event);
-
-    // Call preventDefault since this was the Enter key. This prevents a "search" event
-    // from firing for key down. This stops performSearch from being called twice in a row.
-    event.preventDefault();
-}
-
-WebInspector.performSearch = function(event)
-{
-    var forceSearch = event.keyIdentifier === "Enter";
-    this.doPerformSearch(event.target.value, forceSearch, event.shiftKey, false);
-}
-
-WebInspector.cancelSearch = function()
-{
-    document.getElementById("search").value = "";
-    this.doPerformSearch("");
-}
-
-WebInspector.doPerformSearch = function(query, forceSearch, isBackwardSearch, repeatSearch)
-{
-    var isShortSearch = (query.length < 3);
-
-    // Clear a leftover short search flag due to a non-conflicting forced search.
-    if (isShortSearch && this.shortSearchWasForcedByKeyEvent && this.currentQuery !== query)
-        delete this.shortSearchWasForcedByKeyEvent;
-
-    // Indicate this was a forced search on a short query.
-    if (isShortSearch && forceSearch)
-        this.shortSearchWasForcedByKeyEvent = true;
-
-    if (!query || !query.length || (!forceSearch && isShortSearch)) {
-        // Prevent clobbering a short search forced by the user.
-        if (this.shortSearchWasForcedByKeyEvent) {
-            delete this.shortSearchWasForcedByKeyEvent;
-            return;
-        }
-
-        delete this.currentQuery;
-
-        for (var panelName in this.panels) {
-            var panel = this.panels[panelName];
-            var hadCurrentQuery = !!panel.currentQuery;
-            delete panel.currentQuery;
-            if (hadCurrentQuery && panel.searchCanceled)
-                panel.searchCanceled();
-        }
-
-        this.updateSearchMatchesCount();
-
-        return;
-    }
-
-    if (!repeatSearch && query === this.currentPanel.currentQuery && this.currentPanel.currentQuery === this.currentQuery) {
-        // When this is the same query and a forced search, jump to the next
-        // search result for a good user experience.
-        if (forceSearch) {
-            if (!isBackwardSearch && this.currentPanel.jumpToNextSearchResult)
-                this.currentPanel.jumpToNextSearchResult();
-            else if (isBackwardSearch && this.currentPanel.jumpToPreviousSearchResult)
-                this.currentPanel.jumpToPreviousSearchResult();
-        }
-        return;
-    }
-
-    this.currentQuery = query;
-
-    this.updateSearchMatchesCount();
-
-    if (!this.currentPanel.performSearch)
-        return;
-
-    this.currentPanel.currentQuery = query;
-    this.currentPanel.performSearch(query);
-}
-
 WebInspector.frontendReused = function()
 {
     this.networkManager.reset();
@@ -1590,34 +1409,6 @@ WebInspector.addNodesToSearchResult = function(nodeIds)
     WebInspector.panels.elements.addNodesToSearchResult(nodeIds);
 }
 
-WebInspector.updateSearchMatchesCount = function(matches, panel)
-{
-    if (!panel)
-        panel = this.currentPanel;
-
-    panel.currentSearchMatches = matches;
-
-    if (panel !== this.currentPanel)
-        return;
-
-    if (!this.currentPanel.currentQuery) {
-        document.getElementById("search-results-matches").addStyleClass("hidden");
-        return;
-    }
-
-    if (matches) {
-        if (matches === 1)
-            var matchesString = WebInspector.UIString("1 match");
-        else
-            var matchesString = WebInspector.UIString("%d matches", matches);
-    } else
-        var matchesString = WebInspector.UIString("Not Found");
-
-    var matchesToolbarElement = document.getElementById("search-results-matches");
-    matchesToolbarElement.removeStyleClass("hidden");
-    matchesToolbarElement.textContent = matchesString;
-}
-
 WebInspector.UIString = function(string)
 {
     if (window.localizedStrings && string in window.localizedStrings)