WebKit Bugzilla
Attachment 358180 Details for
Bug 192527
: Web Inspector: provide a way to make searches case sensitive or use a regular expression
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-192527-20190101233319.patch (text/plain), 45.49 KB, created by
Devin Rousso
on 2019-01-01 22:33:20 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Devin Rousso
Created:
2019-01-01 22:33:20 PST
Size:
45.49 KB
patch
obsolete
>diff --git a/Source/WebInspectorUI/ChangeLog b/Source/WebInspectorUI/ChangeLog >index d0d8c6c2cb99a6a96941aac00f7af2287933ae7c..2deaf7f2fbf45ef5d72b411c04dc58ec1eb7d8f6 100644 >--- a/Source/WebInspectorUI/ChangeLog >+++ b/Source/WebInspectorUI/ChangeLog >@@ -1,3 +1,73 @@ >+2019-01-01 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: provide a way to make searches case sensitive or use a regular expression >+ https://bugs.webkit.org/show_bug.cgi?id=192527 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * UserInterface/Base/SearchUtilities.js: Added. >+ (WI.SearchUtilities.get defaultSettings): >+ (WI.SearchUtilities.createSettings): >+ (WI.SearchUtilities.regExpForString): >+ (WI.SearchUtilities.createSettingsButton): >+ (WI.SearchUtilities.createSettingsButton.toggleActive): >+ * UserInterface/Views/Main.css: >+ (.search-settings): Added. >+ (.search-settings > .glyph): Added. >+ (.search-settings:active > .glyph): Added. >+ (.search-settings.active > .glyph): Added. >+ (.search-settings:active.active > .glyph): Added. >+ Create static utility class for handling settings related to searching/filtering. >+ >+ * UserInterface/Base/Setting.js: >+ * UserInterface/Views/SettingsTabContentView.js: >+ (WI.SettingsTabContentView.prototype._createGeneralSettingsView): >+ Create default search settings that apply across WebInspector, unless a more specific >+ setting has been created that overrides it (e.g. the navigation sidebar or Search tab). >+ >+ * UserInterface/Views/SearchSidebarPanel.js: >+ (WI.SearchSidebarPanel): >+ (WI.SearchSidebarPanel.prototype.performSearch.forEachMatch): >+ (WI.SearchSidebarPanel.prototype.performSearch.resourceCallback): >+ (WI.SearchSidebarPanel.prototype.performSearch.resourcesCallback): >+ (WI.SearchSidebarPanel.prototype.performSearch.searchScripts.scriptCallback): >+ (WI.SearchSidebarPanel.prototype.performSearch.searchScripts): >+ (WI.SearchSidebarPanel.prototype.performSearch.domSearchResults): >+ (WI.SearchSidebarPanel.prototype.performSearch.domCallback): >+ (WI.SearchSidebarPanel.prototype.performSearch): >+ * UserInterface/Views/SearchSidebarPanel.css: >+ (.sidebar > .panel.navigation.search > .search-bar): >+ (.sidebar > .panel.navigation.search > .search-bar > input[type="search"]): >+ Add a (*) settings "gear" after each `<input type="search">` that shows a contextmenu with >+ checkboxes for each search setting. Any settings changed for each input take precedence over >+ the default settings, but will match the corresponding default setting if it's changed. >+ >+ * UserInterface/Views/DOMTreeElement.js: >+ (WI.DOMTreeElement.prototype._highlightSearchResults): >+ * UserInterface/Views/DataGrid.js: >+ (WI.DataGrid.prototype._updateFilter): >+ * UserInterface/Views/LogContentView.js: >+ (WI.LogContentView.prototype.performSearch): >+ * UserInterface/Views/NetworkTableContentView.js: >+ (WI.NetworkTableContentView.prototype._urlFilterDidChange): >+ * UserInterface/Views/ResourceHeadersContentView.js: >+ (WI.ResourceHeadersContentView.prototype._perfomSearchOnKeyValuePairs): >+ * UserInterface/Views/ResourceSecurityContentView.js: >+ (WI.ResourceSecurityContentView.prototype._perfomSearchOnKeyValuePairs): >+ * UserInterface/Views/SourceCodeTextEditor.js: >+ (WI.SourceCodeTextEditor.prototype.customPerformSearch.searchResultCallback): >+ (WI.SourceCodeTextEditor.prototype.customPerformSearch): >+ * UserInterface/Views/TextEditor.js: >+ (WI.TextEditor.prototype.performSearch): >+ Use the default search settings when searching/filtering. >+ >+ * UserInterface/Views/SearchBar.css: >+ (.search-bar > input[type="search"]:placeholder-shown::-webkit-search-cancel-button): Added. >+ Drive-by: prevent the (x) from appearing when no text has been entered. >+ >+ * Localizations/en.lproj/localizedStrings.js: >+ * UserInterface/Main.html: >+ > 2018-12-21 Devin Rousso <drousso@apple.com> > > Web Inspector: Styles Redesign: remove unused CSS style icons >diff --git a/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js b/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js >index aa78eeb05fb3e09d26342f7b42fbebef4a0d536d..e0004dcbe892be2bd56544c913697bc01c585936 100644 >--- a/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js >+++ b/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js >@@ -178,6 +178,7 @@ localizedStrings["Canvas Element"] = "Canvas Element"; > localizedStrings["Canvases"] = "Canvases"; > localizedStrings["Capture Screenshot"] = "Capture Screenshot"; > localizedStrings["Capturing"] = "Capturing"; >+localizedStrings["Case Sensitive"] = "Case Sensitive"; > localizedStrings["Catch Variables"] = "Catch Variables"; > localizedStrings["Categories"] = "Categories"; > localizedStrings["Certificate"] = "Certificate"; >@@ -799,6 +800,7 @@ localizedStrings["Scroll Into View"] = "Scroll Into View"; > localizedStrings["Search"] = "Search"; > localizedStrings["Search Again"] = "Search Again"; > localizedStrings["Search Resource Content"] = "Search Resource Content"; >+localizedStrings["Search:"] = "Search:"; > localizedStrings["Secure"] = "Secure"; > localizedStrings["Security"] = "Security"; > localizedStrings["Security Issue"] = "Security Issue"; >diff --git a/Source/WebInspectorUI/UserInterface/Base/Setting.js b/Source/WebInspectorUI/UserInterface/Base/Setting.js >index d0508a3317005c9354f571424d56ed90f61c17bd..93aa8e6c2ec4eccee1aa9b9c4485a6f85cec6569 100644 >--- a/Source/WebInspectorUI/UserInterface/Base/Setting.js >+++ b/Source/WebInspectorUI/UserInterface/Base/Setting.js >@@ -113,6 +113,8 @@ WI.settings = { > indentUnit: new WI.Setting("indent-unit", 4), > indentWithTabs: new WI.Setting("indent-with-tabs", false), > resourceCachingDisabled: new WI.Setting("disable-resource-caching", false), >+ searchCaseSensitive: new WI.Setting("search-case-sensitive", false), >+ searchRegularExpression: new WI.Setting("search-regular-expression", false), > selectedNetworkDetailContentViewIdentifier: new WI.Setting("network-detail-content-view-identifier", "preview"), > showAllRequestsBreakpoint: new WI.Setting("show-all-requests-breakpoint", true), > showAssertionFailuresBreakpoint: new WI.Setting("show-assertion-failures-breakpoint", true), >diff --git a/Source/WebInspectorUI/UserInterface/Main.html b/Source/WebInspectorUI/UserInterface/Main.html >index 0f3cca89e808bc9ffc676be437ae65c7160dcda2..dba5e32a7db3b270dd26400b5c29439205754a90 100644 >--- a/Source/WebInspectorUI/UserInterface/Main.html >+++ b/Source/WebInspectorUI/UserInterface/Main.html >@@ -286,6 +286,7 @@ > <script src="Base/ObjectStore.js"></script> > <script src="Base/URLUtilities.js"></script> > <script src="Base/Utilities.js"></script> >+ <script src="Base/SearchUtilities.js"></script> > <script src="Base/Setting.js"></script> > <script src="Base/YieldableTask.js"></script> > >diff --git a/Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js b/Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js >index d5d0fafe5e5fcda3ba94eaad3df385049e2c60fe..5b89a98709af50562ce982477be7820869d95aad 100644 >--- a/Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js >+++ b/Source/WebInspectorUI/UserInterface/Views/DOMTreeElement.js >@@ -1698,7 +1698,7 @@ WI.DOMTreeElement = class DOMTreeElement extends WI.TreeElement > } > > var text = this.title.textContent; >- var searchRegex = new RegExp(this._searchQuery.escapeForRegExp(), "gi"); >+ let searchRegex = WI.SearchUtilities.regExpForString(this._searchQuery, WI.SearchUtilities.defaultSettings); > > var match = searchRegex.exec(text); > var matchRanges = []; >diff --git a/Source/WebInspectorUI/UserInterface/Views/DataGrid.js b/Source/WebInspectorUI/UserInterface/Views/DataGrid.js >index 1c0ffb4bc88ca7a68ddddce6a5f411d917f99cd7..253142769b7667f5284cf2bdbfb96c9873bd47ac 100644 >--- a/Source/WebInspectorUI/UserInterface/Views/DataGrid.js >+++ b/Source/WebInspectorUI/UserInterface/Views/DataGrid.js >@@ -1843,7 +1843,7 @@ WI.DataGrid = class DataGrid extends WI.View > if (!this._rows.length) > return; > >- this._textFilterRegex = simpleGlobStringToRegExp(this._filterText, "i"); >+ this._textFilterRegex = WI.SearchUtilities.regExpForString(this._filterText, WI.SearchUtilities.defaultSettings); > > if (this._applyFilterToNodesTask && this._applyFilterToNodesTask.processing) > this._applyFilterToNodesTask.cancel(); >diff --git a/Source/WebInspectorUI/UserInterface/Views/LogContentView.js b/Source/WebInspectorUI/UserInterface/Views/LogContentView.js >index 1caca5c4d30bf9d153310511e3f56499503ace0a..a7b53535b1c163967c273c24f35677ec71fa3f26 100644 >--- a/Source/WebInspectorUI/UserInterface/Views/LogContentView.js >+++ b/Source/WebInspectorUI/UserInterface/Views/LogContentView.js >@@ -1045,7 +1045,7 @@ WI.LogContentView = class LogContentView extends WI.ContentView > > this.element.classList.add(WI.LogContentView.SearchInProgressStyleClassName); > >- let searchRegex = new RegExp(this._currentSearchQuery.escapeForRegExp(), "gi"); >+ let searchRegex = WI.SearchUtilities.regExpForString(this._currentSearchQuery, WI.SearchUtilities.defaultSettings); > this._unfilteredMessageElements().forEach(function(message) { > let matchRanges = []; > let text = message.textContent; >diff --git a/Source/WebInspectorUI/UserInterface/Views/Main.css b/Source/WebInspectorUI/UserInterface/Views/Main.css >index cf960e93b3474950a4d5063719b0534521f3b01f..461a30f7111b741304536748ae2f0786e795d8b7 100644 >--- a/Source/WebInspectorUI/UserInterface/Views/Main.css >+++ b/Source/WebInspectorUI/UserInterface/Views/Main.css >@@ -289,6 +289,33 @@ body[dir=rtl] .go-to-arrow { > background-image: url(../Images/GoToArrow.svg#selected-active); > } > >+.search-settings { >+ display: inline-block; >+ margin: 0; >+ padding: 0; >+ background-color: transparent; >+ border: none; >+ -webkit-appearance: none; >+} >+ >+.search-settings > .glyph { >+ width: 16px; >+ height: 16px; >+ color: var(--glyph-color); >+} >+ >+.search-settings:active > .glyph { >+ color: var(--glyph-color-pressed); >+} >+ >+.search-settings.active > .glyph { >+ color: var(--glyph-color-active); >+} >+ >+.search-settings:active.active > .glyph { >+ color: var(--glyph-color-active-pressed); >+} >+ > .hidden { > display: none !important; > } >diff --git a/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js b/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js >index 57ec8af3f10a4097c60000c467c53dc5cff39132..2d7c77c3edda05ee6a4ca4474eaededa8a46fe44 100644 >--- a/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js >+++ b/Source/WebInspectorUI/UserInterface/Views/NetworkTableContentView.js >@@ -1858,7 +1858,7 @@ WI.NetworkTableContentView = class NetworkTableContentView extends WI.ContentVie > > this._urlFilterIsActive = true; > this._urlFilterSearchText = searchQuery; >- this._urlFilterSearchRegex = new RegExp(searchQuery.escapeForRegExp(), "i"); >+ this._urlFilterSearchRegex = WI.SearchUtilities.regExpForString(searchQuery, WI.SearchUtilities.defaultSettings); > > this._activeURLFilterResources.clear(); > >diff --git a/Source/WebInspectorUI/UserInterface/Views/ResourceHeadersContentView.js b/Source/WebInspectorUI/UserInterface/Views/ResourceHeadersContentView.js >index 3ca8415cda37dddc8d30b04418aaac1c28d80915..bcc777fe87f9c93d05d1cf2d4bc6a259a730fc8d 100644 >--- a/Source/WebInspectorUI/UserInterface/Views/ResourceHeadersContentView.js >+++ b/Source/WebInspectorUI/UserInterface/Views/ResourceHeadersContentView.js >@@ -419,7 +419,7 @@ WI.ResourceHeadersContentView = class ResourceHeadersContentView extends WI.Cont > > _perfomSearchOnKeyValuePairs() > { >- let searchRegex = new RegExp(this._searchQuery.escapeForRegExp(), "gi"); >+ let searchRegex = WI.SearchUtilities.regExpForString(this._searchQuery, WI.SearchUtilities.defaultSettings); > > let elements = this.element.querySelectorAll(".key, .value"); > for (let element of elements) { >diff --git a/Source/WebInspectorUI/UserInterface/Views/ResourceSecurityContentView.js b/Source/WebInspectorUI/UserInterface/Views/ResourceSecurityContentView.js >index da431a0d6dba503026a80a69ee19e5261ac99498..d68a7f969cbc2d41650b47222e562f4f32c5ffbf 100644 >--- a/Source/WebInspectorUI/UserInterface/Views/ResourceSecurityContentView.js >+++ b/Source/WebInspectorUI/UserInterface/Views/ResourceSecurityContentView.js >@@ -255,7 +255,7 @@ WI.ResourceSecurityContentView = class ResourceSecurityContentView extends WI.Co > > _perfomSearchOnKeyValuePairs() > { >- let searchRegex = new RegExp(this._searchQuery.escapeForRegExp(), "gi"); >+ let searchRegex = WI.SearchUtilities.regExpForString(this._searchQuery, WI.SearchUtilities.defaultSettings); > > let elements = this.element.querySelectorAll(".key, .value"); > for (let element of elements) { >diff --git a/Source/WebInspectorUI/UserInterface/Views/SearchBar.css b/Source/WebInspectorUI/UserInterface/Views/SearchBar.css >index 1969ea354b06ff05816add7644f42aa6b92ed924..606f8d6dec70bde3311a7eba90ee866efee5d86f 100644 >--- a/Source/WebInspectorUI/UserInterface/Views/SearchBar.css >+++ b/Source/WebInspectorUI/UserInterface/Views/SearchBar.css >@@ -53,6 +53,10 @@ > background-color: white; > } > >+.search-bar > input[type="search"]:placeholder-shown::-webkit-search-cancel-button { >+ display: none; >+} >+ > @media (prefers-dark-interface) { > :matches(.search-bar, .filter-bar) > input[type="search"], > .search-bar > input[type="search"]:not(:placeholder-shown) { >diff --git a/Source/WebInspectorUI/UserInterface/Views/SearchSidebarPanel.css b/Source/WebInspectorUI/UserInterface/Views/SearchSidebarPanel.css >index 717a2bb48fb18699b5082b88befffe1c58787769..3c9d46941401182710f626b83e180867632acb23 100644 >--- a/Source/WebInspectorUI/UserInterface/Views/SearchSidebarPanel.css >+++ b/Source/WebInspectorUI/UserInterface/Views/SearchSidebarPanel.css >@@ -28,15 +28,14 @@ > } > > .sidebar > .panel.navigation.search > .search-bar { >+ display: flex; >+ align-items: center; > position: absolute; > top: 0; > left: 0; > right: 0; >- >- display: flex; >- > height: calc(var(--navigation-bar-height) - 1px); >- >+ margin: 3px 6px; > white-space: nowrap; > overflow: hidden; > } >@@ -44,8 +43,9 @@ > .sidebar > .panel.navigation.search > .search-bar > input[type="search"] { > display: flex; > flex: 1; >- >- margin: 3px 6px; >+ width: 100%; >+ margin: 0; >+ -webkit-margin-end: 4px; > } > > .sidebar > .panel.navigation.search > .search-bar > input[type="search"]::-webkit-search-results-button { >diff --git a/Source/WebInspectorUI/UserInterface/Views/SearchSidebarPanel.js b/Source/WebInspectorUI/UserInterface/Views/SearchSidebarPanel.js >index bce2c71a57c57ec40516c9d1a064d6adb099fe73..fa5817fa6718f81dedbcdadb14cd503d4cce9699 100644 >--- a/Source/WebInspectorUI/UserInterface/Views/SearchSidebarPanel.js >+++ b/Source/WebInspectorUI/UserInterface/Views/SearchSidebarPanel.js >@@ -29,6 +29,12 @@ WI.SearchSidebarPanel = class SearchSidebarPanel extends WI.NavigationSidebarPan > { > super("search", WI.UIString("Search"), true, true); > >+ this._searchInputSettings = WI.SearchUtilities.createSettings("search-sidebar", { >+ handleChanged: (event) => { >+ this.focusSearchField(true); >+ }, >+ }); >+ > var searchElement = document.createElement("div"); > searchElement.classList.add("search-bar"); > this.element.appendChild(searchElement); >@@ -43,6 +49,8 @@ WI.SearchSidebarPanel = class SearchSidebarPanel extends WI.NavigationSidebarPan > this._inputElement.setAttribute("placeholder", WI.UIString("Search Resource Content")); > searchElement.appendChild(this._inputElement); > >+ searchElement.appendChild(WI.SearchUtilities.createSettingsButton(this._searchInputSettings)); >+ > this._searchQuerySetting = new WI.Setting("search-sidebar-query", ""); > this._inputElement.value = this._searchQuerySetting.value; > >@@ -93,9 +101,8 @@ WI.SearchSidebarPanel = class SearchSidebarPanel extends WI.NavigationSidebarPan > if (!searchQuery.length) > return; > >- // FIXME: Provide UI to toggle regex and case sensitive searches. >- var isCaseSensitive = false; >- var isRegex = false; >+ let isCaseSensitive = !!this._searchInputSettings.caseSensitive.value; >+ let isRegex = !!this._searchInputSettings.regularExpression.value; > > var updateEmptyContentPlaceholderTimeout = null; > >@@ -130,7 +137,10 @@ WI.SearchSidebarPanel = class SearchSidebarPanel extends WI.NavigationSidebarPan > function forEachMatch(searchQuery, lineContent, callback) > { > var lineMatch; >- var searchRegex = new RegExp(searchQuery.escapeForRegExp(), "gi"); >+ let searchRegex = WI.SearchUtilities.regExpForString(searchQuery, { >+ caseSensitive: isCaseSensitive, >+ regularExpression: isRegex, >+ }); > while ((searchRegex.lastIndex < lineContent.length) && (lineMatch = searchRegex.exec(lineContent))) > callback(lineMatch, searchRegex.lastIndex); > } >@@ -167,6 +177,9 @@ WI.SearchSidebarPanel = class SearchSidebarPanel extends WI.NavigationSidebarPan > }); > } > >+ if (!resourceTreeElement.children.length) >+ this.contentTreeOutline.removeChild(resourceTreeElement); >+ > updateEmptyContentPlaceholder.call(this); > } > >@@ -220,6 +233,9 @@ WI.SearchSidebarPanel = class SearchSidebarPanel extends WI.NavigationSidebarPan > }); > } > >+ if (!scriptTreeElement.children.length) >+ this.contentTreeOutline.removeChild(scriptTreeElement); >+ > updateEmptyContentPlaceholder.call(this); > } > >@@ -280,6 +296,9 @@ WI.SearchSidebarPanel = class SearchSidebarPanel extends WI.NavigationSidebarPan > createTreeElementForMatchObject.call(this, matchObject, resourceTreeElement); > } > >+ if (!resourceTreeElement.children.length) >+ this.contentTreeOutline.removeChild(resourceTreeElement); >+ > updateEmptyContentPlaceholder.call(this); > } > } >diff --git a/Source/WebInspectorUI/UserInterface/Views/SettingsTabContentView.js b/Source/WebInspectorUI/UserInterface/Views/SettingsTabContentView.js >index 60511de3b2d07adbed3e27fd909e865244381c87..1aa8acbd6971681cd6bc12ec089dfd1cd9c595c3 100644 >--- a/Source/WebInspectorUI/UserInterface/Views/SettingsTabContentView.js >+++ b/Source/WebInspectorUI/UserInterface/Views/SettingsTabContentView.js >@@ -210,6 +210,12 @@ WI.SettingsTabContentView = class SettingsTabContentView extends WI.TabContentVi > > generalSettingsView.addSeparator(); > >+ let searchGroup = generalSettingsView.addGroup(WI.UIString("Search:")); >+ searchGroup.addSetting(WI.settings.searchCaseSensitive, WI.UIString("Case Sensitive")); >+ searchGroup.addSetting(WI.settings.searchRegularExpression, WI.UIString("Regular Expression")); >+ >+ generalSettingsView.addSeparator(); >+ > const zoomLevels = [0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8, 2, 2.2, 2.4]; > const zoomValues = zoomLevels.map((level) => [level, Number.percentageString(level, 0)]); > >diff --git a/Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js b/Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js >index 7f286ae390574944c2fba27725bb7498ebfe36e4..742c4957462bd67f413cfd4afac610c37f86f67d 100644 >--- a/Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js >+++ b/Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js >@@ -224,7 +224,7 @@ WI.SourceCodeTextEditor = class SourceCodeTextEditor extends WI.TextEditor > return; > } > >- var queryRegex = new RegExp(query.escapeForRegExp(), "gi"); >+ let queryRegex = WI.SearchUtilities.regExpForString(query, WI.SearchUtilities.defaultSettings); > var searchResults = []; > > for (var i = 0; i < matches.length; ++i) { >diff --git a/Source/WebInspectorUI/UserInterface/Views/TextEditor.js b/Source/WebInspectorUI/UserInterface/Views/TextEditor.js >index 8ee382a077bfa826ab8971a8ba68cc9a9d47bfae..2218cd82d2617de1313d9169c5095a23f6be1441 100644 >--- a/Source/WebInspectorUI/UserInterface/Views/TextEditor.js >+++ b/Source/WebInspectorUI/UserInterface/Views/TextEditor.js >@@ -338,7 +338,7 @@ WI.TextEditor = class TextEditor extends WI.View > } > > // Go down the slow patch for all other text content. >- var queryRegex = new RegExp(query.escapeForRegExp(), "gi"); >+ let queryRegex = WI.SearchUtilities.regExpForString(query, WI.SearchUtilities.defaultSettings); > var searchCursor = this._codeMirror.getSearchCursor(queryRegex, {line: 0, ch: 0}, false); > var boundBatchSearch = batchSearch.bind(this); > var numberOfSearchResultsDidChangeTimeout = null; >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 4a85e5fbb6bcc0a74bb554f3d975fd9fe6ea9fc8..527ac4fd9ff96d79e07b220c7fc6d784b14491fb 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,22 @@ >+2019-01-01 Devin Rousso <drousso@apple.com> >+ >+ Web Inspector: provide a way to make searches case sensitive or use a regular expression >+ https://bugs.webkit.org/show_bug.cgi?id=192527 >+ <rdar://problem/46800955> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * inspector/debugger/search-scripts.html: >+ * inspector/debugger/search-scripts-expected.txt: >+ >+ * inspector/page/searchInResources.html: >+ * inspector/page/searchInResources-expected.txt: >+ >+ * inspector/page/resources/search-script.js: >+ * inspector/page/resources/search-stylesheet.css: >+ * inspector/page/resources/search-worker.js: >+ * inspector/page/resources/search-xhr.txt: >+ > 2018-12-31 Carlos Garcia Campos <cgarcia@igalia.com> > > Unreviewed. Support PHP 7.3 in Debian. >diff --git a/LayoutTests/inspector/debugger/search-scripts-expected.txt b/LayoutTests/inspector/debugger/search-scripts-expected.txt >index a0a1bfd683e8eea426e2972d9f6f2421a966c489..65b17196115a31e4e1e59e83ab4688e012260704 100644 >--- a/LayoutTests/inspector/debugger/search-scripts-expected.txt >+++ b/LayoutTests/inspector/debugger/search-scripts-expected.txt >@@ -1,28 +1,127 @@ > Test DebuggerAgent.searchInContent to search script content. > > >+QUERY: searchtest {} > SCRIPT: LayoutTests/http/tests/inspector/resources/inspector-test.js > RESULTS: 0 > >+QUERY: SEARCHTEST {"caseSensitive":true} >+SCRIPT: LayoutTests/http/tests/inspector/resources/inspector-test.js >+RESULTS: 0 >+ >+QUERY: (search|OTHER)TEST {"isRegex":true} >+SCRIPT: LayoutTests/http/tests/inspector/resources/inspector-test.js >+RESULTS: 0 >+ >+QUERY: (search|OTHER)TEST {"caseSensitive":true,"isRegex":true} >+SCRIPT: LayoutTests/http/tests/inspector/resources/inspector-test.js >+RESULTS: 0 >+ >+QUERY: searchtest {} >+SCRIPT: LayoutTests/inspector/debugger/search-scripts.html >+RESULTS: 3 >+ LINE: 1 >+ CONTENT: // SEARCHTEST: Comment in inline <script>. >+ LINE: 45 >+ CONTENT: promiseCallbacks.push(() => searchInContent(item, "searchtest")); >+ LINE: 46 >+ CONTENT: promiseCallbacks.push(() => searchInContent(item, "SEARCHTEST", {caseSensitive: true})); >+ >+QUERY: SEARCHTEST {"caseSensitive":true} > SCRIPT: LayoutTests/inspector/debugger/search-scripts.html > RESULTS: 2 > LINE: 1 > CONTENT: // SEARCHTEST: Comment in inline <script>. >- LINE: 28 >- CONTENT: DebuggerAgent.searchInContent(script.id, "SEARCHTEST", false, false, function(error, results) { >+ LINE: 46 >+ CONTENT: promiseCallbacks.push(() => searchInContent(item, "SEARCHTEST", {caseSensitive: true})); > >+QUERY: (search|OTHER)TEST {"isRegex":true} >+SCRIPT: LayoutTests/inspector/debugger/search-scripts.html >+RESULTS: 3 >+ LINE: 1 >+ CONTENT: // SEARCHTEST: Comment in inline <script>. >+ LINE: 45 >+ CONTENT: promiseCallbacks.push(() => searchInContent(item, "searchtest")); >+ LINE: 46 >+ CONTENT: promiseCallbacks.push(() => searchInContent(item, "SEARCHTEST", {caseSensitive: true})); >+ >+QUERY: (search|OTHER)TEST {"caseSensitive":true,"isRegex":true} >+SCRIPT: LayoutTests/inspector/debugger/search-scripts.html >+RESULTS: 0 >+ >+QUERY: searchtest {} > SCRIPT: LayoutTests/inspector/debugger/search-scripts.html > RESULTS: 1 > LINE: 1 >- CONTENT: runTest(); // SEARCHTEST: onload attribute string >+ CONTENT: runTest(); // SEARCHTEST: onload attribute string // OTHERTEST: onload attribute string > >+QUERY: SEARCHTEST {"caseSensitive":true} >+SCRIPT: LayoutTests/inspector/debugger/search-scripts.html >+RESULTS: 1 >+ LINE: 1 >+ CONTENT: runTest(); // SEARCHTEST: onload attribute string // OTHERTEST: onload attribute string >+ >+QUERY: (search|OTHER)TEST {"isRegex":true} >+SCRIPT: LayoutTests/inspector/debugger/search-scripts.html >+RESULTS: 1 >+ LINE: 1 >+ CONTENT: runTest(); // SEARCHTEST: onload attribute string // OTHERTEST: onload attribute string >+ >+QUERY: (search|OTHER)TEST {"caseSensitive":true,"isRegex":true} >+SCRIPT: LayoutTests/inspector/debugger/search-scripts.html >+RESULTS: 1 >+ LINE: 1 >+ CONTENT: runTest(); // SEARCHTEST: onload attribute string // OTHERTEST: onload attribute string >+ >+QUERY: searchtest {} > SCRIPT: eval1.js > RESULTS: 1 > LINE: 0 > CONTENT: // SEARCHTEST: Eval 1 > >+QUERY: SEARCHTEST {"caseSensitive":true} >+SCRIPT: eval1.js >+RESULTS: 1 >+ LINE: 0 >+ CONTENT: // SEARCHTEST: Eval 1 >+ >+QUERY: (search|OTHER)TEST {"isRegex":true} >+SCRIPT: eval1.js >+RESULTS: 2 >+ LINE: 0 >+ CONTENT: // SEARCHTEST: Eval 1 >+ LINE: 1 >+ CONTENT: // OTHERTEST: Eval 1 >+ >+QUERY: (search|OTHER)TEST {"caseSensitive":true,"isRegex":true} >+SCRIPT: eval1.js >+RESULTS: 1 >+ LINE: 1 >+ CONTENT: // OTHERTEST: Eval 1 >+ >+QUERY: searchtest {} > SCRIPT: eval2.js > RESULTS: 1 > LINE: 0 > CONTENT: var SEARCHTEST = "SEARCHTEST"; > >+QUERY: SEARCHTEST {"caseSensitive":true} >+SCRIPT: eval2.js >+RESULTS: 1 >+ LINE: 0 >+ CONTENT: var SEARCHTEST = "SEARCHTEST"; >+ >+QUERY: (search|OTHER)TEST {"isRegex":true} >+SCRIPT: eval2.js >+RESULTS: 2 >+ LINE: 0 >+ CONTENT: var SEARCHTEST = "SEARCHTEST"; >+ LINE: 1 >+ CONTENT: var OTHERTEST = "OTHERTEST"; >+ >+QUERY: (search|OTHER)TEST {"caseSensitive":true,"isRegex":true} >+SCRIPT: eval2.js >+RESULTS: 1 >+ LINE: 1 >+ CONTENT: var OTHERTEST = "OTHERTEST"; >+ >diff --git a/LayoutTests/inspector/debugger/search-scripts.html b/LayoutTests/inspector/debugger/search-scripts.html >index c4c81616d8b009da1ba18e018e7cc8805df83f52..fe5a6c385f9baa090df3217cd092013435f77b55 100644 >--- a/LayoutTests/inspector/debugger/search-scripts.html >+++ b/LayoutTests/inspector/debugger/search-scripts.html >@@ -7,9 +7,9 @@ > function performEvals() > { > // Find the line with the search term. >- eval("// SEARCH" + "TEST: Eval 1\n//# sourceURL=eval1.js"); >+ eval("// SEARCH" + "TEST: Eval 1\n// OTHER" + "TEST: Eval 1\n//# sourceURL=eval1.js"); > // If the search term shows up multiple times on a single line, the line is returned once. >- eval("var SEARCH" + "TEST = \"SEARCH" + "TEST\";\n//# sourceURL=eval2.js"); >+ eval("var SEARCH" + "TEST = \"SEARCH" + "TEST\";\nvar OTHER" + "TEST = \"OTHER" + "TEST\";\n//# sourceURL=eval2.js"); > }; > > function test() >@@ -22,26 +22,41 @@ function test() > return line.replace(/\n$/, ""); > } > >- var scriptsCount = 0; >- const expectedScriptsCount = 5; >+ function searchInContent(script, query, options = {}) { >+ return DebuggerAgent.searchInContent(script.id, query, options.caseSensitive, options.isRegex) >+ .then(({result}) => { >+ InspectorTest.log(""); >+ InspectorTest.log("QUERY: " + query + " " + JSON.stringify(options)); >+ InspectorTest.log("SCRIPT: " + sanitizeScriptURL(script.sourceURL || script.url)); >+ InspectorTest.log("RESULTS: " + result.length); >+ for (let item of result) { >+ InspectorTest.log(" LINE: " + item.lineNumber); >+ InspectorTest.log(" CONTENT: " + chomp(item.lineContent)); >+ } >+ }); >+ } >+ >+ let scripts = []; > > WI.debuggerManager.addEventListener(WI.DebuggerManager.Event.ScriptAdded, function(event) { > var script = event.data.script; > if (!/LayoutTests/.test(script.url) && !/eval\d\.js/.test(script.sourceURL)) > return; > >- DebuggerAgent.searchInContent(script.id, "SEARCHTEST", false, false, function(error, results) { >- InspectorTest.log(""); >- InspectorTest.log("SCRIPT: " + sanitizeScriptURL(script.sourceURL || script.url)); >- InspectorTest.log("RESULTS: " + results.length); >- for (var result of results) { >- InspectorTest.log(" LINE: " + result.lineNumber); >- InspectorTest.log(" CONTENT: " + chomp(result.lineContent)); >+ scripts.push(script); >+ if (scripts.length === 5) { >+ let promiseCallbacks = []; >+ for (let item of scripts) { >+ promiseCallbacks.push(() => searchInContent(item, "searchtest")); >+ promiseCallbacks.push(() => searchInContent(item, "SEARCHTEST", {caseSensitive: true})); >+ promiseCallbacks.push(() => searchInContent(item, "(search|OTHER)TEST", {isRegex: true})); >+ promiseCallbacks.push(() => searchInContent(item, "(search|OTHER)TEST", {caseSensitive: true, isRegex: true})); > } > >- if (++scriptsCount === expectedScriptsCount) >+ Promise.chain(promiseCallbacks).then(() => { > InspectorTest.completeTest(); >- }); >+ }); >+ } > }); > > InspectorTest.addEventListener(FrontendTestHarness.Event.TestPageDidLoad, () => { >@@ -52,7 +67,7 @@ function test() > } > </script> > </head> >-<body onload="runTest(); // SEARCHTEST: onload attribute string"> >+<body onload="runTest(); // SEARCHTEST: onload attribute string // OTHERTEST: onload attribute string"> > <p>Test <code>DebuggerAgent.searchInContent</code> to search script content.</p> > </body> > </html> >diff --git a/LayoutTests/inspector/page/resources/search-script.js b/LayoutTests/inspector/page/resources/search-script.js >index bf72621adcc5b16d722a38cc5a9e09042acaa618..c8f12a53e5410c7bb7a09dd323d74f5f590650e7 100644 >--- a/LayoutTests/inspector/page/resources/search-script.js >+++ b/LayoutTests/inspector/page/resources/search-script.js >@@ -1 +1,3 @@ > // Script resource with the SEARCH-STRING. >+ >+// Script resource with the OTHER-STRING. >diff --git a/LayoutTests/inspector/page/resources/search-stylesheet.css b/LayoutTests/inspector/page/resources/search-stylesheet.css >index 06ead77adb660a1e6e4c03ca2c0236967ee403ed..10f42c293de44ad51f6a6326833e2f3381807e28 100644 >--- a/LayoutTests/inspector/page/resources/search-stylesheet.css >+++ b/LayoutTests/inspector/page/resources/search-stylesheet.css >@@ -1,4 +1,7 @@ > /* Stylesheet resource with the SEARCH-STRING */ >+ >+/* Stylesheet resource with the OTHER-STRING */ >+ > body { > color: black; > } >diff --git a/LayoutTests/inspector/page/resources/search-worker.js b/LayoutTests/inspector/page/resources/search-worker.js >index 0f6a66673dcf134f01217d91df1d613c6e8ec505..2b2e0ea6d7a7b87bdba6e252002e2fc39f4b448f 100644 >--- a/LayoutTests/inspector/page/resources/search-worker.js >+++ b/LayoutTests/inspector/page/resources/search-worker.js >@@ -1,5 +1,7 @@ > // Worker resource with the SEARCH-STRING. > >+// Worker resource with the OTHER-STRING. >+ > self.addEventListener("message", (event) => { > self.postMessage("echo: " + event.data); > }); >diff --git a/LayoutTests/inspector/page/resources/search-xhr.txt b/LayoutTests/inspector/page/resources/search-xhr.txt >index 941d23f00fbad131fd0c459c955e479a3e2f96a3..e0ca3c86cad29108bd694c60a33515b472a3df72 100644 >--- a/LayoutTests/inspector/page/resources/search-xhr.txt >+++ b/LayoutTests/inspector/page/resources/search-xhr.txt >@@ -1,2 +1,5 @@ > XHR Resource with the SEARCH-STRING. > XHR Resource with the SEARCH-STRING again! >+ >+XHR Resource with the OTHER-STRING. >+XHR Resource with the OTHER-STRING again! >diff --git a/LayoutTests/inspector/page/searchInResources-expected.txt b/LayoutTests/inspector/page/searchInResources-expected.txt >index 5c5c9d454d62b886757199cac5bd024d72914c73..0f9dc7451dd2d091ea8f93a64eb322217c40dd2b 100644 >--- a/LayoutTests/inspector/page/searchInResources-expected.txt >+++ b/LayoutTests/inspector/page/searchInResources-expected.txt >@@ -10,12 +10,64 @@ FOUND: inspector/page/resources/search-worker.js (1) > FOUND: inspector/page/resources/search-xhr.txt (2) > FOUND: inspector/page/searchInResources.html (1) > >+-- Running test case: SearchAllResources.CaseSensitive >+PASS: Should find results in multiple resources. >+FOUND: inspector/page/resources/search-script.js (1) >+FOUND: inspector/page/resources/search-stylesheet.css (1) >+FOUND: inspector/page/resources/search-worker.js (1) >+FOUND: inspector/page/resources/search-xhr.txt (2) >+ >+-- Running test case: SearchAllResources.IsRegex >+PASS: Should find results in multiple resources. >+FOUND: inspector/page/resources/search-script.js (2) >+FOUND: inspector/page/resources/search-stylesheet.css (2) >+FOUND: inspector/page/resources/search-worker.js (2) >+FOUND: inspector/page/resources/search-xhr.txt (4) >+FOUND: inspector/page/searchInResources.html (1) >+ >+-- Running test case: SearchAllResources.CaseSensitiveIsRegex >+PASS: Should find results in multiple resources. >+FOUND: inspector/page/resources/search-script.js (1) >+FOUND: inspector/page/resources/search-stylesheet.css (1) >+FOUND: inspector/page/resources/search-worker.js (1) >+FOUND: inspector/page/resources/search-xhr.txt (2) >+ > -- Running test case: SearchInScriptResource > PASS: Should find previously mentioned number of matches. > MATCH: {"lineNumber":0,"lineContent":"// Script resource with the SEARCH-STRING.\n"} > >+-- Running test case: SearchInScriptResource.CaseSensitive >+PASS: Should find previously mentioned number of matches. >+MATCH: {"lineNumber":0,"lineContent":"// Script resource with the SEARCH-STRING.\n"} >+ >+-- Running test case: SearchInScriptResource.IsRegex >+PASS: Should find previously mentioned number of matches. >+MATCH: {"lineNumber":0,"lineContent":"// Script resource with the SEARCH-STRING.\n"} >+MATCH: {"lineNumber":2,"lineContent":"// Script resource with the OTHER-STRING.\n"} >+ >+-- Running test case: SearchInScriptResource.CaseSensitiveIsRegex >+PASS: Should find previously mentioned number of matches. >+MATCH: {"lineNumber":2,"lineContent":"// Script resource with the OTHER-STRING.\n"} >+ > -- Running test case: SearchInXHRResource > PASS: Should find previously mentioned number of matches. > MATCH: {"lineNumber":0,"lineContent":"XHR Resource with the SEARCH-STRING.\n"} > MATCH: {"lineNumber":1,"lineContent":"XHR Resource with the SEARCH-STRING again!\n"} > >+-- Running test case: SearchInXHRResource.CaseSensitive >+PASS: Should find previously mentioned number of matches. >+MATCH: {"lineNumber":0,"lineContent":"XHR Resource with the SEARCH-STRING.\n"} >+MATCH: {"lineNumber":1,"lineContent":"XHR Resource with the SEARCH-STRING again!\n"} >+ >+-- Running test case: SearchInXHRResource.IsRegex >+PASS: Should find previously mentioned number of matches. >+MATCH: {"lineNumber":0,"lineContent":"XHR Resource with the SEARCH-STRING.\n"} >+MATCH: {"lineNumber":1,"lineContent":"XHR Resource with the SEARCH-STRING again!\n"} >+MATCH: {"lineNumber":3,"lineContent":"XHR Resource with the OTHER-STRING.\n"} >+MATCH: {"lineNumber":4,"lineContent":"XHR Resource with the OTHER-STRING again!\n"} >+ >+-- Running test case: SearchInXHRResource.CaseSensitiveIsRegex >+PASS: Should find previously mentioned number of matches. >+MATCH: {"lineNumber":3,"lineContent":"XHR Resource with the OTHER-STRING.\n"} >+MATCH: {"lineNumber":4,"lineContent":"XHR Resource with the OTHER-STRING again!\n"} >+ >diff --git a/LayoutTests/inspector/page/searchInResources.html b/LayoutTests/inspector/page/searchInResources.html >index c48d8b43ea30943ea0ecd83d9e762eba509d08ca..c8eda838fcbe5f94ea9c3814eeee71910a55a679 100644 >--- a/LayoutTests/inspector/page/searchInResources.html >+++ b/LayoutTests/inspector/page/searchInResources.html >@@ -26,8 +26,14 @@ function test() > > let suite = InspectorTest.createAsyncSuite("Page.searchInResources and Page.searchInResource"); > >- let searchResults; >- const searchString = "SEARCH-STRING"; >+ const searchString = "SeArCh-StRiNg"; >+ const searchStringCaseSensitive = searchString.toUpperCase(); >+ const searchStringRegex = "(search|OTHER)-STRING"; >+ >+ let searchResults = null; >+ let searchResultsCaseSensitive = null; >+ let searchResultsIsRegex = null; >+ let searchResultsCaseSensitiveIsRegex = null; > > suite.addTestCase({ > name: "SearchAllResources", >@@ -44,6 +50,56 @@ function test() > } > }); > >+ suite.addTestCase({ >+ name: "SearchAllResources.CaseSensitive", >+ description: "Able to find text results in different resources.", >+ test(resolve, reject) { >+ const caseSensitive = true; >+ PageAgent.searchInResources(searchStringCaseSensitive, caseSensitive, (error, results) => { >+ InspectorTest.assert(!error, "Should not be a protocol error."); >+ InspectorTest.expectThat(results.length > 0, "Should find results in multiple resources."); >+ searchResultsCaseSensitive = results.sort((a, b) => a.url.localeCompare(b.url)); >+ for (let result of searchResultsCaseSensitive) >+ InspectorTest.log(`FOUND: ${sanitizeURL(result.url)} (${result.matchesCount})`); >+ resolve(); >+ }); >+ } >+ }); >+ >+ suite.addTestCase({ >+ name: "SearchAllResources.IsRegex", >+ description: "Able to find text results in different resources.", >+ test(resolve, reject) { >+ const caseSensitive = undefined; >+ const isRegex = true; >+ PageAgent.searchInResources(searchStringRegex, caseSensitive, isRegex, (error, results) => { >+ InspectorTest.assert(!error, "Should not be a protocol error."); >+ InspectorTest.expectThat(results.length > 0, "Should find results in multiple resources."); >+ searchResultsIsRegex = results.sort((a, b) => a.url.localeCompare(b.url)); >+ for (let result of searchResultsIsRegex) >+ InspectorTest.log(`FOUND: ${sanitizeURL(result.url)} (${result.matchesCount})`); >+ resolve(); >+ }); >+ } >+ }); >+ >+ suite.addTestCase({ >+ name: "SearchAllResources.CaseSensitiveIsRegex", >+ description: "Able to find text results in different resources.", >+ test(resolve, reject) { >+ const caseSensitive = true; >+ const isRegex = true; >+ PageAgent.searchInResources(searchStringRegex, caseSensitive, isRegex, (error, results) => { >+ InspectorTest.assert(!error, "Should not be a protocol error."); >+ InspectorTest.expectThat(results.length > 0, "Should find results in multiple resources."); >+ searchResultsCaseSensitiveIsRegex = results.sort((a, b) => a.url.localeCompare(b.url)); >+ for (let result of searchResultsCaseSensitiveIsRegex) >+ InspectorTest.log(`FOUND: ${sanitizeURL(result.url)} (${result.matchesCount})`); >+ resolve(); >+ }); >+ } >+ }); >+ > suite.addTestCase({ > name: "SearchInScriptResource", > description: "Able to find text results in an individual Script resource.", >@@ -62,6 +118,65 @@ function test() > } > }); > >+ suite.addTestCase({ >+ name: "SearchInScriptResource.CaseSensitive", >+ description: "Able to find text results in an individual Script resource.", >+ test(resolve, reject) { >+ let result = searchResultsCaseSensitive.find((result) => /search-script\.js$/.test(result.url)); >+ if (!result) >+ reject(); >+ >+ const caseSensitive = true; >+ PageAgent.searchInResource(result.frameId, result.url, searchStringCaseSensitive, caseSensitive, (error, matches) => { >+ InspectorTest.assert(!error, "Should not be a protocol error."); >+ InspectorTest.expectThat(matches.length === result.matchesCount, "Should find previously mentioned number of matches."); >+ for (let match of matches) >+ InspectorTest.log(`MATCH: ${JSON.stringify(match)}`); >+ resolve(); >+ }); >+ } >+ }); >+ >+ suite.addTestCase({ >+ name: "SearchInScriptResource.IsRegex", >+ description: "Able to find text results in an individual Script resource.", >+ test(resolve, reject) { >+ let result = searchResultsIsRegex.find((result) => /search-script\.js$/.test(result.url)); >+ if (!result) >+ reject(); >+ >+ const caseSensitive = undefined; >+ const isRegex = true; >+ PageAgent.searchInResource(result.frameId, result.url, searchStringRegex, caseSensitive, isRegex, (error, matches) => { >+ InspectorTest.assert(!error, "Should not be a protocol error."); >+ InspectorTest.expectThat(matches.length === result.matchesCount, "Should find previously mentioned number of matches."); >+ for (let match of matches) >+ InspectorTest.log(`MATCH: ${JSON.stringify(match)}`); >+ resolve(); >+ }); >+ } >+ }); >+ >+ suite.addTestCase({ >+ name: "SearchInScriptResource.CaseSensitiveIsRegex", >+ description: "Able to find text results in an individual Script resource.", >+ test(resolve, reject) { >+ let result = searchResultsCaseSensitiveIsRegex.find((result) => /search-script\.js$/.test(result.url)); >+ if (!result) >+ reject(); >+ >+ const caseSensitive = true; >+ const isRegex = true; >+ PageAgent.searchInResource(result.frameId, result.url, searchStringRegex, caseSensitive, isRegex, (error, matches) => { >+ InspectorTest.assert(!error, "Should not be a protocol error."); >+ InspectorTest.expectThat(matches.length === result.matchesCount, "Should find previously mentioned number of matches."); >+ for (let match of matches) >+ InspectorTest.log(`MATCH: ${JSON.stringify(match)}`); >+ resolve(); >+ }); >+ } >+ }); >+ > suite.addTestCase({ > name: "SearchInXHRResource", > description: "Able to find text results in an individual XHR resource.", >@@ -83,6 +198,69 @@ function test() > } > }); > >+ suite.addTestCase({ >+ name: "SearchInXHRResource.CaseSensitive", >+ description: "Able to find text results in an individual XHR resource.", >+ test(resolve, reject) { >+ let result = searchResultsCaseSensitive.find((result) => /search-xhr\.txt$/.test(result.url)); >+ if (!result) >+ reject(); >+ >+ const isRegex = undefined; >+ const caseSensitive = true; >+ >+ PageAgent.searchInResource(result.frameId, result.url, searchStringCaseSensitive, caseSensitive, isRegex, result.requestId, (error, matches) => { >+ InspectorTest.assert(!error, "Should not be a protocol error."); >+ InspectorTest.expectThat(matches.length === result.matchesCount, "Should find previously mentioned number of matches."); >+ for (let match of matches) >+ InspectorTest.log(`MATCH: ${JSON.stringify(match)}`); >+ resolve(); >+ }); >+ } >+ }); >+ >+ suite.addTestCase({ >+ name: "SearchInXHRResource.IsRegex", >+ description: "Able to find text results in an individual XHR resource.", >+ test(resolve, reject) { >+ let result = searchResultsIsRegex.find((result) => /search-xhr\.txt$/.test(result.url)); >+ if (!result) >+ reject(); >+ >+ const isRegex = true; >+ const caseSensitive = undefined; >+ >+ PageAgent.searchInResource(result.frameId, result.url, searchStringRegex, caseSensitive, isRegex, result.requestId, (error, matches) => { >+ InspectorTest.assert(!error, "Should not be a protocol error."); >+ InspectorTest.expectThat(matches.length === result.matchesCount, "Should find previously mentioned number of matches."); >+ for (let match of matches) >+ InspectorTest.log(`MATCH: ${JSON.stringify(match)}`); >+ resolve(); >+ }); >+ } >+ }); >+ >+ suite.addTestCase({ >+ name: "SearchInXHRResource.CaseSensitiveIsRegex", >+ description: "Able to find text results in an individual XHR resource.", >+ test(resolve, reject) { >+ let result = searchResultsCaseSensitiveIsRegex.find((result) => /search-xhr\.txt$/.test(result.url)); >+ if (!result) >+ reject(); >+ >+ const isRegex = true; >+ const caseSensitive = true; >+ >+ PageAgent.searchInResource(result.frameId, result.url, searchStringRegex, caseSensitive, isRegex, result.requestId, (error, matches) => { >+ InspectorTest.assert(!error, "Should not be a protocol error."); >+ InspectorTest.expectThat(matches.length === result.matchesCount, "Should find previously mentioned number of matches."); >+ for (let match of matches) >+ InspectorTest.log(`MATCH: ${JSON.stringify(match)}`); >+ resolve(); >+ }); >+ } >+ }); >+ > InspectorTest.awaitEvent("PageIsReady") > .then((event) => { > suite.runTestCasesAndFinish();
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 192527
:
356875
|
356876
|
356877
|
358180
|
358575
|
362058
|
362075
|
362872