Changeset 252200 in webkit


Ignore:
Timestamp:
Nov 7, 2019 12:17:59 PM (4 years ago)
Author:
Devin Rousso
Message:

Web Inspector: Local Resource Overrides: automatically show a file picker when attempting to create an override for non-text resources
https://bugs.webkit.org/show_bug.cgi?id=203917

Reviewed by Timothy Hatcher.

Since there's no way to edit non-text resources (e.g. images, fonts, etc.) in Web Inspector,
when creating a local override for non-text resources, default to showing a file picker and
creating a local override from the content and MIME type of whatever file is chosen.

Still provide a way (shift-click) to create a local override for non-text resources from the
resource's contents, as that can be useful if the user just wants to change some headers.

  • UserInterface/Models/Resource.js:

(WI.Resource.prototype.async createLocalResourceOverride):

  • UserInterface/Views/ResourceContentView.js:

(WI.ResourceContentView):
(WI.ResourceContentView.prototype.get createLocalResourceOverrideTooltip): Added.
(WI.ResourceContentView.prototype.requestLocalResourceOverrideInitialContent): Added.
(WI.ResourceContentView.prototype.async _getContentForLocalResourceOverrideFromFile): Added.
(WI.ResourceContentView.prototype._handleCreateLocalResourceOverride):
(WI.ResourceContentView.prototype._handleImportLocalResourceOverride):
(WI.ResourceContentView.prototype.localResourceOverrideInitialContent): Deleted.
(WI.ResourceContentView.prototype.async _handleCreateLocalResourceOverride): Deleted.

  • UserInterface/Views/TextResourceContentView.js:

(WI.TextResourceContentView.prototype.get createLocalResourceOverrideTooltip): Added.
(WI.TextResourceContentView.prototype.requestLocalResourceOverrideInitialContent): Added.
(WI.TextResourceContentView.prototype.localResourceOverrideInitialContent): Deleted.

  • Localizations/en.lproj/localizedStrings.js:
