Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 // Custom binding for the declarativeContent API. | 5 // Custom binding for the declarativeContent API. |
| 6 | 6 |
| 7 var binding = require('binding').Binding.create('declarativeContent'); | 7 var binding = require('binding').Binding.create('declarativeContent'); |
| 8 | 8 |
| 9 var utils = require('utils'); | 9 var utils = require('utils'); |
| 10 var validate = require('schemaUtils').validate; | 10 var validate = require('schemaUtils').validate; |
| (...skipping 17 matching lines...) Expand all Loading... | |
| 28 for (var key in parameters) { | 28 for (var key in parameters) { |
| 29 if ($Object.hasOwnProperty(parameters, key)) { | 29 if ($Object.hasOwnProperty(parameters, key)) { |
| 30 instance[key] = parameters[key]; | 30 instance[key] = parameters[key]; |
| 31 } | 31 } |
| 32 } | 32 } |
| 33 instance.instanceType = 'declarativeContent.' + typeId; | 33 instance.instanceType = 'declarativeContent.' + typeId; |
| 34 var schema = getSchema(typeId); | 34 var schema = getSchema(typeId); |
| 35 validate([instance], [schema]); | 35 validate([instance], [schema]); |
| 36 } | 36 } |
| 37 | 37 |
| 38 function canonicalizeCssSelectors(selectors) { | |
| 39 var div = document.createElement('div'); | |
| 40 div.innerHTML = '<style scoped></style>'; | |
| 41 document.body.appendChild(div); | |
|
not at google - send to devlin
2013/08/27 01:46:14
Modifying the page's DOM / exposing our internals
Jeffrey Yasskin
2013/08/27 19:09:48
Note that this only exposes anything to the same e
not at google - send to devlin
2013/08/27 19:39:53
Yeah I know, but extensions still to unwittingly b
Jeffrey Yasskin
2013/08/29 03:39:39
Done: https://codereview.chromium.org/23659002/
| |
| 42 try { | |
| 43 var sheet = document.styleSheets[document.styleSheets.length - 1]; | |
| 44 for (var i = 0; i < selectors.length; i++) { | |
| 45 try { | |
| 46 sheet.insertRule(selectors[i] + '{}', 0); | |
| 47 } catch(e) { | |
| 48 if (e.name == "SyntaxError") { | |
| 49 throw new Error('Invalid selector: ' + selectors[i]); | |
| 50 } | |
| 51 throw e; | |
| 52 } | |
| 53 selectors[i] = sheet.cssRules[0].selectorText; | |
| 54 sheet.deleteRule(0); | |
| 55 } | |
| 56 } finally { | |
| 57 document.body.removeChild(div); | |
| 58 } | |
| 59 } | |
| 60 | |
| 38 // Setup all data types for the declarative content API. | 61 // Setup all data types for the declarative content API. |
| 39 declarativeContent.PageStateMatcher = function(parameters) { | 62 declarativeContent.PageStateMatcher = function(parameters) { |
| 40 setupInstance(this, parameters, 'PageStateMatcher'); | 63 setupInstance(this, parameters, 'PageStateMatcher'); |
| 64 if ('css' in this) { | |
|
not at google - send to devlin
2013/08/27 01:46:14
small point, but hasOwnProperty is probably better
Jeffrey Yasskin
2013/08/27 19:09:48
Sure (haven't updated yet, but will). Where's the
not at google - send to devlin
2013/08/27 19:39:53
I mean, for all extension function calls (chrome.b
Jeffrey Yasskin
2013/08/29 03:39:39
Done.
| |
| 65 canonicalizeCssSelectors(this.css); | |
| 66 } | |
| 41 }; | 67 }; |
| 42 declarativeContent.ShowPageAction = function(parameters) { | 68 declarativeContent.ShowPageAction = function(parameters) { |
| 43 setupInstance(this, parameters, 'ShowPageAction'); | 69 setupInstance(this, parameters, 'ShowPageAction'); |
| 44 }; | 70 }; |
| 45 }); | 71 }); |
| 46 | 72 |
| 47 exports.binding = binding.generate(); | 73 exports.binding = binding.generate(); |
| OLD | NEW |