Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / test / data / extensions / platform_apps / restrictions / main.js
blobcd7ddd5d9283d6a758d9b7ee2f13016ebb3e7600
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 var assertEq = chrome.test.assertEq;
6 var assertTrue = chrome.test.assertTrue;
7 var fail = chrome.test.fail;
8 var succeed = chrome.test.succeed;
10 function assertThrowsError(method, opt_expectedError) {
11   try {
12     method();
13   } catch (e) {
14     var message = e.message || e;
15     if (opt_expectedError) {
16       assertEq(opt_expectedError, e.name);
17     } else {
18       assertTrue(
19           message.indexOf('is not available in packaged apps') != -1,
20           'Unexpected message ' + message);
21     }
22     return;
23   }
25   fail('error not thrown');
28 chrome.test.runTests([
29   function testDocumentBenignMethods() {
30     // The real document.open returns a document.
31     assertEq('undefined', typeof(document.open()));
33     // document.clear() has been deprecated on the Web as well, so there is no
34     // good method of testing that the method has been stubbed. We have to
35     // settle for testing that calling the method doesn't throw.
36     assertEq('undefined', typeof(document.clear()));
38     // document.close() doesn't do anything on its own, so there is good method
39     // of testing that it has been stubbed. Settle for making sure it doesn't
40     // throw.
41     assertEq('undefined', typeof(document.close()));
43     succeed();
44   },
46   function testDocumentEvilMethods() {
47     assertThrowsError(document.write);
48     assertThrowsError(document.writeln);
50     succeed();
51   },
53   function testDocumentGetters() {
54     assertEq('undefined', typeof(document.all));
55     assertEq('undefined', typeof(document.bgColor));
56     assertEq('undefined', typeof(document.fgColor));
57     assertEq('undefined', typeof(document.alinkColor));
58     assertEq('undefined', typeof(document.linkColor));
59     assertEq('undefined', typeof(document.vlinkColor));
61     succeed();
62   },
64   function testHistory() {
65     // Accessing these logs warnings to the console.
66     assertEq('undefined', typeof(history.back));
67     assertEq('undefined', typeof(history.forward));
68     assertEq('undefined', typeof(history.go));
69     assertEq('undefined', typeof(history.length));
70     assertEq('undefined', typeof(history.pushState));
71     assertEq('undefined', typeof(history.replaceState));
72     assertEq('undefined', typeof(history.state));
73     succeed();
74   },
76   function testWindowFind() {
77     assertEq('undefined', typeof(Window.prototype.find('needle')));
78     assertEq('undefined', typeof(window.find('needle')));
79     assertEq('undefined', typeof(find('needle')));
80     succeed();
81   },
83   function testWindowAlert() {
84     assertEq('undefined', typeof(Window.prototype.alert()));
85     assertEq('undefined', typeof(window.alert()));
86     assertEq('undefined', typeof(alert()));
87     succeed();
88   },
90   function testWindowConfirm() {
91     assertEq('undefined', typeof(Window.prototype.confirm('Failed')));
92     assertEq('undefined', typeof(window.confirm('Failed')));
93     assertEq('undefined', typeof(confirm('Failed')));
94     succeed();
95   },
97   function testWindowPrompt() {
98     assertEq('undefined', typeof(Window.prototype.prompt('Failed')));
99     assertEq('undefined', typeof(window.prompt('Failed')));
100     assertEq('undefined', typeof(prompt('Failed')));
101     succeed();
102   },
104   function testBars() {
105     var bars = ['locationbar', 'menubar', 'personalbar',
106                 'scrollbars', 'statusbar', 'toolbar'];
107     for (var x = 0; x < bars.length; x++) {
108       assertEq('undefined', typeof(this[bars[x]]));
109       assertEq('undefined', typeof(window[bars[x]]));
110     }
111     succeed();
112   },
114   function testBlockedEvents() {
115     // Fails the test if called by dispatchEvent().
116     var eventHandler = function() { fail('blocked event handled'); };
118     var blockedEvents = ['unload', 'beforeunload'];
120     for (var i = 0; i < blockedEvents.length; ++i) {
121       window['on' + blockedEvents[i]] = eventHandler;
122       assertEq(undefined, window['on' + blockedEvents[i]]);
124       var event = new Event(blockedEvents[i]);
125       window.addEventListener(blockedEvents[i], eventHandler);
126       // Ensures that addEventListener did not actually register the handler.
127       // If eventHandler is registered as a listener, it will be called by
128       // dispatchEvent() and the test will fail.
129       window.dispatchEvent(event);
130       Window.prototype.addEventListener.apply(window,
131           [blockedEvents[i], eventHandler]);
132       window.dispatchEvent(event);
133     }
135     succeed();
136   },
138   function testSyncXhr() {
139     var xhr = new XMLHttpRequest();
140     assertThrowsError(function() {
141       xhr.open('GET', 'data:should not load', false);
142     }, 'InvalidAccessError');
143     succeed();
144   },
146   /**
147    * Tests that restrictions apply to iframes as well.
148    */
149   function testIframe() {
150     var iframe = document.createElement('iframe');
151     iframe.onload = function() {
152       assertThrowsError(iframe.contentWindow.document.write);
153       succeed();
154     };
155     iframe.src = 'iframe.html';
156     document.body.appendChild(iframe);
157   },
159   /**
160    * Tests that restrictions apply to sandboxed iframes.
161    */
162   function testSandboxedIframe() {
163     function handleWindowMessage(e) {
164       if (e.data.success)
165         succeed();
166       else
167         fail(e.data.reason);
168     };
169     window.addEventListener('message', handleWindowMessage);
171     var iframe = document.createElement('iframe');
172     iframe.src = 'sandboxed_iframe.html';
173     document.body.appendChild(iframe);
174   },
176   function testLegacyApis() {
177     if (chrome.app) {
178       assertEq('undefined', typeof(chrome.app.getIsInstalled));
179       assertEq('undefined', typeof(chrome.app.isInstalled));
180       assertEq('undefined', typeof(chrome.app.getDetails));
181       assertEq('undefined', typeof(chrome.app.runningState));
182     }
183     assertEq('undefined', typeof(chrome.extension));
184     succeed();
185   },
187   function testExtensionApis() {
188     assertEq('undefined', typeof(chrome.tabs));
189     assertEq('undefined', typeof(chrome.windows));
190     succeed();
191   }