⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 267723 in webkit


Ignore:
Timestamp:
Sep 28, 2020, 8:49:32 PM (6 years ago)
Author:
Devin Rousso
Message:

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.

Source/WebInspectorUI:

  • 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:

LayoutTests:

  • 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.

Location:
trunk
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r267719 r267723  
     12020-09-28  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: add checkbox to local override popover to allow it to skip the network
     4        https://bugs.webkit.org/show_bug.cgi?id=217031
     5
     6        Reviewed by Brian Burg.
     7
     8        * http/tests/inspector/network/local-resource-override-basic.html:
     9        * http/tests/inspector/network/local-resource-override-main-resource.html:
     10        * http/tests/inspector/network/local-resource-override-script-tag.html:
     11        * http/tests/inspector/network/resource-response-inspector-override.html:
     12        Add expected parameter for `WI.LocalResourceOverride.create` calls.
     13
    1142020-09-28  Ryosuke Niwa  <rniwa@webkit.org>
    215
  • trunk/LayoutTests/http/tests/inspector/network/local-resource-override-basic.html

    r252614 r267723  
    4646                for (let override of overrides) {
    4747                    InspectorTest.log("Creating Local Resource Override for: " + override.url);
    48                     let localResourceOverride = WI.LocalResourceOverride.create(override);
     48                    let localResourceOverride = WI.LocalResourceOverride.create(WI.LocalResourceOverride.InterceptType.Response, override);
    4949                    WI.networkManager.addLocalResourceOverride(localResourceOverride);
    5050                    localResourceOverrides.push(localResourceOverride);
     
    283283        description: "LocalResourceOverride creation strips a fragment",
    284284        async test() {
    285             let localResourceOverride = WI.LocalResourceOverride.create({
     285            let localResourceOverride = WI.LocalResourceOverride.create(WI.LocalResourceOverride.InterceptType.Response, {
    286286                url: "http://127.0.0.1:8000/inspector/network/resources/override.txt#test",
    287287                mimeType: "text/plain",
  • trunk/LayoutTests/http/tests/inspector/network/local-resource-override-main-resource.html

    r249504 r267723  
    1313        description: "Main resource uses override content on next page load",
    1414        async test() {
    15             WI.networkManager.addLocalResourceOverride(WI.LocalResourceOverride.create({
     15            WI.networkManager.addLocalResourceOverride(WI.LocalResourceOverride.create(WI.LocalResourceOverride.InterceptType.Response, {
    1616                url: "http://127.0.0.1:8000/inspector/network/local-resource-override-main-resource.html",
    1717                mimeType: "text/html",
  • trunk/LayoutTests/http/tests/inspector/network/local-resource-override-script-tag.html

    r249504 r267723  
    1313        description: "<script> load uses override content on next page load",
    1414        async test() {
    15             WI.networkManager.addLocalResourceOverride(WI.LocalResourceOverride.create({
     15            WI.networkManager.addLocalResourceOverride(WI.LocalResourceOverride.create(WI.LocalResourceOverride.InterceptType.Response, {
    1616                url: "http://127.0.0.1:8000/inspector/network/resources/override.js",
    1717                mimeType: "text/javascript",
  • trunk/LayoutTests/http/tests/inspector/network/resource-response-inspector-override.html

    r249504 r267723  
    4343        statusCode: 987,
    4444        async setup() {
    45             WI.networkManager.addLocalResourceOverride(WI.LocalResourceOverride.create({
     45            WI.networkManager.addLocalResourceOverride(WI.LocalResourceOverride.create(WI.LocalResourceOverride.InterceptType.Response, {
    4646                url: "http://127.0.0.1:8000/inspector/network/resources/override.txt",
    4747                mimeType: "text/plain",
  • trunk/Source/WebInspectorUI/ChangeLog

    r267577 r267723  
     12020-09-28  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: add checkbox to local override popover to allow it to skip the network
     4        https://bugs.webkit.org/show_bug.cgi?id=217031
     5
     6        Reviewed by Brian Burg.
     7
     8        * UserInterface/Models/LocalResourceOverride.js:
     9        (WI.LocalResourceOverride):
     10        (WI.LocalResourceOverride.create):
     11        (WI.LocalResourceOverride.fromJSON):
     12        (WI.LocalResourceOverride.prototype.toJSON):
     13        (WI.LocalResourceOverride.prototype.get type): Added.
     14        (WI.LocalResourceOverride.prototype.saveIdentityToCookie):
     15        Introduce a `WI.LocalResourceOverride.Type` that is used when handling request/response
     16        interceptions to determined the `Network` command for continuing.
     17
     18        * UserInterface/Controllers/NetworkManager.js:
     19        (WI.NetworkManager.supportsOverridingRequestsWithResponses): Added.
     20        (WI.NetworkManager.supportsOverridingResponses): Added.
     21        (WI.NetworkManager.prototype.initializeTarget):
     22        (WI.NetworkManager.prototype.addLocalResourceOverride):
     23        (WI.NetworkManager.prototype.removeLocalResourceOverride):
     24        (WI.NetworkManager.prototype.requestIntercepted):
     25        (WI.NetworkManager.prototype.responseIntercepted):
     26        (WI.NetworkManager.prototype._commandArgumentsForInterception):
     27        (WI.NetworkManager.prototype._addInterception): Added.
     28        (WI.NetworkManager.prototype._removeInterception): Added.
     29        (WI.NetworkManager.prototype._handleResourceOverrideDisabledChanged):
     30        (WI.NetworkManager.supportsLocalResourceOverrides): Deleted.
     31        Add logic for `Network.interceptRequestWithResponse` in `Network.requestIntercepted`.
     32        Drive-by: refactor common logic into member functions.
     33
     34        * UserInterface/Views/LocalResourceOverridePopover.js:
     35        (WI.LocalResourceOverridePopover.prototype.get serializedData):
     36        (WI.LocalResourceOverridePopover.prototype.show):
     37        * UserInterface/Views/LocalResourceOverridePopover.css:
     38        (.popover .local-resource-override-popover-content .add-header + .reference-page-link-container): Added.
     39        (.popover .local-resource-override-popover-content .options td): Added.
     40        (.popover .local-resource-override-popover-content .reference-page-link-container): Deleted.
     41        Add an "Options" row containing a "[ ] Skip Network" checkbox for controlling whether
     42        `Network.interceptWithResponse` or `Network.interceptRequestWithResponse` is used.
     43
     44        * UserInterface/Models/Resource.js:
     45        (WI.Resource.prototype.async createLocalResourceOverride):
     46        * UserInterface/Views/ContextMenuUtilities.js:
     47        (WI.appendContextMenuItemsForSourceCode):
     48        * UserInterface/Views/FontResourceContentView.js:
     49        (WI.FontResourceContentView.prototype.contentAvailable):
     50        * UserInterface/Views/ImageResourceContentView.js:
     51        (WI.ImageResourceContentView.prototype.contentAvailable):
     52        * UserInterface/Views/LocalResourceOverrideTreeElement.js:
     53        (WI.LocalResourceOverrideTreeElement.prototype.willDismissPopover):
     54        * UserInterface/Views/OpenResourceDialog.js:
     55        (WI.OpenResourceDialog.prototype._addLocalResourceOverrides):
     56        * UserInterface/Views/ResourceContentView.js:
     57        (WI.ResourceContentView):
     58        (WI.ResourceContentView.prototype.closed):
     59        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
     60        (WI.SourcesNavigationSidebarPanel):
     61        (WI.SourcesNavigationSidebarPanel.prototype._willDismissLocalOverridePopover):
     62        (WI.SourcesNavigationSidebarPanel.prototype._addLocalOverride):
     63        (WI.SourcesNavigationSidebarPanel.prototype._removeResourceOverride):
     64        (WI.SourcesNavigationSidebarPanel.prototype._populateCreateResourceContextMenu):
     65        Rename `supportsLocalResourceOverrides` to `supportsOverridingResponses` for clarity.
     66
     67        * Localizations/en.lproj/localizedStrings.js:
     68
    1692020-09-25  Nikita Vasilyev  <nvasilyev@apple.com>
    270
  • trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js

    r267038 r267723  
    12071207localizedStrings["Size of current object plus all objects it keeps alive"] = "Size of current object plus all objects it keeps alive";
    12081208localizedStrings["Sizes"] = "Sizes";
     1209/* Label for checkbox that controls whether the local override will actually perform a network request or skip it to immediately serve the response. */
     1210localizedStrings["Skip Network @ Local Override Popover Options"] = "Skip Network";
    12091211localizedStrings["Snapshot %d"] = "Snapshot %d";
    12101212localizedStrings["Snapshot %d \u2014 %s"] = "Snapshot %d \u2014 %s";
  • trunk/Source/WebInspectorUI/UserInterface/Controllers/NetworkManager.js

    r266072 r267723  
    5858        WI.Frame.addEventListener(WI.Frame.Event.MainResourceDidChange, this._handleFrameMainResourceDidChange, this);
    5959
    60         if (NetworkManager.supportsLocalResourceOverrides()) {
     60        if (NetworkManager.supportsOverridingResponses()) {
    6161            WI.Resource.addEventListener(WI.SourceCode.Event.ContentDidChange, this._handleResourceContentDidChange, this);
    6262            WI.LocalResourceOverride.addEventListener(WI.LocalResourceOverride.Event.DisabledChanged, this._handleResourceOverrideDisabledChanged, this);
     
    6868                for (let serializedLocalResourceOverride of serializedLocalResourceOverrides) {
    6969                    let localResourceOverride = WI.LocalResourceOverride.fromJSON(serializedLocalResourceOverride);
     70
     71                    let supported = false;
     72                    switch (localResourceOverride.type) {
     73                    case WI.LocalResourceOverride.InterceptType.Response:
     74                        supported = WI.NetworkManager.supportsOverridingResponses();
     75                        break;
     76
     77                    case WI.LocalResourceOverride.InterceptType.ResponseSkippingNetwork:
     78                        supported = WI.NetworkManager.supportsOverridingRequestsWithResponses();
     79                        break;
     80                    }
     81                    if (!supported)
     82                        continue;
    7083
    7184                    const key = null;
     
    98111    }
    99112
    100     static supportsLocalResourceOverrides()
    101     {
    102         return InspectorBackend.hasCommand("Network.setInterceptionEnabled");
     113    static supportsOverridingRequestsWithResponses()
     114    {
     115        // COMPATIBILITY (iOS 13.4): Network.interceptRequestWithResponse did not exist yet.
     116        return InspectorBackend.hasCommand("Network.interceptRequestWithResponse");
     117    }
     118
     119    static supportsOverridingResponses()
     120    {
     121        // COMPATIBILITY (iOS 13.0): Network.interceptWithResponse did not exist yet.
     122        return InspectorBackend.hasCommand("Network.interceptWithResponse");
    103123    }
    104124
     
    162182
    163183                for (let localResourceOverride of this._localResourceOverrides) {
    164                     if (!localResourceOverride.disabled) {
    165                         target.NetworkAgent.addInterception.invoke({
    166                             url: localResourceOverride.url,
    167                             stage: InspectorBackend.Enum.Network.NetworkStage.Response,
    168                             caseSensitive: localResourceOverride.isCaseSensitive,
    169                             isRegex: localResourceOverride.isRegex,
    170                         });
    171                     }
     184                    if (!localResourceOverride.disabled)
     185                        this._addInterception(localResourceOverride, target);
    172186                }
    173187            }
     
    365379            WI.objectStores.localResourceOverrides.putObject(localResourceOverride);
    366380
    367         if (!localResourceOverride.disabled) {
    368             let commandArguments = {
    369                 url: localResourceOverride.url,
    370                 caseSensitive: localResourceOverride.isCaseSensitive,
    371                 isRegex: localResourceOverride.isRegex,
    372                 stage: InspectorBackend.Enum.Network.NetworkStage.Response,
    373             };
    374 
    375             // COMPATIBILITY (iOS 13.0): Network.addInterception did not exist.
    376             for (let target of WI.targets) {
    377                 if (target.hasCommand("Network.addInterception"))
    378                     target.NetworkAgent.addInterception.invoke(commandArguments);
    379             }
    380         }
     381        if (!localResourceOverride.disabled)
     382            this._addInterception(localResourceOverride);
    381383
    382384        this.dispatchEventToListeners(WI.NetworkManager.Event.LocalResourceOverrideAdded, {localResourceOverride});
     
    398400            WI.objectStores.localResourceOverrides.deleteObject(localResourceOverride);
    399401
    400         if (!localResourceOverride.disabled) {
    401             let commandArguments = {
    402                 url: localResourceOverride.url,
    403                 caseSensitive: localResourceOverride.isCaseSensitive,
    404                 isRegex: localResourceOverride.isRegex,
    405                 stage: InspectorBackend.Enum.Network.NetworkStage.Response,
    406             };
    407 
    408             // COMPATIBILITY (iOS 13.0): Network.removeInterception did not exist.
    409             for (let target of WI.targets) {
    410                 if (target.hasCommand("Network.removeInterception"))
    411                     target.NetworkAgent.removeInterception.invoke(commandArguments);
    412             }
    413         }
     402        if (!localResourceOverride.disabled)
     403            this._removeInterception(localResourceOverride);
    414404
    415405        this.dispatchEventToListeners(WI.NetworkManager.Event.LocalResourceOverrideRemoved, {localResourceOverride});
     
    943933    requestIntercepted(target, requestId, request)
    944934    {
    945         // FIXME: add request interception support to the frontend.
    946         this.dispatchEventToListeners(WI.NetworkManager.Event.RequestIntercepted, {target, requestId, request});
     935        if (window.InspectorTest) {
     936            // FIXME: <https://webkit.org/b/217032> Web Inspector: add UI for request interception
     937            this.dispatchEventToListeners(WI.NetworkManager.Event.RequestIntercepted, {target, requestId, request});
     938            return;
     939        }
     940
     941        let url = WI.urlWithoutFragment(request.url);
     942        let localResourceOverride = this.localResourceOverrideForURL(url);
     943        if (!localResourceOverride || localResourceOverride.disabled) {
     944            target.NetworkAgent.interceptContinue.invoke({
     945                requestId,
     946                stage: InspectorBackend.Enum.Network.NetworkStage.Request,
     947            });
     948            return;
     949        }
     950
     951        console.assert(localResourceOverride.type === WI.LocalResourceOverride.InterceptType.ResponseSkippingNetwork, localResourceOverride);
     952
     953        let localResource = localResourceOverride.localResource;
     954        let revision = localResource.currentRevision;
     955
     956        console.assert(revision.mimeType === localResource.mimeType);
     957
     958        target.NetworkAgent.interceptRequestWithResponse.invoke({
     959            requestId,
     960            content: revision.content,
     961            base64Encoded: !!revision.base64Encoded,
     962            mimeType: revision.mimeType,
     963            status: !isNaN(localResource.statusCode) ? localResource.statusCode : 200,
     964            statusText: localResource.statusText ?? WI.HTTPUtilities.statusTextForStatusCode(200),
     965            headers: localResource.responseHeaders ?? {},
     966        });
    947967    }
    948968
     
    958978            return;
    959979        }
     980
     981        console.assert(localResourceOverride.type === WI.LocalResourceOverride.InterceptType.Response, localResourceOverride);
    960982
    961983        let localResource = localResourceOverride.localResource;
     
    12811303    }
    12821304
     1305    _commandArgumentsForInterception(localResourceOverride)
     1306    {
     1307        console.assert(localResourceOverride instanceof WI.LocalResourceOverride, localResourceOverride);
     1308
     1309        return {
     1310            url: localResourceOverride.url,
     1311            stage: localResourceOverride.type === WI.LocalResourceOverride.InterceptType.Response ? InspectorBackend.Enum.Network.NetworkStage.Response : InspectorBackend.Enum.Network.NetworkStage.Request,
     1312            caseSensitive: localResourceOverride.isCaseSensitive,
     1313            isRegex: localResourceOverride.isRegex,
     1314        };
     1315    }
     1316
     1317    _addInterception(localResourceOverride, specificTarget)
     1318    {
     1319        console.assert(localResourceOverride instanceof WI.LocalResourceOverride, localResourceOverride);
     1320        console.assert(!localResourceOverride.disabled, localResourceOverride);
     1321
     1322        let targets = specificTarget ? [specificTarget] : WI.targets;
     1323        for (let target of targets) {
     1324            // COMPATIBILITY (iOS 13.0): Network.addInterception did not exist yet.
     1325            if (!target.hasCommand("Network.addInterception"))
     1326                continue;
     1327
     1328            target.NetworkAgent.addInterception.invoke(this._commandArgumentsForInterception(localResourceOverride));
     1329        }
     1330    }
     1331
     1332    _removeInterception(localResourceOverride, specificTarget)
     1333    {
     1334        console.assert(localResourceOverride instanceof WI.LocalResourceOverride, localResourceOverride);
     1335
     1336        let targets = specificTarget ? [specificTarget] : WI.targets;
     1337        for (let target of targets) {
     1338            // COMPATIBILITY (iOS 13.0): Network.removeInterception did not exist yet.
     1339            if (!target.hasCommand("Network.removeInterception"))
     1340                continue;
     1341
     1342            target.NetworkAgent.removeInterception.invoke(this._commandArgumentsForInterception(localResourceOverride));
     1343        }
     1344    }
     1345
    12831346    _dispatchFrameWasAddedEvent(frame)
    12841347    {
     
    14091472    _handleResourceOverrideDisabledChanged(event)
    14101473    {
    1411         console.assert(WI.NetworkManager.supportsLocalResourceOverrides());
     1474        console.assert(WI.NetworkManager.supportsOverridingResponses());
    14121475
    14131476        let localResourceOverride = event.target;
    14141477        WI.objectStores.localResourceOverrides.putObject(localResourceOverride);
    14151478
    1416         let commandArguments = {
    1417             url: localResourceOverride.url,
    1418             caseSensitive: localResourceOverride.isCaseSensitive,
    1419             isRegex: localResourceOverride.isRegex,
    1420             stage: InspectorBackend.Enum.Network.NetworkStage.Response,
    1421         };
    1422 
    1423         // COMPATIBILITY (iOS 13.0): Network.addInterception / Network.removeInterception did not exist.
    1424         for (let target of WI.targets) {
    1425             if (target.hasDomain("Network")) {
    1426                 if (localResourceOverride.disabled)
    1427                     target.NetworkAgent.removeInterception.invoke(commandArguments);
    1428                 else
    1429                     target.NetworkAgent.addInterception.invoke(commandArguments);
    1430             }
    1431         }
     1479        if (localResourceOverride.disabled)
     1480            this._removeInterception(localResourceOverride);
     1481        else
     1482            this._addInterception(localResourceOverride);
    14321483    }
    14331484
  • trunk/Source/WebInspectorUI/UserInterface/Models/LocalResourceOverride.js

    r252614 r267723  
    2626WI.LocalResourceOverride = class LocalResourceOverride extends WI.Object
    2727{
    28     constructor(localResource, {isCaseSensitive, isRegex, disabled} = {})
     28    constructor(type, localResource, {isCaseSensitive, isRegex, disabled} = {})
    2929    {
    30         console.assert(localResource instanceof WI.LocalResource);
    31         console.assert(localResource.isLocalResourceOverride);
    32         console.assert(localResource.url);
    33         console.assert(isCaseSensitive === undefined || typeof isCaseSensitive === "boolean");
    34         console.assert(isRegex === undefined || typeof isRegex === "boolean");
    35         console.assert(disabled === undefined || typeof disabled === "boolean");
     30        console.assert(Object.values(WI.LocalResourceOverride.InterceptType).includes(type), type);
     31        console.assert(localResource instanceof WI.LocalResource, localResource);
     32        console.assert(localResource.isLocalResourceOverride, localResource);
     33        console.assert(localResource.url, localResource);
     34        console.assert(isCaseSensitive === undefined || typeof isCaseSensitive === "boolean", isCaseSensitive);
     35        console.assert(isRegex === undefined || typeof isRegex === "boolean", isRegex);
     36        console.assert(disabled === undefined || typeof disabled === "boolean", disabled);
    3637
    3738        super();
    3839
     40        this._type = type;
    3941        this._localResource = localResource;
    4042        this._isCaseSensitive = isCaseSensitive !== undefined ? isCaseSensitive : true;
     
    4547    // Static
    4648
    47     static create({url, mimeType, content, base64Encoded, statusCode, statusText, headers, isCaseSensitive, isRegex, disabled})
     49    static create(type, {url, mimeType, content, base64Encoded, statusCode, statusText, headers, isCaseSensitive, isRegex, disabled})
    4850    {
    4951        let localResource = new WI.LocalResource({
     
    6264        });
    6365
    64         return new WI.LocalResourceOverride(localResource, {isCaseSensitive, isRegex, disabled});
     66        return new WI.LocalResourceOverride(type, localResource, {isCaseSensitive, isRegex, disabled});
    6567    }
    6668
     
    6971    static fromJSON(json)
    7072    {
    71         let {localResource, isCaseSensitive, isRegex, disabled} = json;
    72         return new WI.LocalResourceOverride(WI.LocalResource.fromJSON(localResource), {isCaseSensitive, isRegex, disabled});
     73        let {type, localResource, isCaseSensitive, isRegex, disabled} = json;
     74
     75        // COMPATIBILITY (iOS 13.4): Network.interceptWithRequest/Network.interceptRequestWithResponse did not exist yet.
     76        type ??= WI.LocalResourceOverride.InterceptType.Response;
     77
     78        return new WI.LocalResourceOverride(type, WI.LocalResource.fromJSON(localResource), {isCaseSensitive, isRegex, disabled});
    7379    }
    7480
     
    7682    {
    7783        let json = {
     84            type: this._type,
    7885            localResource: this._localResource.toJSON(key),
    7986            isCaseSensitive: this._isCaseSensitive,
     
    9097    // Public
    9198
     99    get type() { return this._type; }
    92100    get url() { return this._localResource.url; }
    93101    get localResource() { return this._localResource; }
     
    127135    saveIdentityToCookie(cookie)
    128136    {
     137        cookie["local-resource-override-type"] = this._type;
    129138        cookie["local-resource-override-url"] = this._localResource.url;
    130139        cookie["local-resource-override-is-case-sensitive"] = this._isCaseSensitive;
     
    136145WI.LocalResourceOverride.TypeIdentifier = "local-resource-override";
    137146
     147WI.LocalResourceOverride.InterceptType = {
     148    Response: "response",
     149    ResponseSkippingNetwork: "response-skipping-network",
     150};
     151
    138152WI.LocalResourceOverride.Event = {
    139153    DisabledChanged: "local-resource-override-disabled-state-did-change",
  • trunk/Source/WebInspectorUI/UserInterface/Models/Resource.js

    r266622 r267723  
    10661066    {
    10671067        console.assert(!this.isLocalResourceOverride);
    1068         console.assert(WI.NetworkManager.supportsLocalResourceOverrides());
     1068        console.assert(WI.NetworkManager.supportsOverridingResponses());
    10691069
    10701070        let {rawContent, rawBase64Encoded} = await this.requestContent();
    10711071
    1072         return WI.LocalResourceOverride.create({
     1072        return WI.LocalResourceOverride.create(WI.LocalResourceOverride.InterceptType.Response, {
    10731073            url: this.url,
    10741074            mimeType: initialMIMEType !== undefined ? initialMIMEType : this.mimeType,
  • trunk/Source/WebInspectorUI/UserInterface/Views/ContextMenuUtilities.js

    r266480 r267723  
    7474        return;
    7575
    76     if (!contextMenu.__localOverrideItemsAdded && WI.NetworkManager.supportsLocalResourceOverrides()) {
     76    if (!contextMenu.__localOverrideItemsAdded && WI.NetworkManager.supportsOverridingResponses()) {
    7777        contextMenu.__localOverrideItemsAdded = true;
    7878
  • trunk/Source/WebInspectorUI/UserInterface/Views/FontResourceContentView.js

    r252704 r267723  
    6666        this._updatePreviewElement();
    6767
    68         if (WI.NetworkManager.supportsLocalResourceOverrides()) {
     68        if (WI.NetworkManager.supportsOverridingResponses()) {
    6969            let dropZoneView = new WI.DropZoneView(this);
    7070            dropZoneView.targetElement = this._previewContainer;
  • trunk/Source/WebInspectorUI/UserInterface/Views/ImageResourceContentView.js

    r265675 r267723  
    8888        });
    8989
    90         if (WI.NetworkManager.supportsLocalResourceOverrides() && !this._disableDropZone) {
     90        if (WI.NetworkManager.supportsOverridingResponses() && !this._disableDropZone) {
    9191            let dropZoneView = new WI.DropZoneView(this);
    9292            dropZoneView.targetElement = imageContainer;
  • trunk/Source/WebInspectorUI/UserInterface/Views/LocalResourceOverridePopover.css

    r265120 r267723  
    9999}
    100100
    101 .popover .local-resource-override-popover-content .reference-page-link-container {
     101.popover .local-resource-override-popover-content .add-header + .reference-page-link-container {
    102102    margin-top: 6px;
     103}
     104
     105.popover .local-resource-override-popover-content .options td {
     106    vertical-align: bottom;
    103107}
    104108
  • trunk/Source/WebInspectorUI/UserInterface/Views/LocalResourceOverridePopover.js

    r257557 r267723  
    9292
    9393        let data = {
     94            type: this._skipNetworkCheckbox?.checked ? WI.LocalResourceOverride.InterceptType.ResponseSkippingNetwork : WI.LocalResourceOverride.InterceptType.Response,
    9495            url,
    9596            mimeType,
     
    292293        });
    293294
    294         headersData.appendChild(WI.createReferencePageLink("local-overrides", "configuring-local-overrides"));
     295        if (WI.NetworkManager.supportsOverridingRequestsWithResponses()) {
     296            let optionsRow = table.appendChild(document.createElement("tr"));
     297            optionsRow.className = "options";
     298
     299            let optionsHeader = optionsRow.appendChild(document.createElement("th"));
     300
     301            let optionsLabel = optionsHeader.appendChild(document.createElement("label"));
     302            optionsLabel.textContent = WI.UIString("Options");
     303
     304            let optionsData = optionsRow.appendChild(document.createElement("td"));
     305
     306            let skipNetworkLabel = optionsData.appendChild(document.createElement("label"));
     307            skipNetworkLabel.className = "skip-network";
     308
     309            this._skipNetworkCheckbox = skipNetworkLabel.appendChild(document.createElement("input"));
     310            this._skipNetworkCheckbox.type = "checkbox";
     311            this._skipNetworkCheckbox.checked = localResourceOverride?.type === WI.LocalResourceOverride.InterceptType.ResponseSkippingNetwork;
     312
     313            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.")));
     314
     315            optionsData.appendChild(WI.createReferencePageLink("local-overrides", "configuring-local-overrides"));
     316        } else
     317            headersData.appendChild(WI.createReferencePageLink("local-overrides", "configuring-local-overrides"));
    295318
    296319        let incrementStatusCode = () => {
  • trunk/Source/WebInspectorUI/UserInterface/Views/LocalResourceOverrideTreeElement.js

    r254485 r267723  
    132132            return;
    133133
    134         let {url, isCaseSensitive, isRegex, mimeType, statusCode, statusText, headers} = serializedData;
     134        let {type, url, isCaseSensitive, isRegex, mimeType, statusCode, statusText, headers} = serializedData;
    135135
    136136        // Do not conflict with an existing override unless we are modifying ourselves.
     
    144144
    145145        let revision = this._localResourceOverride.localResource.currentRevision;
    146         let newLocalResourceOverride = WI.LocalResourceOverride.create({
     146        let newLocalResourceOverride = WI.LocalResourceOverride.create(type, {
    147147            url,
    148148            isCaseSensitive,
  • trunk/Source/WebInspectorUI/UserInterface/Views/OpenResourceDialog.js

    r254245 r267723  
    391391    _addLocalResourceOverrides()
    392392    {
    393         if (!WI.NetworkManager.supportsLocalResourceOverrides())
     393        if (!WI.NetworkManager.supportsOverridingResponses())
    394394            return;
    395395
  • trunk/Source/WebInspectorUI/UserInterface/Views/ResourceContentView.js

    r266568 r267723  
    6161        this._showingLocalResourceOverride = false;
    6262
    63         if (WI.NetworkManager.supportsLocalResourceOverrides()) {
     63        if (WI.NetworkManager.supportsOverridingResponses()) {
    6464            if (resource.isLocalResourceOverride) {
    6565                this._showingLocalResourceOverride = true;
     
    192192        super.closed();
    193193
    194         if (WI.NetworkManager.supportsLocalResourceOverrides())
     194        if (WI.NetworkManager.supportsOverridingResponses())
    195195            WI.networkManager.removeEventListener(null, null, this);
    196196
  • trunk/Source/WebInspectorUI/UserInterface/Views/SourcesNavigationSidebarPanel.js

    r266669 r267723  
    261261        resourcesContainer.appendChild(this._resourcesTreeOutline.element);
    262262
    263         if (WI.NetworkManager.supportsLocalResourceOverrides() || WI.NetworkManager.supportsBootstrapScript() || WI.CSSManager.supportsInspectorStyleSheet()) {
     263        if (WI.NetworkManager.supportsOverridingResponses() || WI.NetworkManager.supportsBootstrapScript() || WI.CSSManager.supportsInspectorStyleSheet()) {
    264264            let createResourceNavigationBar = new WI.NavigationBar;
    265265
     
    301301        }
    302302
    303         if (WI.NetworkManager.supportsLocalResourceOverrides()) {
     303        if (WI.NetworkManager.supportsOverridingResponses()) {
    304304            WI.networkManager.addEventListener(WI.NetworkManager.Event.LocalResourceOverrideAdded, this._handleLocalResourceOverrideAdded, this);
    305305            WI.networkManager.addEventListener(WI.NetworkManager.Event.LocalResourceOverrideRemoved, this._handleLocalResourceOverrideRemoved, this);
     
    384384        }
    385385
    386         if (WI.NetworkManager.supportsLocalResourceOverrides()) {
     386        if (WI.NetworkManager.supportsOverridingResponses()) {
    387387            for (let localResourceOverride of WI.networkManager.localResourceOverrides)
    388388                this._addLocalOverride(localResourceOverride);
     
    799799        }
    800800
    801         let {url, isCaseSensitive, isRegex, mimeType, statusCode, statusText, headers} = serializedData;
     801        let {type, url, isCaseSensitive, isRegex, mimeType, statusCode, statusText, headers} = serializedData;
    802802
    803803        // Do not conflict with an existing override.
     
    808808        }
    809809
    810         let localResourceOverride = WI.LocalResourceOverride.create({
     810        let localResourceOverride = WI.LocalResourceOverride.create(type, {
    811811            url,
    812812            isCaseSensitive,
     
    14231423    _addLocalOverride(localOverride)
    14241424    {
    1425         console.assert(WI.NetworkManager.supportsBootstrapScript() || WI.NetworkManager.supportsLocalResourceOverrides());
     1425        console.assert(WI.NetworkManager.supportsBootstrapScript() || WI.NetworkManager.supportsOverridingResponses());
    14261426
    14271427        if (this._localOverridesTreeOutline.findTreeElement(localOverride))
     
    14471447    _removeResourceOverride(localOverride)
    14481448    {
    1449         console.assert(WI.NetworkManager.supportsBootstrapScript() || WI.NetworkManager.supportsLocalResourceOverrides());
     1449        console.assert(WI.NetworkManager.supportsBootstrapScript() || WI.NetworkManager.supportsOverridingResponses());
    14501450
    14511451        let resourceTreeElement = this._localOverridesTreeOutline.findTreeElement(localOverride);
     
    20342034    _populateCreateResourceContextMenu(contextMenu)
    20352035    {
    2036         if (WI.NetworkManager.supportsLocalResourceOverrides()) {
     2036        if (WI.NetworkManager.supportsOverridingResponses()) {
    20372037            contextMenu.appendItem(WI.UIString("Local Override\u2026"), () => {
    20382038                if (!this._localOverridesTreeOutline.children.length)
Note: See TracChangeset for help on using the changeset viewer.