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

Side by Side Diff: third_party/WebKit/LayoutTests/fast/dnd/file-drag-drop-on-page.html

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
« no previous file with comments | « no previous file | third_party/WebKit/LayoutTests/fast/dnd/file-drag-over-page-cancel.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 <!doctype html>
2 <meta charset="utf-8" />
3 <script src="../../resources/testharness.js"></script>
4 <script src="../../resources/testharnessreport.js"></script>
5 <script src="resources/copy-data-transfer.js"></script>
6 <style>
7 #dropwrapper {
8 display: block;
9 width: 400px;
10 height: 200px;
11 position: relative;
12 padding: 50px 0 0 100px;
13 }
14 #dropzone {
15 display: block;
16 border: 1px solid black;
17 width: 200px;
18 height: 100px;
19 }
20 </style>
21
22 <p>
23 Please download <a download href="resources/dragged-file.txt">this file</a>,
24 and drag it into the box below.
25 </p>
26
27 <div id="dropwrapper">
28 <div id="dropzone">
29 Drop Here
30 </div>
31 </div>
32
33 <script>
34 'use strict';
35
36 const dropWrapper = document.querySelector('#dropwrapper');
37 const dropZone = document.querySelector('#dropzone');
38
39 const dragEnterPromise = new Promise((resolve, reject) => {
40 // Needed to keep the drag-and-drop going.
41 dropWrapper.ondragenter = event => event.preventDefault();
42
43 dropZone.ondragenter = event => {
44 event.preventDefault(); // Needed to keep the drag-and-drop going.
45 resolve(copyDataTransfer(event.dataTransfer));
46 };
47 });
48 const dragOverPromise = new Promise((resolve, reject) => {
49 // Needed to keep the drag-and-drop going.
50 dropZone.ondragover = event => event.preventDefault();
51
52 dropWrapper.ondragover = event => {
53 event.preventDefault(); // Needed to keep the drag-and-drop going.
54 resolve(copyDataTransfer(event.dataTransfer));
55 };
56 });
57 const dragLeavePromise = new Promise((resolve, reject) => {
58 dropWrapper.ondragleave = event => {
59 resolve(copyDataTransfer(event.dataTransfer));
60 };
61 });
62 const dropPromise = new Promise((resolve, reject) => {
63 dropZone.ondrop = event => {
64 event.preventDefault(); // Needed to prevent drop navigation.
65 resolve(copyDataTransfer(event.dataTransfer));
66 };
67 });
68
69 const wrapperRect = dropWrapper.getBoundingClientRect();
70 const dropRect = dropZone.getBoundingClientRect();
71 if (window.eventSender) {
72 eventSender.mouseMoveTo(0, 0);
73 eventSender.beginDragWithFiles(['resources/dragged-file.txt']);
74
75 // dragenter + dragover on #dropwrapper
76 const wrapperX = wrapperRect.left + 10;
77 const wrapperY = wrapperRect.top + 10;
78 eventSender.mouseMoveTo(wrapperX, wrapperY);
79
80 // dragleave on #dropwrapper and dragenter + dragover + dragleave on #dropzone
81 setTimeout(() => {
82 const centerX = (dropRect.left + dropRect.right) / 2;
83 const centerY = (dropRect.top + dropRect.bottom) / 2;
84 eventSender.mouseMoveTo(centerX, centerY);
85 eventSender.mouseUp();
86 }, 0);
87 }
88
89 promise_test(() => {
90 return dragEnterPromise.then((dataTransfer) => {
91 assert_array_equals(dataTransfer.types, ['Files']);
92 });
93 }, 'DataTransfer.types in dragenter');
94
95 promise_test(() => {
96 return dragOverPromise.then((dataTransfer) => {
97 assert_array_equals(dataTransfer.types, ['Files']);
98 });
99 }, 'DataTransfer.types in dragover');
100
101 promise_test(() => {
102 return dragLeavePromise.then((dataTransfer) => {
103 assert_array_equals(dataTransfer.types, ['Files']);
104 });
105 }, 'DataTransfer.types in dragleave');
106
107 promise_test(() => {
108 return dropPromise.then((dataTransfer) => {
109 assert_array_equals(dataTransfer.types, ['Files']);
110 });
111 }, 'DataTransfer.types in drop');
112
113 promise_test(() => {
114 return dragEnterPromise.then((dataTransfer) => {
115 assert_object_equals(dataTransfer.data, {Files: ''});
116 });
117 }, 'DataTransfer.getData() return values in dragenter');
118
119 promise_test(() => {
120 return dragOverPromise.then((dataTransfer) => {
121 assert_object_equals(dataTransfer.data, {Files: ''});
122 });
123 }, 'DataTransfer.getData() return values in dragover');
124
125 promise_test(() => {
126 return dragLeavePromise.then((dataTransfer) => {
127 assert_object_equals(dataTransfer.data, {Files: ''});
128 });
129 }, 'DataTransfer.getData() return values in dragleave');
130
131 promise_test(() => {
132 return dropPromise.then((dataTransfer) => {
133 assert_object_equals(dataTransfer.data, {Files: ''});
134 });
135 }, 'DataTransfer.getData() return values in drop');
136
137 promise_test(() => {
138 return dragEnterPromise.then((dataTransfer) => {
139 assert_equals(
140 dataTransfer.files.length, 0,
141 'DataTransfer is protected, so DataTransfer.files should be empty');
142 });
143 }, 'DataTransfer.files in dragenter');
144
145 promise_test(() => {
146 return dragOverPromise.then((dataTransfer) => {
147 assert_equals(
148 dataTransfer.files.length, 0,
149 'DataTransfer is protected, so DataTransfer.files should be empty');
150 });
151 }, 'DataTransfer.files in dragover');
152
153 promise_test(() => {
154 return dragLeavePromise.then((dataTransfer) => {
155 assert_equals(
156 dataTransfer.files.length, 0,
157 'DataTransfer is protected, so DataTransfer.files should be empty');
158 });
159 }, 'DataTransfer.files in dragleave');
160
161 promise_test(() => {
162 return dropPromise.then((dataTransfer) => {
163 assert_equals(
164 dataTransfer.files.length, 1,
165 'DataTransfer.files should have one element');
166 const file = dataTransfer.files[0];
167 assert_equals(file.file.name, 'dragged-file.txt');
168 assert_equals(file.file.type, 'text/plain');
169 assert_equals(file.file.size, 21);
170 assert_equals(file.data, 'The test has FAILED.\n');
171 });
172 }, 'DataTransfer.files in drop');
173
174 promise_test(() => {
175 return dropPromise.then((dataTransfer) => {
176 const file = dataTransfer.files[0].file;
177 assert_true(
178 file instanceof File,
179 'DataTransfer.files[0] should be a File instance');
180 assert_equals(
181 file.name, 'dragged-file.txt',
182 "File.name should reflect the dropped file's name");
183 assert_equals(
184 file.type, 'text/plain',
185 "File.type should reflect the dropped file's MIME type");
186 assert_equals(
187 file.size, 21,
188 "File.type should reflect the dropped file's size");
189 });
190 }, 'DataTransfer.files[0] File metadata in drop');
191
192 promise_test(() => {
193 return dropPromise.then((dataTransfer) => {
194 assert_equals(dataTransfer.files[0].data, 'The test has FAILED.\n');
195 });
196 }, 'Using FileReader to read DataTransfer.files[0] in drop');
197
198 promise_test(() => {
199 return dragEnterPromise.then((dataTransfer) => {
200 assert_equals(
201 dataTransfer.items.length, 1,
202 'DataTransfer.items should have 1 element');
203 const item = dataTransfer.items[0];
204 assert_equals(
205 item.kind, 'file',
206 'DataTransferItem.kind should indicate that a file was dropped');
207 assert_equals(
208 item.type, 'text/plain', // Firefox returns application/x-moz-file.
209 "DataTransferItem.type should reflect the dropped file's MIME type");
210 assert_equals(
211 item.file, null, // Firefox returns the file's metadata.
212 'DataTransferItem.getAsFile() should reflect that the DataTransfer ' +
213 'is protected');
214 });
215 }, 'DataTransfer.items in dragenter');
216
217 promise_test(() => {
218 return dragOverPromise.then((dataTransfer) => {
219 assert_equals(
220 dataTransfer.items.length, 1,
221 'DataTransfer.items should have 1 element');
222 const item = dataTransfer.items[0];
223 assert_equals(
224 item.kind, 'file',
225 'DataTransferItem.kind should indicate that a file was dropped');
226 assert_equals(
227 item.type, 'text/plain', // Firefox returns application/x-moz-file.
228 "DataTransferItem.type should reflect the dropped file's MIME type");
229 assert_equals(
230 item.file, null, // Firefox returns the file's metadata.
231 'DataTransferItem.getAsFile() should reflect that the DataTransfer ' +
232 'is protected');
233 });
234 }, 'DataTransfer.items in dragover');
235
236 promise_test(() => {
237 return dragLeavePromise.then((dataTransfer) => {
238 assert_equals(
239 dataTransfer.items.length, 1,
240 'DataTransfer.items should have 1 element');
241 const item = dataTransfer.items[0];
242 assert_equals(
243 item.kind, 'file',
244 'DataTransferItem.kind should indicate that a file was dropped');
245 assert_equals(
246 item.type, 'text/plain', // Firefox returns application/x-moz-file.
247 "DataTransferItem.type should reflect the dropped file's MIME type");
248 assert_equals(
249 item.file, null, // Firefox returns the file's metadata.
250 'DataTransferItem.getAsFile() should reflect that the DataTransfer ' +
251 'is protected');
252 });
253 }, 'DataTransfer.items in dragleave');
254
255 promise_test(() => {
256 return dropPromise.then((dataTransfer) => {
257 assert_equals(
258 dataTransfer.items.length, 1,
259 'DataTransfer.items should have 1 element');
260 const item = dataTransfer.items[0];
261 assert_equals(
262 item.kind, 'file',
263 'DataTransferItem.kind should indicate that a file was dropped');
264 assert_equals(
265 item.type, 'text/plain', // Firefox returns application/x-moz-file
266 "DataTransferItem.type should reflect the dropped file's MIME type");
267 });
268 }, 'DataTransfer.items in drop');
269
270 promise_test(() => {
271 return dropPromise.then((dataTransfer) => {
272 assert_equals(
273 dataTransfer.items[0].error, undefined,
274 'Reading the file in DataTransfer.items[0] should not throw');
275
276 const file = dataTransfer.items[0].file;
277 assert_true(
278 file instanceof File,
279 'DataTransfer.items[0].getAsFile() should return a File instance');
280 assert_equals(
281 file.name, 'dragged-file.txt',
282 "File.name should reflect the dropped file's name");
283 assert_equals(
284 file.type, 'text/plain',
285 "File.type should reflect the dropped file's MIME type");
286 assert_equals(
287 file.size, 21,
288 "File.type should reflect the dropped file's size");
289 });
290 }, 'DataTransfer.items[0].getAsFile() File metadata in drop');
291
292 promise_test(() => {
293 return dropPromise.then((dataTransfer) => {
294 assert_equals(dataTransfer.items[0].data, 'The test has FAILED.\n');
295 });
296 }, 'Using FileReader to read DataTransfer.items[0].getAsFile() in drop');
297
298 </script>
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/LayoutTests/fast/dnd/file-drag-over-page-cancel.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698