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

Unified Diff: tools/dom/scripts/systemnative.py

Issue 14948011: Retry "Changes for webkit roll 148757-149482" (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 7 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: tools/dom/scripts/systemnative.py
diff --git a/tools/dom/scripts/systemnative.py b/tools/dom/scripts/systemnative.py
index 2c955bdbecc796006746e69b3ecc22ee0e462f66..a81e322f857b4187164ddbb78e6cbb0ef59c2779 100644
--- a/tools/dom/scripts/systemnative.py
+++ b/tools/dom/scripts/systemnative.py
@@ -13,6 +13,52 @@ from htmldartgenerator import *
from idlnode import IDLArgument
from systemhtml import js_support_checks, GetCallbackInfo, HTML_LIBRARY_NAMES
+_cpp_type_map = {
+ ('DataTransferItem', 'webkitGetAsEntry'): 'DataTransferItemFileSystem',
+ ('DOMWindow', 'indexedDB'): 'DOMWindowIndexedDatabase',
Anton Muhin 2013/05/17 09:55:05 is this temporary? if yes, please, add a TODO
+ ('DOMWindow', 'speechSynthesis'): 'DOMWindowSpeechSynthesis',
+ ('DOMWindow', 'webkitNotifications'): 'DOMWindowNotifications',
+ ('DOMWindow', 'storage'): 'DOMWindowQuota',
+ ('DOMWindow', 'webkitStorageInfo'): 'DOMWindowQuota',
+ ('DOMWindow', 'openDatabase'): 'DOMWindowWebDatabase',
+ ('DOMWindow', 'webkitRequestFileSystem'): 'DOMWindowFileSystem',
+ ('DOMWindow', 'webkitResolveLocalFileSystemURL'): 'DOMWindowFileSystem',
+ ('HTMLInputElement', 'webkitEntries'): 'HTMLInputElementFileSystem',
+ ('Navigator', 'doNotTrack'): 'NavigatorDoNotTrack',
+ ('Navigator', 'geolocation'): 'NavigatorGeolocation',
+ ('Navigator', 'webkitPersistentStorage'): 'NavigatorStorageQuota',
+ ('Navigator', 'webkitTemporaryStorage'): 'NavigatorStorageQuota',
+ ('Navigator', 'registerProtocolHandler'): 'NavigatorContentUtils',
+ ('Navigator', 'unregisterProtocolHandler'): 'NavigatorContentUtils',
+ ('Navigator', 'webkitGetUserMedia'): 'NavigatorMediaStream',
+ ('Navigator', 'webkitGetGamepads'): 'NavigatorGamepad',
+ }
+
+_cpp_partial_map = {}
+
+def _GetCPPPartialNames(interface_name):
+ if not _cpp_partial_map:
+ for (type, member) in _cpp_type_map.keys():
Anton Muhin 2013/05/17 09:55:05 nit: please, no () around type, member
+ if type not in _cpp_partial_map:
+ _cpp_partial_map[type] = set([])
+ _cpp_partial_map[type].add(_cpp_type_map[(type, member)])
Anton Muhin 2013/05/17 09:55:05 _cpp_partial_map.setdefault(type, set()).add(....)
+
+ if interface_name in _cpp_partial_map:
Anton Muhin 2013/05/17 09:55:05 return _cpp_partial_map.get(interface_name, set())
+ return _cpp_partial_map[interface_name]
+ else:
+ return set([])
+
+def _GetCPPTypeName(interface_name, callback_name):
+ # TODO(vsm): We need to track the original IDL file name in order to recover
+ # the proper CPP name.
+
+ cpp_tuple = (interface_name, callback_name)
Anton Muhin 2013/05/17 09:55:05 return _cpp_type_name.get((interface_name, callbac
+ if cpp_tuple in _cpp_type_map:
+ cpp_type_name = _cpp_type_map[cpp_tuple]
+ else:
+ cpp_type_name = interface_name
+ return cpp_type_name
+
class DartiumBackend(HtmlDartGenerator):
"""Generates Dart implementation for one DOM IDL interface."""
@@ -40,7 +86,8 @@ class DartiumBackend(HtmlDartGenerator):
if IsPureInterface(self._interface.id) or IsCustomType(self._interface.id):
return
- cpp_impl_includes = set()
+ cpp_impl_includes = set(['"' + partial + '.h"'
+ for partial in _GetCPPPartialNames(self._interface.id)])
cpp_header_handlers_emitter = emitter.Emitter()
cpp_impl_handlers_emitter = emitter.Emitter()
class_name = 'Dart%s' % self._interface.id
@@ -129,7 +176,8 @@ class DartiumBackend(HtmlDartGenerator):
self._interface_type_info = self._TypeInfo(self._interface.id)
self._members_emitter = members_emitter
self._cpp_declarations_emitter = emitter.Emitter()
- self._cpp_impl_includes = set()
+ self._cpp_impl_includes = set(['"' + partial + '.h"'
+ for partial in _GetCPPPartialNames(self._interface.id)])
self._cpp_definitions_emitter = emitter.Emitter()
self._cpp_resolver_emitter = emitter.Emitter()
@@ -357,6 +405,8 @@ class DartiumBackend(HtmlDartGenerator):
webcore_function_name = '_operator'
elif attr.id == 'target' and attr.type.id == 'SVGAnimatedString':
webcore_function_name = 'svgTarget'
+ elif attr.id == 'CSS':
Anton Muhin 2013/05/17 09:55:05 this is a rename, correct? There is this implemen
+ webcore_function_name = 'css'
else:
webcore_function_name = self._ToWebKitName(attr.id)
if attr.type.id.startswith('SVGAnimated'):
@@ -796,6 +846,17 @@ class DartiumBackend(HtmlDartGenerator):
' goto fail;\n'
' }\n')
+
+ if needs_receiver:
+ interface_name = self._interface_type_info.native_type()
+ cpp_type_name = _GetCPPTypeName(interface_name,
Anton Muhin 2013/05/17 09:55:05 nit: single line
+ node.id)
+ if interface_name != cpp_type_name:
+ if interface_name == 'DOMWindow' or interface_name == 'Navigator':
+ cpp_arguments.insert(0, 'receiver')
Anton Muhin 2013/05/17 09:55:05 just curious: does the position (1st/last) indeed
+ else:
+ cpp_arguments.append('receiver')
+
function_call = '%s(%s)' % (function_expression, ', '.join(cpp_arguments))
if return_type == 'void':
invocation_emitter.Emit(
@@ -843,6 +904,7 @@ class DartiumBackend(HtmlDartGenerator):
NATIVE_BINDING=native_binding)
cpp_callback_name = '%s%s' % (idl_name, native_suffix)
+
self._cpp_resolver_emitter.Emit(
' if (argumentCount == $ARGC && name == "$NATIVE_BINDING")\n'
' return Dart$(INTERFACE_NAME)Internal::$CPP_CALLBACK_NAME;\n',
@@ -876,7 +938,12 @@ class DartiumBackend(HtmlDartGenerator):
return '%s::%s' % (idl_node.ext_attrs['ImplementedBy'], function_name)
if idl_node.is_static:
return '%s::%s' % (self._interface_type_info.idl_type(), function_name)
- return '%s%s' % (self._interface_type_info.receiver(), function_name)
+ interface_name = self._interface_type_info.idl_type()
+ cpp_type_name = _GetCPPTypeName(interface_name, function_name)
Anton Muhin 2013/05/17 09:55:05 overall it looks like _GetCPPTypeName should retur
+ if cpp_type_name == interface_name:
+ return '%s%s' % (self._interface_type_info.receiver(), function_name)
+ else:
+ return '%s::%s' % (cpp_type_name, function_name)
def _IsArgumentOptionalInWebCore(self, operation, argument):
if not IsOptional(argument):

Powered by Google App Engine
This is Rietveld 408576698