Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / http / tests / navigatorcontentutils / unregister-protocol-handler.html
1 <html>
2 <head>
3 <script src="/js-test-resources/js-test.js"></script>
4 </head>
5 <body>
6 <p>This test makes sure that navigator.unregisterProtocolHandler throws the proper exceptions and has no-op default implementation.</p>
7 <pre id="console"></pre>
8 <script>
9 if (window.internals)
10     internals.setNavigatorContentUtilsClientMock(document);
11
12 if (window.navigator.unregisterProtocolHandler)
13     debug('PASS window.navigator.unregisterProtocolHandler is defined.');
14 else
15     debug('FAIL window.navigator.unregisterProtocolHandler is not defined.');
16
17 var invalid_schemes = ['http', 'https', 'file', 'web+'];
18 invalid_schemes.forEach(function (scheme) {
19     var succeeded = false;
20     try {
21         window.navigator.unregisterProtocolHandler(scheme, "invalid scheme %s", "title");
22     } catch (e) {
23         succeeded = 'SecurityError' == e.name;
24         errorMessage = e.message;
25     }
26
27     if (succeeded)
28         debug('PASS Invalid scheme "' + scheme + '" threw SecurityError exception: "' + errorMessage + '".');
29     else
30         debug('FAIL Invalid scheme "' + scheme + '" allowed.');
31 });
32
33 var valid_schemes = ['bitcoin', 'BitcoIn', 'geo', 'im', 'irc', 'Irc', 'ircs', 'magnet', 'MagneT', 'mailto', 'mms', 'news', 'nntp', 'sip', 'sms', 'smsto', 'SmsTo', 'ssh', 'tel', 'urn', 'webcal', 'WebCAL', 'wtai', 'WTAI', 'xmpp'];
34 valid_schemes.forEach(function (scheme) {
35     var succeeded = false;
36     try {
37         window.navigator.unregisterProtocolHandler(scheme, "valid scheme %s", "title");
38         succeeded = true;
39     } catch (e) {
40         succeeded = false;
41     }
42
43     if (succeeded)
44         debug('PASS Valid scheme "' + scheme + '" allowed.');
45     else
46         debug('FAIL Valid scheme "' + scheme + '" failed.');
47 });
48
49 var invalid_schemes = ['mailto:', 'ssh:/', 'magnet:+', 'tel:sip'];
50 invalid_schemes.forEach(function (scheme) {
51     var succeeded = false;
52     try {
53         window.navigator.unregisterProtocolHandler(scheme, 'invalid scheme uri=%s', 'title');
54     } catch (e) {
55         succeeded = 'SecurityError' == e.name;
56         errorMessage = e.message;
57     }
58
59     if (succeeded)
60         debug('PASS Invalid scheme "' + scheme + '" falied.');
61     else
62         debug('Fail: Invalid scheme "' + scheme + '" allowed. Threw exception: "' + errorMessage + '".');
63 });
64
65 var invalid_urls = ["", "%S"];
66 invalid_urls.forEach(function (url) {
67    var succeeded = false;
68    try {
69         window.navigator.unregisterProtocolHandler('web+myscheme', url, 'title');
70     } catch (e) {
71         succeeded = 'SyntaxError' == e.name;
72         errorMessage = e.message;
73     }
74
75     if (succeeded)
76         debug('PASS Invalid url "' + url + '" threw SyntaxError exception.' + errorMessage + '".');
77     else
78         debug('FAIL Invalid url "' + url + '" allowed.');
79 });
80
81 // Test that the API throws SecurityError exception if the URL's origin differs from the document's origin.
82 succeeded = false;
83 var errorMessage;
84 try {
85     window.navigator.unregisterProtocolHandler('web+myprotocol', "http://www.example.com/soup?url=%s", "title");
86 } catch (e) {
87     succeeded = true;
88     errorMessage = e.message;
89 }
90
91 if (succeeded)
92     debug('PASS URL with origin different than document origin threw SecurityError exception: "' + errorMessage + '".');
93 else
94     debug('FAIL URL with origin different than document origin is allowed.');
95
96 // Test that the API has default no-op implementation.
97 var succeeded = true;
98 try {
99     window.navigator.unregisterProtocolHandler('web+myscheme', "%s", "title");
100 } catch (e) {
101     succeeded = false;
102 }
103
104 if (succeeded)
105     debug('PASS Valid call succeeded.');
106 else
107     debug('FAIL Invalid call did not succeed.');
108
109 // Check if unregisterProtocolHandler can unregister scheme.
110 debug("\nCheck if unregisterProtocolHandler can unregister scheme correctly. If isProtocolHandlerRegistered() returns 'new' state, unregisterProtoclHandler() works well.");
111 debug("'bitcoin' scheme will be registered and unregistered for testing.\n");
112 try {
113     // Register 'bitcoin' scheme for testing.
114     window.navigator.registerProtocolHandler('bitcoin', 'invalid scheme uri=%s', 'title');
115     var state = window.navigator.isProtocolHandlerRegistered('bitcoin', 'valid scheme %s');
116     if (state == "registered")
117         debug("PASS window.navigator.isProtocolHandlerRegistered returns 'registered' state. 'bitcoin' is registered successfully.");
118     else if (state == "new")
119         debug("FAIL window.navigator.isProtocolHandlerRegistered returns 'new' state. Fail to register 'bitcoin' scheme.");
120     else if (state == "declined")
121         debug("FAIL window.navigator.isProtocolHandlerRegistered returns 'declined' state. Fail to register 'bitcoin' scheme.");
122
123     window.navigator.unregisterProtocolHandler('bitcoin', 'invalid scheme uri=%s');
124     var state = window.navigator.isProtocolHandlerRegistered('bitcoin', 'valid scheme %s');
125     if (state == "new")
126         debug("PASS window.navigator.isProtocolHandlerRegistered returns 'new' state. 'bitcoin' is unregistered successfully.");
127     else if (state == "registered")
128         debug("FAIL window.navigator.isProtocolHandlerRegistered returns 'registered' state. Fail to unregister 'bitcoin' scheme.");
129     else if (state == "declined")
130         debug("FAIL window.navigator.isProtocolHandlerRegistered returns 'declined' state. Fail to unregister 'bitcoin' scheme.");
131 } catch (e) {
132     debug('FAIL window.navigator.isProtocolHandlerRegistered call is failed: "' + e.message + '".');
133 }
134 debug("\n");
135
136 </script>
137 </body>
138 </html>