summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordharcourt@chromium.org <dharcourt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-18 03:11:25 +0000
committerdharcourt@chromium.org <dharcourt@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-18 03:11:25 +0000
commit29ba4e8e183d317620e75fc54f46c96e3ce7c061 (patch)
tree96da0056cf4d248abfe27f96fe0e7b6658daed4a
parent949742277751adcfccf5a7570c5c41f4b78f5f38 (diff)
downloadchromium_src-29ba4e8e183d317620e75fc54f46c96e3ce7c061.zip
chromium_src-29ba4e8e183d317620e75fc54f46c96e3ce7c061.tar.gz
chromium_src-29ba4e8e183d317620e75fc54f46c96e3ce7c061.tar.bz2
Throw exceptions when attempts are made to use localStorage in packaged apps.
BUG=130224 Review URL: https://chromiumcodereview.appspot.com/10832352 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@152232 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--chrome/renderer/resources/extensions/platform_app.js16
-rw-r--r--chrome/test/data/extensions/platform_apps/storage/test.js16
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();
+ }
}
]);