Index: chrome/renderer/resources/extensions/declarative_content_custom_bindings.js |
diff --git a/chrome/renderer/resources/extensions/declarative_content_custom_bindings.js b/chrome/renderer/resources/extensions/declarative_content_custom_bindings.js |
index beb5409e7baab66667f49f3452b5615f13bb8f99..5652ca88864eccad780cfa3dc0563bac97e6e526 100644 |
--- a/chrome/renderer/resources/extensions/declarative_content_custom_bindings.js |
+++ b/chrome/renderer/resources/extensions/declarative_content_custom_bindings.js |
@@ -35,9 +35,35 @@ binding.registerCustomHook( function(api) { |
validate([instance], [schema]); |
} |
+ function canonicalizeCssSelectors(selectors) { |
+ var div = document.createElement('div'); |
+ div.innerHTML = '<style scoped></style>'; |
+ 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/
|
+ try { |
+ var sheet = document.styleSheets[document.styleSheets.length - 1]; |
+ for (var i = 0; i < selectors.length; i++) { |
+ try { |
+ sheet.insertRule(selectors[i] + '{}', 0); |
+ } catch(e) { |
+ if (e.name == "SyntaxError") { |
+ throw new Error('Invalid selector: ' + selectors[i]); |
+ } |
+ throw e; |
+ } |
+ selectors[i] = sheet.cssRules[0].selectorText; |
+ sheet.deleteRule(0); |
+ } |
+ } finally { |
+ document.body.removeChild(div); |
+ } |
+ } |
+ |
// Setup all data types for the declarative content API. |
declarativeContent.PageStateMatcher = function(parameters) { |
setupInstance(this, parameters, 'PageStateMatcher'); |
+ 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.
|
+ canonicalizeCssSelectors(this.css); |
+ } |
}; |
declarativeContent.ShowPageAction = function(parameters) { |
setupInstance(this, parameters, 'ShowPageAction'); |