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

Side by Side Diff: lib/html/scripts/htmlrenamer.py

Issue 11175014: Use CheckSecurityForNode to filter out insecure calls (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments Created 8 years, 2 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
« no previous file with comments | « lib/html/dartium/html_dartium.dart ('k') | lib/html/scripts/systemhtml.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/python 1 #!/usr/bin/python
2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 2 # Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
3 # for details. All rights reserved. Use of this source code is governed by a 3 # for details. All rights reserved. Use of this source code is governed by a
4 # BSD-style license that can be found in the LICENSE file. 4 # BSD-style license that can be found in the LICENSE file.
5 5
6 html_interface_renames = { 6 html_interface_renames = {
7 'DOMCoreException': 'DOMException', 7 'DOMCoreException': 'DOMException',
8 'DOMFormData': 'FormData', 8 'DOMFormData': 'FormData',
9 'DOMWindow': 'LocalWindow', 9 'DOMWindow': 'LocalWindow',
10 'History': 'LocalHistory', 10 'History': 'LocalHistory',
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 "Element.accessKey", 204 "Element.accessKey",
205 "Element.get:itemType", 205 "Element.get:itemType",
206 "Element.innerText", 206 "Element.innerText",
207 "Element.set:outerHTML", 207 "Element.set:outerHTML",
208 "Element.itemScope", 208 "Element.itemScope",
209 "Element.itemValue", 209 "Element.itemValue",
210 "Element.itemId", 210 "Element.itemId",
211 "Element.get:itemProp", 211 "Element.get:itemProp",
212 'Element.scrollIntoView', 212 'Element.scrollIntoView',
213 'Element.get:classList', 213 'Element.get:classList',
214 "EmbedElement.getSVGDocument",
215 "FormElement.get:elements", 214 "FormElement.get:elements",
216 "HTMLFrameElement.*", 215 "HTMLFrameElement.*",
217 "HTMLFrameSetElement.*", 216 "HTMLFrameSetElement.*",
218 "HtmlElement.version", 217 "HtmlElement.version",
219 "HtmlElement.manifest", 218 "HtmlElement.manifest",
220 "Document.version", 219 "Document.version",
221 "Document.manifest", 220 "Document.manifest",
222 # "IFrameElement.getSVGDocument", #TODO(jacobr): should this be removed
223 "InputElement.dirName", 221 "InputElement.dirName",
224 "HTMLIsIndexElement.*", 222 "HTMLIsIndexElement.*",
225 "ObjectElement.getSVGDocument",
226 "HTMLOptionsCollection.*", 223 "HTMLOptionsCollection.*",
227 "HTMLPropertiesCollection.*", 224 "HTMLPropertiesCollection.*",
228 "SelectElement.remove", 225 "SelectElement.remove",
229 "TextAreaElement.dirName", 226 "TextAreaElement.dirName",
230 "NamedNodeMap.*", 227 "NamedNodeMap.*",
231 "Node.isEqualNode", 228 "Node.isEqualNode",
232 "Node.get:TEXT_NODE", 229 "Node.get:TEXT_NODE",
233 "Node.hasAttributes", 230 "Node.hasAttributes",
234 "Node.get:DOCUMENT_TYPE_NODE", 231 "Node.get:DOCUMENT_TYPE_NODE",
235 "Node.get:DOCUMENT_POSITION_FOLLOWING", 232 "Node.get:DOCUMENT_POSITION_FOLLOWING",
(...skipping 22 matching lines...) Expand all
258 "Node.get:prefix", 255 "Node.get:prefix",
259 "Node.set:prefix", 256 "Node.set:prefix",
260 "Node.get:DOCUMENT_POSITION_PRECEDING", 257 "Node.get:DOCUMENT_POSITION_PRECEDING",
261 "Node.get:nodeValue", 258 "Node.get:nodeValue",
262 "Node.set:nodeValue", 259 "Node.set:nodeValue",
263 "Node.get:CDATA_SECTION_NODE", 260 "Node.get:CDATA_SECTION_NODE",
264 "Node.get:nodeName", 261 "Node.get:nodeName",
265 "Node.lookupPrefix", 262 "Node.lookupPrefix",
266 "Node.get:PROCESSING_INSTRUCTION_NODE", 263 "Node.get:PROCESSING_INSTRUCTION_NODE",
267 'ShadowRoot.getElementsByTagNameNS', 264 'ShadowRoot.getElementsByTagNameNS',
268 "IFrameElement.get:contentDocument",
269 "LocalWindow.get:frameElement",
270 "LocalWindow.get:frames", 265 "LocalWindow.get:frames",
271 "LocalWindow.get:length", 266 "LocalWindow.get:length",
272 "LocalWindow.webkitCancelRequestAnimationFrame", 267 "LocalWindow.webkitCancelRequestAnimationFrame",
273 "WheelEvent.wheelDelta", 268 "WheelEvent.wheelDelta",
274 ]) 269 ])
275 270
276 class HtmlRenamer(object): 271 class HtmlRenamer(object):
277 def __init__(self, database): 272 def __init__(self, database):
278 self._database = database 273 self._database = database
279 274
280 def RenameInterface(self, interface): 275 def RenameInterface(self, interface):
281 if interface.id.startswith('HTML'): 276 if interface.id.startswith('HTML'):
282 if any(interface.id in ['Element', 'Document'] 277 if any(interface.id in ['Element', 'Document']
283 for interface in self._database.Hierarchy(interface)): 278 for interface in self._database.Hierarchy(interface)):
284 return interface.id[len('HTML'):] 279 return interface.id[len('HTML'):]
285 elif interface.id in html_interface_renames: 280 elif interface.id in html_interface_renames:
286 return html_interface_renames[interface.id] 281 return html_interface_renames[interface.id]
287 return interface.id 282 return interface.id
288 283
289 def RenameMember(self, interface_name, member, member_prefix=''): 284 def RenameMember(self, interface_name, member_node, member, member_prefix=''):
290 """ 285 """
291 Returns the name of the member in the HTML library or None if the member is 286 Returns the name of the member in the HTML library or None if the member is
292 suppressed in the HTML library 287 suppressed in the HTML library
293 """ 288 """
294 interface = self._database.GetInterface(interface_name) 289 interface = self._database.GetInterface(interface_name)
295 290
296 if self._FindMatch(interface, member, member_prefix, _removed_html_members): 291 if self._FindMatch(interface, member, member_prefix, _removed_html_members):
297 return None 292 return None
298 293
294 if 'CheckSecurityForNode' in member_node.ext_attrs:
295 return None
296
299 name = self._FindMatch(interface, member, member_prefix, 297 name = self._FindMatch(interface, member, member_prefix,
300 _renamed_html_members) 298 _renamed_html_members)
301 target_name = _renamed_html_members[name] if name else member 299 target_name = _renamed_html_members[name] if name else member
302 if self._FindMatch(interface, member, member_prefix, _private_html_members): 300 if self._FindMatch(interface, member, member_prefix, _private_html_members):
303 if not target_name.startswith('$dom_'): # e.g. $dom_svgClassName 301 if not target_name.startswith('$dom_'): # e.g. $dom_svgClassName
304 target_name = '$dom_' + target_name 302 target_name = '$dom_' + target_name
305 return target_name 303 return target_name
306 304
307 def _FindMatch(self, interface, member, member_prefix, candidates): 305 def _FindMatch(self, interface, member, member_prefix, candidates):
308 for interface in self._database.Hierarchy(interface): 306 for interface in self._database.Hierarchy(interface):
309 html_interface_name = self.RenameInterface(interface) 307 html_interface_name = self.RenameInterface(interface)
310 member_name = html_interface_name + '.' + member 308 member_name = html_interface_name + '.' + member
311 if member_name in candidates: 309 if member_name in candidates:
312 return member_name 310 return member_name
313 member_name = html_interface_name + '.' + member_prefix + member 311 member_name = html_interface_name + '.' + member_prefix + member
314 if member_name in candidates: 312 if member_name in candidates:
315 return member_name 313 return member_name
OLDNEW
« no previous file with comments | « lib/html/dartium/html_dartium.dart ('k') | lib/html/scripts/systemhtml.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698