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

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: jsbell feedback, round 2. 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 'use strict';
2
3 // Copies the information out of a DataTransfer instance. This is necessary
4 // because dataTransfer instances get neutered after their event handlers exit.
5 //
6 // Returns a Promise that resolves to an object which mirrors the DataTransfer's
7 // files, items, and types attributes, as well as the return values of the
8 // getData function. The contents of files and file items are read using
9 // FileReader.
10 const copyDataTransfer = dataTransfer => {
11 const types = dataTransfer.types.slice();
12 const data = {};
13 for (let type of types) {
14 try {
15 data[type] = dataTransfer.getData(type);
16 } catch(e) { // Catches SecurityError exceptions.
17 data[type] = e;
18 }
19 }
20
21 const readerPromises = [];
22
23 const files = [];
24 for (let file of Array.from(dataTransfer.files || [])) {
25 const fileData = { file: file };
26 files.push(fileData);
27
28 readerPromises.push(new Promise((resolve, reject) => {
29 const reader = new FileReader();
30 reader.onloadend = event => {
31 if (event.target.error)
32 fileData.error = event.target.error;
33 else
34 fileData.data = event.target.result;
35 resolve();
36 };
37 reader.readAsText(file);
38 }).catch(e => fileData.error = e));
39 }
40
41 const items = [];
42 for (let item of Array.from(dataTransfer.items || [])) {
43 const itemData = { kind: item.kind, type: item.type };
44 items.push(itemData);
45
46 readerPromises.push(new Promise((resolve, reject) => {
47 if (itemData.kind === 'file') {
48 itemData.file = item.getAsFile();
49 if (itemData.file === null) { // DataTransfer is in protected mode.
50 resolve();
51 return;
52 }
53
54 const reader = new FileReader();
55 reader.onloadend = event => {
56 if (event.target.error)
57 itemData.data = event.target.error;
58 else
59 itemData.data = event.target.result;
60 resolve();
61 };
62 reader.readAsText(itemData.file);
63 }
64 }).catch(e => itemData.error = e));
65 }
66
67 return Promise.all(readerPromises).then(() => {
68 return { data, files, items, types };
69 });
70 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698