tabs.py revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen# Copyright 2013 The Chromium Authors. All rights reserved.
2674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen# Use of this source code is governed by a BSD-style license that can be
3674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen# found in the LICENSE file.
4674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
5674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenimport json
6674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
7674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenfrom extensions_paths import CHROME_EXTENSIONS
8674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenfrom test_file_system import MoveAllTo
9674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogenfrom test_util import ReadFile
10674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
11674060f01e9090cd21b3c5656cc3204912ad17a6Jon BoekenoogenFAKE_TABS_IDL = '\n'.join([
12674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '// Copyleft stuff.',
13674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '',
14674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '// Some description here.',
15674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  'namespace fakeTabs {',
16674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '  dictionary WasImplicitlyInlinedType {};',
17674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '  interface Functions {',
18674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '    static void myFunc(WasImplicitlyInlinedType arg);',
19674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '    static void anotherFunc(WasImplicitlyInlinedType arg);',
20674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '  };',
21674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '};'])
22674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
23674060f01e9090cd21b3c5656cc3204912ad17a6Jon BoekenoogenFAKE_TABS_WITH_INLINING_IDL = '\n'.join([
24674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '// Copyleft stuff.',
25674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '',
26674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '// Some description here.',
27674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  'namespace fakeTabs {',
28674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '  dictionary WasImplicitlyInlinedType {};',
29674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '  interface Functions {',
30674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '    static void myFunc(WasImplicitlyInlinedType arg);',
31674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '  };',
32674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  '};'])
33674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen
34674060f01e9090cd21b3c5656cc3204912ad17a6Jon BoekenoogenTABS_SCHEMA_BRANCHES = MoveAllTo(CHROME_EXTENSIONS, {
35674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen  'master': {
36674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    'docs': {
37674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen      'templates': {
38674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        'json': {
39674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          'api_availabilities.json': '{}',
40674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          'intro_tables.json': '{}'
41674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        }
42674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen      }
43674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    },
44674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen    'api': {
45674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen      '_api_features.json': json.dumps({
46674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        'tabs.scheduledFunc': {
47674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          'channel': 'stable'
48674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        }
49674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen      }),
50674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen      '_manifest_features.json': '{}',
51674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen      '_permission_features.json': '{}',
52674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen      'fake_tabs.idl': FAKE_TABS_IDL,
53674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen      'tabs.json': json.dumps([{
54674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        'namespace': 'tabs',
55674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        'types': [
56674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          {
57674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'id': 'Tab',
58674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'type': 'any',
59674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'properties': {
60674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              'url': {
61674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                'type': 'any'
62674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              },
63674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              'index': {
64674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                'type': 'any'
65674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              },
66674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              'selected': {
67674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                'type': 'any'
68674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              },
69674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              'id': {
70674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                'type': 'any'
71674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              },
72674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              'windowId': {
73674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                'type': 'any'
74674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              }
75674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            }
76674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          },
77674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          {
78674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'id': 'InlinedType',
79674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'type': 'any',
80674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'inline_doc': True
81674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          },
82674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          {
83674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'id': 'InjectDetails',
84674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'type': 'any',
85674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'properties': {
86674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              'allFrames': {
87674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                'type': 'any'
88674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              },
89674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              'code': {
90674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                'type': 'any'
91674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              },
92674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              'file': {
93674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                'type':'any'
94674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              }
95674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            }
96674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          },
97674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          {
98674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'id': 'DeprecatedType',
99674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'type': 'any',
100674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'deprecated': 'This is deprecated'
101674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          }
102674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        ],
103674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        'properties': {
104674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          'fakeTabsProperty1': {
105674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'type': 'any'
106674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          },
107674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          'fakeTabsProperty2': {
108674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'type': 'any'
109674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          },
110674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          'fakeTabsProperty3': {
111674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'type': 'any'
112674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          }
113674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        },
114674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen        'functions': [
115674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen          {
116674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'name': 'getCurrent',
117674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen            'parameters': [
118674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              {
119674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                'name': 'callback',
120674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                'type': 'function',
121674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                'parameters': [
122674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                  {
123674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                    'name': 'tab',
124674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                    'type': 'any'
125674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                  }
126674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen                ]
127674060f01e9090cd21b3c5656cc3204912ad17a6Jon Boekenoogen              }
128            ]
129          },
130          {
131            'name': 'get',
132            'parameters': [
133              {
134                'name': 'callback',
135                'type': 'function',
136                'parameters': [
137                  {
138                    'name': 'tab',
139                    'type': 'any'
140                  }
141                ]
142              },
143              {
144                'name': 'tabId',
145                'type': 'any'
146              }
147            ]
148          },
149          {
150            'name': 'restrictedFunc'
151          },
152          {
153            'name': 'scheduledFunc',
154            'parameters': []
155          }
156        ],
157        'events': [
158          {
159            'name': 'onActivated',
160            'type': 'event',
161            'parameters': [
162              {
163                'name': 'activeInfo',
164                'type': 'any',
165                'properties': {
166                  'tabId': {
167                    'type': 'any'
168                  },
169                  'windowId': {
170                    'type': 'any'
171                  }
172                }
173              }
174            ]
175          },
176          {
177            'name': 'onUpdated',
178            'type': 'event',
179            'parameters': [
180              {
181                'name': 'tabId',
182                'type': 'any'
183              },
184              {
185                'name': 'tab',
186                'type': 'any'
187              },
188              {
189                'name': 'changeInfo',
190                'type': 'any',
191                'properties': {
192                  'pinned': {
193                    'type': 'any'
194                  },
195                  'status': {
196                    'type': 'any'
197                  }
198                }
199              }
200            ]
201          }
202        ]
203      }])
204    }
205  },
206  '1612': {
207    'api': {
208      '_api_features.json': json.dumps({
209        'tabs.scheduledFunc': {
210          'channel': 'stable'
211        }
212      }),
213      '_manifest_features.json': "{}",
214      '_permission_features.json': "{}",
215      'fake_tabs.idl': FAKE_TABS_IDL,
216      'tabs.json': json.dumps([{
217        'namespace': 'tabs',
218        'types': [
219          {
220            'id': 'Tab',
221            'properties': {
222              'url': {},
223              'index': {},
224              'selected': {},
225              'id': {},
226              'windowId': {}
227            }
228          },
229          {
230            'id': 'InjectDetails',
231            'properties': {
232              'allFrames': {},
233              'code': {},
234              'file': {}
235            }
236          },
237          {
238            'id': 'DeprecatedType',
239            'deprecated': 'This is deprecated'
240          }
241        ],
242        'properties': {
243          'fakeTabsProperty1': {},
244          'fakeTabsProperty2': {}
245        },
246        'functions': [
247          {
248            'name': 'getCurrent',
249            'parameters': [
250              {
251                'name': 'callback',
252                'parameters': [
253                  {
254                    'name': 'tab'
255                  }
256                ]
257              }
258            ]
259          },
260          {
261            'name': 'get',
262            'parameters': [
263              {
264                'name': 'callback',
265                'parameters': [
266                  {
267                    'name': 'tab'
268                  }
269                ]
270              },
271              {
272                'name': 'tabId'
273              }
274            ]
275          },
276          {
277            'name': 'restrictedFunc'
278          },
279          {
280            'name': 'scheduledFunc',
281            'parameters': []
282          }
283        ],
284        'events': [
285          {
286            'name': 'onActivated',
287            'parameters': [
288              {
289                'name': 'activeInfo',
290                'properties': {
291                  'tabId': {},
292                  'windowId': {}
293                }
294              }
295            ]
296          },
297          {
298            'name': 'onUpdated',
299            'parameters': [
300              {
301                'name': 'tabId'
302              },
303              {
304                'name': 'tab'
305              },
306              {
307                'name': 'changeInfo',
308                'properties': {
309                  'pinned': {},
310                  'status': {}
311                }
312              }
313            ]
314          }
315        ]
316      }])
317    }
318  },
319  '1599': {
320    'api': {
321      '_api_features.json': "{}",
322      '_manifest_features.json': "{}",
323      '_permission_features.json': "{}",
324      'fake_tabs.idl': FAKE_TABS_IDL,
325      'tabs.json': json.dumps([{
326        'namespace': 'tabs',
327        'types': [
328          {
329            'id': 'Tab',
330            'properties': {
331              'url': {},
332              'index': {},
333              'selected': {},
334              'id': {},
335              'windowId': {}
336            }
337          },
338          {
339            'id': 'InjectDetails',
340            'properties': {
341              'allFrames': {},
342              'code': {},
343              'file': {}
344            }
345          },
346          {
347            'id': 'DeprecatedType',
348            'deprecated': 'This is deprecated'
349          }
350        ],
351        'properties': {
352          'fakeTabsProperty1': {},
353          'fakeTabsProperty2': {}
354        },
355        'functions': [
356          {
357            'name': 'getCurrent',
358            'parameters': [
359              {
360                'name': 'callback',
361                'parameters': [
362                  {
363                    'name': 'tab'
364                  }
365                ]
366              }
367            ]
368          },
369          {
370            'name': 'get',
371            'parameters': [
372              {
373                'name': 'callback',
374                'parameters': [
375                  {
376                    'name': 'tab'
377                  }
378                ]
379              },
380              {
381                'name': 'tabId'
382              }
383            ]
384          },
385          {
386            'name': 'restrictedFunc'
387          }
388        ],
389        'events': [
390          {
391            'name': 'onActivated',
392            'parameters': [
393              {
394                'name': 'activeInfo',
395                'properties': {
396                  'tabId': {},
397                }
398              }
399            ]
400          },
401          {
402            'name': 'onUpdated',
403            'parameters': [
404              {
405                'name': 'tabId'
406              },
407              {
408                'name': 'changeInfo',
409                'properties': {
410                  'pinned': {},
411                  'status': {}
412                }
413              }
414            ]
415          }
416        ]
417      }])
418    }
419  },
420  '1547': {
421    'api': {
422      '_api_features.json': json.dumps({
423        'tabs.restrictedFunc': {
424          'channel': 'dev'
425        }
426      }),
427      '_manifest_features.json': "{}",
428      '_permission_features.json': "{}",
429      'fake_tabs.idl': FAKE_TABS_IDL,
430      'tabs.json': json.dumps([{
431        'namespace': 'tabs',
432        'types': [
433          {
434            'id': 'Tab',
435            'properties': {
436              'url': {},
437              'index': {},
438              'selected': {},
439              'id': {},
440              'windowId': {}
441            }
442          },
443          {
444            'id': 'InjectDetails',
445            'properties': {
446              'allFrames': {},
447              'code': {},
448              'file': {}
449            }
450          },
451          {
452            'id': 'DeprecatedType',
453            'deprecated': 'This is deprecated'
454          }
455        ],
456        'properties': {
457          'fakeTabsProperty1': {},
458          'fakeTabsProperty2': {}
459        },
460        'functions': [
461          {
462            'name': 'getCurrent',
463            'parameters': [
464              {
465                'name': 'callback',
466                'parameters': [
467                  {
468                    'name': 'tab'
469                  }
470                ]
471              }
472            ]
473          },
474          {
475            'name': 'get',
476            'parameters': [
477              {
478                'name': 'callback',
479                'parameters': [
480                  {
481                    'name': 'tab'
482                  }
483                ]
484              },
485            ]
486          },
487          {
488            'name': 'restrictedFunc'
489          }
490        ],
491        'events': [
492          {
493            'name': 'onUpdated',
494            'parameters': [
495              {
496                'name': 'tabId'
497              },
498              {
499                'name': 'changeInfo',
500                'properties': {
501                  'pinned': {},
502                  'status': {}
503                }
504              }
505            ]
506          }
507        ]
508      }])
509    }
510  },
511  '1500': {
512    'api': {
513      '_api_features.json': "{}",
514      '_manifest_features.json': "{}",
515      '_permission_features.json': "{}",
516      'fake_tabs.idl': FAKE_TABS_IDL,
517      'tabs.json': json.dumps([{
518        'namespace': 'tabs',
519        'types': [
520          {
521            'id': 'Tab',
522            'properties': {
523              'url': {},
524              'index': {},
525              'selected': {},
526              'id': {},
527              'windowId': {}
528            }
529          },
530          {
531            'id': 'InjectDetails',
532            'properties': {
533              'allFrames': {},
534            }
535          },
536          {
537            'id': 'DeprecatedType',
538            'deprecated': 'This is deprecated'
539          }
540        ],
541        'properties': {
542          'fakeTabsProperty1': {},
543          'fakeTabsProperty2': {}
544        },
545        'functions': [
546          {
547            'name': 'getCurrent',
548            'parameters': [
549              {
550                'name': 'callback',
551                'parameters': [
552                  {
553                    'name': 'tab'
554                  }
555                ]
556              }
557            ]
558          },
559          {
560            'name': 'get',
561            'parameters': [
562              {
563                'name': 'callback',
564                'parameters': [
565                  {
566                    'name': 'tab'
567                  }
568                ]
569              },
570            ]
571          }
572        ],
573        'events': [
574          {
575            'name': 'onUpdated',
576            'parameters': [
577              {
578                'name': 'tabId'
579              },
580              {
581                'name': 'changeInfo',
582                'properties': {
583                  'pinned': {},
584                  'status': {}
585                }
586              }
587            ]
588          }
589        ]
590      }])
591    }
592  },
593  '1453': {
594    'api': {
595      '_api_features.json': "{}",
596      '_manifest_features.json': "{}",
597      '_permission_features.json': "{}",
598      'fake_tabs.idl': FAKE_TABS_IDL,
599      'tabs.json': json.dumps([{
600        'namespace': 'tabs',
601        'types': [
602          {
603            'id': 'Tab',
604            'properties': {
605              'url': {},
606              'index': {},
607              'selected': {},
608              'id': {},
609              'windowId': {}
610            }
611          },
612          {
613            'id': 'InjectDetails',
614            'properties': {
615              'allFrames': {},
616            }
617          },
618          {
619            'id': 'DeprecatedType',
620            'deprecated': 'This is deprecated'
621          }
622        ],
623        'properties': {
624          'fakeTabsProperty1': {},
625          'fakeTabsProperty2': {}
626        },
627        'functions': [
628          {
629            'name': 'getCurrent',
630            'parameters': [
631              {
632                'name': 'callback',
633                'parameters': [
634                  {
635                    'name': 'tab'
636                  }
637                ]
638              }
639            ]
640          },
641          {
642            'name': 'get',
643            'parameters': [
644              {
645                'name': 'callback',
646                'parameters': [
647                  {
648                    'name': 'tab'
649                  }
650                ]
651              },
652            ]
653          }
654        ],
655        'events': [
656          {
657            'name': 'onUpdated',
658            'parameters': [
659              {
660                'name': 'tabId'
661              },
662              {
663                'name': 'changeInfo',
664                'properties': {
665                  'pinned': {},
666                  'status': {}
667                }
668              }
669            ]
670          }
671        ]
672      }])
673    }
674  },
675  '1410': {
676    'api': {
677      '_manifest_features.json': "{}",
678      '_permission_features.json': "{}",
679      'fake_tabs.idl': FAKE_TABS_IDL,
680      'tabs.json': json.dumps([{
681        'namespace': 'tabs',
682        'types': [
683          {
684            'id': 'Tab',
685            'properties': {
686              'url': {},
687              'index': {},
688              'selected': {},
689              'id': {},
690              'windowId': {}
691            }
692          },
693          {
694            'id': 'InjectDetails',
695            'properties': {
696              'allFrames': {},
697            }
698          },
699          {
700            'id': 'DeprecatedType',
701            'deprecated': 'This is deprecated'
702          }
703        ],
704        'properties': {
705          'fakeTabsProperty1': {},
706          'fakeTabsProperty2': {}
707        },
708        'functions': [
709          {
710            'name': 'getCurrent',
711            'parameters': [
712              {
713                'name': 'callback',
714                'parameters': [
715                  {
716                    'name': 'tab'
717                  }
718                ]
719              }
720            ]
721          },
722          {
723            'name': 'get',
724            'parameters': [
725              {
726                'name': 'callback',
727                'parameters': [
728                  {
729                    'name': 'tab'
730                  }
731                ]
732              }
733            ]
734          }
735        ],
736        'events': [
737          {
738            'name': 'onUpdated',
739            'parameters': [
740              {
741                'name': 'tabId'
742              },
743              {
744                'name': 'changeInfo',
745                'properties': {
746                  'pinned': {},
747                  'status': {}
748                }
749              }
750            ]
751          }
752        ]
753      }])
754    }
755  },
756  '1364': {
757    'api': {
758      '_manifest_features.json': "{}",
759      '_permission_features.json': "{}",
760      'fake_tabs.idl': FAKE_TABS_WITH_INLINING_IDL,
761      'tabs.json': json.dumps([{
762        'namespace': 'tabs',
763        'types': [
764          {
765            'id': 'Tab',
766            'properties': {
767              'url': {},
768              'index': {},
769              'selected': {},
770              'id': {},
771              'windowId': {}
772            }
773          },
774          {
775            'id': 'InjectDetails',
776            'properties': {
777              'allFrames': {}
778            }
779          },
780          {
781            'id': 'DeprecatedType',
782          }
783        ],
784        'properties': {
785          'fakeTabsProperty1': {},
786          'fakeTabsProperty2': {}
787        },
788        'functions': [
789          {
790            'name': 'getCurrent',
791            'parameters': [
792              {
793                'name': 'callback',
794                'parameters': [
795                  {
796                    'name': 'tab'
797                  }
798                ]
799              }
800            ]
801          },
802          {
803            'name': 'get',
804            'parameters': [
805              {
806                'name': 'callback',
807                'parameters': [
808                  {
809                    'name': 'tab'
810                  }
811                ]
812              }
813            ]
814          }
815        ],
816        'events': [
817          {
818            'name': 'onUpdated',
819            'parameters': [
820              {
821                'name': 'tabId'
822              },
823              {
824                'name': 'changeInfo',
825                'properties': {
826                  'pinned': {},
827                  'status': {}
828                }
829              }
830            ]
831          }
832        ]
833      }])
834    }
835  },
836  '1312': {
837    'api': {
838      '_manifest_features.json': "{}",
839      '_permission_features.json': "{}",
840      'tabs.json': json.dumps([{
841        'namespace': 'tabs',
842        'types': [
843          {
844            'id': 'Tab',
845            'properties': {
846              'url': {},
847              'index': {},
848              'selected': {},
849              'id': {},
850              'windowId': {}
851            }
852          }
853        ],
854        'properties': {
855          'fakeTabsProperty1': {},
856          'fakeTabsProperty2': {}
857        },
858        'functions': [
859          {
860            'name': 'getCurrent',
861            'parameters': [
862              {
863                'name': 'callback',
864                'parameters': [
865                  {
866                    'name': 'tab'
867                  }
868                ]
869              }
870            ]
871          },
872          {
873            'name': 'get',
874            'parameters': [
875              {
876                'name': 'callback',
877                'parameters': [
878                  {
879                    'name': 'tab'
880                  }
881                ]
882              }
883            ]
884          }
885        ],
886        'events': [
887          {
888            'name': 'onUpdated',
889            'parameters': [
890              {
891                'name': 'tabId'
892              },
893              {
894                'name': 'changeInfo',
895                'properties': {
896                  'pinned': {},
897                  'status': {}
898                }
899              }
900            ]
901          }
902        ]
903      }])
904    }
905  },
906  '1271': {
907    'api': {
908      '_manifest_features.json': "{}",
909      '_permission_features.json': "{}",
910      'tabs.json': json.dumps([{
911        'namespace': 'tabs',
912        'types': [
913          {
914            'id': 'Tab',
915            'properties': {
916              'url': {},
917              'index': {},
918              'selected': {},
919              'id': {},
920              'windowId': {}
921            }
922          }
923        ],
924        'properties': {
925          'fakeTabsProperty1': {},
926          'fakeTabsProperty2': {}
927        },
928        'functions': [
929          {
930            'name': 'getCurrent',
931            'parameters': [
932              {
933                'name': 'callback',
934                'parameters': [
935                  {
936                    'name': 'tab'
937                  }
938                ]
939              }
940            ]
941          },
942          {
943            'name': 'get',
944            'parameters': [
945              {
946                'name': 'callback',
947                'parameters': [
948                  {
949                    'name': 'tab'
950                  }
951                ]
952              }
953            ]
954          }
955        ],
956        'events': [
957          {
958            'name': 'onUpdated',
959            'parameters': [
960              {
961                'name': 'tabId'
962              },
963              {
964                'name': 'changeInfo',
965                'properties': {
966                  'pinned': {},
967                  'status': {}
968                }
969              }
970            ]
971          }
972        ]
973      }])
974    }
975  },
976  '1229': {
977    'api': {
978      '_manifest_features.json': "{}",
979      '_permission_features.json': "{}",
980      'tabs.json': json.dumps([{
981        'namespace': 'tabs',
982        'types': [
983          {
984            'id': 'Tab',
985            'properties': {
986              'url': {},
987              'index': {},
988              'selected': {},
989              'id': {},
990              'windowId': {}
991            }
992          }
993        ],
994        'properties': {
995          'fakeTabsProperty1': {},
996          'fakeTabsProperty2': {}
997        },
998        'functions': [
999          {
1000            'name': 'getCurrent',
1001            'parameters': [
1002              {
1003                'name': 'callback',
1004                'parameters': [
1005                  {
1006                    'name': 'tab'
1007                  }
1008                ]
1009              }
1010            ]
1011          },
1012          {
1013            'name': 'get',
1014            'parameters': [
1015              {
1016                'name': 'callback',
1017                'parameters': [
1018                  {
1019                    'name': 'tab'
1020                  }
1021                ]
1022              }
1023            ]
1024          }
1025        ],
1026        'events': [
1027          {
1028            'name': 'onUpdated',
1029            'parameters': [
1030              {
1031                'name': 'tabId'
1032              },
1033              {
1034                'name': 'changeInfo',
1035                'properties': {
1036                  'pinned': {},
1037                  'status': {}
1038                }
1039              }
1040            ]
1041          }
1042        ]
1043      }])
1044    }
1045  },
1046  '1180': {
1047    'api': {
1048      '_manifest_features.json': "{}",
1049      '_permission_features.json': "{}",
1050      'tabs.json': json.dumps([{
1051        'namespace': 'tabs',
1052        'types': [
1053          {
1054            'id': 'Tab',
1055            'properties': {
1056              'url': {},
1057              'index': {},
1058              'selected': {},
1059              'id': {}
1060            }
1061          }
1062        ],
1063        'properties': {
1064          'fakeTabsProperty1': {},
1065          'fakeTabsProperty2': {}
1066        },
1067        'functions': [
1068          {
1069            'name': 'getCurrent',
1070            'parameters': [
1071              {
1072                'name': 'callback',
1073                'parameters': [
1074                  {
1075                    'name': 'tab'
1076                  }
1077                ]
1078              }
1079            ]
1080          },
1081          {
1082            'name': 'get',
1083            'parameters': [
1084              {
1085                'name': 'callback',
1086                'parameters': [
1087                  {
1088                    'name': 'tab'
1089                  }
1090                ]
1091              }
1092            ]
1093          }
1094        ],
1095        'events': [
1096          {
1097            'name': 'onUpdated',
1098            'parameters': [
1099              {
1100                'name': 'tabId'
1101              },
1102              {
1103                'name': 'changeInfo',
1104                'properties': {
1105                  'pinned': {},
1106                  'status': {}
1107                }
1108              }
1109            ]
1110          }
1111        ]
1112      }])
1113    }
1114  },
1115  '1132': {
1116    'api': {
1117      '_manifest_features.json': "{}",
1118      '_permission_features.json': "{}",
1119      'tabs.json': json.dumps([{
1120        'namespace': 'tabs',
1121        'types': [
1122          {
1123            'id': 'Tab',
1124            'properties': {
1125              'url': {},
1126              'index': {},
1127              'id': {}
1128            }
1129          }
1130        ],
1131        'properties': {
1132          'fakeTabsProperty1': {},
1133          'fakeTabsProperty2': {}
1134        },
1135        'functions': [
1136          {
1137            'name': 'getCurrent',
1138            'parameters': [
1139              {
1140                'name': 'callback',
1141                'parameters': [
1142                  {
1143                    'name': 'tab'
1144                  }
1145                ]
1146              }
1147            ]
1148          },
1149          {
1150            'name': 'get',
1151            'parameters': [
1152              {
1153                'name': 'callback',
1154                'parameters': [
1155                  {
1156                    'name': 'tab'
1157                  }
1158                ]
1159              }
1160            ]
1161          }
1162        ],
1163        'events': [
1164          {
1165            'name': 'onUpdated',
1166            'parameters': [
1167              {
1168                'name': 'tabId'
1169              },
1170              {
1171                'name': 'changeInfo',
1172                'properties': {
1173                  'pinned': {},
1174                  'status': {}
1175                }
1176              }
1177            ]
1178          }
1179        ]
1180      }])
1181    }
1182  },
1183  '1084': {
1184    'api': {
1185      'tabs.json': json.dumps([{
1186        'namespace': 'tabs',
1187        'types': [
1188          {
1189            'id': 'Tab',
1190            'properties': {
1191              'url': {},
1192              'index': {},
1193              'id': {}
1194            }
1195          }
1196        ],
1197        'properties': {
1198          'fakeTabsProperty1': {},
1199          'fakeTabsProperty2': {}
1200        },
1201        'functions': [
1202          {
1203            'name': 'getCurrent',
1204            'parameters': [
1205              {
1206                'name': 'callback',
1207                'parameters': [
1208                  {
1209                    'name': 'tab'
1210                  }
1211                ]
1212              }
1213            ]
1214          },
1215          {
1216            'name': 'get',
1217            'parameters': [
1218              {
1219                'name': 'callback',
1220                'parameters': [
1221                  {
1222                    'name': 'tab'
1223                  }
1224                ]
1225              }
1226            ]
1227          }
1228        ],
1229        'events': [
1230          {
1231            'name': 'onUpdated',
1232            'parameters': [
1233              {
1234                'name': 'tabId'
1235              },
1236              {
1237                'name': 'changeInfo',
1238                'properties': {
1239                  'pinned': {},
1240                  'status': {}
1241                }
1242              }
1243            ]
1244          }
1245        ]
1246      }])
1247    }
1248  },
1249  '1025': {
1250    'api': {
1251      'tabs.json': json.dumps([{
1252        'namespace': 'tabs',
1253        'types': [
1254          {
1255            'id': 'Tab',
1256            'properties': {
1257              'url': {},
1258              'index': {},
1259              'id': {}
1260            }
1261          }
1262        ],
1263        'properties': {
1264          'fakeTabsProperty1': {},
1265          'fakeTabsProperty2': {}
1266        },
1267        'functions': [
1268          {
1269            'name': 'get',
1270            'parameters': [
1271              {
1272                'name': 'callback',
1273                'parameters': [
1274                  {
1275                    'name': 'tab'
1276                  }
1277                ]
1278              }
1279            ]
1280          }
1281        ],
1282        'events': [
1283          {
1284            'name': 'onUpdated',
1285            'parameters': [
1286              {
1287                'name': 'tabId'
1288              },
1289              {
1290                'name': 'changeInfo',
1291                'properties': {
1292                  'pinned': {},
1293                  'status': {}
1294                }
1295              }
1296            ]
1297          }
1298        ]
1299      }])
1300    }
1301  },
1302  '963': {
1303    'api': {
1304      'extension_api.json': json.dumps([{
1305        'namespace': 'tabs',
1306        'types': [
1307          {
1308            'id': 'Tab',
1309            'properties': {
1310              'url': {},
1311              'id': {}
1312            }
1313          }
1314        ],
1315        'properties': {
1316          'fakeTabsProperty1': {},
1317          'fakeTabsProperty2': {}
1318        },
1319        'functions': [
1320          {
1321            'name': 'get',
1322            'parameters': [
1323              {
1324                'name': 'callback',
1325                'parameters': [
1326                  {
1327                    'name': 'tab'
1328                  }
1329                ]
1330              }
1331            ]
1332          }
1333        ],
1334        'events': [
1335          {
1336            'name': 'onUpdated',
1337            'parameters': [
1338              {
1339                'name': 'tabId'
1340              },
1341              {
1342                'name': 'changeInfo',
1343                'properties': {
1344                  'pinned': {},
1345                  'status': {}
1346                }
1347              }
1348            ]
1349          }
1350        ]
1351      }])
1352    }
1353  },
1354  '912': {
1355    'api': {
1356      'extension_api.json': json.dumps([{
1357        'namespace': 'tabs',
1358        'types': [
1359          {
1360            'id': 'Tab',
1361            'properties': {
1362              'url': {},
1363              'id': {}
1364            }
1365          }
1366        ],
1367        'properties': {
1368          'fakeTabsProperty1': {},
1369          'fakeTabsProperty2': {}
1370        },
1371        'functions': [
1372          {
1373            'name': 'get',
1374            'parameters': [
1375              {
1376                'name': 'callback',
1377                'parameters': [
1378                  {
1379                    'name': 'tab'
1380                  }
1381                ]
1382              }
1383            ]
1384          }
1385        ],
1386        'events': [
1387          {
1388            'name': 'onUpdated',
1389            'parameters': [
1390              {
1391                'name': 'tabId'
1392              }
1393            ]
1394          }
1395        ]
1396      }])
1397    }
1398  },
1399  '874': {
1400    'api': {
1401      'extension_api.json': json.dumps([{
1402        'namespace': 'tabs',
1403        'types': [
1404          {
1405            'id': 'Tab',
1406            'properties': {
1407              'url': {},
1408              'id': {}
1409            }
1410          }
1411        ],
1412        'properties': {
1413          'fakeTabsProperty1': {},
1414          'fakeTabsProperty2': {}
1415        },
1416        'functions': [
1417          {
1418            'name': 'get',
1419            'parameters': [
1420              {
1421                'name': 'callback',
1422                'parameters': [
1423                  {
1424                    'name': 'tab'
1425                  }
1426                ]
1427              }
1428            ]
1429          }
1430        ],
1431        'events': [
1432          {
1433            'name': 'onUpdated',
1434            'parameters': [
1435              {
1436                'name': 'tabId'
1437              }
1438            ]
1439          }
1440        ]
1441      }])
1442    }
1443  },
1444  '835': {
1445    'api': {
1446      'extension_api.json': json.dumps([{
1447        'namespace': 'tabs',
1448        'types': [
1449          {
1450            'id': 'Tab',
1451            'properties': {
1452              'url': {},
1453              'id': {}
1454            }
1455          }
1456        ],
1457        'properties': {
1458          'fakeTabsProperty1': {}
1459        },
1460        'functions': [
1461          {
1462            'name': 'get',
1463            'parameters': [
1464              {
1465                'name': 'callback',
1466                'parameters': [
1467                  {
1468                    'name': 'tab'
1469                  }
1470                ]
1471              }
1472            ]
1473          }
1474        ],
1475        'events': [
1476          {
1477            'name': 'onUpdated',
1478            'parameters': [
1479              {
1480                'name': 'tabId'
1481              }
1482            ]
1483          }
1484        ]
1485      }])
1486    }
1487  },
1488  '782': {
1489    'api': {
1490      'extension_api.json': "{}"
1491    }
1492  }
1493})
1494