diff options
-rw-r--r-- | chrome/renderer/resources/extensions/platform_app.js | 16 | ||||
-rw-r--r-- | chrome/test/data/extensions/platform_apps/storage/test.js | 16 |
2 files changed, 26 insertions, 6 deletions
diff --git a/chrome/renderer/resources/extensions/platform_app.js b/chrome/renderer/resources/extensions/platform_app.js index b9e0f2f..9415470 100644 --- a/chrome/renderer/resources/extensions/platform_app.js +++ b/chrome/renderer/resources/extensions/platform_app.js @@ -7,9 +7,11 @@ * * @param {string} messagePrefix text to prepend to the exception message. */ -function generateStub(messagePrefix) { +function generateStub(messagePrefix, opt_messageSuffix) { return function() { - throw messagePrefix + ' is not available in packaged apps.'; + var message = messagePrefix + ' is not available in packaged apps.'; + if (opt_messageSuffix) message = message + ' ' + opt_messageSuffix; + throw message; }; } @@ -41,10 +43,11 @@ function stubOutMethods(object, objectName, methodNames) { * to by web developers, e.g. "document" instead of "HTMLDocument"). * @param {Array.<string>} propertyNames property names */ -function stubOutGetters(object, objectName, propertyNames) { +function stubOutGetters(object, objectName, propertyNames, opt_messageSuffix) { propertyNames.forEach(function(propertyName) { object.__defineGetter__( - propertyName, generateStub(objectName + '.' + propertyName)); + propertyName, generateStub( + objectName + '.' + propertyName, opt_messageSuffix)); }); } @@ -75,6 +78,11 @@ stubOutGetters(window, 'window', ['locationbar', 'menubar', 'personalbar', 'scrollbars', 'statusbar', 'toolbar']); +// Disable window.localStorage. +stubOutGetters(window, 'window', + ['localStorage'], + 'Use chrome.storage.local instead.'); + // Disable onunload, onbeforeunload. Window.prototype.__defineSetter__( 'onbeforeunload', generateStub('onbeforeunload')); diff --git a/chrome/test/data/extensions/platform_apps/storage/test.js b/chrome/test/data/extensions/platform_apps/storage/test.js index 015517b..34efdca 100644 --- a/chrome/test/data/extensions/platform_apps/storage/test.js +++ b/chrome/test/data/extensions/platform_apps/storage/test.js @@ -2,6 +2,10 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +function assertContains(string, substring, error) { + chrome.test.assertTrue(string.indexOf(substring) != -1, error); +} + chrome.test.runTests([ function testOpenDatabase() { chrome.test.assertTrue(!window.openDatabase); @@ -14,7 +18,15 @@ chrome.test.runTests([ }, function testLocalStorage() { - chrome.test.assertTrue(!window.localStorage); - chrome.test.succeed(); + try { + window.localStorage; + chrome.test.fail('error not thrown'); + } catch (e) { + var message = e.message || e; + var expected = 'is not available in packaged apps. ' + + 'Use chrome.storage.local instead.'; + assertContains(message, expected, 'Unexpected message ' + message); + chrome.test.succeed(); + } } ]); |