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

Unified Diff: chrome/renderer/resources/extension_process_bindings.js

Issue 6480033: Implement experimental.contentSettings.misc.blockThirdPartyCookies. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix sort order Created 9 years, 10 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/renderer/resources/extension_process_bindings.js
diff --git a/chrome/renderer/resources/extension_process_bindings.js b/chrome/renderer/resources/extension_process_bindings.js
index 35d516e5db3f1f7b32ce008cb90cd522cd61a8b5..3b16c59931b8175da60f5c287223bdaadae4e638 100644
--- a/chrome/renderer/resources/extension_process_bindings.js
+++ b/chrome/renderer/resources/extension_process_bindings.js
@@ -39,8 +39,15 @@ var chrome = chrome || {};
if (!chrome)
chrome = {};
+ function forEach(dict, f) {
+ for (key in dict) {
+ if (dict.hasOwnProperty(key))
+ f(key, dict[key]);
+ }
+ }
+
// Validate arguments.
- chromeHidden.validationTypes = [];
+ chromeHidden.validationTypes = {};
chromeHidden.validate = function(args, schemas) {
if (args.length > schemas.length)
throw new Error("Too many arguments.");
@@ -48,7 +55,9 @@ var chrome = chrome || {};
for (var i = 0; i < schemas.length; i++) {
if (i in args && args[i] !== null && args[i] !== undefined) {
var validator = new chromeHidden.JSONSchemaValidator();
- validator.addTypes(chromeHidden.validationTypes);
+ forEach(chromeHidden.validationTypes, function(id, type) {
+ validator.addTypes(type);
+ });
validator.validate(args[i], schemas[i]);
if (validator.errors.length == 0)
continue;
@@ -366,6 +375,48 @@ var chrome = chrome || {};
};
}
+ function setupPreferences() {
Aaron Boodman 2011/02/11 18:33:19 You are now the second person (along with mpcomple
Aaron Boodman 2011/02/14 02:54:02 Did you see this comment?
+ // We declare the constructor so that a Preference shows up as such in the
+ // Javascript console, but build the Preference in a separate function so
+ // that an extension can't construct arbitrary Preference objects.
+ function Preference() {
+ };
+
+ var parameters = {};
+ chromeHidden.validationTypes['Preference'].functions.forEach(function(f) {
+ parameters[f.name] = f.parameters;
+ });
+
+ function buildPreference(prefKey, valueSchema) {
+ var pref = new Preference();
+ var getSchema = parameters.get;
+ var extendedGetSchema = getSchema.slice();
+ extendedGetSchema.unshift({'type': 'string'});
+ pref.get = function(details, callback) {
+ chromeHidden.validate([details, callback], getSchema);
+ return sendRequest('experimental.preferences.get',
+ [prefKey, details, callback],
+ extendedGetSchema);
+ };
+ var setSchema = parameters.set;
+ var extendedSetSchema = setSchema.slice();
+ extendedSetSchema.unshift({'type': 'string'});
+ extendedSetSchema[1].properties.value = valueSchema;
+ pref.set = function(details, callback) {
+ chromeHidden.validate([details, callback], setSchema);
+ return sendRequest('experimental.preferences.set',
+ [prefKey, details, callback],
+ extendedSetSchema);
+ };
+ return pref;
+ }
+
+ // TODO(bauerb): Automatically instantiate these preferences
+ // from chrome/common/extensions/api/extension_api.json.
+ chrome.experimental.contentSettings.misc.blockThirdPartyCookies =
+ buildPreference('blockThirdPartyCookies', {'type':'boolean'});
+ }
+
chromeHidden.onLoad.addListener(function (extensionId) {
if (!extensionId) {
return;
@@ -396,7 +447,7 @@ var chrome = chrome || {};
// Add types to global validationTypes
if (apiDef.types) {
apiDef.types.forEach(function(t) {
- chromeHidden.validationTypes.push(t);
+ chromeHidden.validationTypes[t.id] = t;
});
}
@@ -458,11 +509,7 @@ var chrome = chrome || {};
// Parse any values defined for properties.
if (apiDef.properties) {
- for (var prop in apiDef.properties) {
- if (!apiDef.properties.hasOwnProperty(prop))
- continue;
-
- var property = apiDef.properties[prop];
+ forEach(apiDef.properties, function(prop, property) {
if (property.value) {
var value = property.value;
if (property.type === 'integer') {
@@ -475,7 +522,7 @@ var chrome = chrome || {};
}
module[prop] = value;
}
- }
+ });
}
// getTabContentses is retained for backwards compatibility
@@ -798,6 +845,7 @@ var chrome = chrome || {};
setupHiddenContextMenuEvent(extensionId);
setupOmniboxEvents();
setupTtsEvents();
+ setupPreferences();
});
if (!chrome.experimental)

Powered by Google App Engine
This is Rietveld 408576698