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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This script contains privileged chrome extension related javascript APIs. 5 // This script contains privileged chrome extension related javascript APIs.
6 // It is loaded by pages whose URL has the chrome-extension protocol. 6 // It is loaded by pages whose URL has the chrome-extension protocol.
7 7
8 var chrome = chrome || {}; 8 var chrome = chrome || {};
9 (function() { 9 (function() {
10 native function GetExtensionAPIDefinition(); 10 native function GetExtensionAPIDefinition();
(...skipping 21 matching lines...) Expand all
32 return; 32 return;
33 } 33 }
34 chrome.initExtension(extensionId, false); 34 chrome.initExtension(extensionId, false);
35 }); 35 });
36 return; 36 return;
37 } 37 }
38 38
39 if (!chrome) 39 if (!chrome)
40 chrome = {}; 40 chrome = {};
41 41
42 function forEach(dict, f) {
43 for (key in dict) {
44 if (dict.hasOwnProperty(key))
45 f(key, dict[key]);
46 }
47 }
48
42 // Validate arguments. 49 // Validate arguments.
43 chromeHidden.validationTypes = []; 50 chromeHidden.validationTypes = {};
44 chromeHidden.validate = function(args, schemas) { 51 chromeHidden.validate = function(args, schemas) {
45 if (args.length > schemas.length) 52 if (args.length > schemas.length)
46 throw new Error("Too many arguments."); 53 throw new Error("Too many arguments.");
47 54
48 for (var i = 0; i < schemas.length; i++) { 55 for (var i = 0; i < schemas.length; i++) {
49 if (i in args && args[i] !== null && args[i] !== undefined) { 56 if (i in args && args[i] !== null && args[i] !== undefined) {
50 var validator = new chromeHidden.JSONSchemaValidator(); 57 var validator = new chromeHidden.JSONSchemaValidator();
51 validator.addTypes(chromeHidden.validationTypes); 58 forEach(chromeHidden.validationTypes, function(id, type) {
59 validator.addTypes(type);
60 });
52 validator.validate(args[i], schemas[i]); 61 validator.validate(args[i], schemas[i]);
53 if (validator.errors.length == 0) 62 if (validator.errors.length == 0)
54 continue; 63 continue;
55 64
56 var message = "Invalid value for argument " + (i + 1) + ". "; 65 var message = "Invalid value for argument " + (i + 1) + ". ";
57 for (var i = 0, err; err = validator.errors[i]; i++) { 66 for (var i = 0, err; err = validator.errors[i]; i++) {
58 if (err.path) { 67 if (err.path) {
59 message += "Property '" + err.path + "': "; 68 message += "Property '" + err.path + "': ";
60 } 69 }
61 message += err.message; 70 message += err.message;
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 var callback = function(errorMessage) { 368 var callback = function(errorMessage) {
360 if (errorMessage) 369 if (errorMessage)
361 chrome.experimental.tts.speakCompleted(requestId, errorMessage); 370 chrome.experimental.tts.speakCompleted(requestId, errorMessage);
362 else 371 else
363 chrome.experimental.tts.speakCompleted(requestId); 372 chrome.experimental.tts.speakCompleted(requestId);
364 }; 373 };
365 chrome.Event.prototype.dispatch.apply(this, [text, options, callback]); 374 chrome.Event.prototype.dispatch.apply(this, [text, options, callback]);
366 }; 375 };
367 } 376 }
368 377
378 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?
379 // We declare the constructor so that a Preference shows up as such in the
380 // Javascript console, but build the Preference in a separate function so
381 // that an extension can't construct arbitrary Preference objects.
382 function Preference() {
383 };
384
385 var parameters = {};
386 chromeHidden.validationTypes['Preference'].functions.forEach(function(f) {
387 parameters[f.name] = f.parameters;
388 });
389
390 function buildPreference(prefKey, valueSchema) {
391 var pref = new Preference();
392 var getSchema = parameters.get;
393 var extendedGetSchema = getSchema.slice();
394 extendedGetSchema.unshift({'type': 'string'});
395 pref.get = function(details, callback) {
396 chromeHidden.validate([details, callback], getSchema);
397 return sendRequest('experimental.preferences.get',
398 [prefKey, details, callback],
399 extendedGetSchema);
400 };
401 var setSchema = parameters.set;
402 var extendedSetSchema = setSchema.slice();
403 extendedSetSchema.unshift({'type': 'string'});
404 extendedSetSchema[1].properties.value = valueSchema;
405 pref.set = function(details, callback) {
406 chromeHidden.validate([details, callback], setSchema);
407 return sendRequest('experimental.preferences.set',
408 [prefKey, details, callback],
409 extendedSetSchema);
410 };
411 return pref;
412 }
413
414 // TODO(bauerb): Automatically instantiate these preferences
415 // from chrome/common/extensions/api/extension_api.json.
416 chrome.experimental.contentSettings.misc.blockThirdPartyCookies =
417 buildPreference('blockThirdPartyCookies', {'type':'boolean'});
418 }
419
369 chromeHidden.onLoad.addListener(function (extensionId) { 420 chromeHidden.onLoad.addListener(function (extensionId) {
370 if (!extensionId) { 421 if (!extensionId) {
371 return; 422 return;
372 } 423 }
373 chrome.initExtension(extensionId, false, IsIncognitoProcess()); 424 chrome.initExtension(extensionId, false, IsIncognitoProcess());
374 425
375 // |apiFunctions| is a hash of name -> object that stores the 426 // |apiFunctions| is a hash of name -> object that stores the
376 // name & definition of the apiFunction. Custom handling of api functions 427 // name & definition of the apiFunction. Custom handling of api functions
377 // is implemented by adding a "handleRequest" function to the object. 428 // is implemented by adding a "handleRequest" function to the object.
378 var apiFunctions = {}; 429 var apiFunctions = {};
(...skipping 10 matching lines...) Expand all
389 var module = chrome; 440 var module = chrome;
390 var namespaces = apiDef.namespace.split('.'); 441 var namespaces = apiDef.namespace.split('.');
391 for (var index = 0, name; name = namespaces[index]; index++) { 442 for (var index = 0, name; name = namespaces[index]; index++) {
392 module[name] = module[name] || {}; 443 module[name] = module[name] || {};
393 module = module[name]; 444 module = module[name];
394 } 445 }
395 446
396 // Add types to global validationTypes 447 // Add types to global validationTypes
397 if (apiDef.types) { 448 if (apiDef.types) {
398 apiDef.types.forEach(function(t) { 449 apiDef.types.forEach(function(t) {
399 chromeHidden.validationTypes.push(t); 450 chromeHidden.validationTypes[t.id] = t;
400 }); 451 });
401 } 452 }
402 453
403 // Setup Functions. 454 // Setup Functions.
404 if (apiDef.functions) { 455 if (apiDef.functions) {
405 apiDef.functions.forEach(function(functionDef) { 456 apiDef.functions.forEach(function(functionDef) {
406 // Module functions may have been defined earlier by hand. Don't 457 // Module functions may have been defined earlier by hand. Don't
407 // clobber them. 458 // clobber them.
408 if (module[functionDef.name]) 459 if (module[functionDef.name])
409 return; 460 return;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 502
452 var eventName = apiDef.namespace + "." + eventDef.name; 503 var eventName = apiDef.namespace + "." + eventDef.name;
453 module[eventDef.name] = new chrome.Event(eventName, 504 module[eventDef.name] = new chrome.Event(eventName,
454 eventDef.parameters); 505 eventDef.parameters);
455 }); 506 });
456 } 507 }
457 508
458 509
459 // Parse any values defined for properties. 510 // Parse any values defined for properties.
460 if (apiDef.properties) { 511 if (apiDef.properties) {
461 for (var prop in apiDef.properties) { 512 forEach(apiDef.properties, function(prop, property) {
462 if (!apiDef.properties.hasOwnProperty(prop))
463 continue;
464
465 var property = apiDef.properties[prop];
466 if (property.value) { 513 if (property.value) {
467 var value = property.value; 514 var value = property.value;
468 if (property.type === 'integer') { 515 if (property.type === 'integer') {
469 value = parseInt(value); 516 value = parseInt(value);
470 } else if (property.type === 'boolean') { 517 } else if (property.type === 'boolean') {
471 value = value === "true"; 518 value = value === "true";
472 } else if (property.type !== 'string') { 519 } else if (property.type !== 'string') {
473 throw "NOT IMPLEMENTED (extension_api.json error): Cannot " + 520 throw "NOT IMPLEMENTED (extension_api.json error): Cannot " +
474 "parse values for type \"" + property.type + "\""; 521 "parse values for type \"" + property.type + "\"";
475 } 522 }
476 module[prop] = value; 523 module[prop] = value;
477 } 524 }
478 } 525 });
479 } 526 }
480 527
481 // getTabContentses is retained for backwards compatibility 528 // getTabContentses is retained for backwards compatibility
482 // See http://crbug.com/21433 529 // See http://crbug.com/21433
483 chrome.extension.getTabContentses = chrome.extension.getExtensionTabs; 530 chrome.extension.getTabContentses = chrome.extension.getExtensionTabs;
484 }); 531 });
485 532
486 apiFunctions["tabs.connect"].handleRequest = function(tabId, connectInfo) { 533 apiFunctions["tabs.connect"].handleRequest = function(tabId, connectInfo) {
487 var name = ""; 534 var name = "";
488 if (connectInfo) { 535 if (connectInfo) {
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
791 if (chrome.test) { 838 if (chrome.test) {
792 chrome.test.getApiDefinitions = GetExtensionAPIDefinition; 839 chrome.test.getApiDefinitions = GetExtensionAPIDefinition;
793 } 840 }
794 841
795 setupPageActionEvents(extensionId); 842 setupPageActionEvents(extensionId);
796 setupToolstripEvents(GetRenderViewId()); 843 setupToolstripEvents(GetRenderViewId());
797 setupPopupEvents(GetRenderViewId()); 844 setupPopupEvents(GetRenderViewId());
798 setupHiddenContextMenuEvent(extensionId); 845 setupHiddenContextMenuEvent(extensionId);
799 setupOmniboxEvents(); 846 setupOmniboxEvents();
800 setupTtsEvents(); 847 setupTtsEvents();
848 setupPreferences();
801 }); 849 });
802 850
803 if (!chrome.experimental) 851 if (!chrome.experimental)
804 chrome.experimental = {}; 852 chrome.experimental = {};
805 853
806 if (!chrome.experimental.accessibility) 854 if (!chrome.experimental.accessibility)
807 chrome.experimental.accessibility = {}; 855 chrome.experimental.accessibility = {};
808 856
809 if (!chrome.experimental.tts) 857 if (!chrome.experimental.tts)
810 chrome.experimental.tts = {}; 858 chrome.experimental.tts = {};
811 })(); 859 })();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698