Location:
trunk/Source/WebInspectorUI
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebInspectorUI/ChangeLog

    r252199 r252200  
     12019-11-07  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: Local Resource Overrides: automatically show a file picker when attempting to create an override for non-text resources
     4        https://bugs.webkit.org/show_bug.cgi?id=203917
     5
     6        Reviewed by Timothy Hatcher.
     7
     8        Since there's no way to edit non-text resources (e.g. images, fonts, etc.) in Web Inspector,
     9        when creating a local override for non-text resources, default to showing a file picker and
     10        creating a local override from the content and MIME type of whatever file is chosen.
     11
     12        Still provide a way (shift-click) to create a local override for non-text resources from the
     13        resource's contents, as that can be useful if the user just wants to change some headers.
     14
     15        * UserInterface/Models/Resource.js:
     16        (WI.Resource.prototype.async createLocalResourceOverride):
     17
     18        * UserInterface/Views/ResourceContentView.js:
     19        (WI.ResourceContentView):
     20        (WI.ResourceContentView.prototype.get createLocalResourceOverrideTooltip): Added.
     21        (WI.ResourceContentView.prototype.requestLocalResourceOverrideInitialContent): Added.
     22        (WI.ResourceContentView.prototype.async _getContentForLocalResourceOverrideFromFile): Added.
     23        (WI.ResourceContentView.prototype._handleCreateLocalResourceOverride):
     24        (WI.ResourceContentView.prototype._handleImportLocalResourceOverride):
     25        (WI.ResourceContentView.prototype.localResourceOverrideInitialContent): Deleted.
     26        (WI.ResourceContentView.prototype.async _handleCreateLocalResourceOverride): Deleted.
     27
     28        * UserInterface/Views/TextResourceContentView.js:
     29        (WI.TextResourceContentView.prototype.get createLocalResourceOverrideTooltip): Added.
     30        (WI.TextResourceContentView.prototype.requestLocalResourceOverrideInitialContent): Added.
     31        (WI.TextResourceContentView.prototype.localResourceOverrideInitialContent): Deleted.
     32
     33        * Localizations/en.lproj/localizedStrings.js:
     34
    1352019-11-07  Devin Rousso  <drousso@apple.com>
    236
  • trunk/Source/WebInspectorUI/Localizations/en.lproj/localizedStrings.js

    r252199 r252200  
    251251localizedStrings["Click Listener"] = "Click Listener";
    252252localizedStrings["Click to close this tab"] = "Click to close this tab";
     253localizedStrings["Click to create a Local Override from this content"] = "Click to create a Local Override from this content";
     254localizedStrings["Click to import a file and create a Local Override\nShift-click to create a Local Override from this content"] = "Click to import a file and create a Local Override\nShift-click to create a Local Override from this content";
    253255localizedStrings["Click to select a color\nShift-click to switch color formats"] = "Click to select a color\nShift-click to switch color formats";
    254256localizedStrings["Click to view variable value\nShift-click to replace variable with value"] = "Click to view variable value\nShift-click to replace variable with value";
  • trunk/Source/WebInspectorUI/UserInterface/Models/Resource.js

    r251227 r252200  
    10591059    }
    10601060
    1061     async createLocalResourceOverride({initialContent} = {})
     1061    async createLocalResourceOverride({initialMIMEType, initialBase64Encoded, initialContent} = {})
    10621062    {
    10631063        console.assert(!this.isLocalResourceOverride);
     
    10651065
    10661066        let {rawContent, rawBase64Encoded} = await this.requestContent();
    1067         let content = initialContent !== undefined ? initialContent : rawContent;
    10681067
    10691068        return WI.LocalResourceOverride.create({
    10701069            url: this.url,
    1071             mimeType: this.mimeType,
    1072             content,
    1073             base64Encoded: rawBase64Encoded,
     1070            mimeType: initialMIMEType !== undefined ? initialMIMEType : this.mimeType,
     1071            content: initialContent !== undefined ? initialContent : rawContent,
     1072            base64Encoded: initialBase64Encoded !== undefined ? initialBase64Encoded : rawBase64Encoded,
    10741073            statusCode: this.statusCode,
    10751074            statusText: this.statusText,
  • trunk/Source/WebInspectorUI/UserInterface/Views/ResourceContentView.js

    r251144 r252200  
    7878                this._localResourceOverrideBannerView = new WI.LocalResourceOverrideWarningView(resource);
    7979
    80                 this._createLocalResourceOverrideButtonNavigationItem = new WI.ButtonNavigationItem("create-local-resource-override", WI.UIString("Create Local Override"), "Images/NavigationItemNetworkOverride.svg", 13, 14);
     80                this._createLocalResourceOverrideButtonNavigationItem = new WI.ButtonNavigationItem("create-local-resource-override", this.createLocalResourceOverrideTooltip, "Images/NavigationItemNetworkOverride.svg", 13, 14);
    8181                this._createLocalResourceOverrideButtonNavigationItem.addEventListener(WI.ButtonNavigationItem.Event.Clicked, this._handleCreateLocalResourceOverride, this);
    8282                this._createLocalResourceOverrideButtonNavigationItem.enabled = false; // Enabled when the content is available.
     
    123123    }
    124124
    125     localResourceOverrideInitialContent()
    126     {
    127         // Implemented by subclasses if needed.
    128         return {};
     125    get createLocalResourceOverrideTooltip()
     126    {
     127        return WI.UIString("Click to import a file and create a Local Override\nShift-click to create a Local Override from this content");
     128    }
     129
     130    requestLocalResourceOverrideInitialContent(callback)
     131    {
     132        // Overridden by subclasses if needed.
     133
     134        WI.FileUtilities.import(async (fileList) => {
     135            console.assert(fileList.length === 1);
     136
     137            this._getContentForLocalResourceOverrideFromFile(fileList[0], ({mimeType, base64Encoded, content}) => {
     138                callback({
     139                    initialMIMEType: mimeType,
     140                    initialBase64Encoded: base64Encoded,
     141                    initialContent: content,
     142                });
     143            });
     144        });
    129145    }
    130146
     
    231247    }
    232248
    233     async _handleCreateLocalResourceOverride(event)
    234     {
    235         let initialContent = this.localResourceOverrideInitialContent();
    236         let localResourceOverride = await this._resource.createLocalResourceOverride(initialContent);
    237         WI.networkManager.addLocalResourceOverride(localResourceOverride);
    238         WI.showLocalResourceOverride(localResourceOverride);
     249    async _getContentForLocalResourceOverrideFromFile(file, callback)
     250    {
     251        let initialMIMEType = file.type || WI.mimeTypeForFileExtension(WI.fileExtensionForFilename(file.name));
     252        if (WI.shouldTreatMIMETypeAsText(initialMIMEType)) {
     253            await WI.FileUtilities.readText(file, async ({text}) => {
     254                await callback({
     255                    mimeType: initialMIMEType,
     256                    base64Encoded: false,
     257                    content: text,
     258                });
     259            });
     260        } else {
     261            await WI.FileUtilities.readData(file, async ({mimeType, base64Encoded, content}) => {
     262                await callback({mimeType, base64Encoded, content});
     263            });
     264        }
     265    }
     266
     267    _handleCreateLocalResourceOverride(event)
     268    {
     269        let {nativeEvent} = event.data;
     270
     271        let createLocalResourceOverride = async (initialContent) => {
     272            let localResourceOverride = await this._resource.createLocalResourceOverride(initialContent);
     273            WI.networkManager.addLocalResourceOverride(localResourceOverride);
     274            WI.showLocalResourceOverride(localResourceOverride);
     275        };
     276
     277        if (nativeEvent.shiftKey)
     278            createLocalResourceOverride({});
     279        else
     280            this.requestLocalResourceOverrideInitialContent(createLocalResourceOverride);
    239281    }
    240282
     
    250292
    251293            let revision = localResourceOverride.localResource.currentRevision;
    252 
    253             let file = fileList[0];
    254             let mimeType = file.type || WI.mimeTypeForFileExtension(WI.fileExtensionForFilename(file.name));
    255             if (WI.shouldTreatMIMETypeAsText(mimeType)) {
    256                 await WI.FileUtilities.readText(file, ({text}) => {
    257                     revision.updateRevisionContent(text, {base64Encoded: false, mimeType});
    258                 });
    259             } else {
    260                 await WI.FileUtilities.readData(file, ({dataURL, mimeType, base64Encoded, content}) => {
    261                     revision.updateRevisionContent(content, {base64Encoded, mimeType});
    262                 });
    263             }
     294            await this._getContentForLocalResourceOverrideFromFile(fileList[0], ({mimeType, base64Encoded, content}) => {
     295                revision.updateRevisionContent(content, {base64Encoded, mimeType});
     296            });
    264297
    265298            if (!this.showingLocalResourceOverride)
  • trunk/Source/WebInspectorUI/UserInterface/Views/TextResourceContentView.js

    r251024 r252200  
    145145    }
    146146
    147     localResourceOverrideInitialContent()
    148     {
    149         return {initialContent: this._textEditor.string};
     147    get createLocalResourceOverrideTooltip()
     148    {
     149        return WI.UIString("Click to create a Local Override from this content");
     150    }
     151
     152    requestLocalResourceOverrideInitialContent(callback)
     153    {
     154        callback({initialContent: this._textEditor.string});
    150155    }
    151156
Note: See TracChangeset for help on using the changeset viewer.