canned_data.py revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
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 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(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(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