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.
7 from extensions_paths
import CHROME_EXTENSIONS
8 from third_party
.json_schema_compiler
.json_parse
import OrderedDict
9 from test_file_system
import MoveAllTo
, MoveTo
12 CANNED_CHANNELS
= OrderedDict([
20 CANNED_BRANCHES
= OrderedDict([
52 CANNED_TEST_FILE_SYSTEM_DATA
= MoveTo(CHROME_EXTENSIONS
, {
54 '_api_features.json': json
.dumps({
55 'ref_test': { 'dependencies': ['permission:ref_test'] },
56 'tester': { 'dependencies': ['permission:tester', 'manifest:tester'] }
58 '_manifest_features.json': '{}',
59 '_permission_features.json': '{}'
65 '<h1>hi</h1>you<h2>first</h2><h3>inner</h3><h2>second</h2>'
69 'you<h2>first</h2><h3>inner</h3><h2>second</h2>'
72 'api_availabilities.json': json
.dumps({
87 'intro_tables.json': json
.dumps({
95 'text': 'is an API for testing things.'
100 'link': 'https://tester.test.com/welcome.html',
106 'manifest.json': '{}',
107 'permissions.json': '{}'
111 'master_message.html': 'available on master'
113 'table_of_contents.html': '<table-of-contents>',
120 _TEST_WHATS_NEW_JSON
= {
121 "backgroundpages.to-be-non-persistent": {
122 "type": "additionsToExistingApis",
123 "description": "backgrounds to be non persistent",
126 "chromeSetting.set-regular-only-scope": {
127 "type": "additionsToExistingApis",
128 "description": "ChromeSetting.set now has a regular_only scope.",
131 "manifest-v1-deprecated": {
132 "type": "manifestChanges",
133 "description": "Manifest version 1 was deprecated in Chrome 18",
139 CANNED_API_FILE_SYSTEM_DATA
= MoveAllTo(CHROME_EXTENSIONS
, {
142 '_api_features.json': json
.dumps({
167 'systemInfo.stuff': {
171 '_manifest_features.json': json
.dumps({
194 '_permission_features.json': json
.dumps({
207 'declarativeContent': {
210 'declarativeWebRequest': [
212 'extension_types': ['extension']
214 { 'channel': 'stable',
215 'extension_types': ['extension'],
222 'systemInfo.display': {
229 'alarm.json': json
.dumps([{
230 'namespace': 'alarm',
231 'description': '<code>alarm</code>'
233 'app_window.json': json
.dumps([{
234 'namespace': 'app.window',
235 'description': '<code>app.window</code>'
237 'browser_action.json': json
.dumps([{
238 'namespace': 'browserAction',
239 'description': '<code>browserAction</code>'
241 'bluetooth.idl': '\n'.join(('//Copyleft Schmopyright',
243 '//An IDL description, oh my!',
244 'namespace bluetooth {',
245 ' dictionary Socket {',
249 'context_menus.json': json
.dumps([{
250 'namespace': 'contextMenus',
253 'json_stable_api.json': json
.dumps([{
254 'namespace': 'jsonStableAPI',
255 'description': 'An API with a predetermined availability.'
257 'idle.json': json
.dumps([{'namespace': 'idle', 'description': ''}]),
258 'input_ime.json': json
.dumps([{
259 'namespace': 'input.ime',
260 'description': 'An API that has the potential to cause some trouble.'
262 'menus.json': json
.dumps([{'namespace': 'menus', 'description': ''}]),
263 'signed_in_devices.json': json
.dumps([{
264 'namespace': 'signedInDevices',
265 'description': 'Another API that could cause some trouble.'
267 'system_info_stuff.json': json
.dumps([{
268 'namespace': 'systemInfo.stuff',
269 'description': 'Yet another API that could wreck havoc...'
271 'tabs.json': json
.dumps([{'namespace': 'tabs', 'description': ''}]),
272 'windows.json': json
.dumps([{'namespace': 'windows', 'description': ''}])
277 'api_availabilities.json': json
.dumps({
292 'intro_tables.json': json
.dumps({
295 'Permissions': 'probably none'
299 'manifest.json': '{}',
300 'permissions.json': '{}',
301 'whats_new.json': json
.dumps(_TEST_WHATS_NEW_JSON
)
305 'alarm.html': 'alarm.html',
306 'app_window.html': 'app_window.html',
307 'contextMenus.html': 'contextMenus.html',
310 'alarm.html': 'alarm.html',
311 'browserAction.html': 'browserAction.html',
312 'contextMenus.html': 'contextMenus.html',
320 '_api_features.json': json
.dumps({
339 'systemInfo.stuff': {
343 '_manifest_features.json': json
.dumps({
362 'system_info_display': {
369 '_permission_features.json': json
.dumps({
375 'extension_types': ['extension', 'platform_app']
386 'declarativeContent': {
389 'declarativeWebRequest': [
390 { 'channel': 'beta' },
391 { 'channel': 'stable', 'whitelist': ['aaa'] }
397 'alarm.json': json
.dumps([{
398 'namespace': 'alarm',
399 'description': '<code>alarm</code>'
401 'app_window.json': json
.dumps([{
402 'namespace': 'app.window',
403 'description': '<code>app.window</code>'
405 'browser_action.json': json
.dumps([{
406 'namespace': 'browserAction',
407 'description': '<code>browserAction</code>'
409 'idle.json': json
.dumps([{'namespace': 'idle'}]),
410 'input_ime.json': json
.dumps([{'namespace': 'input.ime'}]),
411 'menus.json': json
.dumps([{'namespace': 'menus'}]),
412 'tabs.json': json
.dumps([{'namespace': 'tabs'}]),
413 'windows.json': json
.dumps([{'namespace': 'windows'}])
418 'api_availabilities.json': json
.dumps({
433 'intro_tables.json': json
.dumps({
436 'Permissions': 'probably none'
440 'manifest.json': '{}',
441 'permissions.json': '{}',
442 'whats_new.json': json
.dumps(_TEST_WHATS_NEW_JSON
)
446 'alarm.html': 'alarm.html',
447 'app_window.html': 'app_window.html',
450 'alarm.html': 'alarm.html',
451 'browserAction.html': 'browserAction.html',
459 '_api_features.json': json
.dumps({
478 'systemInfo.stuff': {
482 '_manifest_features.json': json
.dumps({
501 'system_info_display': {
508 '_permission_features.json': json
.dumps({
514 'extension_types': ['extension', 'platform_app']
525 'declarativeContent': {
528 'declarativeWebRequest': [
529 { 'channel': 'beta' },
530 { 'channel': 'stable', 'whitelist': ['aaa'] }
536 'alarm.json': json
.dumps([{
537 'namespace': 'alarm',
538 'description': '<code>alarm</code>'
540 'app_window.json': json
.dumps([{
541 'namespace': 'app.window',
542 'description': '<code>app.window</code>'
544 'browser_action.json': json
.dumps([{
545 'namespace': 'browserAction',
546 'description': '<code>browserAction</code>'
548 'idle.json': json
.dumps([{'namespace': 'idle'}]),
549 'input_ime.json': json
.dumps([{'namespace': 'input.ime'}]),
550 'menus.json': json
.dumps([{'namespace': 'menus'}]),
551 'tabs.json': json
.dumps([{'namespace': 'tabs'}]),
552 'windows.json': json
.dumps([{'namespace': 'windows'}])
557 'api_availabilities.json': json
.dumps({
572 'intro_tables.json': json
.dumps({
575 'Permissions': 'probably none'
579 'manifest.json': '{}',
580 'permissions.json': '{}',
581 'whats_new.json': json
.dumps(_TEST_WHATS_NEW_JSON
)
585 'alarm.html': 'alarm.html',
586 'app_window.html': 'app_window.html',
589 'alarm.html': 'alarm.html',
590 'browserAction.html': 'browserAction.html',
598 '_api_features.json': json
.dumps({
614 'systemInfo.stuff': {
618 '_manifest_features.json': json
.dumps({
637 'system_info_display': {
644 '_permission_features.json': json
.dumps({
650 'extension_types': ['extension', 'platform_app']
661 'declarativeContent': {
664 'declarativeWebRequest': [
665 { 'channel': 'beta' },
666 { 'channel': 'stable', 'whitelist': ['aaa'] }
672 'alarm.json': json
.dumps([{
673 'namespace': 'alarm',
674 'description': '<code>alarm</code>'
676 'app_window.json': json
.dumps([{
677 'namespace': 'app.window',
678 'description': '<code>app.window</code>'
680 'browser_action.json': json
.dumps([{
681 'namespace': 'browserAction',
682 'description': '<code>browserAction</code>'
684 'idle.json': json
.dumps([{'namespace': 'idle'}]),
685 'input_ime.json': json
.dumps([{'namespace': 'input.ime'}]),
686 'menus.json': json
.dumps([{'namespace': 'menus'}]),
687 'tabs.json': json
.dumps([{'namespace': 'tabs'}]),
688 'windows.json': json
.dumps([{'namespace': 'windows'}])
693 'api_availabilities.json': json
.dumps({
708 'intro_tables.json': json
.dumps({
711 'Permissions': 'probably none'
715 'manifest.json': '{}',
716 'permissions.json': '{}',
717 'whats_new.json': json
.dumps(_TEST_WHATS_NEW_JSON
)
721 'alarm.html': 'alarm.html',
722 'app_window.html': 'app_window.html',
725 'alarm.html': 'alarm.html',
726 'browserAction.html': 'browserAction.html',
734 '_api_features.json': json
.dumps({
750 'systemInfo.stuff': {
754 '_manifest_features.json': json
.dumps({
773 'system_info_display': {
780 '_permission_features.json': json
.dumps({
786 'extension_types': ['extension', 'platform_app']
797 'declarativeContent': {
800 'declarativeWebRequest': [
801 { 'channel': 'beta' },
802 { 'channel': 'stable', 'whitelist': ['aaa'] }
808 'alarm.json': json
.dumps([{
809 'namespace': 'alarm',
810 'description': '<code>alarm</code>'
812 'app_window.json': json
.dumps([{
813 'namespace': 'app.window',
814 'description': '<code>app.window</code>'
816 'browser_action.json': json
.dumps([{
817 'namespace': 'browserAction',
818 'description': '<code>browserAction</code>'
820 'idle.json': json
.dumps([{'namespace': 'idle'}]),
821 'input_ime.json': json
.dumps([{'namespace': 'input.ime'}]),
822 'menus.json': json
.dumps([{'namespace': 'menus'}]),
823 'tabs.json': json
.dumps([{'namespace': 'tabs'}]),
824 'windows.json': json
.dumps([{'namespace': 'windows'}])
829 'api_availabilities.json': json
.dumps({
844 'intro_tables.json': json
.dumps({
847 'Permissions': 'probably none'
851 'manifest.json': '{}',
852 'permissions.json': '{}',
853 'whats_new.json': json
.dumps(_TEST_WHATS_NEW_JSON
)
857 'alarm.html': 'alarm.html',
858 'app_window.html': 'app_window.html',
861 'alarm.html': 'alarm.html',
862 'browserAction.html': 'browserAction.html',
870 '_api_features.json': json
.dumps({
886 'systemInfo.stuff': {
890 '_manifest_features.json': json
.dumps({
903 'system_info_display': {
910 '_permission_features.json': json
.dumps({
916 'extension_types': ['extension', 'platform_app']
927 'declarativeContent': {
930 'declarativeWebRequest': [
931 { 'channel': 'beta' },
932 { 'channel': 'stable', 'whitelist': ['aaa'] }
938 'alarm.json': json
.dumps([{
939 'namespace': 'alarm',
940 'description': '<code>alarm</code>'
942 'app_window.json': json
.dumps([{
943 'namespace': 'app.window',
944 'description': '<code>app.window</code>'
946 'browser_action.json': json
.dumps([{
947 'namespace': 'browserAction',
948 'description': '<code>browserAction</code>'
950 'idle.json': json
.dumps([{'namespace': 'idle'}]),
951 'input_ime.json': json
.dumps([{'namespace': 'input.ime'}]),
952 'menus.json': json
.dumps([{'namespace': 'menus'}]),
953 'tabs.json': json
.dumps([{'namespace': 'tabs'}]),
954 'windows.json': json
.dumps([{'namespace': 'windows'}])
959 'api_availabilities.json': json
.dumps({
974 'intro_tables.json': json
.dumps({
977 'Permissions': 'probably none'
981 'manifest.json': '{}',
982 'permissions.json': '{}',
983 'whats_new.json': json
.dumps(_TEST_WHATS_NEW_JSON
)
987 'alarm.html': 'alarm.html',
988 'app_window.html': 'app_window.html',
991 'alarm.html': 'alarm.html',
992 'browserAction.html': 'browserAction.html',
1001 '_manifest_features.json': json
.dumps({
1027 '_permission_features.json': json
.dumps({
1032 'channel': 'stable',
1033 'extension_types': ['extension', 'platform_app']
1044 'declarativeContent': {
1047 'declarativeWebRequest': [
1048 { 'channel': 'beta' },
1049 { 'channel': 'stable', 'whitelist': ['aaa'] }
1051 'systemInfo.display': {
1055 'alarm.json': json
.dumps([{
1056 'namespace': 'alarm',
1057 'description': '<code>alarm</code>'
1059 'app_window.json': json
.dumps([{
1060 'namespace': 'app.window',
1061 'description': '<code>app.window</code>'
1063 'browser_action.json': json
.dumps([{
1064 'namespace': 'browserAction',
1065 'description': '<code>browserAction</code>'
1067 'idle.json': json
.dumps([{'namespace': 'idle'}]),
1068 'input_ime.json': json
.dumps([{'namespace': 'input.ime'}]),
1069 'menus.json': json
.dumps([{'namespace': 'menus'}]),
1070 'tabs.json': json
.dumps([{'namespace': 'tabs'}]),
1071 'windows.json': json
.dumps([{'namespace': 'windows'}])
1076 '_manifest_features.json': json
.dumps({
1084 '_permission_features.json': json
.dumps({
1089 'channel': 'stable',
1090 'extension_types': ['platform_app']
1095 'systemInfo.display': {
1102 'idle.json': json
.dumps([{'namespace': 'idle'}]),
1103 'input_ime.json': json
.dumps([{'namespace': 'input.ime'}]),
1104 'menus.json': json
.dumps([{'namespace': 'menus'}]),
1105 'tabs.json': json
.dumps([{'namespace': 'tabs'}]),
1106 'windows.json': json
.dumps([{'namespace': 'windows'}])
1111 '_manifest_features.json': json
.dumps({
1122 '_permission_features.json': json
.dumps({
1129 'systemInfo.display': {
1133 'idle.json': json
.dumps([{'namespace': 'idle'}]),
1134 'input_ime.json': json
.dumps([{'namespace': 'input.ime'}]),
1135 'menus.json': json
.dumps([{'namespace': 'menus'}]),
1136 'tabs.json': json
.dumps([{'namespace': 'tabs'}]),
1137 'windows.json': json
.dumps([{'namespace': 'windows'}])
1142 '_manifest_features.json': json
.dumps({
1149 'system_info_display': {
1153 '_permission_features.json': json
.dumps({
1164 'alarms.idl': '//copy\n\n//desc\nnamespace alarms {}',
1165 'idle.json': json
.dumps([{'namespace': 'idle'}]),
1166 'input_ime.json': json
.dumps([{'namespace': 'input.ime'}]),
1167 'menus.json': json
.dumps([{'namespace': 'menus'}]),
1168 'tabs.json': json
.dumps([{'namespace': 'tabs'}]),
1169 'windows.json': json
.dumps([{'namespace': 'windows'}])
1174 '_manifest_features.json': json
.dumps({
1185 '_permission_features.json': json
.dumps({
1189 'systemInfo.display': {
1193 'alarms.idl': '//copy\n\n//desc\nnamespace alarms {}',
1194 'idle.json': json
.dumps([{'namespace': 'idle'}]),
1195 'input_ime.json': json
.dumps([{'namespace': 'input.ime'}]),
1196 'menus.json': json
.dumps([{'namespace': 'menus'}]),
1197 'tabs.json': json
.dumps([{'namespace': 'tabs'}]),
1202 '_manifest_features.json': json
.dumps({
1210 '_permission_features.json': json
.dumps({
1218 'bookmarks.json': json
.dumps([{'namespace': 'bookmarks'}]),
1219 'idle.json': json
.dumps([{'namespace': 'idle'}]),
1220 'input_ime.json': json
.dumps([{'namespace': 'input.ime'}]),
1221 'menus.json': json
.dumps([{'namespace': 'menus'}]),
1222 'tabs.json': json
.dumps([{'namespace': 'tabs'}]),
1227 '_manifest_features.json': json
.dumps({
1235 '_permission_features.json': json
.dumps({
1240 'bookmarks.json': json
.dumps([{'namespace': 'bookmarks'}]),
1241 'idle.json': json
.dumps([{'namespace': 'idle'}]),
1242 'input.ime.json': json
.dumps([{'namespace': 'input.ime'}]),
1243 'menus.json': json
.dumps([{'namespace': 'menus'}]),
1244 'tabs.json': json
.dumps([{'namespace': 'tabs'}]),
1249 '_manifest_features.json': json
.dumps({
1250 'contents': 'nothing of interest here,really'
1252 'bookmarks.json': json
.dumps([{'namespace': 'bookmarks'}]),
1253 'idle.json': json
.dumps([{'namespace': 'idle'}]),
1254 'input.ime.json': json
.dumps([{'namespace': 'input.ime'}]),
1255 'menus.json': json
.dumps([{'namespace': 'menus'}]),
1256 'tabs.json': json
.dumps([{'namespace': 'tabs'}]),
1257 'pageAction.json': json
.dumps([{'namespace': 'pageAction'}]),
1258 'webRequest.json': json
.dumps([{'namespace': 'webRequest'}])
1263 'bookmarks.json': json
.dumps([{'namespace': 'bookmarks'}]),
1264 'idle.json': json
.dumps([{'namespace': 'idle'}]),
1265 'input.ime.json': json
.dumps([{'namespace': 'input.ime'}]),
1266 'menus.json': json
.dumps([{'namespace': 'menus'}]),
1267 'tabs.json': json
.dumps([{'namespace': 'tabs'}]),
1268 'pageAction.json': json
.dumps([{'namespace': 'pageAction'}]),
1269 'webRequest.json': json
.dumps([{'namespace': 'webRequest'}])
1274 'extension_api.json': json
.dumps([
1279 'namespace': 'menus'
1282 'namespace': 'pageAction'
1285 'namespace': 'webRequest'
1292 'extension_api.json': json
.dumps([
1297 'namespace': 'menus'
1300 'namespace': 'pageAction'
1303 'namespace': 'experimental.webRequest'
1310 'extension_api.json': json
.dumps([
1315 'namespace': 'menus'
1318 'namespace': 'pageAction'
1325 'extension_api.json': json
.dumps([
1330 'namespace': 'menus'
1333 'namespace': 'pageAction'
1340 'extension_api.json': json
.dumps([
1345 'namespace': 'menus'
1348 'namespace': 'pageAction'
1355 'extension_api.json': json
.dumps([
1360 'namespace': 'menus'
1363 'namespace': 'pageAction'
1370 'extension_api.json': json
.dumps([
1375 'namespace': 'menus'
1378 'namespace': 'pageAction'
1385 'extension_api.json': json
.dumps([
1390 'namespace': 'menus'
1393 'namespace': 'pageAction'
1400 'extension_api.json': json
.dumps([
1405 'namespace': 'menus'
1408 'namespace': 'pageAction'
1415 'extension_api.json': json
.dumps([
1420 'namespace': 'menus'
1423 'namespace': 'pageAction'
1430 'extension_api.json': json
.dumps([
1435 'namespace': 'menus'
1442 'extension_api.json': json
.dumps([
1447 'namespace': 'menus'
1454 'extension_api.json': json
.dumps([
1459 'namespace': 'experimental.menus'