diff --git a/ManualTests/data-transfer-items-file-dragout.html b/ManualTests/data-transfer-items-file-dragout.html
new file mode 100644
index 0000000..b76d25a
--- /dev/null
+++ b/ManualTests/data-transfer-items-file-dragout.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<html>
+<body>
+<p><b>BUG ID: 76367</b> <a href="http://bugs.webkit.org/show_bug.cgi?id=76367">Bugzilla bug </a> Add DataTransferItems support for drag-and-drop'ed files and texts</p>
+
+<p id="test" style="background-color:skyblue; padding:3px;"><b>STEPS TO TEST:</b> <br>
+1. Open the <a href="resources">$(WebKitRoot)/ManualTests/resources</a> folder in your native file browser.<br>
+2. Drag and drop the file 'test:lorem-text.html' into the 'Drop files here' area below.<br>
+3. Drag out <a href="#" id="dragout" draggable="true">this link</a> out of the browser window into a different folder in the native file browser).
+</p>
+
+<div id="destination" style="min-height:100px; margin: 5px; border: solid 1px black">Drop files here </div>
+
+<p id="success" style="background-color:palegreen; padding:3px;"><b>TEST PASS:</b>
+The same file you dropped in the step 2 should be dragged out to the folder in the step 3.  The file should have the same content and the same file name (i.e. 'test:lorem-text.html', make sure the prefix 'test:' is not dropped) as the dropped file.  (NOTE: this does not work for multiple files yet.)
+</p>
+
+<p id="failure" style="background-color:#FF3300; padding:3px;"><b>TEST FAIL:</b>
+Nothing happens or a different file from the dropped one (likely a text file with the page title) is dragged out.
+</p>
+<p id="console"></p>
+
+<script>
+function log(text)
+{
+    var console = document.getElementById('console');
+    console.appendChild(document.createTextNode(text));
+    console.appendChild(document.createElement('br'));
+}
+
+function test(expect, actual)
+{
+    log((expect == actual ? 'PASS' : 'FAIL') + ': "' + expect + '" == "' + actual + '"');
+}
+
+var destination = document.getElementById('destination');
+destination.addEventListener('dragover', handleDragOver, false);
+destination.addEventListener('drop', handleDrop, false);
+
+function handleDragOver(e)
+{
+    e.stopPropagation();
+    e.preventDefault();
+}
+
+function handleDrop(e)
+{
+    e.stopPropagation();
+    e.preventDefault();
+
+    log('Verifying contents of DataTransferItems...');
+    var items = e.dataTransfer.items;
+    var files = [];
+    test(1, items.length);
+
+    for (var i = 0; i < items.length; ++i) {
+        test('file', items[i].kind);
+        var file = items[i].getAsFile();
+        log('Dragged files: ' + file.name);
+        log('Dragged file size: ' + file.size);
+        files.push(file);
+    }
+
+    // Setting up dragout items.
+    log('Setting up dragging out with the dropped items...');
+    var source = document.getElementById('dragout');
+    source.addEventListener('dragstart', function(e) {
+        for (var i = 0; i < files.length; ++i) {
+            log('Dragging out ' + files[i].name);
+            e.dataTransfer.items.add(files[i]);
+        }
+    }, false);
+
+    log('Please dragout the link (noted in the step 3) and see if the same file you dropped in in the step 2 is properly drag out.');
+}
+
+</script>
+</body>
+</html>
