summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/editing/dnd/cross-document/003-1.html
blob: 2cefd83209a0bfb4451669d0804b7c0652c978a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<!DOCTYPE html>
<title>drag &amp; drop - cross-document data drop</title>
<style>
  body > div {
    height: 200px;
    width: 200px;
    background-color: blue;
  }
</style>

<script>
window.onload = function() {
  var blue = document.getElementsByTagName('div')[0], fails = [];
  blue.ondragover = blue.ondragenter = function(e) {
    e.preventDefault();
    e.dataTransfer.dropEffect = 'copy';
    if( !parent.evs[e.type] ) { parent.evs[e.type] = {}; }
    parent.evs[e.type].dataTransfer = e.dataTransfer;
    parent.evs[e.type].items = e.dataTransfer.items;
    parent.evs[e.type].types = e.dataTransfer.types;
    parent.evs[e.type].files = e.dataTransfer.files;
    if( parent.evs[e.type].dataTransfer != e.dataTransfer ) {
      fails[fails.length] = '.dataTransfer is not returning the same object during '+e.type;
    }
    if( !e.dataTransfer.items ) {
      fails[fails.length] = '.items is not returning anything during '+e.type;
    } else if( parent.evs[e.type].items !== e.dataTransfer.items ) {
      fails[fails.length] = '.items is not returning the same object during '+e.type;
    }
    if( !e.dataTransfer.types ) {
      fails[fails.length] = '.types is not returning anything during '+e.type;
    } else if( parent.evs[e.type].types !== e.dataTransfer.types ) {
      fails[fails.length] = '.types is not returning the same object during '+e.type;
    }
    if( !e.dataTransfer.files ) {
      fails[fails.length] = '.files is not returning anything during '+e.type;
    } else if( parent.evs[e.type].files !== e.dataTransfer.files ) {
      fails[fails.length] = '.files is not returning the same object during '+e.type;
    }
    //http://dev.w3.org/html5/spec/dnd.html#datatransfer
    //"The * attribute must return a * object associated with the DataTransfer object."
    //Note that it is associated with the DataTransfer object, *not* the data store
    //http://dev.w3.org/html5/spec/dnd.html#dragevent
    //"when a user agent is required to fire a DND event named e at an element, using a particular drag data store...
    //Let dataTransfer be a newly created DataTransfer object associated with the given drag data store."
    //A new DataTransfer object therefore means a new set of properties, not the same ones as last event
    if( parent.evs.dragstart.dataTransfer === e.dataTransfer ) {
      fails[fails.length] = '.dataTransfer is returning the same object during '+e.type+' as it did during dragstart';
    }
    if( e.dataTransfer.items && parent.evs.dragstart.items === e.dataTransfer.items ) {
      fails[fails.length] = '.items is returning the same object during '+e.type+' as it did during dragstart';
    }
    if( e.dataTransfer.types && parent.evs.dragstart.types === e.dataTransfer.types ) {
      fails[fails.length] = '.types is returning the same object during '+e.type+' as it did during dragstart';
    }
    if( e.dataTransfer.files && parent.evs.dragstart.files === e.dataTransfer.files ) {
      fails[fails.length] = '.files is returning the same object during '+e.type+' as it did during dragstart';
    }
  };
  blue.ondrop = function(e) {
    parent.evs[e.type] = {};
    parent.evs[e.type].dataTransfer = e.dataTransfer;
    parent.evs[e.type].items = e.dataTransfer.items;
    parent.evs[e.type].types = e.dataTransfer.types;
    parent.evs[e.type].files = e.dataTransfer.files;
    if( parent.evs[e.type].dataTransfer !== e.dataTransfer ) {
      fails[fails.length] = '.dataTransfer is not returning the same object during '+e.type;
    }
    if( !e.dataTransfer.items ) {
      fails[fails.length] = '.items is not returning anything during '+e.type;
    } else if( parent.evs[e.type].items !== e.dataTransfer.items ) {
      fails[fails.length] = '.items is not returning the same object during '+e.type;
    }
    if( !e.dataTransfer.types ) {
      fails[fails.length] = '.types is not returning anything during '+e.type;
    } else if( parent.evs[e.type].types !== e.dataTransfer.types ) {
      fails[fails.length] = '.types is not returning the same object during '+e.type;
    }
    if( !e.dataTransfer.files ) {
      fails[fails.length] = '.files is not returning anything during '+e.type;
    } else if( parent.evs[e.type].files !== e.dataTransfer.files ) {
      fails[fails.length] = '.files is not returning the same object during '+e.type;
    }
    if( parent.evs.dragstart.dataTransfer === e.dataTransfer ) {
      fails[fails.length] = '.dataTransfer is returning the same object during '+e.type+' as it did during dragstart';
    }
    if( e.dataTransfer.items && parent.evs.dragstart.items === e.dataTransfer.items ) {
      fails[fails.length] = '.items is returning the same object during '+e.type+' as it did during dragstart';
    }
    if( e.dataTransfer.types && parent.evs.dragstart.types === e.dataTransfer.types ) {
      fails[fails.length] = '.types is returning the same object during '+e.type+' as it did during dragstart';
    }
    if( e.dataTransfer.files && parent.evs.dragstart.files === e.dataTransfer.files ) {
      fails[fails.length] = '.files is returning the same object during '+e.type+' as it did during dragstart';
    }
    document.getElementsByTagName('p')[0].innerHTML = fails.length ? ( 'FAIL:<br>' + fails.join('<br>') ) : 'PASS';
  };
};
</script>

<p>Drag the orange square onto the blue square. Fail if this text does not change.</p>
<div></div>

<noscript><p>Enable JavaScript and reload</p></noscript>