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

Changeset 249248 in webkit


Ignore:
Timestamp:
Aug 29, 2019, 1:24:19 AM (7 years ago)
Author:
Joseph Pecoraro
Message:

Web Inspector: Import file pickers sometimes do not import
https://bugs.webkit.org/show_bug.cgi?id=201290
<rdar://problem/54826117>

Reviewed by Devin Rousso.

  • UserInterface/Base/FileUtilities.js:

(WI.FileUtilities.importText):
(WI.FileUtilities.importJSON):
Keep the input element alive so it doesn't get garbage collected,
which makes the file chooser do nothing.

(WI.FileUtilities.save):
(WI.FileUtilities.async.readText):
Place read operations after event handlers are setup in case the
read operations can happen synchronously and events may not fire.

Location:
trunk/Source/WebInspectorUI
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebInspectorUI/ChangeLog

    r249246 r249248  
     12019-08-29  Joseph Pecoraro  <pecoraro@apple.com>
     2
     3        Web Inspector: Import file pickers sometimes do not import
     4        https://bugs.webkit.org/show_bug.cgi?id=201290
     5        <rdar://problem/54826117>
     6
     7        Reviewed by Devin Rousso.
     8
     9        * UserInterface/Base/FileUtilities.js:
     10        (WI.FileUtilities.importText):
     11        (WI.FileUtilities.importJSON):
     12        Keep the input element alive so it doesn't get garbage collected,
     13        which makes the file chooser do nothing.
     14
     15        (WI.FileUtilities.save):
     16        (WI.FileUtilities.async.readText):
     17        Place read operations after event handlers are setup in case the
     18        read operations can happen synchronously and events may not fire.
     19
    1202019-08-28  Devin Rousso  <drousso@apple.com>
    221
  • trunk/Source/WebInspectorUI/UserInterface/Base/FileUtilities.js

    r244576 r249248  
    8383
    8484        let fileReader = new FileReader;
    85         fileReader.readAsDataURL(saveData.content);
    8685        fileReader.addEventListener("loadend", () => {
    8786            let dataURLComponents = parseDataURL(fileReader.result);
     
    9089            InspectorFrontendHost.save(suggestedName, dataURLComponents.data, base64Encoded, forceSaveAs || saveData.forceSaveAs);
    9190        });
     91        fileReader.readAsDataURL(saveData.content);
    9292    }
    9393
    9494    static importText(callback)
    9595    {
    96         let inputElement = document.createElement("input");
    97         inputElement.type = "file";
    98         inputElement.multiple = true;
    99         inputElement.addEventListener("change", (event) => {
    100             WI.FileUtilities.readText(inputElement.files, callback);
    101         });
    102         inputElement.click();
     96        if (!FileUtilities._importTextInputElement) {
     97            let inputElement = FileUtilities._importTextInputElement = document.createElement("input");
     98            inputElement.type = "file";
     99            inputElement.multiple = true;
     100            inputElement.addEventListener("change", (event) => {
     101                WI.FileUtilities.readText(inputElement.files, callback);
     102            });
     103        }
     104
     105        FileUtilities._importTextInputElement.value = null;
     106        FileUtilities._importTextInputElement.click();
    103107    }
    104108
    105109    static importJSON(callback)
    106110    {
    107         let inputElement = document.createElement("input");
    108         inputElement.type = "file";
    109         inputElement.multiple = true;
    110         inputElement.addEventListener("change", (event) => {
    111             WI.FileUtilities.readJSON(inputElement.files, callback);
    112         });
    113         inputElement.click();
     111        if (!FileUtilities._importJSONInputElement) {
     112            let inputElement = FileUtilities._importJSONInputElement = document.createElement("input");
     113            inputElement.type = "file";
     114            inputElement.multiple = true;
     115            inputElement.addEventListener("change", (event) => {
     116                WI.FileUtilities.readJSON(inputElement.files, callback);
     117            });
     118        }
     119
     120        FileUtilities._importJSONInputElement.value = null;
     121        FileUtilities._importJSONInputElement.click();
    114122    }
    115123
     
    125133
    126134        for (let file of files) {
    127             let reader = new FileReader;
    128             reader.readAsText(file);
    129 
    130135            let result = {
    131136                filename: file.name,
     
    134139            try {
    135140                await new Promise((resolve, reject) => {
     141                    let reader = new FileReader;
    136142                    reader.addEventListener("loadend", (event) => {
    137143                        result.text = reader.result;
     
    139145                    });
    140146                    reader.addEventListener("error", reject);
     147                    reader.readAsText(file);
    141148                });
    142149            } catch (e) {
Note: See TracChangeset for help on using the changeset viewer.