Skip to content

Commit fe1c7f3

Browse files
committed
Merge branch 'rikuayanokozy-fix-filedrophandler'
2 parents 2f34d6e + b15dc06 commit fe1c7f3

File tree

2 files changed

+37
-1
lines changed

2 files changed

+37
-1
lines changed

closure/goog/events/filedrophandler.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,14 @@ goog.events.FileDropHandler.prototype.onElemDragOver_ = function(e) {
196196
e.stopPropagation();
197197
// Allow the drop on the drop zone.
198198
var dt = e.getBrowserEvent().dataTransfer;
199-
dt.effectAllowed = 'all';
199+
200+
// IE bug #811625 (https://goo.gl/UWuxX0) will throw error SCRIPT65535
201+
// when attempting to set property effectAllowed on IE10+.
202+
// See more: https://github.com/google/closure-library/issues/485.
203+
try {
204+
dt.effectAllowed = 'all';
205+
} catch (e) {
206+
}
200207
dt.dropEffect = 'copy';
201208
}
202209
};

closure/goog/events/filedrophandler_test.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,3 +248,32 @@ function testPreventDropOutside() {
248248
// Assert also that the drop effect is set to 'none'.
249249
assertEquals('none', dt.dropEffect);
250250
}
251+
252+
function testEffectAllowedExceptionIsCaught() {
253+
var preventDefault = false;
254+
var expectedfiles = [{fileName: 'file1.jpg'}];
255+
var dt = {types: ['Files'], files: expectedfiles};
256+
257+
// We construct a mock DataTransfer object that define a setter will throw
258+
// SCRIPT65535 when attempt to set property effectAllowed to simulate IE Bug
259+
// #811625. See more: https://github.com/google/closure-library/issues/485.
260+
Object.defineProperty(dt, 'effectAllowed',
261+
{set: function(v) { throw new Error("SCRIPT65535"); }});
262+
263+
// Assert that default actions are prevented on dragenter.
264+
textarea.dispatchEvent(new goog.events.BrowserEvent({
265+
preventDefault: function() { preventDefault = true; },
266+
type: goog.events.EventType.DRAGENTER,
267+
dataTransfer: dt
268+
}));
269+
assertTrue(preventDefault);
270+
preventDefault = false;
271+
272+
// Assert that default actions are prevented on dragover.
273+
textarea.dispatchEvent(new goog.events.BrowserEvent({
274+
preventDefault: function() { preventDefault = true; },
275+
type: goog.events.EventType.DRAGOVER,
276+
dataTransfer: dt
277+
}));
278+
assertTrue(preventDefault);
279+
}

0 commit comments

Comments
 (0)