| Index: third_party/WebKit/LayoutTests/imported/wpt/uievents/order-of-events/focus-events/focus-automated-blink-webkit.html
 | 
| diff --git a/third_party/WebKit/LayoutTests/imported/wpt/uievents/order-of-events/focus-events/focus-automated-blink-webkit.html b/third_party/WebKit/LayoutTests/imported/wpt/uievents/order-of-events/focus-events/focus-automated-blink-webkit.html
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..41de4541366540ca189c3237cd2d5de0efb0f9ed
 | 
| --- /dev/null
 | 
| +++ b/third_party/WebKit/LayoutTests/imported/wpt/uievents/order-of-events/focus-events/focus-automated-blink-webkit.html
 | 
| @@ -0,0 +1,159 @@
 | 
| +<!DOCTYPE html>
 | 
| +<!-- Modified from Chris Rebert's manual version -->
 | 
| +<!-- This documents the behavior according to blink's implementation -->
 | 
| +<html>
 | 
| +  <head>
 | 
| +    <meta charset="utf-8">
 | 
| +    <title>Focus-related events should fire in the correct order</title>
 | 
| +    <link rel="help" href="https://w3c.github.io/uievents/#events-focusevent-event-order">
 | 
| +    <script src="/resources/testharness.js"></script>
 | 
| +    <script src="/resources/testharnessreport.js"></script>
 | 
| +  </head>
 | 
| +  <body id="body">
 | 
| +    <input type="text" id="a" value="First">
 | 
| +    <input type="text" id="b" value="Second">
 | 
| +    <br>
 | 
| +    <input type="text" id="c" value="Third">
 | 
| +    <iframe id="iframe">
 | 
| +    </iframe>
 | 
| +    <br>
 | 
| +    <script>
 | 
| +
 | 
| +    var test_id = 0;
 | 
| +    var tests = ['normal', 'iframe']
 | 
| +
 | 
| +    function record(evt) {
 | 
| +      if (done && (evt.type == 'focusin' || evt.type == 'focus') && (evt.target == c)) {
 | 
| +          startNext();
 | 
| +      }
 | 
| +      if (!done) {
 | 
| +          var activeElement = document.activeElement ?
 | 
| +            (document.activeElement.tagName === 'IFRAME' ?
 | 
| +            document.activeElement.contentDocument.activeElement.id :
 | 
| +            document.activeElement.id) : null;
 | 
| +          events[tests[test_id]].push(evt.type);
 | 
| +          targets[tests[test_id]].push(evt.target.id);
 | 
| +          focusedElements[tests[test_id]].push(activeElement);
 | 
| +          relatedTargets[tests[test_id]].push(evt.relatedTarget ? evt.relatedTarget.id : null);
 | 
| +      }
 | 
| +    }
 | 
| +    function startNext() {
 | 
| +        done = false;
 | 
| +        test_id++;
 | 
| +    }
 | 
| +    function finish() {
 | 
| +        done = true;
 | 
| +    }
 | 
| +    var relevantEvents = [
 | 
| +      'focus',
 | 
| +      'blur',
 | 
| +      'focusin',
 | 
| +      'focusout'
 | 
| +    ];
 | 
| +
 | 
| +    var iframe = document.getElementById('iframe');
 | 
| +    var a = document.getElementById('a');
 | 
| +    var b = document.getElementById('b');
 | 
| +    var c = document.getElementById('c');
 | 
| +    var d = document.createElement('input');
 | 
| +
 | 
| +    d.setAttribute('id', 'd');
 | 
| +    d.setAttribute('type', 'text');
 | 
| +    d.setAttribute('value', 'Fourth');
 | 
| +
 | 
| +    var events = {'normal': [], 'iframe': []};
 | 
| +    var targets = {'normal': [], 'iframe': []};
 | 
| +    var focusedElements = {'normal': [], 'iframe': []};
 | 
| +    var relatedTargets = {'normal': [], 'iframe': []};
 | 
| +    var done = false;
 | 
| +
 | 
| +    var async_test_normal = async_test('Focus-related events should fire in the correct order (same DocumentOwner)');
 | 
