Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1423)

Unified Diff: chrome/test/data/extensions/platform_apps/restrictions/main.js

Issue 120733003: Feature detection-friendly restrictions for packaged apps. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed feedback. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/data/extensions/platform_apps/restrictions/main.js
diff --git a/chrome/test/data/extensions/platform_apps/restrictions/main.js b/chrome/test/data/extensions/platform_apps/restrictions/main.js
index 0176ff1a1eb1b68ca39a1296003e859fa9380c5f..39fa4b72a32a33a48e70de0e1b1c40a58f502c87 100644
--- a/chrome/test/data/extensions/platform_apps/restrictions/main.js
+++ b/chrome/test/data/extensions/platform_apps/restrictions/main.js
@@ -26,30 +26,48 @@ function assertThrowsError(method, opt_expectedError) {
}
chrome.test.runTests([
- function testDocument() {
- assertThrowsError(document.open);
- assertThrowsError(document.clear);
- assertThrowsError(document.close);
+ function testDocumentBenignMethods() {
+ // The real document.open returns a document.
+ assertEq('undefined', typeof(document.open()));
+
+ // document.clear() has been deprecated on the Web as well, so there is no
+ // good method of testing that the method has been stubbed. We have to
+ // settle for testing that calling the method doesn't throw.
+ assertEq('undefined', typeof(document.clear()));
+
+ // document.close() doesn't do anything on its own, so there is good method
+ // of testing that it has been stubbed. Settle for making sure it doesn't
+ // throw.
+ assertEq('undefined', typeof(document.close()));
+
+ succeed();
+ },
+
+ function testDocumentEvilMethods() {
assertThrowsError(document.write);
assertThrowsError(document.writeln);
- assertThrowsError(function() {document.all;});
- assertThrowsError(function() {document.bgColor;});
- assertThrowsError(function() {document.fgColor;});
- assertThrowsError(function() {document.alinkColor;});
- assertThrowsError(function() {document.linkColor;});
- assertThrowsError(function() {document.vlinkColor;});
+ succeed();
+ },
+
+ function testDocumentGetters() {
+ assertEq('undefined', typeof(document.all));
+ assertEq('undefined', typeof(document.bgColor));
+ assertEq('undefined', typeof(document.fgColor));
+ assertEq('undefined', typeof(document.alinkColor));
+ assertEq('undefined', typeof(document.linkColor));
+ assertEq('undefined', typeof(document.vlinkColor));
succeed();
},
function testHistory() {
- // These are replaced by wrappers that throws exceptions.
- assertThrowsError(history.back);
- assertThrowsError(history.forward);
- assertThrowsError(function() {history.length;});
+ // Accessing these logs warnings to the console.
+ assertEq('undefined', typeof(history.back));
+ assertEq('undefined', typeof(history.forward));
+ assertEq('undefined', typeof(history.length));
- // These are part of the HTML5 History API that is feature detected, so we
+ // These are part of the HTML5 History API that are feature detected, so we
// remove them altogether, allowing apps to have fallback behavior.
chrome.test.assertFalse('pushState' in history);
chrome.test.assertFalse('replaceState' in history);
@@ -59,30 +77,30 @@ chrome.test.runTests([
},
function testWindowFind() {
- assertThrowsError(Window.prototype.find);
- assertThrowsError(window.find);
- assertThrowsError(find);
+ assertEq('undefined', typeof(Window.prototype.find('needle')));
+ assertEq('undefined', typeof(window.find('needle')));
+ assertEq('undefined', typeof(find('needle')));
succeed();
},
function testWindowAlert() {
- assertThrowsError(Window.prototype.alert);
- assertThrowsError(window.alert);
- assertThrowsError(alert);
+ assertEq('undefined', typeof(Window.prototype.alert()));
+ assertEq('undefined', typeof(window.alert()));
+ assertEq('undefined', typeof(alert()));
succeed();
},
function testWindowConfirm() {
- assertThrowsError(Window.prototype.confirm);
- assertThrowsError(window.confirm);
- assertThrowsError(confirm);
+ assertEq('undefined', typeof(Window.prototype.confirm('Failed')));
+ assertEq('undefined', typeof(window.confirm('Failed')));
+ assertEq('undefined', typeof(confirm('Failed')));
succeed();
},
function testWindowPrompt() {
- assertThrowsError(Window.prototype.prompt);
- assertThrowsError(window.prompt);
- assertThrowsError(prompt);
+ assertEq('undefined', typeof(Window.prototype.prompt('Failed')));
+ assertEq('undefined', typeof(window.prompt('Failed')));
+ assertEq('undefined', typeof(prompt('Failed')));
succeed();
},
@@ -90,29 +108,31 @@ chrome.test.runTests([
var bars = ['locationbar', 'menubar', 'personalbar',
'scrollbars', 'statusbar', 'toolbar'];
for (var x = 0; x < bars.length; x++) {
- assertThrowsError(function() {
- var visible = this[bars[x]].visible;
- visible = window[bars[x]].visible;
- });
+ assertEq('undefined', typeof(this[bars[x]]));
+ assertEq('undefined', typeof(window[bars[x]]));
}
succeed();
},
function testBlockedEvents() {
- var eventHandler = function() { fail('event handled'); };
+ // Fails the test if called by dispatchEvent().
+ var eventHandler = function() { fail('blocked event handled'); };
+
var blockedEvents = ['unload', 'beforeunload'];
for (var i = 0; i < blockedEvents.length; ++i) {
- assertThrowsError(function() {
- window['on' + blockedEvents[i]] = eventHandler;
- });
- assertThrowsError(function() {
- window.addEventListener(blockedEvents[i], eventHandler);
- });
- assertThrowsError(function() {
- Window.prototype.addEventListener.apply(window,
- [blockedEvents[i], eventHandler]);
- });
+ window['on' + blockedEvents[i]] = eventHandler;
+ assertEq(undefined, window['on' + blockedEvents[i]]);
+
+ var event = new Event(blockedEvents[i]);
+ window.addEventListener(blockedEvents[i], eventHandler);
+ // Ensures that addEventListener did not actually register the handler.
+ // If eventHandler is registered as a listener, it will be called by
+ // dispatchEvent() and the test will fail.
+ window.dispatchEvent(event);
+ Window.prototype.addEventListener.apply(window,
+ [blockedEvents[i], eventHandler]);
+ window.dispatchEvent(event);
}
succeed();
@@ -132,7 +152,7 @@ chrome.test.runTests([
function testIframe() {
var iframe = document.createElement('iframe');
iframe.onload = function() {
- assertThrowsError(iframe.contentWindow.alert);
+ assertThrowsError(iframe.contentWindow.document.write);
succeed();
};
iframe.src = 'iframe.html';

Powered by Google App Engine
This is Rietveld 408576698