Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: third_party/WebKit/LayoutTests/fast/dnd/resources/copy-data-transfer.js

Issue 2572023002: Remove special DataTransfer permissions for file: origins. (Closed)
Patch Set: Pulled webkitdropzone changes to separate CL. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copies the information out of a DataTransfer instance. This is necessary
2 // because dataTransfer instances get neutered after their event handlers exit.
3 //
4 // Returns a Promise that resolves to an object which mirrors the DataTransfer's
5 // files, items, and types attributes, as well as the return values of the
6 // getData function.
7 const copyDataTransfer = (dataTransfer) => {
8 const types = dataTransfer.types.slice();
9 const data = {};
10 for (let type of types) {
11 try {
12 data[type] = dataTransfer.getData(type);
13 } catch(e) { // Catches SecurityError exceptions.
14 data[type] = e;
15 }
16 }
17
18 const readerPromises = [];
19
20 // DataTransfer.files returns a FileList. According to the spec, FileList only
21 // supports .length and .item().
22 const files = [];
23 const fileList = dataTransfer.files || [];
24 for (let i = 0; i < fileList.length; ++i) {
25 const file = fileList.item(i);
26 const fileData = { file: file };
27 files.push(fileData);
28
29 readerPromises.push(new Promise((resolve, reject) => {
30 const reader = new FileReader();
31 reader.onloadend = (event) => {
32 if (event.target.error)
33 fileData.data = event.target.error;
34 else
35 fileData.data = event.target.result;
36 resolve();
37 };
38 reader.readAsText(file);
39 }).catch(e => fileData.error = e));
40 }
41
42 // DataTransfer.items returns an DataTransferItemList, which supports .length
43 // and indexed access.
44 const items = [];
45 const itemList = dataTransfer.items || [];
46 for (let i = 0; i < dataTransfer.items.length; ++i) {
47 const item = dataTransfer.items[i];
48 const itemData = { kind: item.kind, type: item.type };
49 items.push(itemData);
50
51 readerPromises.push(new Promise((resolve, reject) => {
52 if (itemData.kind === 'file') {
53 itemData.file = item.getAsFile();
54 if (itemData.file === null) { // DataTransfer is in protected mode.
55 resolve();
56 return;
57 }
58
59 const reader = new FileReader();
60 reader.onloadend = (event) => {
61 if (event.target.error)
62 itemData.data = event.target.error;
63 else
64 itemData.data = event.target.result;
65 resolve();
66 };
67 reader.readAsText(itemData.file);
68 }
69 }).catch(e => itemData.error = e));
70 }
71
72 return Promise.all(readerPromises).then(() => {
73 return { data: data, files: files, items: items, types: types };
74 });
75 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698