| +    var async_test_iframe_static = async_test('Focus-related events should fire in the correct order (different DocumentOwner)');
 | 
| +
 | 
| +    window.onload = function(evt) {
 | 
| +
 | 
| +        iframe.contentDocument.body.appendChild(d);
 | 
| +
 | 
| +        var inputs = [a, b, c, d];
 | 
| +
 | 
| +        for (var i = 0; i < inputs.length; i++) {
 | 
| +          for (var k = 0; k < relevantEvents.length; k++) {
 | 
| +            inputs[i].addEventListener(relevantEvents[k], record, false);
 | 
| +          }
 | 
| +        }
 | 
| +
 | 
| +        a.addEventListener('focusin', function() { b.focus(); }, false);
 | 
| +        b.addEventListener('focusin', function() {
 | 
| +            async_test_normal.step( function() {
 | 
| +                assert_array_equals(
 | 
| +                  events['normal'],
 | 
| +                  ['focus', 'focusin', 'blur', 'focusout', 'focus', 'focusin'],
 | 
| +                  'Focus-related events should fire in this order: focusin, focus, focusout, focusin, blur, focus'
 | 
| +                );
 | 
| +
 | 
| +                assert_array_equals(
 | 
| +                  targets['normal'],
 | 
| +                  [      'a',     'a',        'a',       'a',    'b',     'b'],
 | 
| +                  'Focus-related events should fire at the correct targets'
 | 
| +                );
 | 
| +
 | 
| +                assert_array_equals(
 | 
| +                  relatedTargets['normal'],
 | 
| +                  [    null,    null,         'b',       'b',    'a',     'a'],
 | 
| +                  'Focus-related events should reference correct relatedTargets'
 | 
| +                );
 | 
| +
 | 
| +                assert_array_equals(
 | 
| +                  focusedElements['normal'],
 | 
| +                  [   'a',     'a',        'body',    'body',    'b',     'b'],
 | 
| +                  'Focus-related events should fire at the correct time relative to actual focus changes'
 | 
| +                );
 | 
| +
 | 
| +                async_test_normal.done();
 | 
| +                });
 | 
| +
 | 
| +            b.addEventListener('focusout', function() { finish(); c.focus(); });
 | 
| +            b.blur();
 | 
| +
 | 
| +            }, false);
 | 
| +
 | 
| +        c.addEventListener('focusin', function() {d.focus();});
 | 
| +        d.addEventListener('focusin', function() {
 | 
| +            async_test_iframe_static.step(function() {
 | 
| +                assert_array_equals(
 | 
| +                  events['iframe'],
 | 
| +                  ['focus', 'focusin', 'blur', 'focusout', 'focus', 'focusin'],
 | 
| +                  'Focus-related events should fire in this order: focusin, focus, focusout, focusin, blur, focus'
 | 
| +                );
 | 
| +
 | 
| +                assert_array_equals(
 | 
| +                  targets['iframe'],
 | 
| +                  [      'c',     'c',        'c',       'c',    'd',     'd'],
 | 
| +                  'Focus-related events should fire at the correct targets'
 | 
| +                );
 | 
| +
 | 
| +                assert_array_equals(
 | 
| +                  relatedTargets['iframe'],
 | 
| +                  [    null,    null,        null,      null,   null,    null],
 | 
| +                  'Focus-related events should reference correct relatedTargets'
 | 
| +                );
 | 
| +
 | 
| +                assert_array_equals(
 | 
| +                  focusedElements['iframe'],
 | 
| +                  [   'c',     'c',        'body',      'body', 'd',     'd'],
 | 
| +                  'Focus-related events should fire at the correct time relative to actual focus changes'
 | 
| +                );
 | 
| +
 | 
| +                async_test_iframe_static.done();
 | 
| +                });
 | 
| +
 | 
| +            d.addEventListener('focusout', function() { finish();});
 | 
| +
 | 
| +          }, false);
 | 
| +
 | 
| +        a.focus();
 | 
| +    }
 | 
| +
 | 
| +    </script>
 | 
| +  </body>
 | 
| +</html>
 | 
| 
 |