| <!doctype html> |
| <html> |
| <head> |
| <title>.origin for all events</title> |
| <style type="text/css"> |
| blockquote { height: 100px; width: 100px; background: orange; margin: 0; padding: 0; float: left; } |
| blockquote + blockquote { background: blue; } |
| blockquote + blockquote + blockquote { background: fuchsia; } |
| blockquote + div { clear: left; } |
| </style> |
| <script type="text/javascript" src="../resources/crossorigin.sub.js"></script> |
| <script type="text/javascript" src="/resources/testharness.js"></script> |
| <script type="text/javascript"> |
| setup(function () {},{explicit_done:true}); |
| window.onload = function () { |
| var origin = 'http://'+httpHostMain; |
| if( location.href.indexOf(origin+'/') ) { |
| done(); |
| document.body.innerHTML = 'This must be tested on '+origin+'/'; |
| return; |
| } |
| var orange = document.getElementsByTagName('blockquote')[0], |
| blue = document.getElementsByTagName('blockquote')[1], |
| fuchsia = document.getElementsByTagName('blockquote')[2], |
| evtdone = {}; |
| orange.ondragstart = function (e) { |
| e.dataTransfer.effectAllowed = 'copy'; |
| e.dataTransfer.setData('text','dummy text'); |
| if( evtdone[e.type] ) { return; } |
| evtdone[e.type] = true; |
| test(function() { |
| assert_equals( e.dataTransfer.origin, origin ); |
| }, '.origin should exist in '+e.type ); |
| test(function () { |
| //WebIDL and ECMAScript 5 - a readonly property has a getter but not a setter |
| //ES5 makes [[Put]] fail but not throw |
| var failed = false, oldorigin = e.dataTransfer.origin; |
| try { |
| e.dataTransfer.origin = 'http://example.com'; |
| } catch(e) { |
| failed = e; |
| } |
| assert_equals(e.dataTransfer.origin,oldorigin); |
| assert_false(failed,'an error was thrown'); |
| }, '.origin must be read-only in '+e.type); |
| }; |
| blue.ondragenter = blue.ondragover = function (e) { |
| e.preventDefault(); |
| }; |
| orange.ondrag = blue.ondragleave = function (e) { |
| if( evtdone[e.type] ) { return; } |
| evtdone[e.type] = true; |
| test(function() { |
| assert_equals( e.dataTransfer.origin, origin ); |
| }, '.origin should exist in '+e.type ); |
| test(function () { |
| var failed = false, oldorigin = e.dataTransfer.origin; |
| try { |
| e.dataTransfer.origin = 'http://example.com'; |
| } catch(e) { |
| failed = e; |
| } |
| assert_equals(e.dataTransfer.origin,oldorigin); |
| assert_false(failed,'an error was thrown'); |
| }, '.origin must be read-only in '+e.type); |
| }; |
| fuchsia.ondragenter = fuchsia.ondragover = fuchsia.ondrop = function (e) { |
| e.preventDefault(); |
| if( evtdone[e.type] ) { return; } |
| evtdone[e.type] = true; |
| test(function() { |
| assert_equals( e.dataTransfer.origin, origin ); |
| }, '.origin should exist in '+e.type ); |
| test(function () { |
| var failed = false, oldorigin = e.dataTransfer.origin; |
| try { |
| e.dataTransfer.origin = 'http://example.com'; |
| } catch(e) { |
| failed = e; |
| } |
| assert_equals(e.dataTransfer.origin,oldorigin); |
| assert_false(failed,'an error was thrown'); |
| }, '.origin must be read-only in '+e.type); |
| }; |
| orange.ondragend = function (e) { |
| if( evtdone[e.type] ) { return; } |
| evtdone[e.type] = true; |
| test(function() { |
| assert_equals( e.dataTransfer.origin, origin ); |
| }, '.origin should exist in '+e.type ); |
| test(function () { |
| var failed = false, oldorigin = e.dataTransfer.origin; |
| try { |
| e.dataTransfer.origin = 'http://example.com'; |
| } catch(e) { |
| failed = e; |
| } |
| assert_equals(e.dataTransfer.origin,oldorigin); |
| assert_false(failed,'an error was thrown'); |
| }, '.origin must be read-only in '+e.type); |
| test(function() { |
| var failtxt = '- Reload and try again'; |
| assert_true( evtdone.dragstart, 'dragstart event was not tested'+failtxt ); |
| assert_true( evtdone.drag, 'drag event was not tested'+failtxt ); |
| assert_true( evtdone.dragenter, 'dragenter event was not tested'+failtxt ); |
| assert_true( evtdone.dragleave, 'dragleave event was not tested'+failtxt ); |
| assert_true( evtdone.dragover, 'dragover event was not tested'+failtxt ); |
| assert_true( evtdone.drop, 'drop event was not tested'+failtxt ); |
| assert_true( evtdone.dragend, 'dragend event was not tested'+failtxt ); |
| }, 'all event types must now have been tested' ); |
| done(); |
| }; |
| }; |
| </script> |
| </head> |
| <body> |
| <blockquote draggable="true"></blockquote> |
| <blockquote></blockquote> |
| <blockquote></blockquote> |
| <div id="log">Drag the orange square over the blue square then the fuchsia square, then release it.</div> |
| <noscript><p>Enable JavaScript and reload</p></noscript> |
| </body> |
| </html> |