3f680c4c39782e1f04bab6db2df3fa2be23549c2
[WebKit-https.git] / LayoutTests / fast / dom / unregister-protocol-handler.html
1 <html>
2 <body>
3 <p>This test makes sure that navigator.unregisterProtocolHandler throws the proper exceptions and has no-op default implementation.</p>
4 <pre id="console"></pre>
5 <script>
6 if (window.testRunner)
7     testRunner.dumpAsText();
8
9 function debug(str)
10 {
11     var c = document.getElementById('console')
12     c.appendChild(document.createTextNode(str + '\n'));
13 }
14
15 if (window.navigator.unregisterProtocolHandler)
16     debug('Pass: window.navigator.unregisterProtocolHandler is defined.');
17 else
18     debug('Fail: window.navigator.unregisterProtocolHandler is not defined.');
19
20 var invalid_protocols = ['http', 'https', 'file'];
21 invalid_protocols.forEach(function (protocol) {
22     var succeeded = false;
23     try {
24         window.navigator.unregisterProtocolHandler(protocol, "invalid protocol %s", "title");
25     } catch (e) {
26         succeeded = 'SecurityError' == e.name;
27     }
28
29     if (succeeded)
30         debug('Pass: Invalid protocol "' + protocol + '" threw SecurityError exception.');
31     else
32         debug('Fail: Invalid protocol "' + protocol + '" allowed.');
33 });
34
35 var valid_protocols = ['irc', 'geo', 'mailto', 'magnet', 'mms', 'news', 'nntp', 'sip', 'sms', 'smsto', 'ssh', 'tel', 'urn', 'webcal', 'xmpp'];
36 valid_protocols.forEach(function (protocol) {
37     var succeeded = false;
38     try {
39         window.navigator.unregisterProtocolHandler(protocol, "valid protocol %s", "title");
40         succeeded = true;
41     } catch (e) {
42         succeeded = false;
43     }
44
45     if (succeeded)
46         debug('Pass: Valid protocol "' + protocol + '" allowed.');
47     else
48         debug('Fail: Valid protocol "' + protocol + '" failed.');
49 });
50
51 var invalid_urls = ["", "%S"];
52 invalid_urls.forEach(function (url) {
53    var succeeded = false;
54    try {
55         window.navigator.unregisterProtocolHandler('web+myprotocol', url, 'title');
56     } catch (e) {
57         succeeded = 'SyntaxError' == e.name;
58     }
59
60     if (succeeded)
61         debug('Pass: Invalid url "' + url + '" threw SyntaxError exception.');
62     else
63         debug('Fail: Invalid url "' + url + '" allowed.');
64 });
65
66 // Test that the API has default no-op implementation.
67 var succeeded = true;
68 try {
69     window.navigator.unregisterProtocolHandler('web+myprotocol', "%s", "title");
70 } catch (e) {
71     succeeded = false;
72 }
73
74 if (succeeded)
75     debug('Pass: Valid call succeeded.');
76 else
77     debug('Fail: Invalid call did not succeed.');
78 </script>
79 </body>
80 </html>