| Index: tools/dom/scripts/generator.py
|
| diff --git a/tools/dom/scripts/generator.py b/tools/dom/scripts/generator.py
|
| index 90f8b3476def10a923fd4c3b0b26b331e13117ab..125d64a040bb466b4b3b2f89a50b9450633c6ee9 100644
|
| --- a/tools/dom/scripts/generator.py
|
| +++ b/tools/dom/scripts/generator.py
|
| @@ -14,50 +14,152 @@ import re
|
| from htmlrenamer import custom_html_constructors, html_interface_renames, \
|
| typed_array_renames
|
|
|
| -_pure_interfaces = monitored.Set('generator._pure_interfaces', [
|
| - # TODO(sra): DOMStringMap should be a class implementing Map<String,String>.
|
| - 'DOMStringMap',
|
| - 'AbstractWorker',
|
| - 'CanvasPathMethods',
|
| - 'ChildNode',
|
| - 'DocumentAnimation',
|
| - 'DocumentFontFaceSet',
|
| - 'DocumentFullscreen',
|
| - 'DocumentXPathEvaluator',
|
| - 'ElementAnimation',
|
| - 'ElementFullscreen',
|
| - 'EventListener',
|
| - 'GlobalEventHandlers',
|
| - 'ImageBitmapFactories',
|
| - 'MediaQueryListListener',
|
| - 'MouseEventHitRegion',
|
| - 'MutationCallback',
|
| - 'NavigatorCPU',
|
| - 'NavigatorEvents',
|
| - 'NavigatorID',
|
| - 'NavigatorLanguage',
|
| - 'NavigatorOnLine',
|
| - 'ParentNode',
|
| - 'SVGDocument',
|
| - 'SVGExternalResourcesRequired',
|
| - 'SVGFilterPrimitiveStandardAttributes',
|
| - 'SVGFitToViewBox',
|
| - 'SVGTests',
|
| - 'SVGURIReference',
|
| - 'SVGZoomAndPan',
|
| - 'TimeoutHandler',
|
| - 'URLUtils',
|
| - 'URLUtilsReadOnly',
|
| - 'WebGLRenderingContextBase',
|
| - 'WindowBase64',
|
| - 'WindowEventHandlers',
|
| - 'WindowImageBitmapFactories',
|
| - 'WindowPagePopup',
|
| - 'WindowTimers',
|
| +_safe_interfaces = monitored.Set('generator._safe_interfaces', [
|
| + 'double',
|
| + 'Float32Array',
|
| + 'Float64Array',
|
| + 'Int8Array',
|
| + 'Int16Array',
|
| + 'Int32Array',
|
| + 'Uint8Array',
|
| + 'Uint8ClampedArray',
|
| + 'Uint16Array',
|
| + 'Uint32Array',
|
| + 'ArrayBufferView',
|
| + 'ArrayBuffer',
|
| + 'SourceBuffer', # IDL lies about this class being a pure interface.
|
| + 'Console', # this one is a bit of a hack as our console implementation
|
| + # in dart:html is non-standard for legacy reasons.
|
| + 'AudioContext',
|
| + 'AudioSourceNode',
|
| + 'WebGLVertexArrayObjectOES', # Added a polyfill for this.
|
| + # Types where we can get access to the prototype easily enough.
|
| + # We might consider in the future treating these are regular interface types.
|
| + 'StereoPannerNode',
|
| + 'PannerNode',
|
| + 'AudioNode',
|
| + 'FontFaceSet',
|
| + 'MemoryInfo',
|
| + 'ConsoleBase',
|
| + 'Geolocation',
|
| + 'Animation',
|
| + 'SourceBufferList',
|
| + 'GamepadList',
|
| +
|
| + # The following classes are enabled just to get the build to go.
|
| + # SpeechRecognitionResultList isn't really allowed but the codegen creates
|
| + # invalid output otherwise.
|
| +
|
| + 'SpeechRecognitionResultList',
|
| + 'SQLResultSetRowList',
|
| ])
|
|
|
| -def IsPureInterface(interface_name):
|
| - return interface_name in _pure_interfaces
|
| +# These are interfaces that we have to treat as safe for dart2js and dartium
|
| +# but going in dev compiler we should not treat as safe as these classes
|
| +# really aren't guaranteed to have a stable interface name.
|
| +_safe_interfaces_legacy = monitored.Set('generator._safe_interfaces_legacy', [
|
| + 'ANGLEInstancedArrays',
|
| + 'Bluetooth',
|
| + 'Body',
|
| + 'NonDocumentTypeChildNode',
|
| + 'CHROMIUMSubscribeUniform',
|
| + 'CHROMIUMValuebuffer',
|
| + 'GeofencingRegion',
|
| + 'Coordinates',
|
| + 'DOMFileSystem',
|
| + 'DirectoryEntry',
|
| + 'DOMFileSystemSync',
|
| + 'Entry',
|
| + 'Database',
|
| + 'DeprecatedStorageInfo',
|
| + 'DeprecatedStorageQuota',
|
| + 'DeviceAcceleration',
|
| + 'DeviceRotationRate',
|
| + 'DirectoryReader',
|
| + 'EntrySync',
|
| + 'DirectoryEntrySync',
|
| + 'DirectoryReaderSync',
|
| + 'NonElementParentNode',
|
| + 'EXTBlendMinMax',
|
| + 'EXTFragDepth',
|
| + 'EXTShaderTextureLOD',
|
| + 'EXTTextureFilterAnisotropic',
|
| + 'EXTsRGB',
|
| + 'EffectModel',
|
| + 'FileEntry',
|
| + 'FileEntrySync',
|
| + 'FileWriter',
|
| + 'FileWriterSync',
|
| + 'FontFaceSetLoadEvent',
|
| + 'Geofencing',
|
| + 'Geoposition',
|
| + 'Iterator',
|
| + 'MediaDeviceInfo',
|
| + 'MediaStreamTrackEvent',
|
| + 'Metadata',
|
| + 'NavigatorStorageUtils',
|
| + 'StorageQuota',
|
| + 'NavigatorUserMediaError',
|
| + 'OESElementIndexUint',
|
| + 'OESStandardDerivatives',
|
| + 'OESTextureFloat',
|
| + 'OESTextureFloatLinear',
|
| + 'OESTextureHalfFloat',
|
| + 'OESTextureHalfFloatLinear',
|
| + 'OESVertexArrayObject',
|
| + 'PagePopupController',
|
| + 'PluginPlaceholderElement',
|
| + 'PositionError',
|
| + 'RTCDTMFSender',
|
| + 'RTCDataChannel',
|
| + 'RTCDataChannelEvent',
|
| + 'RTCIceCandidateEvent',
|
| + 'RTCStatsReport',
|
| + 'RTCStatsResponse',
|
| + 'ReadableByteStreamReader',
|
| + 'ReadableStreamReader',
|
| + 'ResourceProgressEvent',
|
| + 'SQLError',
|
| + 'SQLResultSet',
|
| + 'SQLTransaction',
|
| + 'SharedArrayBuffer',
|
| + 'SourceInfo',
|
| + 'SpeechRecognitionAlternative',
|
| + 'SpeechRecognitionResult',
|
| + 'SpeechSynthesis',
|
| + 'SpeechSynthesisVoice',
|
| + 'StorageInfo',
|
| + 'StyleMedia',
|
| + 'WebGL2RenderingContextBase',
|
| + 'WebGLCompressedTextureATC',
|
| + 'WebGLCompressedTextureETC1',
|
| + 'WebGLCompressedTexturePVRTC',
|
| + 'WebGLCompressedTextureS3TC',
|
| + 'WebGLDebugRendererInfo',
|
| + 'WebGLDebugShaders',
|
| + 'WebGLDepthTexture',
|
| + 'WebGLDrawBuffers',
|
| + 'WebGLLoseContext',
|
| + 'WorkerConsole',
|
| + 'WorkerPerformance',
|
| + 'XPathNSResolver',
|
| +])
|
| +
|
| +# Classes we should just suppress?
|
| +# SpeechGrammarList and friends
|
| +
|
| +def IsPureInterface(interface_name, database):
|
| + if (interface_name in _safe_interfaces or
|
| + interface_name in _safe_interfaces_legacy or
|
| + database.HasInterface(interface_name)):
|
| + return False
|
| +
|
| + interface = database.GetInterface(interface_name)
|
| +
|
| + if 'Constructor' in interface.ext_attrs:
|
| + return False
|
| +
|
| + return interface.is_no_interface_object
|
|
|
| #
|
| # Classes which have native constructors but which we are suppressing because
|
| @@ -163,7 +265,7 @@ _dart2js_dom_custom_native_specs = monitored.Dict(
|
|
|
| 'PannerNode': 'PannerNode,AudioPannerNode,webkitAudioPannerNode',
|
|
|
| - 'RTCPeerConnection': 'RTCPeerConnection,mozRTCPeerConnection',
|
| + 'RTCPeerConnection': 'RTCPeerConnection,webkitRTCPeerConnection,mozRTCPeerConnection',
|
|
|
| 'RTCIceCandidate': 'RTCIceCandidate,mozRTCIceCandidate',
|
|
|
| @@ -929,7 +1031,7 @@ class InterfaceIDLTypeInfo(IDLTypeInfo):
|
| # dart_type.
|
| if self._data.dart_type != None:
|
| return self.dart_type()
|
| - if IsPureInterface(self.idl_type()):
|
| + if IsPureInterface(self.idl_type(), self._type_registry._database):
|
| return self.idl_type()
|
| return self.interface_name()
|
|
|
|
|