| Index: LayoutTests/imported/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/content.html
|
| diff --git a/LayoutTests/imported/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/content.html b/LayoutTests/imported/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/content.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..40d43c81112d60e8ad933c51667314aa44b583a2
|
| --- /dev/null
|
| +++ b/LayoutTests/imported/web-platform-tests/html/webappapis/system-state-and-capabilities/the-navigator-object/content.html
|
| @@ -0,0 +1,136 @@
|
| +<!DOCTYPE html>
|
| +<meta charset='utf-8'>
|
| +<title>registerContentHandler()</title>
|
| +
|
| +<script src='../../../../../../resources/testharness.js'></script>
|
| +<script src='../../../../../../resources/testharnessreport.js'></script>
|
| +
|
| +<noscript><p>Enable JavaScript and reload.</p></noscript>
|
| +
|
| +<p><strong>Note:</strong> If your browser limits the number of handler
|
| +registration requests on a page, you might need to disable or significantly
|
| +increase that limit for the tests below to run.</p>
|
| +
|
| +
|
| +<div id='log'></div>
|
| +
|
| +<script>
|
| +test(function () {
|
| + assert_idl_attribute(navigator, 'registerContentHandler');
|
| +}, 'the registerContentHandler method should exist on the navigator object');
|
| +
|
| +/* Happy path */
|
| +test(function () {
|
| + navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s', 'foo');
|
| +}, 'a handler with valid arguments should work');
|
| +
|
| +
|
| +/* URL argument */
|
| +test(function () {
|
| + navigator.registerContentHandler('text/x-unknown-type', '%s', 'foo');
|
| +}, 'a relative URL should work');
|
| +
|
| +test(function () {
|
| + navigator.registerContentHandler('text/x-unknown-type', location.href + '#%s', 'foo');
|
| +}, 'a URL with a fragment identifier should work');
|
| +
|
| +test(function () {
|
| + navigator.registerContentHandler('text/x-unknown-type', location.href + '?foo=%s', 'foo');
|
| +}, 'a URL with a query string should work');
|
| +
|
| +test(function () {
|
| + navigator.registerContentHandler('text/x-unknown-type', location.href + '?foo=%s&bar', 'foo');
|
| +}, 'a URL with a multi-argument query string should work');
|
| +
|
| +test(function () {
|
| + navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/bar/baz/', 'foo');
|
| +}, 'a URL with the passed string as a directory name should work');
|
| +
|
| +test(function () {
|
| + navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/bar/baz/?foo=1337&bar#baz', 'foo');
|
| +}, 'a URL with the passed string as a directory name followed by a query string and fragment identifier should work');
|
| +
|
| +test(function () {
|
| + navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/foo/%s/', 'foo');
|
| +}, 'a URL with the passed string included twice should work');
|
| +
|
| +test(function () {
|
| + assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', '', 'foo') } );
|
| +}, 'an empty url argument should throw SYNTAX_ERR');
|
| +
|
| +test(function () {
|
| + assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://%s.com', 'foo') } );
|
| +}, '%s instead of domain name should throw SYNTAX_ERR');
|
| +
|
| +test(function () {
|
| + assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://%s.example.com', 'foo') } );
|
| +}, '%s instead of subdomain name should throw syntax_err');
|
| +
|
| +test(function () {
|
| + assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '', 'foo') } );
|
| +}, 'a url argument without %s should throw SYNTAX_ERR');
|
| +
|
| +test(function () {
|
| + assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://example.com', 'foo') } );
|
| +}, 'a url argument pointing to a different domain name, without %s should throw SYNTAX_ERR');
|
| +
|
| +test(function () {
|
| + assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '/%', 'foo') } );
|
| +}, 'a url argument without %s (but with %) should throw SYNTAX_ERR');
|
| +
|
| +test(function () {
|
| + assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '/%a', 'foo') } );
|
| +}, 'a url argument without %s (but with %a) should throw SYNTAX_ERR');
|
| +
|
| +test(function () {
|
| + assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://example.com/%s', 'foo') } );
|
| +}, 'a url argument pointing to a different domain name should throw SECURITY_ERR');
|
| +
|
| +test(function () {
|
| + assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'https://example.com/%s', 'foo') } );
|
| +}, 'a url argument pointing to a different domain name should throw SECURITY_ERR (2)');
|
| +
|
| +test(function () {
|
| + assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://foobar.example.com/%s', 'foo') } );
|
| +}, 'a url argument pointing to a different domain name should throw SECURITY_ERR (3)');
|
| +
|
| +/* Content type argument */
|
| +
|
| +/* The following MIME types are handled natively by the browser, and must not
|
| + * be possible to override. Note that this list only covers a few basic content
|
| + * types. Full lists of content types handled by each browser is found under
|
| + * /vendor/. */
|
| +
|
| +var blacklist = new Array(
|
| + 'image/jpeg',
|
| + 'text/html',
|
| + 'text/javascript',
|
| + 'text/plain');
|
| +
|
| +for (var bi=0, bl=blacklist.length; bi<bl; ++bi){
|
| +
|
| + test(function () {
|
| + assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler(blacklist[bi], location.href + '/%s', 'foo') } );
|
| + }, 'attempting to override the ' + blacklist[bi] + ' MIME type should throw SECURITY_ERR');
|
| +
|
| +}
|
| +
|
| +/* Overriding the following MIME types should be possible. */
|
| +var whitelist = new Array('application/atom+xml', /* For feeds. */
|
| + 'application/rss+xml', /* For feeds. */
|
| + 'application/x-unrecognized', /* Arbitrary MIME types should be overridable. */
|
| + 'text/unrecognized',
|
| + 'foo/bar');
|
| +
|
| +for (var wi=0, wl=whitelist.length; wi<wl; ++wi){
|
| +
|
| + test(function () {
|
| + navigator.registerContentHandler(whitelist[wi], location.href + '/%s', 'foo');
|
| + }, 'overriding the ' + whitelist[wi] + ' MIME type should work');
|
| +
|
| +}
|
| +
|
| +</script>
|
| +
|
| +</body>
|
| +</html>
|
|
|