Diff
Modified: trunk/LayoutTests/ChangeLog (267722 => 267723)
--- trunk/LayoutTests/ChangeLog 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/LayoutTests/ChangeLog 2020-09-29 03:49:32 UTC (rev 267723)
@@ -1,3 +1,16 @@
+2020-09-28 Devin Rousso <[email protected]>
+
+ Web Inspector: add checkbox to local override popover to allow it to skip the network
+ https://bugs.webkit.org/show_bug.cgi?id=217031
+
+ Reviewed by Brian Burg.
+
+ * http/tests/inspector/network/local-resource-override-basic.html:
+ * http/tests/inspector/network/local-resource-override-main-resource.html:
+ * http/tests/inspector/network/local-resource-override-script-tag.html:
+ * http/tests/inspector/network/resource-response-inspector-override.html:
+ Add expected parameter for `WI.LocalResourceOverride.create` calls.
+
2020-09-28 Ryosuke Niwa <[email protected]>
Document.p.contains returns true for nodes in shadow tree
Modified: trunk/LayoutTests/http/tests/inspector/network/local-resource-override-basic.html (267722 => 267723)
--- trunk/LayoutTests/http/tests/inspector/network/local-resource-override-basic.html 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/LayoutTests/http/tests/inspector/network/local-resource-override-basic.html 2020-09-29 03:49:32 UTC (rev 267723)
@@ -45,7 +45,7 @@
let localResourceOverrides = [];
for (let override of overrides) {
InspectorTest.log("Creating Local Resource Override for: " + override.url);
- let localResourceOverride = WI.LocalResourceOverride.create(override);
+ let localResourceOverride = WI.LocalResourceOverride.create(WI.LocalResourceOverride.InterceptType.Response, override);
WI.networkManager.addLocalResourceOverride(localResourceOverride);
localResourceOverrides.push(localResourceOverride);
}
@@ -282,7 +282,7 @@
name: "LocalResourceOverride.URL.Fragment",
description: "LocalResourceOverride creation strips a fragment",
async test() {
- let localResourceOverride = WI.LocalResourceOverride.create({
+ let localResourceOverride = WI.LocalResourceOverride.create(WI.LocalResourceOverride.InterceptType.Response, {
url: "http://127.0.0.1:8000/inspector/network/resources/override.txt#test",
mimeType: "text/plain",
content: "OVERRIDDEN TEXT",
Modified: trunk/LayoutTests/http/tests/inspector/network/local-resource-override-main-resource.html (267722 => 267723)
--- trunk/LayoutTests/http/tests/inspector/network/local-resource-override-main-resource.html 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/LayoutTests/http/tests/inspector/network/local-resource-override-main-resource.html 2020-09-29 03:49:32 UTC (rev 267723)
@@ -12,7 +12,7 @@
name: "LocalResourceOverride.MainResource",
description: "Main resource uses override content on next page load",
async test() {
- WI.networkManager.addLocalResourceOverride(WI.LocalResourceOverride.create({
+ WI.networkManager.addLocalResourceOverride(WI.LocalResourceOverride.create(WI.LocalResourceOverride.InterceptType.Response, {
url: "http://127.0.0.1:8000/inspector/network/local-resource-override-main-resource.html",
mimeType: "text/html",
content: `<!DOCTYPE html><html><head><script src="" page content</p><script>alert("REPLACED HTML CONTENT"); TestPage.completeTest();</`+`script></body></html>`,
Modified: trunk/LayoutTests/http/tests/inspector/network/local-resource-override-script-tag.html (267722 => 267723)
--- trunk/LayoutTests/http/tests/inspector/network/local-resource-override-script-tag.html 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/LayoutTests/http/tests/inspector/network/local-resource-override-script-tag.html 2020-09-29 03:49:32 UTC (rev 267723)
@@ -12,7 +12,7 @@
name: "LocalResourceOverride.Script.Tag",
description: "<script> load uses override content on next page load",
async test() {
- WI.networkManager.addLocalResourceOverride(WI.LocalResourceOverride.create({
+ WI.networkManager.addLocalResourceOverride(WI.LocalResourceOverride.create(WI.LocalResourceOverride.InterceptType.Response, {
url: "http://127.0.0.1:8000/inspector/network/resources/override.js",
mimeType: "text/_javascript_",
content: `alert("OVERRIDDEN override.js TEXT"); TestPage.dispatchEventToFrontend("OverrideContentDidLoad");`,
Modified: trunk/LayoutTests/http/tests/inspector/network/resource-response-inspector-override.html (267722 => 267723)
--- trunk/LayoutTests/http/tests/inspector/network/resource-response-inspector-override.html 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/LayoutTests/http/tests/inspector/network/resource-response-inspector-override.html 2020-09-29 03:49:32 UTC (rev 267723)
@@ -42,7 +42,7 @@
responseSource: WI.Resource.ResponseSource.InspectorOverride,
statusCode: 987,
async setup() {
- WI.networkManager.addLocalResourceOverride(WI.LocalResourceOverride.create({
+ WI.networkManager.addLocalResourceOverride(WI.LocalResourceOverride.create(WI.LocalResourceOverride.InterceptType.Response, {
url: "http://127.0.0.1:8000/inspector/network/resources/override.txt",
mimeType: "text/plain",
content: "Overridden Text",
Modified: trunk/Source/WebInspectorUI/ChangeLog (267722 => 267723)
--- trunk/Source/WebInspectorUI/ChangeLog 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/Source/WebInspectorUI/ChangeLog 2020-09-29 03:49:32 UTC (rev 267723)
@@ -1,3 +1,71 @@
+2020-09-28 Devin Rousso <[email protected]>
+
+ Web Inspector: add checkbox to local override popover to allow it to skip the network
+ https://bugs.webkit.org/show_bug.cgi?id=217031
+
+ Reviewed by Brian Burg.
+
+ * UserInterface/Models/LocalResourceOverride.js:
+ (WI.LocalResourceOverride):
+ (WI.LocalResourceOverride.create):
+ (WI.LocalResourceOverride.fromJSON):
+ (WI.LocalResourceOverride.prototype.toJSON):
+ (WI.LocalResourceOverride.prototype.get type): Added.
+ (WI.LocalResourceOverride.prototype.saveIdentityToCookie):
+ Introduce a `WI.LocalResourceOverride.Type` that is used when handling request/response
+ interceptions to determined the `Network` command for continuing.
+
+ * UserInterface/Controllers/NetworkManager.js:
+ (WI.NetworkManager.supportsOverridingRequestsWithResponses): Added.
+ (WI.NetworkManager.supportsOverridingResponses): Added.
+ (WI.NetworkManager.prototype.initializeTarget):
+ (WI.NetworkManager.prototype.addLocalResourceOverride):
+ (WI.NetworkManager.prototype.removeLocalResourceOverride):
+ (WI.NetworkManager.prototype.requestIntercepted):
+ (WI.NetworkManager.prototype.responseIntercepted):
+ (WI.NetworkManager.prototype._commandArgumentsForInterception):
+ (WI.NetworkManager.prototype._addInterception): Added.
+ (WI.NetworkManager.prototype._removeInterception): Added.
+ (WI.NetworkManager.prototype._handleResourceOverrideDisabledChanged):
+ (WI.NetworkManager.supportsLocalResourceOverrides): Deleted.
+ Add logic for `Network.interceptRequestWithResponse` in `Network.requestIntercepted`.
+ Drive-by: refactor common logic into member functions.
+
+ * UserInterface/Views/LocalResourceOverridePopover.js:
+ (WI.LocalResourceOverridePopover.prototype.get serializedData):
+ (WI.LocalResourceOverridePopover.prototype.show):
+ * UserInterface/Views/LocalResourceOverridePopover.css:
+ (.popover .local-resource-override-popover-content .add-header + .reference-page-link-container): Added.
+ (.popover .local-resource-override-popover-content .options td): Added.
+ (.popover .local-resource-override-popover-content .reference-page-link-container): Deleted.
+ Add an "Options" row containing a "[ ] Skip Network" checkbox for controlling whether
+ `Network.interceptWithResponse` or `Network.interceptRequestWithResponse` is used.
+
+ * UserInterface/Models/Resource.js:
+ (WI.Resource.prototype.async createLocalResourceOverride):
+ * UserInterface/Views/ContextMenuUtilities.js:
+ (WI.appendContextMenuItemsForSourceCode):
+ * UserInterface/Views/FontResourceContentView.js:
+ (WI.FontResourceContentView.prototype.contentAvailable):
+ * UserInterface/Views/ImageResourceContentView.js:
+ (WI.ImageResourceContentView.prototype.contentAvailable):
+ * UserInterface/Views/LocalResourceOverrideTreeElement.js:
+ (WI.LocalResourceOverrideTreeElement.prototype.willDismissPopover):
+ * UserInterface/Views/OpenResourceDialog.js:
+ (WI.OpenResourceDialog.prototype._addLocalResourceOverrides):
+ * UserInterface/Views/ResourceContentView.js:
+ (WI.ResourceContentView):
+ (WI.ResourceContentView.prototype.closed):
+ * UserInterface/Views/SourcesNavigationSidebarPanel.js:
+ (WI.SourcesNavigationSidebarPanel):
+ (WI.SourcesNavigationSidebarPanel.prototype._willDismissLocalOverridePopover):
+ (WI.SourcesNavigationSidebarPanel.prototype._addLocalOverride):
+ (WI.SourcesNavigationSidebarPanel.prototype._removeResourceOverride):
+ (WI.SourcesNavigationSidebarPanel.prototype._populateCreateResourceContextMenu):
+ Rename `supportsLocalResourceOverrides` to `supportsOverridingResponses` for clarity.
+
+ * Localizations/en.lproj/localizedStrings.js:
+
2020-09-25 Nikita Vasilyev <[email protected]>
Uncaught Exception: TypeError: null is not an object (evaluating 'this.listItemElement.classList')
Modified: trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js (267722 => 267723)
--- trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js 2020-09-29 03:49:32 UTC (rev 267723)
@@ -1206,6 +1206,8 @@
localizedStrings["Size"] = "Size";
localizedStrings["Size of current object plus all objects it keeps alive"] = "Size of current object plus all objects it keeps alive";
localizedStrings["Sizes"] = "Sizes";
+/* Label for checkbox that controls whether the local override will actually perform a network request or skip it to immediately serve the response. */
+localizedStrings["Skip Network @ Local Override Popover Options"] = "Skip Network";
localizedStrings["Snapshot %d"] = "Snapshot %d";
localizedStrings["Snapshot %d \u2014 %s"] = "Snapshot %d \u2014 %s";
localizedStrings["Snapshot Comparison (%d and %d)"] = "Snapshot Comparison (%d and %d)";
Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/NetworkManager.js (267722 => 267723)
--- trunk/Source/WebInspectorUI/UserInterface/Controllers/NetworkManager.js 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/NetworkManager.js 2020-09-29 03:49:32 UTC (rev 267723)
@@ -57,7 +57,7 @@
WI.Frame.addEventListener(WI.Frame.Event.MainResourceDidChange, this._handleFrameMainResourceDidChange, this);
- if (NetworkManager.supportsLocalResourceOverrides()) {
+ if (NetworkManager.supportsOverridingResponses()) {
WI.Resource.addEventListener(WI.SourceCode.Event.ContentDidChange, this._handleResourceContentDidChange, this);
WI.LocalResourceOverride.addEventListener(WI.LocalResourceOverride.Event.DisabledChanged, this._handleResourceOverrideDisabledChanged, this);
@@ -68,6 +68,19 @@
for (let serializedLocalResourceOverride of serializedLocalResourceOverrides) {
let localResourceOverride = WI.LocalResourceOverride.fromJSON(serializedLocalResourceOverride);
+ let supported = false;
+ switch (localResourceOverride.type) {
+ case WI.LocalResourceOverride.InterceptType.Response:
+ supported = WI.NetworkManager.supportsOverridingResponses();
+ break;
+
+ case WI.LocalResourceOverride.InterceptType.ResponseSkippingNetwork:
+ supported = WI.NetworkManager.supportsOverridingRequestsWithResponses();
+ break;
+ }
+ if (!supported)
+ continue;
+
const key = null;
WI.objectStores.localResourceOverrides.associateObject(localResourceOverride, key, serializedLocalResourceOverride);
@@ -97,11 +110,18 @@
&& InspectorBackend.hasCommand("Network.getSerializedCertificate");
}
- static supportsLocalResourceOverrides()
+ static supportsOverridingRequestsWithResponses()
{
- return InspectorBackend.hasCommand("Network.setInterceptionEnabled");
+ // COMPATIBILITY (iOS 13.4): Network.interceptRequestWithResponse did not exist yet.
+ return InspectorBackend.hasCommand("Network.interceptRequestWithResponse");
}
+ static supportsOverridingResponses()
+ {
+ // COMPATIBILITY (iOS 13.0): Network.interceptWithResponse did not exist yet.
+ return InspectorBackend.hasCommand("Network.interceptWithResponse");
+ }
+
static supportsBootstrapScript()
{
return InspectorBackend.hasCommand("Page.setBootstrapScript");
@@ -161,14 +181,8 @@
target.NetworkAgent.setInterceptionEnabled(this._interceptionEnabled);
for (let localResourceOverride of this._localResourceOverrides) {
- if (!localResourceOverride.disabled) {
- target.NetworkAgent.addInterception.invoke({
- url: localResourceOverride.url,
- stage: InspectorBackend.Enum.Network.NetworkStage.Response,
- caseSensitive: localResourceOverride.isCaseSensitive,
- isRegex: localResourceOverride.isRegex,
- });
- }
+ if (!localResourceOverride.disabled)
+ this._addInterception(localResourceOverride, target);
}
}
}
@@ -364,21 +378,9 @@
if (!this._restoringLocalResourceOverrides)
WI.objectStores.localResourceOverrides.putObject(localResourceOverride);
- if (!localResourceOverride.disabled) {
- let commandArguments = {
- url: localResourceOverride.url,
- caseSensitive: localResourceOverride.isCaseSensitive,
- isRegex: localResourceOverride.isRegex,
- stage: InspectorBackend.Enum.Network.NetworkStage.Response,
- };
+ if (!localResourceOverride.disabled)
+ this._addInterception(localResourceOverride);
- // COMPATIBILITY (iOS 13.0): Network.addInterception did not exist.
- for (let target of WI.targets) {
- if (target.hasCommand("Network.addInterception"))
- target.NetworkAgent.addInterception.invoke(commandArguments);
- }
- }
-
this.dispatchEventToListeners(WI.NetworkManager.Event.LocalResourceOverrideAdded, {localResourceOverride});
}
@@ -397,21 +399,9 @@
if (!this._restoringLocalResourceOverrides)
WI.objectStores.localResourceOverrides.deleteObject(localResourceOverride);
- if (!localResourceOverride.disabled) {
- let commandArguments = {
- url: localResourceOverride.url,
- caseSensitive: localResourceOverride.isCaseSensitive,
- isRegex: localResourceOverride.isRegex,
- stage: InspectorBackend.Enum.Network.NetworkStage.Response,
- };
+ if (!localResourceOverride.disabled)
+ this._removeInterception(localResourceOverride);
- // COMPATIBILITY (iOS 13.0): Network.removeInterception did not exist.
- for (let target of WI.targets) {
- if (target.hasCommand("Network.removeInterception"))
- target.NetworkAgent.removeInterception.invoke(commandArguments);
- }
- }
-
this.dispatchEventToListeners(WI.NetworkManager.Event.LocalResourceOverrideRemoved, {localResourceOverride});
}
@@ -942,8 +932,38 @@
requestIntercepted(target, requestId, request)
{
- // FIXME: add request interception support to the frontend.
- this.dispatchEventToListeners(WI.NetworkManager.Event.RequestIntercepted, {target, requestId, request});
+ if (window.InspectorTest) {
+ // FIXME: <https://webkit.org/b/217032> Web Inspector: add UI for request interception
+ this.dispatchEventToListeners(WI.NetworkManager.Event.RequestIntercepted, {target, requestId, request});
+ return;
+ }
+
+ let url = ""
+ let localResourceOverride = this.localResourceOverrideForURL(url);
+ if (!localResourceOverride || localResourceOverride.disabled) {
+ target.NetworkAgent.interceptContinue.invoke({
+ requestId,
+ stage: InspectorBackend.Enum.Network.NetworkStage.Request,
+ });
+ return;
+ }
+
+ console.assert(localResourceOverride.type === WI.LocalResourceOverride.InterceptType.ResponseSkippingNetwork, localResourceOverride);
+
+ let localResource = localResourceOverride.localResource;
+ let revision = localResource.currentRevision;
+
+ console.assert(revision.mimeType === localResource.mimeType);
+
+ target.NetworkAgent.interceptRequestWithResponse.invoke({
+ requestId,
+ content: revision.content,
+ base64Encoded: !!revision.base64Encoded,
+ mimeType: revision.mimeType,
+ status: !isNaN(localResource.statusCode) ? localResource.statusCode : 200,
+ statusText: localResource.statusText ?? WI.HTTPUtilities.statusTextForStatusCode(200),
+ headers: localResource.responseHeaders ?? {},
+ });
}
responseIntercepted(target, requestId, response)
@@ -958,6 +978,8 @@
return;
}
+ console.assert(localResourceOverride.type === WI.LocalResourceOverride.InterceptType.Response, localResourceOverride);
+
let localResource = localResourceOverride.localResource;
let revision = localResource.currentRevision;
@@ -1280,6 +1302,47 @@
resources.push(resource);
}
+ _commandArgumentsForInterception(localResourceOverride)
+ {
+ console.assert(localResourceOverride instanceof WI.LocalResourceOverride, localResourceOverride);
+
+ return {
+ url: localResourceOverride.url,
+ stage: localResourceOverride.type === WI.LocalResourceOverride.InterceptType.Response ? InspectorBackend.Enum.Network.NetworkStage.Response : InspectorBackend.Enum.Network.NetworkStage.Request,
+ caseSensitive: localResourceOverride.isCaseSensitive,
+ isRegex: localResourceOverride.isRegex,
+ };
+ }
+
+ _addInterception(localResourceOverride, specificTarget)
+ {
+ console.assert(localResourceOverride instanceof WI.LocalResourceOverride, localResourceOverride);
+ console.assert(!localResourceOverride.disabled, localResourceOverride);
+
+ let targets = specificTarget ? [specificTarget] : WI.targets;
+ for (let target of targets) {
+ // COMPATIBILITY (iOS 13.0): Network.addInterception did not exist yet.
+ if (!target.hasCommand("Network.addInterception"))
+ continue;
+
+ target.NetworkAgent.addInterception.invoke(this._commandArgumentsForInterception(localResourceOverride));
+ }
+ }
+
+ _removeInterception(localResourceOverride, specificTarget)
+ {
+ console.assert(localResourceOverride instanceof WI.LocalResourceOverride, localResourceOverride);
+
+ let targets = specificTarget ? [specificTarget] : WI.targets;
+ for (let target of targets) {
+ // COMPATIBILITY (iOS 13.0): Network.removeInterception did not exist yet.
+ if (!target.hasCommand("Network.removeInterception"))
+ continue;
+
+ target.NetworkAgent.removeInterception.invoke(this._commandArgumentsForInterception(localResourceOverride));
+ }
+ }
+
_dispatchFrameWasAddedEvent(frame)
{
this.dispatchEventToListeners(WI.NetworkManager.Event.FrameWasAdded, {frame});
@@ -1408,27 +1471,15 @@
_handleResourceOverrideDisabledChanged(event)
{
- console.assert(WI.NetworkManager.supportsLocalResourceOverrides());
+ console.assert(WI.NetworkManager.supportsOverridingResponses());
let localResourceOverride = event.target;
WI.objectStores.localResourceOverrides.putObject(localResourceOverride);
- let commandArguments = {
- url: localResourceOverride.url,
- caseSensitive: localResourceOverride.isCaseSensitive,
- isRegex: localResourceOverride.isRegex,
- stage: InspectorBackend.Enum.Network.NetworkStage.Response,
- };
-
- // COMPATIBILITY (iOS 13.0): Network.addInterception / Network.removeInterception did not exist.
- for (let target of WI.targets) {
- if (target.hasDomain("Network")) {
- if (localResourceOverride.disabled)
- target.NetworkAgent.removeInterception.invoke(commandArguments);
- else
- target.NetworkAgent.addInterception.invoke(commandArguments);
- }
- }
+ if (localResourceOverride.disabled)
+ this._removeInterception(localResourceOverride);
+ else
+ this._addInterception(localResourceOverride);
}
_handleBootstrapScriptContentDidChange(event)
Modified: trunk/Source/WebInspectorUI/UserInterface/Models/LocalResourceOverride.js (267722 => 267723)
--- trunk/Source/WebInspectorUI/UserInterface/Models/LocalResourceOverride.js 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/LocalResourceOverride.js 2020-09-29 03:49:32 UTC (rev 267723)
@@ -25,17 +25,19 @@
WI.LocalResourceOverride = class LocalResourceOverride extends WI.Object
{
- constructor(localResource, {isCaseSensitive, isRegex, disabled} = {})
+ constructor(type, localResource, {isCaseSensitive, isRegex, disabled} = {})
{
- console.assert(localResource instanceof WI.LocalResource);
- console.assert(localResource.isLocalResourceOverride);
- console.assert(localResource.url);
- console.assert(isCaseSensitive === undefined || typeof isCaseSensitive === "boolean");
- console.assert(isRegex === undefined || typeof isRegex === "boolean");
- console.assert(disabled === undefined || typeof disabled === "boolean");
+ console.assert(Object.values(WI.LocalResourceOverride.InterceptType).includes(type), type);
+ console.assert(localResource instanceof WI.LocalResource, localResource);
+ console.assert(localResource.isLocalResourceOverride, localResource);
+ console.assert(localResource.url, localResource);
+ console.assert(isCaseSensitive === undefined || typeof isCaseSensitive === "boolean", isCaseSensitive);
+ console.assert(isRegex === undefined || typeof isRegex === "boolean", isRegex);
+ console.assert(disabled === undefined || typeof disabled === "boolean", disabled);
super();
+ this._type = type;
this._localResource = localResource;
this._isCaseSensitive = isCaseSensitive !== undefined ? isCaseSensitive : true;
this._isRegex = isRegex !== undefined ? isRegex : false;
@@ -44,7 +46,7 @@
// Static
- static create({url, mimeType, content, base64Encoded, statusCode, statusText, headers, isCaseSensitive, isRegex, disabled})
+ static create(type, {url, mimeType, content, base64Encoded, statusCode, statusText, headers, isCaseSensitive, isRegex, disabled})
{
let localResource = new WI.LocalResource({
request: {
@@ -61,7 +63,7 @@
isLocalResourceOverride: true,
});
- return new WI.LocalResourceOverride(localResource, {isCaseSensitive, isRegex, disabled});
+ return new WI.LocalResourceOverride(type, localResource, {isCaseSensitive, isRegex, disabled});
}
// Import / Export
@@ -68,13 +70,18 @@
static fromJSON(json)
{
- let {localResource, isCaseSensitive, isRegex, disabled} = json;
- return new WI.LocalResourceOverride(WI.LocalResource.fromJSON(localResource), {isCaseSensitive, isRegex, disabled});
+ let {type, localResource, isCaseSensitive, isRegex, disabled} = json;
+
+ // COMPATIBILITY (iOS 13.4): Network.interceptWithRequest/Network.interceptRequestWithResponse did not exist yet.
+ type ??= WI.LocalResourceOverride.InterceptType.Response;
+
+ return new WI.LocalResourceOverride(type, WI.LocalResource.fromJSON(localResource), {isCaseSensitive, isRegex, disabled});
}
toJSON(key)
{
let json = {
+ type: this._type,
localResource: this._localResource.toJSON(key),
isCaseSensitive: this._isCaseSensitive,
isRegex: this._isRegex,
@@ -89,6 +96,7 @@
// Public
+ get type() { return this._type; }
get url() { return this._localResource.url; }
get localResource() { return this._localResource; }
get isCaseSensitive() { return this._isCaseSensitive; }
@@ -126,6 +134,7 @@
saveIdentityToCookie(cookie)
{
+ cookie["local-resource-override-type"] = this._type;
cookie["local-resource-override-url"] = this._localResource.url;
cookie["local-resource-override-is-case-sensitive"] = this._isCaseSensitive;
cookie["local-resource-override-is-regex"] = this._isRegex;
@@ -135,6 +144,11 @@
WI.LocalResourceOverride.TypeIdentifier = "local-resource-override";
+WI.LocalResourceOverride.InterceptType = {
+ Response: "response",
+ ResponseSkippingNetwork: "response-skipping-network",
+};
+
WI.LocalResourceOverride.Event = {
DisabledChanged: "local-resource-override-disabled-state-did-change",
};
Modified: trunk/Source/WebInspectorUI/UserInterface/Models/Resource.js (267722 => 267723)
--- trunk/Source/WebInspectorUI/UserInterface/Models/Resource.js 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/Source/WebInspectorUI/UserInterface/Models/Resource.js 2020-09-29 03:49:32 UTC (rev 267723)
@@ -1065,11 +1065,11 @@
async createLocalResourceOverride({initialMIMEType, initialBase64Encoded, initialContent} = {})
{
console.assert(!this.isLocalResourceOverride);
- console.assert(WI.NetworkManager.supportsLocalResourceOverrides());
+ console.assert(WI.NetworkManager.supportsOverridingResponses());
let {rawContent, rawBase64Encoded} = await this.requestContent();
- return WI.LocalResourceOverride.create({
+ return WI.LocalResourceOverride.create(WI.LocalResourceOverride.InterceptType.Response, {
url: this.url,
mimeType: initialMIMEType !== undefined ? initialMIMEType : this.mimeType,
content: initialContent !== undefined ? initialContent : rawContent,
Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js (267722 => 267723)
--- trunk/Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js 2020-09-29 03:49:32 UTC (rev 267723)
@@ -73,7 +73,7 @@
if (contextMenu.__domBreakpointItemsAdded)
return;
- if (!contextMenu.__localOverrideItemsAdded && WI.NetworkManager.supportsLocalResourceOverrides()) {
+ if (!contextMenu.__localOverrideItemsAdded && WI.NetworkManager.supportsOverridingResponses()) {
contextMenu.__localOverrideItemsAdded = true;
if (WI.networkManager.canBeOverridden(sourceCode)) {
Modified: trunk/Source/WebInspectorUI/UserInterface/Views/FontResourceContentView.js (267722 => 267723)
--- trunk/Source/WebInspectorUI/UserInterface/Views/FontResourceContentView.js 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/FontResourceContentView.js 2020-09-29 03:49:32 UTC (rev 267723)
@@ -65,7 +65,7 @@
this._updatePreviewElement();
- if (WI.NetworkManager.supportsLocalResourceOverrides()) {
+ if (WI.NetworkManager.supportsOverridingResponses()) {
let dropZoneView = new WI.DropZoneView(this);
dropZoneView.targetElement = this._previewContainer;
this.addSubview(dropZoneView);
Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ImageResourceContentView.js (267722 => 267723)
--- trunk/Source/WebInspectorUI/UserInterface/Views/ImageResourceContentView.js 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ImageResourceContentView.js 2020-09-29 03:49:32 UTC (rev 267723)
@@ -87,7 +87,7 @@
this._draggingInternalImageElement = false;
});
- if (WI.NetworkManager.supportsLocalResourceOverrides() && !this._disableDropZone) {
+ if (WI.NetworkManager.supportsOverridingResponses() && !this._disableDropZone) {
let dropZoneView = new WI.DropZoneView(this);
dropZoneView.targetElement = imageContainer;
this.addSubview(dropZoneView);
Modified: trunk/Source/WebInspectorUI/UserInterface/Views/LocalResourceOverridePopover.css (267722 => 267723)
--- trunk/Source/WebInspectorUI/UserInterface/Views/LocalResourceOverridePopover.css 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/LocalResourceOverridePopover.css 2020-09-29 03:49:32 UTC (rev 267723)
@@ -98,10 +98,14 @@
margin-top: 8px;
}
-.popover .local-resource-override-popover-content .reference-page-link-container {
+.popover .local-resource-override-popover-content .add-header + .reference-page-link-container {
margin-top: 6px;
}
+.popover .local-resource-override-popover-content .options td {
+ vertical-align: bottom;
+}
+
body[dir=ltr] .popover .local-resource-override-popover-content .reference-page-link-container {
float: right;
}
Modified: trunk/Source/WebInspectorUI/UserInterface/Views/LocalResourceOverridePopover.js (267722 => 267723)
--- trunk/Source/WebInspectorUI/UserInterface/Views/LocalResourceOverridePopover.js 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/LocalResourceOverridePopover.js 2020-09-29 03:49:32 UTC (rev 267723)
@@ -91,6 +91,7 @@
}
let data = {
+ type: this._skipNetworkCheckbox?.checked ? WI.LocalResourceOverride.InterceptType.ResponseSkippingNetwork : WI.LocalResourceOverride.InterceptType.Response,
url,
mimeType,
statusCode,
@@ -291,8 +292,30 @@
this._headersDataGrid.startEditingNode(newNode);
});
- headersData.appendChild(WI.createReferencePageLink("local-overrides", "configuring-local-overrides"));
+ if (WI.NetworkManager.supportsOverridingRequestsWithResponses()) {
+ let optionsRow = table.appendChild(document.createElement("tr"));
+ optionsRow.className = "options";
+ let optionsHeader = optionsRow.appendChild(document.createElement("th"));
+
+ let optionsLabel = optionsHeader.appendChild(document.createElement("label"));
+ optionsLabel.textContent = WI.UIString("Options");
+
+ let optionsData = optionsRow.appendChild(document.createElement("td"));
+
+ let skipNetworkLabel = optionsData.appendChild(document.createElement("label"));
+ skipNetworkLabel.className = "skip-network";
+
+ this._skipNetworkCheckbox = skipNetworkLabel.appendChild(document.createElement("input"));
+ this._skipNetworkCheckbox.type = "checkbox";
+ this._skipNetworkCheckbox.checked = localResourceOverride?.type === WI.LocalResourceOverride.InterceptType.ResponseSkippingNetwork;
+
+ skipNetworkLabel.appendChild(document.createTextNode(WI.UIString("Skip Network", "Skip Network @ Local Override Popover Options", "Label for checkbox that controls whether the local override will actually perform a network request or skip it to immediately serve the response.")));
+
+ optionsData.appendChild(WI.createReferencePageLink("local-overrides", "configuring-local-overrides"));
+ } else
+ headersData.appendChild(WI.createReferencePageLink("local-overrides", "configuring-local-overrides"));
+
let incrementStatusCode = () => {
let x = parseInt(this._statusCodeCodeMirror.getValue());
if (isNaN(x))
Modified: trunk/Source/WebInspectorUI/UserInterface/Views/LocalResourceOverrideTreeElement.js (267722 => 267723)
--- trunk/Source/WebInspectorUI/UserInterface/Views/LocalResourceOverrideTreeElement.js 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/LocalResourceOverrideTreeElement.js 2020-09-29 03:49:32 UTC (rev 267723)
@@ -131,7 +131,7 @@
if (!serializedData)
return;
- let {url, isCaseSensitive, isRegex, mimeType, statusCode, statusText, headers} = serializedData;
+ let {type, url, isCaseSensitive, isRegex, mimeType, statusCode, statusText, headers} = serializedData;
// Do not conflict with an existing override unless we are modifying ourselves.
let existingOverride = WI.networkManager.localResourceOverrideForURL(url);
@@ -143,7 +143,7 @@
let wasSelected = this.selected;
let revision = this._localResourceOverride.localResource.currentRevision;
- let newLocalResourceOverride = WI.LocalResourceOverride.create({
+ let newLocalResourceOverride = WI.LocalResourceOverride.create(type, {
url,
isCaseSensitive,
isRegex,
Modified: trunk/Source/WebInspectorUI/UserInterface/Views/OpenResourceDialog.js (267722 => 267723)
--- trunk/Source/WebInspectorUI/UserInterface/Views/OpenResourceDialog.js 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/OpenResourceDialog.js 2020-09-29 03:49:32 UTC (rev 267723)
@@ -390,7 +390,7 @@
_addLocalResourceOverrides()
{
- if (!WI.NetworkManager.supportsLocalResourceOverrides())
+ if (!WI.NetworkManager.supportsOverridingResponses())
return;
const suppressFilterUpdate = true;
Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ResourceContentView.js (267722 => 267723)
--- trunk/Source/WebInspectorUI/UserInterface/Views/ResourceContentView.js 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ResourceContentView.js 2020-09-29 03:49:32 UTC (rev 267723)
@@ -60,7 +60,7 @@
this._showingLocalResourceOverride = false;
- if (WI.NetworkManager.supportsLocalResourceOverrides()) {
+ if (WI.NetworkManager.supportsOverridingResponses()) {
if (resource.isLocalResourceOverride) {
this._showingLocalResourceOverride = true;
@@ -191,7 +191,7 @@
{
super.closed();
- if (WI.NetworkManager.supportsLocalResourceOverrides())
+ if (WI.NetworkManager.supportsOverridingResponses())
WI.networkManager.removeEventListener(null, null, this);
if (!this.managesOwnIssues)
Modified: trunk/Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js (267722 => 267723)
--- trunk/Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js 2020-09-29 00:38:18 UTC (rev 267722)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js 2020-09-29 03:49:32 UTC (rev 267723)
@@ -260,7 +260,7 @@
this._resourcesTreeOutline.includeSourceMapResourceChildren = true;
resourcesContainer.appendChild(this._resourcesTreeOutline.element);
- if (WI.NetworkManager.supportsLocalResourceOverrides() || WI.NetworkManager.supportsBootstrapScript() || WI.CSSManager.supportsInspectorStyleSheet()) {
+ if (WI.NetworkManager.supportsOverridingResponses() || WI.NetworkManager.supportsBootstrapScript() || WI.CSSManager.supportsInspectorStyleSheet()) {
let createResourceNavigationBar = new WI.NavigationBar;
let createResourceButtonNavigationItem = new WI.ButtonNavigationItem("create-resource", WI.UIString("Create Resource"), "Images/Plus15.svg", 15, 15);
@@ -300,7 +300,7 @@
WI.networkManager.addEventListener(WI.NetworkManager.Event.BootstrapScriptDestroyed, this._handleBootstrapScriptDestroyed, this);
}
- if (WI.NetworkManager.supportsLocalResourceOverrides()) {
+ if (WI.NetworkManager.supportsOverridingResponses()) {
WI.networkManager.addEventListener(WI.NetworkManager.Event.LocalResourceOverrideAdded, this._handleLocalResourceOverrideAdded, this);
WI.networkManager.addEventListener(WI.NetworkManager.Event.LocalResourceOverrideRemoved, this._handleLocalResourceOverrideRemoved, this);
}
@@ -383,7 +383,7 @@
this._addLocalOverride(bootstrapScript);
}
- if (WI.NetworkManager.supportsLocalResourceOverrides()) {
+ if (WI.NetworkManager.supportsOverridingResponses()) {
for (let localResourceOverride of WI.networkManager.localResourceOverrides)
this._addLocalOverride(localResourceOverride);
}
@@ -798,7 +798,7 @@
return;
}
- let {url, isCaseSensitive, isRegex, mimeType, statusCode, statusText, headers} = serializedData;
+ let {type, url, isCaseSensitive, isRegex, mimeType, statusCode, statusText, headers} = serializedData;
// Do not conflict with an existing override.
let existingOverride = WI.networkManager.localResourceOverrideForURL(url);
@@ -807,7 +807,7 @@
return;
}
- let localResourceOverride = WI.LocalResourceOverride.create({
+ let localResourceOverride = WI.LocalResourceOverride.create(type, {
url,
isCaseSensitive,
isRegex,
@@ -1422,7 +1422,7 @@
_addLocalOverride(localOverride)
{
- console.assert(WI.NetworkManager.supportsBootstrapScript() || WI.NetworkManager.supportsLocalResourceOverrides());
+ console.assert(WI.NetworkManager.supportsBootstrapScript() || WI.NetworkManager.supportsOverridingResponses());
if (this._localOverridesTreeOutline.findTreeElement(localOverride))
return;
@@ -1446,7 +1446,7 @@
_removeResourceOverride(localOverride)
{
- console.assert(WI.NetworkManager.supportsBootstrapScript() || WI.NetworkManager.supportsLocalResourceOverrides());
+ console.assert(WI.NetworkManager.supportsBootstrapScript() || WI.NetworkManager.supportsOverridingResponses());
let resourceTreeElement = this._localOverridesTreeOutline.findTreeElement(localOverride);
if (!resourceTreeElement)
@@ -2033,7 +2033,7 @@
_populateCreateResourceContextMenu(contextMenu)
{
- if (WI.NetworkManager.supportsLocalResourceOverrides()) {
+ if (WI.NetworkManager.supportsOverridingResponses()) {
contextMenu.appendItem(WI.UIString("Local Override\u2026"), () => {
if (!this._localOverridesTreeOutline.children.length)
this._localOverridesRow.showEmptyMessage();