Title: [249248] trunk/Source/WebInspectorUI
Revision
249248
Author
pecor...@apple.com
Date
2019-08-29 01:24:19 -0700 (Thu, 29 Aug 2019)

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

Modified Paths

Diff

Modified: trunk/Source/WebInspectorUI/ChangeLog (249247 => 249248)


--- trunk/Source/WebInspectorUI/ChangeLog	2019-08-29 06:49:28 UTC (rev 249247)
+++ trunk/Source/WebInspectorUI/ChangeLog	2019-08-29 08:24:19 UTC (rev 249248)
@@ -1,3 +1,22 @@
+2019-08-29  Joseph Pecoraro  <pecor...@apple.com>
+
+        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.
+
 2019-08-28  Devin Rousso  <drou...@apple.com>
 
         Web Inspector: REGRESSION(r249078): _javascript_ autocomplete doesn't work when evaluating properties of values

Modified: trunk/Source/WebInspectorUI/UserInterface/Base/FileUtilities.js (249247 => 249248)


--- trunk/Source/WebInspectorUI/UserInterface/Base/FileUtilities.js	2019-08-29 06:49:28 UTC (rev 249247)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/FileUtilities.js	2019-08-29 08:24:19 UTC (rev 249248)
@@ -82,7 +82,6 @@
         }
 
         let fileReader = new FileReader;
-        fileReader.readAsDataURL(saveData.content);
         fileReader.addEventListener("loadend", () => {
             let dataURLComponents = parseDataURL(fileReader.result);
 
@@ -89,28 +88,37 @@
             const base64Encoded = true;
             InspectorFrontendHost.save(suggestedName, dataURLComponents.data, base64Encoded, forceSaveAs || saveData.forceSaveAs);
         });
+        fileReader.readAsDataURL(saveData.content);
     }
 
     static importText(callback)
     {
-        let inputElement = document.createElement("input");
-        inputElement.type = "file";
-        inputElement.multiple = true;
-        inputElement.addEventListener("change", (event) => {
-            WI.FileUtilities.readText(inputElement.files, callback);
-        });
-        inputElement.click();
+        if (!FileUtilities._importTextInputElement) {
+            let inputElement = FileUtilities._importTextInputElement = document.createElement("input");
+            inputElement.type = "file";
+            inputElement.multiple = true;
+            inputElement.addEventListener("change", (event) => {
+                WI.FileUtilities.readText(inputElement.files, callback);
+            });
+        }
+
+        FileUtilities._importTextInputElement.value = null;
+        FileUtilities._importTextInputElement.click();
     }
 
     static importJSON(callback)
     {
-        let inputElement = document.createElement("input");
-        inputElement.type = "file";
-        inputElement.multiple = true;
-        inputElement.addEventListener("change", (event) => {
-            WI.FileUtilities.readJSON(inputElement.files, callback);
-        });
-        inputElement.click();
+        if (!FileUtilities._importJSONInputElement) {
+            let inputElement = FileUtilities._importJSONInputElement = document.createElement("input");
+            inputElement.type = "file";
+            inputElement.multiple = true;
+            inputElement.addEventListener("change", (event) => {
+                WI.FileUtilities.readJSON(inputElement.files, callback);
+            });
+        }
+
+        FileUtilities._importJSONInputElement.value = null;
+        FileUtilities._importJSONInputElement.click();
     }
 
     static async readText(fileOrList, callback)
@@ -124,9 +132,6 @@
             files = Array.from(fileOrList);
 
         for (let file of files) {
-            let reader = new FileReader;
-            reader.readAsText(file);
-
             let result = {
                 filename: file.name,
             };
@@ -133,11 +138,13 @@
 
             try {
                 await new Promise((resolve, reject) => {
+                    let reader = new FileReader;
                     reader.addEventListener("loadend", (event) => {
                         result.text = reader.result;
                         resolve(event);
                     });
                     reader.addEventListener("error", reject);
+                    reader.readAsText(file);
                 });
             } catch (e) {
                 result.error = e;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to