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

Side by Side Diff: Source/bindings/scripts/preprocess_idls.py

Issue 17826003: Expose WorkerGlobalScope interface in worker environment (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fix bindings tests Created 7 years, 6 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 | « Source/bindings/scripts/IDLAttributes.txt ('k') | Source/core/dom/MessageChannel.idl » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright (C) 2013 Google Inc. All rights reserved. 1 # Copyright (C) 2013 Google Inc. All rights reserved.
2 # 2 #
3 # Redistribution and use in source and binary forms, with or without 3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are 4 # modification, are permitted provided that the following conditions are
5 # met: 5 # met:
6 # 6 #
7 # * Redistributions of source code must retain the above copyright 7 # * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer. 8 # notice, this list of conditions and the following disclaimer.
9 # * Redistributions in binary form must reproduce the above 9 # * Redistributions in binary form must reproduce the above
10 # copyright notice, this list of conditions and the following disclaimer 10 # copyright notice, this list of conditions and the following disclaimer
(...skipping 20 matching lines...) Expand all
31 import os.path 31 import os.path
32 import re 32 import re
33 import string 33 import string
34 34
35 35
36 def parse_options(): 36 def parse_options():
37 parser = optparse.OptionParser() 37 parser = optparse.OptionParser()
38 parser.add_option('--idl-files-list', help='file listing all IDLs') 38 parser.add_option('--idl-files-list', help='file listing all IDLs')
39 parser.add_option('--supplemental-dependency-file', help='output file') 39 parser.add_option('--supplemental-dependency-file', help='output file')
40 parser.add_option('--window-constructors-file', help='output file') 40 parser.add_option('--window-constructors-file', help='output file')
41 parser.add_option('--workercontext-constructors-file', help='output file') 41 parser.add_option('--workerglobalscope-constructors-file', help='output file ')
42 parser.add_option('--sharedworkerglobalscope-constructors-file', help='outpu t file')
43 parser.add_option('--dedicatedworkerglobalscope-constructors-file', help='ou tput file')
42 parser.add_option('--write-file-only-if-changed', type='int') 44 parser.add_option('--write-file-only-if-changed', type='int')
43 options, args = parser.parse_args() 45 options, args = parser.parse_args()
44 if options.supplemental_dependency_file is None: 46 if options.supplemental_dependency_file is None:
45 parser.error('Must specify an output file using --supplemental-dependenc y-file.') 47 parser.error('Must specify an output file using --supplemental-dependenc y-file.')
46 if options.window_constructors_file is None: 48 if options.window_constructors_file is None:
47 parser.error('Must specify an output file using --window-constructors-fi le.') 49 parser.error('Must specify an output file using --window-constructors-fi le.')
48 if options.workercontext_constructors_file is None: 50 if options.workerglobalscope_constructors_file is None:
49 parser.error('Must specify an output file using --workercontext-construc tors-file.') 51 parser.error('Must specify an output file using --workerglobalscope-cons tructors-file.')
52 if options.workerglobalscope_constructors_file is None:
53 parser.error('Must specify an output file using --sharedworkerglobalscop e-constructors-file.')
54 if options.workerglobalscope_constructors_file is None:
55 parser.error('Must specify an output file using --dedicatedworkerglobals cope-constructors-file.')
50 if options.idl_files_list is None: 56 if options.idl_files_list is None:
51 parser.error('Must specify the file listing all IDLs using --idl-files-l ist.') 57 parser.error('Must specify the file listing all IDLs using --idl-files-l ist.')
52 if options.write_file_only_if_changed is None: 58 if options.write_file_only_if_changed is None:
53 parser.error('Must specify whether file is only written if changed using --write-file-only-if-changed.') 59 parser.error('Must specify whether file is only written if changed using --write-file-only-if-changed.')
54 options.write_file_only_if_changed = bool(options.write_file_only_if_changed ) 60 options.write_file_only_if_changed = bool(options.write_file_only_if_changed )
55 if args: 61 if args:
56 parser.error('No arguments taken, but "%s" given.' % ' '.join(args)) 62 parser.error('No arguments taken, but "%s" given.' % ' '.join(args))
57 return options 63 return options
58 64
59 65
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 141
136 142
137 def generate_global_constructors_partial_interface(interface_name, destination_f ilename, constructor_attributes_list): 143 def generate_global_constructors_partial_interface(interface_name, destination_f ilename, constructor_attributes_list):
138 with open(destination_filename, 'w') as destination_file: 144 with open(destination_filename, 'w') as destination_file:
139 destination_file.write('partial interface %s {\n' % interface_name) 145 destination_file.write('partial interface %s {\n' % interface_name)
140 for constructor_attribute in constructor_attributes_list: 146 for constructor_attribute in constructor_attributes_list:
141 destination_file.write(' %s;\n' % constructor_attribute) 147 destination_file.write(' %s;\n' % constructor_attribute)
142 destination_file.write('};\n') 148 destination_file.write('};\n')
143 149
144 150
145 def parse_idl_files(idl_files, window_constructors_filename, workercontext_const ructors_filename): 151 def parse_idl_files(idl_files, window_constructors_filename, workerglobalscope_c onstructors_filename, sharedworkerglobalscope_constructors_filename, dedicatedwo rkerglobalscope_constructors_filename):
146 interface_name_to_idl_file = {} 152 interface_name_to_idl_file = {}
147 idl_file_to_interface_name = {} 153 idl_file_to_interface_name = {}
148 supplemental_dependencies = {} 154 supplemental_dependencies = {}
149 supplementals = {} 155 supplementals = {}
150 window_constructor_attributes_list = [] 156 window_constructor_attributes_list = []
151 workercontext_constructor_attributes_list = [] 157 workerglobalscope_constructor_attributes_list = []
158 sharedworkerglobalscope_constructor_attributes_list = []
159 dedicatedworkerglobalscope_constructor_attributes_list = []
152 160
153 # Populate interface_name_to_idl_file first 161 # Populate interface_name_to_idl_file first
154 for idl_file_name in idl_files: 162 for idl_file_name in idl_files:
155 full_path = os.path.realpath(idl_file_name) 163 full_path = os.path.realpath(idl_file_name)
156 interface_name, _ = os.path.splitext(os.path.basename(idl_file_name)) 164 interface_name, _ = os.path.splitext(os.path.basename(idl_file_name))
157 interface_name_to_idl_file[interface_name] = full_path 165 interface_name_to_idl_file[interface_name] = full_path
158 166
159 for idl_file_name in idl_files: 167 for idl_file_name in idl_files:
160 full_path = os.path.realpath(idl_file_name) 168 full_path = os.path.realpath(idl_file_name)
161 idl_file_contents = get_file_contents(full_path) 169 idl_file_contents = get_file_contents(full_path)
162 # Handle partial interfaces 170 # Handle partial interfaces
163 partial_interface_name = get_partial_interface_name_from_idl(idl_file_co ntents) 171 partial_interface_name = get_partial_interface_name_from_idl(idl_file_co ntents)
164 if partial_interface_name: 172 if partial_interface_name:
165 supplemental_dependencies[full_path] = [partial_interface_name] 173 supplemental_dependencies[full_path] = [partial_interface_name]
166 continue 174 continue
167 interface_name, _ = os.path.splitext(os.path.basename(idl_file_name)) 175 interface_name, _ = os.path.splitext(os.path.basename(idl_file_name))
168 # Parse 'identifier-A implements identifier-B; statements 176 # Parse 'identifier-A implements identifier-B; statements
169 implemented_interfaces = get_implemented_interfaces_from_idl(idl_file_co ntents, interface_name) 177 implemented_interfaces = get_implemented_interfaces_from_idl(idl_file_co ntents, interface_name)
170 for implemented_interface in implemented_interfaces: 178 for implemented_interface in implemented_interfaces:
171 assert implemented_interface in interface_name_to_idl_file, \ 179 assert implemented_interface in interface_name_to_idl_file, \
172 "Could not find a the IDL file where the following implemented interface is defi ned: %s" % implemented_interface 180 "Could not find a the IDL file where the following implemented interface is defi ned: %s" % implemented_interface
173 supplemental_dependencies.setdefault(interface_name_to_idl_file[impl emented_interface], []).append(interface_name) 181 supplemental_dependencies.setdefault(interface_name_to_idl_file[impl emented_interface], []).append(interface_name)
174 # Handle [NoInterfaceObject] 182 # Handle [NoInterfaceObject]
175 if not is_callback_interface_from_idl(idl_file_contents): 183 if not is_callback_interface_from_idl(idl_file_contents):
176 extended_attributes = get_interface_extended_attributes_from_idl(idl _file_contents) 184 extended_attributes = get_interface_extended_attributes_from_idl(idl _file_contents)
177 if 'NoInterfaceObject' not in extended_attributes: 185 if 'NoInterfaceObject' not in extended_attributes:
178 global_context = extended_attributes.get("GlobalContext", "Windo wOnly") 186 global_contexts = extended_attributes.get('GlobalContext', 'Wind ow').split('&')
179 constructor_list = generate_constructor_attribute_list(interface _name, extended_attributes) 187 constructor_list = generate_constructor_attribute_list(interface _name, extended_attributes)
180 if global_context != "WorkerOnly": 188 if 'Window' in global_contexts:
181 window_constructor_attributes_list.extend(constructor_list) 189 window_constructor_attributes_list.extend(constructor_list)
182 if global_context != "WindowOnly": 190 if 'WorkerGlobalScope' in global_contexts:
183 workercontext_constructor_attributes_list.extend(constructor _list) 191 workerglobalscope_constructor_attributes_list.extend(constru ctor_list)
192 if 'SharedWorkerGlobalScope' in global_contexts:
193 sharedworkerglobalscope_constructor_attributes_list.extend(c onstructor_list)
194 if 'DedicatedWorkerGlobalScope' in global_contexts:
195 dedicatedworkerglobalscope_constructor_attributes_list.exten d(constructor_list)
184 idl_file_to_interface_name[full_path] = interface_name 196 idl_file_to_interface_name[full_path] = interface_name
185 supplementals[full_path] = [] 197 supplementals[full_path] = []
186 198
187 # Generate Global constructors 199 # Generate Global constructors
188 generate_global_constructors_partial_interface("Window", window_constructors _filename, window_constructor_attributes_list)
189 if 'Window' in interface_name_to_idl_file: 200 if 'Window' in interface_name_to_idl_file:
201 generate_global_constructors_partial_interface("Window", window_construc tors_filename, window_constructor_attributes_list)
190 supplemental_dependencies[window_constructors_filename] = ['Window'] 202 supplemental_dependencies[window_constructors_filename] = ['Window']
191 generate_global_constructors_partial_interface("WorkerGlobalScope", workerco ntext_constructors_filename, workercontext_constructor_attributes_list)
192 if 'WorkerGlobalScope' in interface_name_to_idl_file: 203 if 'WorkerGlobalScope' in interface_name_to_idl_file:
193 supplemental_dependencies[workercontext_constructors_filename] = ['Worke rGlobalScope'] 204 generate_global_constructors_partial_interface("WorkerGlobalScope", work erglobalscope_constructors_filename, workerglobalscope_constructor_attributes_li st)
205 supplemental_dependencies[workerglobalscope_constructors_filename] = ['W orkerGlobalScope']
206 if 'SharedWorkerGlobalScope' in interface_name_to_idl_file:
207 generate_global_constructors_partial_interface("SharedWorkerGlobalScope" , sharedworkerglobalscope_constructors_filename, sharedworkerglobalscope_constru ctor_attributes_list)
208 supplemental_dependencies[sharedworkerglobalscope_constructors_filename] = ['SharedWorkerGlobalScope']
209 if 'DedicatedWorkerGlobalScope' in interface_name_to_idl_file:
210 generate_global_constructors_partial_interface("DedicatedWorkerGlobalSco pe", dedicatedworkerglobalscope_constructors_filename, dedicatedworkerglobalscop e_constructor_attributes_list)
211 supplemental_dependencies[dedicatedworkerglobalscope_constructors_filena me] = ['DedicatedWorkerGlobalScope']
194 212
195 # Resolve partial interfaces dependencies 213 # Resolve partial interfaces dependencies
196 for idl_file, base_files in supplemental_dependencies.iteritems(): 214 for idl_file, base_files in supplemental_dependencies.iteritems():
197 for base_file in base_files: 215 for base_file in base_files:
198 target_idl_file = interface_name_to_idl_file[base_file] 216 target_idl_file = interface_name_to_idl_file[base_file]
199 supplementals[target_idl_file].append(idl_file) 217 supplementals[target_idl_file].append(idl_file)
200 if idl_file in supplementals: 218 if idl_file in supplementals:
201 # Should never occur. Might be needed in corner cases. 219 # Should never occur. Might be needed in corner cases.
202 del supplementals[idl_file] 220 del supplementals[idl_file]
203 return supplementals 221 return supplementals
(...skipping 28 matching lines...) Expand all
232 with open(filename, 'w') as out_file: 250 with open(filename, 'w') as out_file:
233 out_file.write(''.join(new_lines)) 251 out_file.write(''.join(new_lines))
234 252
235 253
236 def main(): 254 def main():
237 options = parse_options() 255 options = parse_options()
238 idl_files = [] 256 idl_files = []
239 with open(options.idl_files_list) as idl_files_list_file: 257 with open(options.idl_files_list) as idl_files_list_file:
240 for line in idl_files_list_file: 258 for line in idl_files_list_file:
241 idl_files.append(string.rstrip(line, '\n')) 259 idl_files.append(string.rstrip(line, '\n'))
242 resolved_supplementals = parse_idl_files(idl_files, options.window_construct ors_file, options.workercontext_constructors_file) 260 resolved_supplementals = parse_idl_files(idl_files, options.window_construct ors_file, options.workerglobalscope_constructors_file, options.sharedworkergloba lscope_constructors_file, options.dedicatedworkerglobalscope_constructors_file)
243 write_dependency_file(options.supplemental_dependency_file, resolved_supplem entals, only_if_changed=options.write_file_only_if_changed) 261 write_dependency_file(options.supplemental_dependency_file, resolved_supplem entals, only_if_changed=options.write_file_only_if_changed)
244 262
245 263
246 if __name__ == '__main__': 264 if __name__ == '__main__':
247 main() 265 main()
OLDNEW
« no previous file with comments | « Source/bindings/scripts/IDLAttributes.txt ('k') | Source/core/dom/MessageChannel.idl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698