Home | History | Annotate | Download | only in object_level_availability
      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 
      5 import json
      6 
      7 from extensions_paths import CHROME_EXTENSIONS
      8 from test_file_system import MoveAllTo
      9 from test_util import ReadFile
     10 
     11 FAKE_TABS_IDL = '\n'.join([
     12   '// Copyleft stuff.',
     13   '',
     14   '// Some description here.',
     15   'namespace fakeTabs {',
     16   '  dictionary WasImplicitlyInlinedType {};',
     17   '  interface Functions {',
     18   '    static void myFunc(WasImplicitlyInlinedType arg);',
     19   '    static void anotherFunc(WasImplicitlyInlinedType arg);',
     20   '  };',
     21   '};'])
     22 
     23 FAKE_TABS_WITH_INLINING_IDL = '\n'.join([
     24   '// Copyleft stuff.',
     25   '',
     26   '// Some description here.',
     27   'namespace fakeTabs {',
     28   '  dictionary WasImplicitlyInlinedType {};',
     29   '  interface Functions {',
     30   '    static void myFunc(WasImplicitlyInlinedType arg);',
     31   '  };',
     32   '};'])
     33 
     34 TABS_SCHEMA_BRANCHES = MoveAllTo(CHROME_EXTENSIONS, {
     35   'master': {
     36     'docs': {
     37       'templates': {
     38         'json': {
     39           'api_availabilities.json': '{}',
     40           'intro_tables.json': '{}'
     41         }
     42       }
     43     },
     44     'api': {
     45       '_api_features.json': json.dumps({
     46         'tabs.scheduledFunc': {
     47           'channel': 'stable'
     48         }
     49       }),
     50       '_manifest_features.json': '{}',
     51       '_permission_features.json': '{}',
     52       'fake_tabs.idl': FAKE_TABS_IDL,
     53       'tabs.json': json.dumps([{
     54         'namespace': 'tabs',
     55         'types': [
     56           {
     57             'id': 'Tab',
     58             'type': 'any',
     59             'properties': {
     60               'url': {
     61                 'type': 'any'
     62               },
     63               'index': {
     64                 'type': 'any'
     65               },
     66               'selected': {
     67                 'type': 'any'
     68               },
     69               'id': {
     70                 'type': 'any'
     71               },
     72               'windowId': {
     73                 'type': 'any'
     74               }
     75             }
     76           },
     77           {
     78             'id': 'InlinedType',
     79             'type': 'any',
     80             'inline_doc': True
     81           },
     82           {
     83             'id': 'InjectDetails',
     84             'type': 'any',
     85             'properties': {
     86               'allFrames': {
     87                 'type': 'any'
     88               },
     89               'code': {
     90                 'type': 'any'
     91               },
     92               'file': {
     93                 'type':'any'
     94               }
     95             }
     96           },
     97           {
     98             'id': 'DeprecatedType',
     99             'type': 'any',
    100             'deprecated': 'This is deprecated'
    101           }
    102         ],
    103         'properties': {
    104           'fakeTabsProperty1': {
    105             'type': 'any'
    106           },
    107           'fakeTabsProperty2': {
    108             'type': 'any'
    109           },
    110           'fakeTabsProperty3': {
    111             'type': 'any'
    112           }
    113         },
    114         'functions': [
    115           {
    116             'name': 'getCurrent',
    117             'parameters': [
    118               {
    119                 'name': 'callback',
    120                 'type': 'function',
    121                 'parameters': [
    122                   {
    123                     'name': 'tab',
    124                     'type': 'any'
    125                   }
    126                 ]
    127               }
    128             ]
    129           },
    130           {
    131             'name': 'get',
    132             'parameters': [
    133               {
    134                 'name': 'callback',
    135                 'type': 'function',
    136                 'parameters': [
    137                   {
    138                     'name': 'tab',
    139                     'type': 'any'
    140                   }
    141                 ]
    142               },
    143               {
    144                 'name': 'tabId',
    145                 'type': 'any'
    146               }
    147             ]
    148           },
    149           {
    150             'name': 'restrictedFunc'
    151           },
    152           {
    153             'name': 'scheduledFunc',
    154             'parameters': []
    155           }
    156         ],
    157         'events': [
    158           {
    159             'name': 'onActivated',
    160             'type': 'event',
    161             'parameters': [
    162               {
    163                 'name': 'activeInfo',
    164                 'type': 'any',
    165                 'properties': {
    166                   'tabId': {
    167                     'type': 'any'
    168                   },
    169                   'windowId': {
    170                     'type': 'any'
    171                   }
    172                 }
    173               }
    174             ]
    175           },
    176           {
    177             'name': 'onUpdated',
    178             'type': 'event',
    179             'parameters': [
    180               {
    181                 'name': 'tabId',
    182                 'type': 'any'
    183               },
    184               {
    185                 'name': 'tab',
    186                 'type': 'any'
    187               },
    188               {
    189                 'name': 'changeInfo',
    190                 'type': 'any',
    191                 'properties': {
    192                   'pinned': {
    193                     'type': 'any'
    194                   },
    195                   'status': {
    196                     'type': 'any'
    197                   }
    198                 }
    199               }
    200             ]
    201           }
    202         ]
    203       }])
    204     }
    205   },
    206   '1612': {
    207     'api': {
    208       '_api_features.json': json.dumps({
    209         'tabs.scheduledFunc': {
    210           'channel': 'stable'
    211         }
    212       }),
    213       '_manifest_features.json': "{}",
    214       '_permission_features.json': "{}",
    215       'fake_tabs.idl': FAKE_TABS_IDL,
    216       'tabs.json': json.dumps([{
    217         'namespace': 'tabs',
    218         'types': [
    219           {
    220             'id': 'Tab',
    221             'properties': {
    222               'url': {},
    223               'index': {},
    224               'selected': {},
    225               'id': {},
    226               'windowId': {}
    227             }
    228           },
    229           {
    230             'id': 'InjectDetails',
    231             'properties': {
    232               'allFrames': {},
    233               'code': {},
    234               'file': {}
    235             }
    236           },
    237           {
    238             'id': 'DeprecatedType',
    239             'deprecated': 'This is deprecated'
    240           }
    241         ],
    242         'properties': {
    243           'fakeTabsProperty1': {},
    244           'fakeTabsProperty2': {}
    245         },
    246         'functions': [
    247           {
    248             'name': 'getCurrent',
    249             'parameters': [
    250               {
    251                 'name': 'callback',
    252                 'parameters': [
    253                   {
    254                     'name': 'tab'
    255                   }
    256                 ]
    257               }
    258             ]
    259           },
    260           {
    261             'name': 'get',
    262             'parameters': [
    263               {
    264                 'name': 'callback',
    265                 'parameters': [
    266                   {
    267                     'name': 'tab'
    268                   }
    269                 ]
    270               },
    271               {
    272                 'name': 'tabId'
    273               }
    274             ]
    275           },
    276           {
    277             'name': 'restrictedFunc'
    278           },
    279           {
    280             'name': 'scheduledFunc',
    281             'parameters': []
    282           }
    283         ],
    284         'events': [
    285           {
    286             'name': 'onActivated',
    287             'parameters': [
    288               {
    289                 'name': 'activeInfo',
    290                 'properties': {
    291                   'tabId': {},
    292                   'windowId': {}
    293                 }
    294               }
    295             ]
    296           },
    297           {
    298             'name': 'onUpdated',
    299             'parameters': [
    300               {
    301                 'name': 'tabId'
    302               },
    303               {
    304                 'name': 'tab'
    305               },
    306               {
    307                 'name': 'changeInfo',
    308                 'properties': {
    309                   'pinned': {},
    310                   'status': {}
    311                 }
    312               }
    313             ]
    314           }
    315         ]
    316       }])
    317     }
    318   },
    319   '1599': {
    320     'api': {
    321       '_api_features.json': "{}",
    322       '_manifest_features.json': "{}",
    323       '_permission_features.json': "{}",
    324       'fake_tabs.idl': FAKE_TABS_IDL,
    325       'tabs.json': json.dumps([{
    326         'namespace': 'tabs',
    327         'types': [
    328           {
    329             'id': 'Tab',
    330             'properties': {
    331               'url': {},
    332               'index': {},
    333               'selected': {},
    334               'id': {},
    335               'windowId': {}
    336             }
    337           },
    338           {
    339             'id': 'InjectDetails',
    340             'properties': {
    341               'allFrames': {},
    342               'code': {},
    343               'file': {}
    344             }
    345           },
    346           {
    347             'id': 'DeprecatedType',
    348             'deprecated': 'This is deprecated'
    349           }
    350         ],
    351         'properties': {
    352           'fakeTabsProperty1': {},
    353           'fakeTabsProperty2': {}
    354         },
    355         'functions': [
    356           {
    357             'name': 'getCurrent',
    358             'parameters': [
    359               {
    360                 'name': 'callback',
    361                 'parameters': [
    362                   {
    363                     'name': 'tab'
    364                   }
    365                 ]
    366               }
    367             ]
    368           },
    369           {
    370             'name': 'get',
    371             'parameters': [
    372               {
    373                 'name': 'callback',
    374                 'parameters': [
    375                   {
    376                     'name': 'tab'
    377                   }
    378                 ]
    379               },
    380               {
    381                 'name': 'tabId'
    382               }
    383             ]
    384           },
    385           {
    386             'name': 'restrictedFunc'
    387           }
    388         ],
    389         'events': [
    390           {
    391             'name': 'onActivated',
    392             'parameters': [
    393               {
    394                 'name': 'activeInfo',
    395                 'properties': {
    396                   'tabId': {},
    397                 }
    398               }
    399             ]
    400           },
    401           {
    402             'name': 'onUpdated',
    403             'parameters': [
    404               {
    405                 'name': 'tabId'
    406               },
    407               {
    408                 'name': 'changeInfo',
    409                 'properties': {
    410                   'pinned': {},
    411                   'status': {}
    412                 }
    413               }
    414             ]
    415           }
    416         ]
    417       }])
    418     }
    419   },
    420   '1547': {
    421     'api': {
    422       '_api_features.json': json.dumps({
    423         'tabs.restrictedFunc': {
    424           'channel': 'dev'
    425         }
    426       }),
    427       '_manifest_features.json': "{}",
    428       '_permission_features.json': "{}",
    429       'fake_tabs.idl': FAKE_TABS_IDL,
    430       'tabs.json': json.dumps([{
    431         'namespace': 'tabs',
    432         'types': [
    433           {
    434             'id': 'Tab',
    435             'properties': {
    436               'url': {},
    437               'index': {},
    438               'selected': {},
    439               'id': {},
    440               'windowId': {}
    441             }
    442           },
    443           {
    444             'id': 'InjectDetails',
    445             'properties': {
    446               'allFrames': {},
    447               'code': {},
    448               'file': {}
    449             }
    450           },
    451           {
    452             'id': 'DeprecatedType',
    453             'deprecated': 'This is deprecated'
    454           }
    455         ],
    456         'properties': {
    457           'fakeTabsProperty1': {},
    458           'fakeTabsProperty2': {}
    459         },
    460         'functions': [
    461           {
    462             'name': 'getCurrent',
    463             'parameters': [
    464               {
    465                 'name': 'callback',
    466                 'parameters': [
    467                   {
    468                     'name': 'tab'
    469                   }
    470                 ]
    471               }
    472             ]
    473           },
    474           {
    475             'name': 'get',
    476             'parameters': [
    477               {
    478                 'name': 'callback',
    479                 'parameters': [
    480                   {
    481                     'name': 'tab'
    482                   }
    483                 ]
    484               },
    485             ]
    486           },
    487           {
    488             'name': 'restrictedFunc'
    489           }
    490         ],
    491         'events': [
    492           {
    493             'name': 'onUpdated',
    494             'parameters': [
    495               {
    496                 'name': 'tabId'
    497               },
    498               {
    499                 'name': 'changeInfo',
    500                 'properties': {
    501                   'pinned': {},
    502                   'status': {}
    503                 }
    504               }
    505             ]
    506           }
    507         ]
    508       }])
    509     }
    510   },
    511   '1500': {
    512     'api': {
    513       '_api_features.json': "{}",
    514       '_manifest_features.json': "{}",
    515       '_permission_features.json': "{}",
    516       'fake_tabs.idl': FAKE_TABS_IDL,
    517       'tabs.json': json.dumps([{
    518         'namespace': 'tabs',
    519         'types': [
    520           {
    521             'id': 'Tab',
    522             'properties': {
    523               'url': {},
    524               'index': {},
    525               'selected': {},
    526               'id': {},
    527               'windowId': {}
    528             }
    529           },
    530           {
    531             'id': 'InjectDetails',
    532             'properties': {
    533               'allFrames': {},
    534             }
    535           },
    536           {
    537             'id': 'DeprecatedType',
    538             'deprecated': 'This is deprecated'
    539           }
    540         ],
    541         'properties': {
    542           'fakeTabsProperty1': {},
    543           'fakeTabsProperty2': {}
    544         },
    545         'functions': [
    546           {
    547             'name': 'getCurrent',
    548             'parameters': [
    549               {
    550                 'name': 'callback',
    551                 'parameters': [
    552                   {
    553                     'name': 'tab'
    554                   }
    555                 ]
    556               }
    557             ]
    558           },
    559           {
    560             'name': 'get',
    561             'parameters': [
    562               {
    563                 'name': 'callback',
    564                 'parameters': [
    565                   {
    566                     'name': 'tab'
    567                   }
    568                 ]
    569               },
    570             ]
    571           }
    572         ],
    573         'events': [
    574           {
    575             'name': 'onUpdated',
    576             'parameters': [
    577               {
    578                 'name': 'tabId'
    579               },
    580               {
    581                 'name': 'changeInfo',
    582                 'properties': {
    583                   'pinned': {},
    584                   'status': {}
    585                 }
    586               }
    587             ]
    588           }
    589         ]
    590       }])
    591     }
    592   },
    593   '1453': {
    594     'api': {
    595       '_api_features.json': "{}",
    596       '_manifest_features.json': "{}",
    597       '_permission_features.json': "{}",
    598       'fake_tabs.idl': FAKE_TABS_IDL,
    599       'tabs.json': json.dumps([{
    600         'namespace': 'tabs',
    601         'types': [
    602           {
    603             'id': 'Tab',
    604             'properties': {
    605               'url': {},
    606               'index': {},
    607               'selected': {},
    608               'id': {},
    609               'windowId': {}
    610             }
    611           },
    612           {
    613             'id': 'InjectDetails',
    614             'properties': {
    615               'allFrames': {},
    616             }
    617           },
    618           {
    619             'id': 'DeprecatedType',
    620             'deprecated': 'This is deprecated'
    621           }
    622         ],
    623         'properties': {
    624           'fakeTabsProperty1': {},
    625           'fakeTabsProperty2': {}
    626         },
    627         'functions': [
    628           {
    629             'name': 'getCurrent',
    630             'parameters': [
    631               {
    632                 'name': 'callback',
    633                 'parameters': [
    634                   {
    635                     'name': 'tab'
    636                   }
    637                 ]
    638               }
    639             ]
    640           },
    641           {
    642             'name': 'get',
    643             'parameters': [
    644               {
    645                 'name': 'callback',
    646                 'parameters': [
    647                   {
    648                     'name': 'tab'
    649                   }
    650                 ]
    651               },
    652             ]
    653           }
    654         ],
    655         'events': [
    656           {
    657             'name': 'onUpdated',
    658             'parameters': [
    659               {
    660                 'name': 'tabId'
    661               },
    662               {
    663                 'name': 'changeInfo',
    664                 'properties': {
    665                   'pinned': {},
    666                   'status': {}
    667                 }
    668               }
    669             ]
    670           }
    671         ]
    672       }])
    673     }
    674   },
    675   '1410': {
    676     'api': {
    677       '_manifest_features.json': "{}",
    678       '_permission_features.json': "{}",
    679       'fake_tabs.idl': FAKE_TABS_IDL,
    680       'tabs.json': json.dumps([{
    681         'namespace': 'tabs',
    682         'types': [
    683           {
    684             'id': 'Tab',
    685             'properties': {
    686               'url': {},
    687               'index': {},
    688               'selected': {},
    689               'id': {},
    690               'windowId': {}
    691             }
    692           },
    693           {
    694             'id': 'InjectDetails',
    695             'properties': {
    696               'allFrames': {},
    697             }
    698           },
    699           {
    700             'id': 'DeprecatedType',
    701             'deprecated': 'This is deprecated'
    702           }
    703         ],
    704         'properties': {
    705           'fakeTabsProperty1': {},
    706           'fakeTabsProperty2': {}
    707         },
    708         'functions': [
    709           {
    710             'name': 'getCurrent',
    711             'parameters': [
    712               {
    713                 'name': 'callback',
    714                 'parameters': [
    715                   {
    716                     'name': 'tab'
    717                   }
    718                 ]
    719               }
    720             ]
    721           },
    722           {
    723             'name': 'get',
    724             'parameters': [
    725               {
    726                 'name': 'callback',
    727                 'parameters': [
    728                   {
    729                     'name': 'tab'
    730                   }
    731                 ]
    732               }
    733             ]
    734           }
    735         ],
    736         'events': [
    737           {
    738             'name': 'onUpdated',
    739             'parameters': [
    740               {
    741                 'name': 'tabId'
    742               },
    743               {
    744                 'name': 'changeInfo',
    745                 'properties': {
    746                   'pinned': {},
    747                   'status': {}
    748                 }
    749               }
    750             ]
    751           }
    752         ]
    753       }])
    754     }
    755   },
    756   '1364': {
    757     'api': {
    758       '_manifest_features.json': "{}",
    759       '_permission_features.json': "{}",
    760       'fake_tabs.idl': FAKE_TABS_WITH_INLINING_IDL,
    761       'tabs.json': json.dumps([{
    762         'namespace': 'tabs',
    763         'types': [
    764           {
    765             'id': 'Tab',
    766             'properties': {
    767               'url': {},
    768               'index': {},
    769               'selected': {},
    770               'id': {},
    771               'windowId': {}
    772             }
    773           },
    774           {
    775             'id': 'InjectDetails',
    776             'properties': {
    777               'allFrames': {}
    778             }
    779           },
    780           {
    781             'id': 'DeprecatedType',
    782           }
    783         ],
    784         'properties': {
    785           'fakeTabsProperty1': {},
    786           'fakeTabsProperty2': {}
    787         },
    788         'functions': [
    789           {
    790             'name': 'getCurrent',
    791             'parameters': [
    792               {
    793                 'name': 'callback',
    794                 'parameters': [
    795                   {
    796                     'name': 'tab'
    797                   }
    798                 ]
    799               }
    800             ]
    801           },
    802           {
    803             'name': 'get',
    804             'parameters': [
    805               {
    806                 'name': 'callback',
    807                 'parameters': [
    808                   {
    809                     'name': 'tab'
    810                   }
    811                 ]
    812               }
    813             ]
    814           }
    815         ],
    816         'events': [
    817           {
    818             'name': 'onUpdated',
    819             'parameters': [
    820               {
    821                 'name': 'tabId'
    822               },
    823               {
    824                 'name': 'changeInfo',
    825                 'properties': {
    826                   'pinned': {},
    827                   'status': {}
    828                 }
    829               }
    830             ]
    831           }
    832         ]
    833       }])
    834     }
    835   },
    836   '1312': {
    837     'api': {
    838       '_manifest_features.json': "{}",
    839       '_permission_features.json': "{}",
    840       'tabs.json': json.dumps([{
    841         'namespace': 'tabs',
    842         'types': [
    843           {
    844             'id': 'Tab',
    845             'properties': {
    846               'url': {},
    847               'index': {},
    848               'selected': {},
    849               'id': {},
    850               'windowId': {}
    851             }
    852           }
    853         ],
    854         'properties': {
    855           'fakeTabsProperty1': {},
    856           'fakeTabsProperty2': {}
    857         },
    858         'functions': [
    859           {
    860             'name': 'getCurrent',
    861             'parameters': [
    862               {
    863                 'name': 'callback',
    864                 'parameters': [
    865                   {
    866                     'name': 'tab'
    867                   }
    868                 ]
    869               }
    870             ]
    871           },
    872           {
    873             'name': 'get',
    874             'parameters': [
    875               {
    876                 'name': 'callback',
    877                 'parameters': [
    878                   {
    879                     'name': 'tab'
    880                   }
    881                 ]
    882               }
    883             ]
    884           }
    885         ],
    886         'events': [
    887           {
    888             'name': 'onUpdated',
    889             'parameters': [
    890               {
    891                 'name': 'tabId'
    892               },
    893               {
    894                 'name': 'changeInfo',
    895                 'properties': {
    896                   'pinned': {},
    897                   'status': {}
    898                 }
    899               }
    900             ]
    901           }
    902         ]
    903       }])
    904     }
    905   },
    906   '1271': {
    907     'api': {
    908       '_manifest_features.json': "{}",
    909       '_permission_features.json': "{}",
    910       'tabs.json': json.dumps([{
    911         'namespace': 'tabs',
    912         'types': [
    913           {
    914             'id': 'Tab',
    915             'properties': {
    916               'url': {},
    917               'index': {},
    918               'selected': {},
    919               'id': {},
    920               'windowId': {}
    921             }
    922           }
    923         ],
    924         'properties': {
    925           'fakeTabsProperty1': {},
    926           'fakeTabsProperty2': {}
    927         },
    928         'functions': [
    929           {
    930             'name': 'getCurrent',
    931             'parameters': [
    932               {
    933                 'name': 'callback',
    934                 'parameters': [
    935                   {
    936                     'name': 'tab'
    937                   }
    938                 ]
    939               }
    940             ]
    941           },
    942           {
    943             'name': 'get',
    944             'parameters': [
    945               {
    946                 'name': 'callback',
    947                 'parameters': [
    948                   {
    949                     'name': 'tab'
    950                   }
    951                 ]
    952               }
    953             ]
    954           }
    955         ],
    956         'events': [
    957           {
    958             'name': 'onUpdated',
    959             'parameters': [
    960               {
    961                 'name': 'tabId'
    962               },
    963               {
    964                 'name': 'changeInfo',
    965                 'properties': {
    966                   'pinned': {},
    967                   'status': {}
    968                 }
    969               }
    970             ]
    971           }
    972         ]
    973       }])
    974     }
    975   },
    976   '1229': {
    977     'api': {
    978       '_manifest_features.json': "{}",
    979       '_permission_features.json': "{}",
    980       'tabs.json': json.dumps([{
    981         'namespace': 'tabs',
    982         'types': [
    983           {
    984             'id': 'Tab',
    985             'properties': {
    986               'url': {},
    987               'index': {},
    988               'selected': {},
    989               'id': {},
    990               'windowId': {}
    991             }
    992           }
    993         ],
    994         'properties': {
    995           'fakeTabsProperty1': {},
    996           'fakeTabsProperty2': {}
    997         },
    998         'functions': [
    999           {
   1000             'name': 'getCurrent',
   1001             'parameters': [
   1002               {
   1003                 'name': 'callback',
   1004                 'parameters': [
   1005                   {
   1006                     'name': 'tab'
   1007                   }
   1008                 ]
   1009               }
   1010             ]
   1011           },
   1012           {
   1013             'name': 'get',
   1014             'parameters': [
   1015               {
   1016                 'name': 'callback',
   1017                 'parameters': [
   1018                   {
   1019                     'name': 'tab'
   1020                   }
   1021                 ]
   1022               }
   1023             ]
   1024           }
   1025         ],
   1026         'events': [
   1027           {
   1028             'name': 'onUpdated',
   1029             'parameters': [
   1030               {
   1031                 'name': 'tabId'
   1032               },
   1033               {
   1034                 'name': 'changeInfo',
   1035                 'properties': {
   1036                   'pinned': {},
   1037                   'status': {}
   1038                 }
   1039               }
   1040             ]
   1041           }
   1042         ]
   1043       }])
   1044     }
   1045   },
   1046   '1180': {
   1047     'api': {
   1048       '_manifest_features.json': "{}",
   1049       '_permission_features.json': "{}",
   1050       'tabs.json': json.dumps([{
   1051         'namespace': 'tabs',
   1052         'types': [
   1053           {
   1054             'id': 'Tab',
   1055             'properties': {
   1056               'url': {},
   1057               'index': {},
   1058               'selected': {},
   1059               'id': {}
   1060             }
   1061           }
   1062         ],
   1063         'properties': {
   1064           'fakeTabsProperty1': {},
   1065           'fakeTabsProperty2': {}
   1066         },
   1067         'functions': [
   1068           {
   1069             'name': 'getCurrent',
   1070             'parameters': [
   1071               {
   1072                 'name': 'callback',
   1073                 'parameters': [
   1074                   {
   1075                     'name': 'tab'
   1076                   }
   1077                 ]
   1078               }
   1079             ]
   1080           },
   1081           {
   1082             'name': 'get',
   1083             'parameters': [
   1084               {
   1085                 'name': 'callback',
   1086                 'parameters': [
   1087                   {
   1088                     'name': 'tab'
   1089                   }
   1090                 ]
   1091               }
   1092             ]
   1093           }
   1094         ],
   1095         'events': [
   1096           {
   1097             'name': 'onUpdated',
   1098             'parameters': [
   1099               {
   1100                 'name': 'tabId'
   1101               },
   1102               {
   1103                 'name': 'changeInfo',
   1104                 'properties': {
   1105                   'pinned': {},
   1106                   'status': {}
   1107                 }
   1108               }
   1109             ]
   1110           }
   1111         ]
   1112       }])
   1113     }
   1114   },
   1115   '1132': {
   1116     'api': {
   1117       '_manifest_features.json': "{}",
   1118       '_permission_features.json': "{}",
   1119       'tabs.json': json.dumps([{
   1120         'namespace': 'tabs',
   1121         'types': [
   1122           {
   1123             'id': 'Tab',
   1124             'properties': {
   1125               'url': {},
   1126               'index': {},
   1127               'id': {}
   1128             }
   1129           }
   1130         ],
   1131         'properties': {
   1132           'fakeTabsProperty1': {},
   1133           'fakeTabsProperty2': {}
   1134         },
   1135         'functions': [
   1136           {
   1137             'name': 'getCurrent',
   1138             'parameters': [
   1139               {
   1140                 'name': 'callback',
   1141                 'parameters': [
   1142                   {
   1143                     'name': 'tab'
   1144                   }
   1145                 ]
   1146               }
   1147             ]
   1148           },
   1149           {
   1150             'name': 'get',
   1151             'parameters': [
   1152               {
   1153                 'name': 'callback',
   1154                 'parameters': [
   1155                   {
   1156                     'name': 'tab'
   1157                   }
   1158                 ]
   1159               }
   1160             ]
   1161           }
   1162         ],
   1163         'events': [
   1164           {
   1165             'name': 'onUpdated',
   1166             'parameters': [
   1167               {
   1168                 'name': 'tabId'
   1169               },
   1170               {
   1171                 'name': 'changeInfo',
   1172                 'properties': {
   1173                   'pinned': {},
   1174                   'status': {}
   1175                 }
   1176               }
   1177             ]
   1178           }
   1179         ]
   1180       }])
   1181     }
   1182   },
   1183   '1084': {
   1184     'api': {
   1185       'tabs.json': json.dumps([{
   1186         'namespace': 'tabs',
   1187         'types': [
   1188           {
   1189             'id': 'Tab',
   1190             'properties': {
   1191               'url': {},
   1192               'index': {},
   1193               'id': {}
   1194             }
   1195           }
   1196         ],
   1197         'properties': {
   1198           'fakeTabsProperty1': {},
   1199           'fakeTabsProperty2': {}
   1200         },
   1201         'functions': [
   1202           {
   1203             'name': 'getCurrent',
   1204             'parameters': [
   1205               {
   1206                 'name': 'callback',
   1207                 'parameters': [
   1208                   {
   1209                     'name': 'tab'
   1210                   }
   1211                 ]
   1212               }
   1213             ]
   1214           },
   1215           {
   1216             'name': 'get',
   1217             'parameters': [
   1218               {
   1219                 'name': 'callback',
   1220                 'parameters': [
   1221                   {
   1222                     'name': 'tab'
   1223                   }
   1224                 ]
   1225               }
   1226             ]
   1227           }
   1228         ],
   1229         'events': [
   1230           {
   1231             'name': 'onUpdated',
   1232             'parameters': [
   1233               {
   1234                 'name': 'tabId'
   1235               },
   1236               {
   1237                 'name': 'changeInfo',
   1238                 'properties': {
   1239                   'pinned': {},
   1240                   'status': {}
   1241                 }
   1242               }
   1243             ]
   1244           }
   1245         ]
   1246       }])
   1247     }
   1248   },
   1249   '1025': {
   1250     'api': {
   1251       'tabs.json': json.dumps([{
   1252         'namespace': 'tabs',
   1253         'types': [
   1254           {
   1255             'id': 'Tab',
   1256             'properties': {
   1257               'url': {},
   1258               'index': {},
   1259               'id': {}
   1260             }
   1261           }
   1262         ],
   1263         'properties': {
   1264           'fakeTabsProperty1': {},
   1265           'fakeTabsProperty2': {}
   1266         },
   1267         'functions': [
   1268           {
   1269             'name': 'get',
   1270             'parameters': [
   1271               {
   1272                 'name': 'callback',
   1273                 'parameters': [
   1274                   {
   1275                     'name': 'tab'
   1276                   }
   1277                 ]
   1278               }
   1279             ]
   1280           }
   1281         ],
   1282         'events': [
   1283           {
   1284             'name': 'onUpdated',
   1285             'parameters': [
   1286               {
   1287                 'name': 'tabId'
   1288               },
   1289               {
   1290                 'name': 'changeInfo',
   1291                 'properties': {
   1292                   'pinned': {},
   1293                   'status': {}
   1294                 }
   1295               }
   1296             ]
   1297           }
   1298         ]
   1299       }])
   1300     }
   1301   },
   1302   '963': {
   1303     'api': {
   1304       'extension_api.json': json.dumps([{
   1305         'namespace': 'tabs',
   1306         'types': [
   1307           {
   1308             'id': 'Tab',
   1309             'properties': {
   1310               'url': {},
   1311               'id': {}
   1312             }
   1313           }
   1314         ],
   1315         'properties': {
   1316           'fakeTabsProperty1': {},
   1317           'fakeTabsProperty2': {}
   1318         },
   1319         'functions': [
   1320           {
   1321             'name': 'get',
   1322             'parameters': [
   1323               {
   1324                 'name': 'callback',
   1325                 'parameters': [
   1326                   {
   1327                     'name': 'tab'
   1328                   }
   1329                 ]
   1330               }
   1331             ]
   1332           }
   1333         ],
   1334         'events': [
   1335           {
   1336             'name': 'onUpdated',
   1337             'parameters': [
   1338               {
   1339                 'name': 'tabId'
   1340               },
   1341               {
   1342                 'name': 'changeInfo',
   1343                 'properties': {
   1344                   'pinned': {},
   1345                   'status': {}
   1346                 }
   1347               }
   1348             ]
   1349           }
   1350         ]
   1351       }])
   1352     }
   1353   },
   1354   '912': {
   1355     'api': {
   1356       'extension_api.json': json.dumps([{
   1357         'namespace': 'tabs',
   1358         'types': [
   1359           {
   1360             'id': 'Tab',
   1361             'properties': {
   1362               'url': {},
   1363               'id': {}
   1364             }
   1365           }
   1366         ],
   1367         'properties': {
   1368           'fakeTabsProperty1': {},
   1369           'fakeTabsProperty2': {}
   1370         },
   1371         'functions': [
   1372           {
   1373             'name': 'get',
   1374             'parameters': [
   1375               {
   1376                 'name': 'callback',
   1377                 'parameters': [
   1378                   {
   1379                     'name': 'tab'
   1380                   }
   1381                 ]
   1382               }
   1383             ]
   1384           }
   1385         ],
   1386         'events': [
   1387           {
   1388             'name': 'onUpdated',
   1389             'parameters': [
   1390               {
   1391                 'name': 'tabId'
   1392               }
   1393             ]
   1394           }
   1395         ]
   1396       }])
   1397     }
   1398   },
   1399   '874': {
   1400     'api': {
   1401       'extension_api.json': json.dumps([{
   1402         'namespace': 'tabs',
   1403         'types': [
   1404           {
   1405             'id': 'Tab',
   1406             'properties': {
   1407               'url': {},
   1408               'id': {}
   1409             }
   1410           }
   1411         ],
   1412         'properties': {
   1413           'fakeTabsProperty1': {},
   1414           'fakeTabsProperty2': {}
   1415         },
   1416         'functions': [
   1417           {
   1418             'name': 'get',
   1419             'parameters': [
   1420               {
   1421                 'name': 'callback',
   1422                 'parameters': [
   1423                   {
   1424                     'name': 'tab'
   1425                   }
   1426                 ]
   1427               }
   1428             ]
   1429           }
   1430         ],
   1431         'events': [
   1432           {
   1433             'name': 'onUpdated',
   1434             'parameters': [
   1435               {
   1436                 'name': 'tabId'
   1437               }
   1438             ]
   1439           }
   1440         ]
   1441       }])
   1442     }
   1443   },
   1444   '835': {
   1445     'api': {
   1446       'extension_api.json': json.dumps([{
   1447         'namespace': 'tabs',
   1448         'types': [
   1449           {
   1450             'id': 'Tab',
   1451             'properties': {
   1452               'url': {},
   1453               'id': {}
   1454             }
   1455           }
   1456         ],
   1457         'properties': {
   1458           'fakeTabsProperty1': {}
   1459         },
   1460         'functions': [
   1461           {
   1462             'name': 'get',
   1463             'parameters': [
   1464               {
   1465                 'name': 'callback',
   1466                 'parameters': [
   1467                   {
   1468                     'name': 'tab'
   1469                   }
   1470                 ]
   1471               }
   1472             ]
   1473           }
   1474         ],
   1475         'events': [
   1476           {
   1477             'name': 'onUpdated',
   1478             'parameters': [
   1479               {
   1480                 'name': 'tabId'
   1481               }
   1482             ]
   1483           }
   1484         ]
   1485       }])
   1486     }
   1487   },
   1488   '782': {
   1489     'api': {
   1490       'extension_api.json': "{}"
   1491     }
   1492   }
   1493 })
   1494