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