canned_data.py revision effb81e5f8246d0db0270817048dc992db66e9fb
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          { 'channel': 'stable',
209            'extension_types': ['extension'],
210            'whitelist': ['aaa']
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          { 'channel': 'stable', 'whitelist': ['aaa'] }
374        ],
375        'downloads': {
376          'channel': 'beta'
377        }
378      }),
379      'alarm.json': json.dumps([{
380        'namespace': 'alarm',
381        'description': '<code>alarm</code>'
382      }]),
383      'app_window.json': json.dumps([{
384        'namespace': 'app.window',
385        'description': '<code>app.window</code>'
386      }]),
387      'browser_action.json': json.dumps([{
388        'namespace': 'browserAction',
389        'description': '<code>browserAction</code>'
390      }]),
391      'idle.json': json.dumps([{'namespace': 'idle'}]),
392      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
393      'menus.json': json.dumps([{'namespace': 'menus'}]),
394      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
395      'windows.json': json.dumps([{'namespace': 'windows'}])
396    },
397    'docs': {
398      'templates': {
399        'json': {
400          'api_availabilities.json': json.dumps({
401            'jsonTrunkAPI': {
402              'channel': 'trunk'
403            },
404            'jsonDevAPI': {
405              'channel': 'dev'
406            },
407            'jsonBetaAPI': {
408              'channel': 'beta'
409            },
410            'jsonStableAPI': {
411              'channel': 'stable',
412              'version': 20
413            }
414          }),
415          'intro_tables.json': json.dumps({
416            'test': [
417              {
418                'Permissions': 'probably none'
419              }
420            ]
421          }),
422          'manifest.json': '{}',
423          'permissions.json': '{}',
424          'whats_new.json': json.dumps(_TEST_WHATS_NEW_JSON)
425        },
426        'public': {
427          'apps': {
428            'alarm.html': 'alarm.html',
429            'app_window.html': 'app_window.html',
430          },
431          'extensions': {
432            'alarm.html': 'alarm.html',
433            'browserAction.html': 'browserAction.html',
434          }
435        }
436      }
437    }
438  },
439  '1453': {
440    'api': {
441      '_api_features.json': json.dumps({
442        'alarm': {
443          'channel': 'stable'
444        },
445        'app.window': {
446          'channel': 'stable'
447        },
448        'browserAction': {
449          'channel': 'stable'
450        },
451        'events': {
452          'channel': 'dev'
453        },
454        'extension': {
455          'channel': 'stable'
456        },
457        'systemInfo.cpu': {
458          'channel': 'stable'
459        },
460        'systemInfo.stuff': {
461          'channel': 'dev'
462        }
463      }),
464      '_manifest_features.json': json.dumps({
465        'notifications': {
466          'channel': 'dev'
467        },
468        'page_action': {
469          'channel': 'stable'
470        },
471        'runtime': {
472          'channel': 'stable'
473        },
474        'storage': {
475          'channel': 'dev'
476        },
477        'system_info_display': {
478          'channel': 'stable'
479        },
480        'web_request': {
481          'channel': 'stable'
482        }
483      }),
484      '_permission_features.json': json.dumps({
485        'alarms': {
486          'channel': 'stable'
487        },
488        'bluetooth': {
489          'channel': 'dev'
490        },
491        'bookmarks': {
492          'channel': 'stable'
493        },
494        'context_menus': {
495          'channel': 'trunk'
496        },
497        'declarativeContent': {
498          'channel': 'trunk'
499        },
500        'declarativeWebRequest': [
501          { 'channel': 'beta' },
502          { 'channel': 'stable', 'whitelist': ['aaa'] }
503        ],
504        'downloads': {
505          'channel': 'dev'
506        }
507      }),
508      'alarm.json': json.dumps([{
509        'namespace': 'alarm',
510        'description': '<code>alarm</code>'
511      }]),
512      'app_window.json': json.dumps([{
513        'namespace': 'app.window',
514        'description': '<code>app.window</code>'
515      }]),
516      'browser_action.json': json.dumps([{
517        'namespace': 'browserAction',
518        'description': '<code>browserAction</code>'
519      }]),
520      'idle.json': json.dumps([{'namespace': 'idle'}]),
521      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
522      'menus.json': json.dumps([{'namespace': 'menus'}]),
523      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
524      'windows.json': json.dumps([{'namespace': 'windows'}])
525    },
526    'docs': {
527      'templates': {
528        'json': {
529          'api_availabilities.json': json.dumps({
530            'jsonTrunkAPI': {
531              'channel': 'trunk'
532            },
533            'jsonDevAPI': {
534              'channel': 'dev'
535            },
536            'jsonBetaAPI': {
537              'channel': 'beta'
538            },
539            'jsonStableAPI': {
540              'channel': 'stable',
541              'version': 20
542            }
543          }),
544          'intro_tables.json': json.dumps({
545            'test': [
546              {
547                'Permissions': 'probably none'
548              }
549            ]
550          }),
551          'manifest.json': '{}',
552          'permissions.json': '{}',
553          'whats_new.json': json.dumps(_TEST_WHATS_NEW_JSON)
554        },
555        'public': {
556          'apps': {
557            'alarm.html': 'alarm.html',
558            'app_window.html': 'app_window.html',
559          },
560          'extensions': {
561            'alarm.html': 'alarm.html',
562            'browserAction.html': 'browserAction.html',
563          }
564
565        }
566      }
567    }
568  },
569  '1410': {
570    'api': {
571      '_manifest_features.json': json.dumps({
572        'alarm': {
573          'channel': 'stable'
574        },
575        'app.window': {
576          'channel': 'stable'
577        },
578        'browserAction': {
579          'channel': 'stable'
580        },
581        'events': {
582          'channel': 'beta'
583        },
584        'notifications': {
585          'channel': 'dev'
586        },
587        'page_action': {
588          'channel': 'stable'
589        },
590        'runtime': {
591          'channel': 'stable'
592        },
593        'web_request': {
594          'channel': 'stable'
595        }
596      }),
597      '_permission_features.json': json.dumps({
598        'alarms': {
599          'channel': 'stable'
600        },
601        'bluetooth': {
602          'channel': 'dev'
603        },
604        'bookmarks': {
605          'channel': 'stable'
606        },
607        'context_menus': {
608          'channel': 'trunk'
609        },
610        'declarativeContent': {
611          'channel': 'trunk'
612        },
613        'declarativeWebRequest': [
614          { 'channel': 'beta' },
615          { 'channel': 'stable', 'whitelist': ['aaa'] }
616        ],
617        'systemInfo.display': {
618          'channel': 'stable'
619        }
620      }),
621      'alarm.json': json.dumps([{
622        'namespace': 'alarm',
623        'description': '<code>alarm</code>'
624      }]),
625      'app_window.json': json.dumps([{
626        'namespace': 'app.window',
627        'description': '<code>app.window</code>'
628      }]),
629      'browser_action.json': json.dumps([{
630        'namespace': 'browserAction',
631        'description': '<code>browserAction</code>'
632      }]),
633      'idle.json': json.dumps([{'namespace': 'idle'}]),
634      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
635      'menus.json': json.dumps([{'namespace': 'menus'}]),
636      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
637      'windows.json': json.dumps([{'namespace': 'windows'}])
638    }
639  },
640  '1364': {
641    'api': {
642      '_manifest_features.json': json.dumps({
643        'page_action': {
644          'channel': 'stable'
645        },
646        'runtime': {
647          'channel': 'stable'
648        }
649      }),
650      '_permission_features.json': json.dumps({
651        'alarms': {
652          'channel': 'stable'
653        },
654        'bookmarks': {
655          'channel': 'stable'
656        },
657        'systemInfo.display': {
658          'channel': 'stable'
659        },
660        'webRequest': {
661          'channel': 'stable'
662        }
663      }),
664      'idle.json': json.dumps([{'namespace': 'idle'}]),
665      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
666      'menus.json': json.dumps([{'namespace': 'menus'}]),
667      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
668      'windows.json': json.dumps([{'namespace': 'windows'}])
669    }
670  },
671  '1312': {
672    'api': {
673      '_manifest_features.json': json.dumps({
674        'page_action': {
675          'channel': 'stable'
676        },
677        'runtime': {
678          'channel': 'stable'
679        },
680        'web_request': {
681          'channel': 'stable'
682        }
683      }),
684      '_permission_features.json': json.dumps({
685        'alarms': {
686          'channel': 'stable'
687        },
688        'bookmarks': {
689          'channel': 'stable'
690        },
691        'systemInfo.display': {
692          'channel': 'stable'
693        }
694      }),
695      'idle.json': json.dumps([{'namespace': 'idle'}]),
696      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
697      'menus.json': json.dumps([{'namespace': 'menus'}]),
698      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
699      'windows.json': json.dumps([{'namespace': 'windows'}])
700    }
701  },
702  '1271': {
703    'api': {
704      '_manifest_features.json': json.dumps({
705        'page_action': {
706          'channel': 'stable'
707        },
708        'runtime': {
709          'channel': 'stable'
710        },
711        'system_info_display': {
712          'channel': 'stable'
713        }
714      }),
715      '_permission_features.json': json.dumps({
716        'alarms': {
717          'channel': 'beta'
718        },
719        'bookmarks': {
720          'channel': 'stable'
721        },
722        'webRequest': {
723          'channel': 'stable'
724        }
725      }),
726      'alarms.idl': '//copy\n\n//desc\nnamespace alarms {}',
727      'idle.json': json.dumps([{'namespace': 'idle'}]),
728      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
729      'menus.json': json.dumps([{'namespace': 'menus'}]),
730      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
731      'windows.json': json.dumps([{'namespace': 'windows'}])
732    }
733  },
734  '1229': {
735    'api': {
736      '_manifest_features.json': json.dumps({
737        'page_action': {
738          'channel': 'stable'
739        },
740        'runtime': {
741          'channel': 'stable'
742        },
743        'web_request': {
744          'channel': 'stable'
745        }
746      }),
747      '_permission_features.json': json.dumps({
748        'bookmarks': {
749          'channel': 'stable'
750        },
751        'systemInfo.display': {
752          'channel': 'beta'
753        }
754      }),
755      'alarms.idl': '//copy\n\n//desc\nnamespace alarms {}',
756      'idle.json': json.dumps([{'namespace': 'idle'}]),
757      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
758      'menus.json': json.dumps([{'namespace': 'menus'}]),
759      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
760    }
761  },
762  '1180': {
763    'api': {
764      '_manifest_features.json': json.dumps({
765        'page_action': {
766          'channel': 'stable'
767        },
768        'runtime': {
769          'channel': 'stable'
770        }
771      }),
772      '_permission_features.json': json.dumps({
773        'bookmarks': {
774          'channel': 'stable'
775        },
776        'webRequest': {
777          'channel': 'stable'
778        }
779      }),
780      'bookmarks.json': json.dumps([{'namespace': 'bookmarks'}]),
781      'idle.json': json.dumps([{'namespace': 'idle'}]),
782      'input_ime.json': json.dumps([{'namespace': 'input.ime'}]),
783      'menus.json': json.dumps([{'namespace': 'menus'}]),
784      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
785    }
786  },
787  '1132': {
788    'api': {
789      '_manifest_features.json': json.dumps({
790        'bookmarks': {
791          'channel': 'trunk'
792        },
793        'page_action': {
794          'channel': 'stable'
795        }
796      }),
797      '_permission_features.json': json.dumps({
798        'webRequest': {
799          'channel': 'stable'
800        }
801      }),
802      'bookmarks.json': json.dumps([{'namespace': 'bookmarks'}]),
803      'idle.json': json.dumps([{'namespace': 'idle'}]),
804      'input.ime.json': json.dumps([{'namespace': 'input.ime'}]),
805      'menus.json': json.dumps([{'namespace': 'menus'}]),
806      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
807    }
808  },
809  '1084': {
810    'api': {
811      '_manifest_features.json': json.dumps({
812        'contents': 'nothing of interest here,really'
813      }),
814      'bookmarks.json': json.dumps([{'namespace': 'bookmarks'}]),
815      'idle.json': json.dumps([{'namespace': 'idle'}]),
816      'input.ime.json': json.dumps([{'namespace': 'input.ime'}]),
817      'menus.json': json.dumps([{'namespace': 'menus'}]),
818      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
819      'pageAction.json': json.dumps([{'namespace': 'pageAction'}]),
820      'webRequest.json': json.dumps([{'namespace': 'webRequest'}])
821    }
822  },
823  '1025': {
824    'api': {
825      'bookmarks.json': json.dumps([{'namespace': 'bookmarks'}]),
826      'idle.json': json.dumps([{'namespace': 'idle'}]),
827      'input.ime.json': json.dumps([{'namespace': 'input.ime'}]),
828      'menus.json': json.dumps([{'namespace': 'menus'}]),
829      'tabs.json': json.dumps([{'namespace': 'tabs'}]),
830      'pageAction.json': json.dumps([{'namespace': 'pageAction'}]),
831      'webRequest.json': json.dumps([{'namespace': 'webRequest'}])
832    }
833  },
834  '963': {
835    'api': {
836      'extension_api.json': json.dumps([
837        {
838          'namespace': 'idle'
839        },
840        {
841          'namespace': 'menus'
842        },
843        {
844          'namespace': 'pageAction'
845        },
846        {
847          'namespace': 'webRequest'
848        }
849      ])
850    }
851  },
852  '912': {
853    'api': {
854      'extension_api.json': json.dumps([
855        {
856          'namespace': 'idle'
857        },
858        {
859          'namespace': 'menus'
860        },
861        {
862          'namespace': 'pageAction'
863        },
864        {
865          'namespace': 'experimental.webRequest'
866        }
867      ])
868    }
869  },
870  '874': {
871    'api': {
872      'extension_api.json': json.dumps([
873        {
874          'namespace': 'idle'
875        },
876        {
877          'namespace': 'menus'
878        },
879        {
880          'namespace': 'pageAction'
881        }
882      ])
883    }
884  },
885  '835': {
886    'api': {
887      'extension_api.json': json.dumps([
888        {
889          'namespace': 'idle'
890        },
891        {
892          'namespace': 'menus'
893        },
894        {
895          'namespace': 'pageAction'
896        }
897      ])
898    }
899  },
900  '782': {
901    'api': {
902      'extension_api.json': json.dumps([
903        {
904          'namespace': 'idle'
905        },
906        {
907          'namespace': 'menus'
908        },
909        {
910          'namespace': 'pageAction'
911        }
912      ])
913    }
914  },
915  '742': {
916    'api': {
917      'extension_api.json': json.dumps([
918        {
919          'namespace': 'idle'
920        },
921        {
922          'namespace': 'menus'
923        },
924        {
925          'namespace': 'pageAction'
926        }
927      ])
928    }
929  },
930  '696': {
931    'api': {
932      'extension_api.json': json.dumps([
933        {
934          'namespace': 'idle'
935        },
936        {
937          'namespace': 'menus'
938        },
939        {
940          'namespace': 'pageAction'
941        }
942      ])
943    }
944  },
945  '648': {
946    'api': {
947      'extension_api.json': json.dumps([
948        {
949          'namespace': 'idle'
950        },
951        {
952          'namespace': 'menus'
953        },
954        {
955          'namespace': 'pageAction'
956        }
957      ])
958    }
959  },
960  '597': {
961    'api': {
962      'extension_api.json': json.dumps([
963        {
964          'namespace': 'idle'
965        },
966        {
967          'namespace': 'menus'
968        },
969        {
970          'namespace': 'pageAction'
971        }
972      ])
973    }
974  },
975  '552': {
976    'api': {
977      'extension_api.json': json.dumps([
978        {
979          'namespace': 'idle'
980        },
981        {
982          'namespace': 'menus'
983        },
984        {
985          'namespace': 'pageAction'
986        }
987      ])
988    }
989  },
990  '544': {
991    'api': {
992      'extension_api.json': json.dumps([
993        {
994          'namespace': 'idle'
995        },
996        {
997          'namespace': 'menus'
998        }
999      ])
1000    }
1001  },
1002  '495': {
1003    'api': {
1004      'extension_api.json': json.dumps([
1005        {
1006          'namespace': 'idle'
1007        },
1008        {
1009          'namespace': 'menus'
1010        }
1011      ])
1012    }
1013  },
1014  '396': {
1015    'api': {
1016      'extension_api.json': json.dumps([
1017        {
1018          'namespace': 'idle'
1019        },
1020        {
1021          'namespace': 'experimental.menus'
1022        }
1023      ])
1024    }
1025  }
1026})
1027