canned_data.py revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
1# Copyright 2013 The Chromium Authors. All rights reserved.
2# Use of this source code is governed by a BSD-style license that can be
3# found in the LICENSE file.
4
5import json
6
7from extensions_paths import CHROME_EXTENSIONS
8from third_party.json_schema_compiler.json_parse import OrderedDict
9from test_file_system import MoveAllTo, MoveTo
10
11
12CANNED_CHANNELS = OrderedDict([
13  ('trunk', 'trunk'),
14  ('dev', 28),
15  ('beta', 27),
16  ('stable', 26)
17])
18
19
20CANNED_BRANCHES = OrderedDict([
21  ('trunk', 'trunk'),
22  (28, '1500'),
23  (27, '1453'),
24  (26, '1410'),
25  (25, '1364'),
26  (24, '1312'),
27  (23, '1271'),
28  (22, '1229'),
29  (21, '1180'),
30  (20, '1132'),
31  (19, '1084'),
32  (18, '1025'),
33  (17, '963'),
34  (16, '912'),
35  (15, '874'),
36  (14, '835'),
37  (13, '782'),
38  (12, '742'),
39  (11, '696'),
40  (10, '648'),
41  ( 9, '597'),
42  ( 8, '552'),
43  ( 7, '544'),
44  ( 6, '495'),
45  ( 5, '396'),
46])
47
48
49CANNED_TEST_FILE_SYSTEM_DATA = MoveTo(CHROME_EXTENSIONS, {
50  'api': {
51    '_api_features.json': json.dumps({
52      'ref_test': { 'dependencies': ['permission:ref_test'] },
53      'tester': { 'dependencies': ['permission:tester', 'manifest:tester'] }
54    }),
55    '_manifest_features.json': '{}',
56    '_permission_features.json': '{}'
57  },
58  'docs': {
59    'templates': {
60      'articles': {
61        'test_article.html':
62            '<h1>hi</h1>you<h2>first</h2><h3>inner</h3><h2>second</h2>'
63      },
64      'intros': {
65        'test_intro.html':
66            'you<h2>first</h2><h3>inner</h3><h2>second</h2>'
67      },
68      'json': {
69        'api_availabilities.json': json.dumps({
70          'trunk_api': {
71            'channel': 'trunk'
72          },
73          'dev_api': {
74            'channel': 'dev'
75          },
76          'beta_api': {
77            'channel': 'beta'
78          },
79          'stable_api': {
80            'channel': 'stable',
81            'version': 20
82          }
83        }),
84        'intro_tables.json': json.dumps({
85          'tester': {
86            'Permissions': [
87              {
88                'class': 'override',
89                'text': '"tester"'
90              },
91              {
92                'text': 'is an API for testing things.'
93              }
94            ],
95            'Learn More': [
96              {
97                'link': 'https://tester.test.com/welcome.html',
98                'text': 'Welcome!'
99              }
100            ]
101          }
102        }),
103        'manifest.json': '{}',
104        'permissions.json': '{}'
105      },
106      'private': {
107        'intro_tables': {
108          'trunk_message.html': 'available on trunk'
109        },
110        'table_of_contents.html': '<table-of-contents>',
111      }
112    }
113  }
114})
115
116
117_TEST_WHATS_NEW_JSON = {
118  "backgroundpages.to-be-non-persistent": {
119    "type": "additionsToExistingApis",
120    "description": "backgrounds to be non persistent",
121    "version": 22
122  },
123  "chromeSetting.set-regular-only-scope": {
124    "type": "additionsToExistingApis",
125    "description": "ChromeSetting.set now has a regular_only scope.",
126    "version": 21
127  },
128  "manifest-v1-deprecated": {
129    "type": "manifestChanges",
130    "description": "Manifest version 1 was deprecated in Chrome 18",
131    "version": 20
132  }
133}
134
135
136CANNED_API_FILE_SYSTEM_DATA = MoveAllTo(CHROME_EXTENSIONS, {
137  'trunk': {
138    'api': {
139      '_api_features.json': json.dumps({
140        'alarm': {
141          'channel': 'stable'
142        },
143        'app.window': {
144          'channel': 'stable'
145        },
146        'browserAction': {
147          'channel': 'stable'
148        },
149        'contextMenus': {
150          'channel': 'stable'
151        },
152        'events': {
153          'channel': 'stable'
154        },
155        'extension': {
156          'channel': 'stable'
157        },
158        'systemInfo.cpu': {
159          'channel': 'stable'
160        },
161        'systemInfo.stuff': {
162          'channel': 'dev'
163        }
164      }),
165      '_manifest_features.json': json.dumps({
166        'history': {
167          'channel': 'beta'
168        },
169        'notifications': {
170          'channel': 'beta'
171        },
172        'page_action': {
173          'channel': 'stable'
174        },
175        'runtime': {
176          'channel': 'stable'
177        },
178        'storage': {
179          'channel': 'beta'
180        },
181        'sync': {
182          'channel': 'trunk'
183        },
184        'web_request': {
185          'channel': 'stable'
186        }
187      }),
188      '_permission_features.json': json.dumps({
189        'alarms': {
190          'channel': 'stable'
191        },
192        'bluetooth': {
193          'channel': 'dev'
194        },
195        'bookmarks': {
196          'channel': 'stable'
197        },
198        'cookies': {
199          'channel': 'dev'
200        },
201        'declarativeContent': {
202          'channel': 'trunk'
203        },
204        'declarativeWebRequest': [
205          { 'channel': 'beta',
206            'extension_types': ['extension']
207          },
208          # whitelist
209          { 'channel': 'stable',
210            'extension_types': ['extension']
211          },
212        ],
213        'falseBetaAPI': {
214          'channel': 'beta'
215        },
216        'systemInfo.display': {
217          'channel': 'stable'
218        },
219        'trunkAPI': {
220          'channel': 'trunk'
221        }
222      }),
223      'alarm.json': json.dumps([{
224        'namespace': 'alarm',
225        'description': '<code>alarm</code>'
226      }]),
227      'app_window.json': json.dumps([{
228        'namespace': 'app.window',
229        'description': '<code>app.window</code>'
230      }]),
231      'browser_action.json': json.dumps([{
232        'namespace': 'browserAction',
233        'description': '<code>browserAction</code>'
234      }]),
235      'bluetooth.idl': '\n'.join(('//Copyleft Schmopyright',
236                                  '',
237                                  '//An IDL description, oh my!',
238                                  'namespace bluetooth {',
239                                  '  dictionary Socket {',
240                                  '    long id;',
241                                  '  };',
242                                  '};')),
243      'context_menus.json': json.dumps([{
244        'namespace': 'contextMenus',
245        'description': ''
246      }]),
247      'json_stable_api.json': json.dumps([{
248        'namespace': 'jsonStableAPI',
249        'description': 'An API with a predetermined availability.'
250      }]),
251      'idle.json': json.dumps([{'namespace': 'idle', 'description': ''}]),
252      'input_ime.json': json.dumps([{
253        'namespace': 'input.ime',
254        'description': 'An API that has the potential to cause some trouble.'
255      }]),
256      'menus.json': json.dumps([{'namespace': 'menus', 'description': ''}]),
257      'tabs.json': json.dumps([{'namespace': 'tabs', 'description': ''}]),
258      'windows.json': json.dumps([{'namespace': 'windows', 'description': ''}])
259    },
260    'docs': {
261      'templates': {
262        'json': {
263          'api_availabilities.json': json.dumps({
264            'jsonTrunkAPI': {
265              'channel': 'trunk'
266            },
267            'jsonDevAPI': {
268              'channel': 'dev'
269            },
270            'jsonBetaAPI': {
271              'channel': 'beta'
272            },
273            'jsonStableAPI': {
274              'channel': 'stable',
275              'version': 20
276            }
277          }),
278          'intro_tables.json': json.dumps({
279            'test': [
280              {
281                'Permissions': 'probably none'
282              }
283            ]
284          }),
285          'manifest.json': '{}',
286          'permissions.json': '{}',
287          'whats_new.json': json.dumps(_TEST_WHATS_NEW_JSON)
288        },
289        'public': {
290          'apps': {
291            'alarm.html': 'alarm.html',
292            'app_window.html': 'app_window.html',
293            'contextMenus.html': 'contextMenus.html',
294          },
295          'extensions': {
296            'alarm.html': 'alarm.html',
297            'browserAction.html': 'browserAction.html',
298            'contextMenus.html': 'contextMenus.html',
299          }
300        }
301      }
302    }
303  },
304  '1500': {
305    'api': {
306      '_api_features.json': json.dumps({
307        'alarm': {
308          'channel': 'stable'
309        },
310        'app.window': {
311          'channel': 'stable'
312        },
313        'browserAction': {
314          'channel': 'stable'
315        },
316        'events': {
317          'channel': 'trunk'
318        },
319        'extension': {
320          'channel': 'stable'
321        },
322        'systemInfo.cpu': {
323          'channel': 'stable'
324        },
325        'systemInfo.stuff': {
326          'channel': 'dev'
327        }
328      }),
329      '_manifest_features.json': json.dumps({
330        'contextMenus': {
331          'channel': 'trunk'
332        },
333        'notifications': {
334          'channel': 'beta'
335        },
336        'page_action': {
337          'channel': 'stable'
338        },
339        'runtime': {
340          'channel': 'stable'
341        },
342        'storage': {
343          'channel': 'dev'
344        },
345        'sync': {
346          'channel': 'trunk'
347        },
348        'system_info_display': {
349          'channel': 'stable'
350        },
351        'web_request': {
352          'channel': 'stable'
353        }
354      }),
355      '_permission_features.json': json.dumps({
356        'alarms': {
357          'channel': 'stable'
358        },
359        'bluetooth': {
360          'channel': 'dev'
361        },
362        'bookmarks': {
363          'channel': 'stable'
364        },
365        'cookies': {
366          'channel': 'dev'
367        },
368        'declarativeContent': {
369          'channel': 'trunk'
370        },
371        'declarativeWebRequest': [
372          { 'channel': 'beta' },
373          # whitelist
374          { 'channel': 'stable'}
375        ],
376        'downloads': {
377          'channel': 'beta'
378        }
379      }),
380      'alarm.json': json.dumps([{
381        'namespace': 'alarm',
382        'description': '<code>alarm</code>'
383      }]),
384      'app_window.json': json.dumps([{
385        'namespace': 'app.window',
386        'description': '<code>app.window</code>'
387      }]),
388      'browser_action.json': json.dumps([{
389        'namespace': 'browserAction',
390        'description': '<code>browserAction</code>'
391      }]),
392      'idle.json': json.dumps([{'namespace': 'idle'}]),
393      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
394      'menus.json': json.dumps([{'namespace': 'menus'}]),
395      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
396      'windows.json': json.dumps([{'namespace': 'windows'}])
397    },
398    'docs': {
399      'templates': {
400        'json': {
401          'api_availabilities.json': json.dumps({
402            'jsonTrunkAPI': {
403              'channel': 'trunk'
404            },
405            'jsonDevAPI': {
406              'channel': 'dev'
407            },
408            'jsonBetaAPI': {
409              'channel': 'beta'
410            },
411            'jsonStableAPI': {
412              'channel': 'stable',
413              'version': 20
414            }
415          }),
416          'intro_tables.json': json.dumps({
417            'test': [
418              {
419                'Permissions': 'probably none'
420              }
421            ]
422          }),
423          'manifest.json': '{}',
424          'permissions.json': '{}',
425          'whats_new.json': json.dumps(_TEST_WHATS_NEW_JSON)
426        },
427        'public': {
428          'apps': {
429            'alarm.html': 'alarm.html',
430            'app_window.html': 'app_window.html',
431          },
432          'extensions': {
433            'alarm.html': 'alarm.html',
434            'browserAction.html': 'browserAction.html',
435          }
436        }
437      }
438    }
439  },
440  '1453': {
441    'api': {
442      '_api_features.json': json.dumps({
443        'alarm': {
444          'channel': 'stable'
445        },
446        'app.window': {
447          'channel': 'stable'
448        },
449        'browserAction': {
450          'channel': 'stable'
451        },
452        'events': {
453          'channel': 'dev'
454        },
455        'extension': {
456          'channel': 'stable'
457        },
458        'systemInfo.cpu': {
459          'channel': 'stable'
460        },
461        'systemInfo.stuff': {
462          'channel': 'dev'
463        }
464      }),
465      '_manifest_features.json': json.dumps({
466        'notifications': {
467          'channel': 'dev'
468        },
469        'page_action': {
470          'channel': 'stable'
471        },
472        'runtime': {
473          'channel': 'stable'
474        },
475        'storage': {
476          'channel': 'dev'
477        },
478        'system_info_display': {
479          'channel': 'stable'
480        },
481        'web_request': {
482          'channel': 'stable'
483        }
484      }),
485      '_permission_features.json': json.dumps({
486        'alarms': {
487          'channel': 'stable'
488        },
489        'bluetooth': {
490          'channel': 'dev'
491        },
492        'bookmarks': {
493          'channel': 'stable'
494        },
495        'context_menus': {
496          'channel': 'trunk'
497        },
498        'declarativeContent': {
499          'channel': 'trunk'
500        },
501        'declarativeWebRequest': [
502          { 'channel': 'beta' },
503          # whitelist
504          { 'channel': 'stable'}
505        ],
506        'downloads': {
507          'channel': 'dev'
508        }
509      }),
510      'alarm.json': json.dumps([{
511        'namespace': 'alarm',
512        'description': '<code>alarm</code>'
513      }]),
514      'app_window.json': json.dumps([{
515        'namespace': 'app.window',
516        'description': '<code>app.window</code>'
517      }]),
518      'browser_action.json': json.dumps([{
519        'namespace': 'browserAction',
520        'description': '<code>browserAction</code>'
521      }]),
522      'idle.json': json.dumps([{'namespace': 'idle'}]),
523      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
524      'menus.json': json.dumps([{'namespace': 'menus'}]),
525      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
526      'windows.json': json.dumps([{'namespace': 'windows'}])
527    },
528    'docs': {
529      'templates': {
530        'json': {
531          'api_availabilities.json': json.dumps({
532            'jsonTrunkAPI': {
533              'channel': 'trunk'
534            },
535            'jsonDevAPI': {
536              'channel': 'dev'
537            },
538            'jsonBetaAPI': {
539              'channel': 'beta'
540            },
541            'jsonStableAPI': {
542              'channel': 'stable',
543              'version': 20
544            }
545          }),
546          'intro_tables.json': json.dumps({
547            'test': [
548              {
549                'Permissions': 'probably none'
550              }
551            ]
552          }),
553          'manifest.json': '{}',
554          'permissions.json': '{}',
555          'whats_new.json': json.dumps(_TEST_WHATS_NEW_JSON)
556        },
557        'public': {
558          'apps': {
559            'alarm.html': 'alarm.html',
560            'app_window.html': 'app_window.html',
561          },
562          'extensions': {
563            'alarm.html': 'alarm.html',
564            'browserAction.html': 'browserAction.html',
565          }
566
567        }
568      }
569    }
570  },
571  '1410': {
572    'api': {
573      '_manifest_features.json': json.dumps({
574        'alarm': {
575          'channel': 'stable'
576        },
577        'app.window': {
578          'channel': 'stable'
579        },
580        'browserAction': {
581          'channel': 'stable'
582        },
583        'events': {
584          'channel': 'beta'
585        },
586        'notifications': {
587          'channel': 'dev'
588        },
589        'page_action': {
590          'channel': 'stable'
591        },
592        'runtime': {
593          'channel': 'stable'
594        },
595        'web_request': {
596          'channel': 'stable'
597        }
598      }),
599      '_permission_features.json': json.dumps({
600        'alarms': {
601          'channel': 'stable'
602        },
603        'bluetooth': {
604          'channel': 'dev'
605        },
606        'bookmarks': {
607          'channel': 'stable'
608        },
609        'context_menus': {
610          'channel': 'trunk'
611        },
612        'declarativeContent': {
613          'channel': 'trunk'
614        },
615        'declarativeWebRequest': [
616          { 'channel': 'beta' },
617          # whitelist
618          { 'channel': 'stable'}
619        ],
620        'systemInfo.display': {
621          'channel': 'stable'
622        }
623      }),
624      'alarm.json': json.dumps([{
625        'namespace': 'alarm',
626        'description': '<code>alarm</code>'
627      }]),
628      'app_window.json': json.dumps([{
629        'namespace': 'app.window',
630        'description': '<code>app.window</code>'
631      }]),
632      'browser_action.json': json.dumps([{
633        'namespace': 'browserAction',
634        'description': '<code>browserAction</code>'
635      }]),
636      'idle.json': json.dumps([{'namespace': 'idle'}]),
637      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
638      'menus.json': json.dumps([{'namespace': 'menus'}]),
639      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
640      'windows.json': json.dumps([{'namespace': 'windows'}])
641    }
642  },
643  '1364': {
644    'api': {
645      '_manifest_features.json': json.dumps({
646        'page_action': {
647          'channel': 'stable'
648        },
649        'runtime': {
650          'channel': 'stable'
651        }
652      }),
653      '_permission_features.json': json.dumps({
654        'alarms': {
655          'channel': 'stable'
656        },
657        'bookmarks': {
658          'channel': 'stable'
659        },
660        'systemInfo.display': {
661          'channel': 'stable'
662        },
663        'webRequest': {
664          'channel': 'stable'
665        }
666      }),
667      'idle.json': json.dumps([{'namespace': 'idle'}]),
668      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
669      'menus.json': json.dumps([{'namespace': 'menus'}]),
670      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
671      'windows.json': json.dumps([{'namespace': 'windows'}])
672    }
673  },
674  '1312': {
675    'api': {
676      '_manifest_features.json': json.dumps({
677        'page_action': {
678          'channel': 'stable'
679        },
680        'runtime': {
681          'channel': 'stable'
682        },
683        'web_request': {
684          'channel': 'stable'
685        }
686      }),
687      '_permission_features.json': json.dumps({
688        'alarms': {
689          'channel': 'stable'
690        },
691        'bookmarks': {
692          'channel': 'stable'
693        },
694        'systemInfo.display': {
695          'channel': 'stable'
696        }
697      }),
698      'idle.json': json.dumps([{'namespace': 'idle'}]),
699      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
700      'menus.json': json.dumps([{'namespace': 'menus'}]),
701      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
702      'windows.json': json.dumps([{'namespace': 'windows'}])
703    }
704  },
705  '1271': {
706    'api': {
707      '_manifest_features.json': json.dumps({
708        'page_action': {
709          'channel': 'stable'
710        },
711        'runtime': {
712          'channel': 'stable'
713        },
714        'system_info_display': {
715          'channel': 'stable'
716        }
717      }),
718      '_permission_features.json': json.dumps({
719        'alarms': {
720          'channel': 'beta'
721        },
722        'bookmarks': {
723          'channel': 'stable'
724        },
725        'webRequest': {
726          'channel': 'stable'
727        }
728      }),
729      'alarms.idl': '//copy\n\n//desc\nnamespace alarms {}',
730      'idle.json': json.dumps([{'namespace': 'idle'}]),
731      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
732      'menus.json': json.dumps([{'namespace': 'menus'}]),
733      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
734      'windows.json': json.dumps([{'namespace': 'windows'}])
735    }
736  },
737  '1229': {
738    'api': {
739      '_manifest_features.json': json.dumps({
740        'page_action': {
741          'channel': 'stable'
742        },
743        'runtime': {
744          'channel': 'stable'
745        },
746        'web_request': {
747          'channel': 'stable'
748        }
749      }),
750      '_permission_features.json': json.dumps({
751        'bookmarks': {
752          'channel': 'stable'
753        },
754        'systemInfo.display': {
755          'channel': 'beta'
756        }
757      }),
758      'alarms.idl': '//copy\n\n//desc\nnamespace alarms {}',
759      'idle.json': json.dumps([{'namespace': 'idle'}]),
760      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
761      'menus.json': json.dumps([{'namespace': 'menus'}]),
762      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
763    }
764  },
765  '1180': {
766    'api': {
767      '_manifest_features.json': json.dumps({
768        'page_action': {
769          'channel': 'stable'
770        },
771        'runtime': {
772          'channel': 'stable'
773        }
774      }),
775      '_permission_features.json': json.dumps({
776        'bookmarks': {
777          'channel': 'stable'
778        },
779        'webRequest': {
780          'channel': 'stable'
781        }
782      }),
783      'bookmarks.json': json.dumps([{'namespace': 'bookmarks'}]),
784      'idle.json': json.dumps([{'namespace': 'idle'}]),
785      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
786      'menus.json': json.dumps([{'namespace': 'menus'}]),
787      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
788    }
789  },
790  '1132': {
791    'api': {
792      '_manifest_features.json': json.dumps({
793        'bookmarks': {
794          'channel': 'trunk'
795        },
796        'page_action': {
797          'channel': 'stable'
798        }
799      }),
800      '_permission_features.json': json.dumps({
801        'webRequest': {
802          'channel': 'stable'
803        }
804      }),
805      'bookmarks.json': json.dumps([{'namespace': 'bookmarks'}]),
806      'idle.json': json.dumps([{'namespace': 'idle'}]),
807      'input.ime.json': json.dumps([{'namespace': 'input.ime'}]),
808      'menus.json': json.dumps([{'namespace': 'menus'}]),
809      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
810    }
811  },
812  '1084': {
813    'api': {
814      '_manifest_features.json': json.dumps({
815        'contents': 'nothing of interest here,really'
816      }),
817      'bookmarks.json': json.dumps([{'namespace': 'bookmarks'}]),
818      'idle.json': json.dumps([{'namespace': 'idle'}]),
819      'input.ime.json': json.dumps([{'namespace': 'input.ime'}]),
820      'menus.json': json.dumps([{'namespace': 'menus'}]),
821      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
822      'pageAction.json': json.dumps([{'namespace': 'pageAction'}]),
823      'webRequest.json': json.dumps([{'namespace': 'webRequest'}])
824    }
825  },
826  '1025': {
827    'api': {
828      'bookmarks.json': json.dumps([{'namespace': 'bookmarks'}]),
829      'idle.json': json.dumps([{'namespace': 'idle'}]),
830      'input.ime.json': json.dumps([{'namespace': 'input.ime'}]),
831      'menus.json': json.dumps([{'namespace': 'menus'}]),
832      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
833      'pageAction.json': json.dumps([{'namespace': 'pageAction'}]),
834      'webRequest.json': json.dumps([{'namespace': 'webRequest'}])
835    }
836  },
837  '963': {
838    'api': {
839      'extension_api.json': json.dumps([
840        {
841          'namespace': 'idle'
842        },
843        {
844          'namespace': 'menus'
845        },
846        {
847          'namespace': 'pageAction'
848        },
849        {
850          'namespace': 'webRequest'
851        }
852      ])
853    }
854  },
855  '912': {
856    'api': {
857      'extension_api.json': json.dumps([
858        {
859          'namespace': 'idle'
860        },
861        {
862          'namespace': 'menus'
863        },
864        {
865          'namespace': 'pageAction'
866        },
867        {
868          'namespace': 'experimental.webRequest'
869        }
870      ])
871    }
872  },
873  '874': {
874    'api': {
875      'extension_api.json': json.dumps([
876        {
877          'namespace': 'idle'
878        },
879        {
880          'namespace': 'menus'
881        },
882        {
883          'namespace': 'pageAction'
884        }
885      ])
886    }
887  },
888  '835': {
889    'api': {
890      'extension_api.json': json.dumps([
891        {
892          'namespace': 'idle'
893        },
894        {
895          'namespace': 'menus'
896        },
897        {
898          'namespace': 'pageAction'
899        }
900      ])
901    }
902  },
903  '782': {
904    'api': {
905      'extension_api.json': json.dumps([
906        {
907          'namespace': 'idle'
908        },
909        {
910          'namespace': 'menus'
911        },
912        {
913          'namespace': 'pageAction'
914        }
915      ])
916    }
917  },
918  '742': {
919    'api': {
920      'extension_api.json': json.dumps([
921        {
922          'namespace': 'idle'
923        },
924        {
925          'namespace': 'menus'
926        },
927        {
928          'namespace': 'pageAction'
929        }
930      ])
931    }
932  },
933  '696': {
934    'api': {
935      'extension_api.json': json.dumps([
936        {
937          'namespace': 'idle'
938        },
939        {
940          'namespace': 'menus'
941        },
942        {
943          'namespace': 'pageAction'
944        }
945      ])
946    }
947  },
948  '648': {
949    'api': {
950      'extension_api.json': json.dumps([
951        {
952          'namespace': 'idle'
953        },
954        {
955          'namespace': 'menus'
956        },
957        {
958          'namespace': 'pageAction'
959        }
960      ])
961    }
962  },
963  '597': {
964    'api': {
965      'extension_api.json': json.dumps([
966        {
967          'namespace': 'idle'
968        },
969        {
970          'namespace': 'menus'
971        },
972        {
973          'namespace': 'pageAction'
974        }
975      ])
976    }
977  },
978  '552': {
979    'api': {
980      'extension_api.json': json.dumps([
981        {
982          'namespace': 'idle'
983        },
984        {
985          'namespace': 'menus'
986        },
987        {
988          'namespace': 'pageAction'
989        }
990      ])
991    }
992  },
993  '544': {
994    'api': {
995      'extension_api.json': json.dumps([
996        {
997          'namespace': 'idle'
998        },
999        {
1000          'namespace': 'menus'
1001        }
1002      ])
1003    }
1004  },
1005  '495': {
1006    'api': {
1007      'extension_api.json': json.dumps([
1008        {
1009          'namespace': 'idle'
1010        },
1011        {
1012          'namespace': 'menus'
1013        }
1014      ])
1015    }
1016  },
1017  '396': {
1018    'api': {
1019      'extension_api.json': json.dumps([
1020        {
1021          'namespace': 'idle'
1022        },
1023        {
1024          'namespace': 'experimental.menus'
1025        }
1026      ])
1027    }
1028  }
1029})
1030