<!DOCTYPE html>
<html>
<head>
<title>New document without browsing context must not have a registry</title>
<meta name="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru">
<meta name="author" title="Sergey G. Grekhov" href="mailto:sgrekhov@unipro.ru">
<meta name="assert" content="In all other cases, new documents must not have a registry.">
<link rel="help" href="http://www.w3.org/TR/custom-elements/#creating-and-passing-registries">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../testcommon.js"></script>
<link rel="stylesheet" href="/resources/testharness.css">
</head>
<body>
<div id="log"></div>
<script>
test(function() {
    var doc = document.implementation.createDocument(null, 'test', null);
    assert_throws(
        'NotSupportedError',
        function() { doc.registerElement('x-element'); },
        'Registering valid custom element in a document ' +
            'without registry should fail');
}, 'Document of type other than HTML, not loaded into browsing context, must not have a registry');

async_test(function(t) {
    var request = new XMLHttpRequest();
    request.onreadystatechange = t.step_func(function() {
        if (request.readyState == 4){
            assert_equals(200, request.status, 'Test document is not loaded correctly');
            var doc = request.response;
            assert_true(doc instanceof HTMLDocument,
                'XMLHttpRequest\'s asynchronous response should be HTML document');
            assert_throws(
                'NotSupportedError',
                function() { doc.registerElement('x-element'); },
                'Registering valid custom element in ' +
                    'an XMLHttpRequest\'s response document should fail');
            t.done();
        }
    });

    request.open('GET', '../resources/blank.html', true);
    request.responseType = 'document';
    request.send();
}, 'XMLHttpRequest\'s asynchronous response HTML document must not have a registry');
</script>
</body>
</html>
