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

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: 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
« 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
35 const dropWrapper = document.querySelector('#dropwrapper');
36 const dropZone = document.querySelector('#dropzone');
37
38 const dragEnterPromise = new Promise((resolve, reject) => {
39 // Needed to keep the drag-and-drop going.
40 dropWrapper.ondragenter = (event) => event.preventDefault();
41
42 dropZone.ondragenter = (event) => {
43 event.preventDefault(); // Needed to keep the drag-and-drop going.
44 resolve(copyDataTransfer(event.dataTransfer));
45 };
46 });
47 const dragOverPromise = new Promise((resolve, reject) => {
48 // Needed to keep the drag-and-drop going.
49 dropZone.ondragover = (event) => event.preventDefault();
50
51 dropWrapper.ondragover = (event) => {
52 event.preventDefault(); // Needed to keep the drag-and-drop going.
53 resolve(copyDataTransfer(event.dataTransfer));
54 };
55 });
56 const dragLeavePromise = new Promise((resolve, reject) => {
57 dropWrapper.ondragleave = (event) => {
58 resolve(copyDataTransfer(event.dataTransfer));
59 };
60 });
61 const dropPromise = new Promise((resolve, reject) => {
62 dropWrapper.ondrop = (event) => event.preventDefault();
dcheng 2016/12/16 18:41:57 Why do we need to install listeners on the wrapper
pwnall 2016/12/16 19:37:38 Ahh, good point. Thank you very much for catching
63
64 dropZone.ondrop = (event) => {
65 event.preventDefault(); // Needed to prevent drop navigation.
66 resolve(copyDataTransfer(event.dataTransfer));
67 };
68 });
69
70 const wrapperRect = dropWrapper.getBoundingClientRect();
71 const dropRect = dropZone.getBoundingClientRect();
72 if (window.eventSender) {
73 eventSender.mouseMoveTo(0, 0);
74 eventSender.beginDragWithFiles(['resources/dragged-file.txt']);
75
76 // dragenter + dragover on #dropwrapper
77 const wrapperX = wrapperRect.left + 10;
78 const wrapperY = wrapperRect.top + 10;
79 eventSender.mouseMoveTo(wrapperX, wrapperY);
80
81 // dragleave on #dropwrapper and dragenter + dragover + dragleave on #dropzone
82 setTimeout(() => {
83 const centerX = (dropRect.left + dropRect.right) / 2;
84 const centerY = (dropRect.top + dropRect.bottom) / 2;
85 eventSender.mouseMoveTo(centerX, centerY);
86 eventSender.mouseUp();
87 }, 16);
88 }
89
90 promise_test(() => {
91 return dragEnterPromise.then((dataTransfer) => {
92 assert_equals(JSON.stringify(dataTransfer.types), '["Files"]');
93 });
94 }, 'dragenter types');
95
96 promise_test(() => {
97 return dragOverPromise.then((dataTransfer) => {
98 assert_equals(JSON.stringify(dataTransfer.types), '["Files"]');
99 });
100 }, 'dragover types');
101
102 promise_test(() => {
103 return dragLeavePromise.then((dataTransfer) => {
104 assert_equals(JSON.stringify(dataTransfer.types), '["Files"]');
105 });
106 }, 'dragleave types');
107
108 promise_test(() => {
109 return dropPromise.then((dataTransfer) => {
110 assert_equals(JSON.stringify(dataTransfer.types), '["Files"]');
111 });
112 }, 'drop types');
113
114 promise_test(() => {
115 return dragEnterPromise.then((dataTransfer) => {
116 assert_equals(dataTransfer.data['Files'], '');
117 });
118 }, 'dragenter getData() return value');
119
120 promise_test(() => {
121 return dragOverPromise.then((dataTransfer) => {
122 assert_equals(dataTransfer.data['Files'], '');
123 });
124 }, 'dragover getData() return value');
125
126 promise_test(() => {
127 return dragLeavePromise.then((dataTransfer) => {
128 assert_equals(dataTransfer.data['Files'], '');
129 });
130 }, 'dragleave getData() return value');
131
132 promise_test(() => {
133 return dropPromise.then((dataTransfer) => {
134 assert_equals(dataTransfer.data['Files'], '');
135 });
136 }, 'drop getData() return value');
137
138 promise_test(() => {
139 return dragEnterPromise.then((dataTransfer) => {
140 assert_equals(JSON.stringify(dataTransfer.files), '[]');
141 });
142 }, 'dragenter files');
143
144 promise_test(() => {
145 return dragOverPromise.then((dataTransfer) => {
146 assert_equals(JSON.stringify(dataTransfer.files), '[]');
147 });
148 }, 'dragover files');
149
150 promise_test(() => {
151 return dragLeavePromise.then((dataTransfer) => {
152 assert_equals(JSON.stringify(dataTransfer.files), '[]');
153 });
154 }, 'dragleave files');
155
156 promise_test(() => {
157 return dropPromise.then((dataTransfer) => {
158 assert_equals(dataTransfer.files.length, 1);
159 const file = dataTransfer.files[0];
160 assert_equals(file.file.name, 'dragged-file.txt');
161 assert_equals(file.file.type, 'text/plain');
162 assert_equals(file.file.size, 21);
163 assert_equals(file.data, 'The test has FAILED.\n');
164 });
165 }, 'drop files');
166
167 promise_test(() => {
168 return dragEnterPromise.then((dataTransfer) => {
169 assert_equals(dataTransfer.items.length, 1);
170 const item = dataTransfer.items[0];
171 assert_equals(item.kind, 'file');
172 assert_equals(item.type, 'text/plain'); // application/x-moz-file in FF
173 assert_equals(item.file, null); // FF returns the file's metadata.
174 assert_equals(item.data, undefined);
175 assert_equals(item.error, undefined); // FF throws a SecurityError.
176 });
177 }, 'dragenter items');
178
179 promise_test(() => {
180 return dragOverPromise.then((dataTransfer) => {
181 assert_equals(dataTransfer.items.length, 1);
182 const item = dataTransfer.items[0];
183 assert_equals(item.kind, 'file');
184 assert_equals(item.type, 'text/plain'); // application/x-moz-file in FF
185 assert_equals(item.file, null); // FF returns the file's metadata.
186 assert_equals(item.data, undefined);
187 assert_equals(item.error, undefined); // FF throws a SecurityError.
188 });
189 }, 'dragover items');
190
191 promise_test(() => {
192 return dragLeavePromise.then((dataTransfer) => {
193 assert_equals(dataTransfer.items.length, 1);
194 const item = dataTransfer.items[0];
195 assert_equals(item.kind, 'file');
196 assert_equals(item.type, 'text/plain'); // application/x-moz-file in FF
197 assert_equals(item.file, null); // FF returns the file's metadata.
198 assert_equals(item.data, undefined);
199 assert_equals(item.error, undefined); // FF throws a SecurityError.
200 });
201 }, 'dragleave items');
202
203 promise_test(() => {
204 return dropPromise.then((dataTransfer) => {
205 assert_equals(dataTransfer.items.length, 1);
206 const item = dataTransfer.items[0];
207 assert_equals(item.kind, 'file');
208 assert_equals(item.type, 'text/plain'); // application/x-moz-file in FF
209 assert_equals(item.error, undefined);
210 assert_equals(item.file.name, 'dragged-file.txt');
211 assert_equals(item.file.type, 'text/plain');
212 assert_equals(item.file.size, 21);
213 assert_equals(item.data, 'The test has FAILED.\n');
214 });
215 }, 'drop items');
216
217 </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