Changeset 249248 in webkit
- Timestamp:
- Aug 29, 2019, 1:24:19 AM (7 years ago)
- Location:
- trunk/Source/WebInspectorUI
- Files:
-
- 2 edited
-
ChangeLog (modified) (1 diff)
-
UserInterface/Base/FileUtilities.js (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebInspectorUI/ChangeLog
r249246 r249248 1 2019-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 1 20 2019-08-28 Devin Rousso <drousso@apple.com> 2 21 -
trunk/Source/WebInspectorUI/UserInterface/Base/FileUtilities.js
r244576 r249248 83 83 84 84 let fileReader = new FileReader; 85 fileReader.readAsDataURL(saveData.content);86 85 fileReader.addEventListener("loadend", () => { 87 86 let dataURLComponents = parseDataURL(fileReader.result); … … 90 89 InspectorFrontendHost.save(suggestedName, dataURLComponents.data, base64Encoded, forceSaveAs || saveData.forceSaveAs); 91 90 }); 91 fileReader.readAsDataURL(saveData.content); 92 92 } 93 93 94 94 static importText(callback) 95 95 { 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(); 103 107 } 104 108 105 109 static importJSON(callback) 106 110 { 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(); 114 122 } 115 123 … … 125 133 126 134 for (let file of files) { 127 let reader = new FileReader;128 reader.readAsText(file);129 130 135 let result = { 131 136 filename: file.name, … … 134 139 try { 135 140 await new Promise((resolve, reject) => { 141 let reader = new FileReader; 136 142 reader.addEventListener("loadend", (event) => { 137 143 result.text = reader.result; … … 139 145 }); 140 146 reader.addEventListener("error", reject); 147 reader.readAsText(file); 141 148 }); 142 149 } catch (e) {
Note:
See TracChangeset
for help on using the changeset viewer.