1#!/usr/bin/env python 2# Copyright 2013 The Chromium Authors. All rights reserved. 3# Use of this source code is governed by a BSD-style license that can be 4# found in the LICENSE file. 5 6import json 7import unittest 8 9from extensions_paths import EXTENSIONS 10from server_instance import ServerInstance 11from test_file_system import TestFileSystem 12 13 14_TEST_FILESYSTEM = { 15 'api': { 16 '_api_features.json': json.dumps({ 17 'audioCapture': { 18 'channel': 'stable', 19 'extension_types': ['platform_app'] 20 }, 21 'background': [ 22 { 23 'channel': 'stable', 24 'extension_types': ['extension'] 25 }, 26 { 27 'channel': 'stable', 28 'extension_types': ['platform_app'], 29 'whitelist': ['im not here'] 30 } 31 ], 32 'omnibox': { 33 'dependencies': ['manifest:omnibox'], 34 'contexts': ['blessed_extension'] 35 }, 36 'syncFileSystem': { 37 'dependencies': ['permission:syncFileSystem'], 38 'contexts': ['blessed_extension'] 39 }, 40 'tabs': { 41 'channel': 'stable', 42 'extension_types': ['extension', 'legacy_packaged_app'], 43 'contexts': ['blessed_extension'] 44 }, 45 'test': { 46 'channel': 'stable', 47 'extension_types': 'all', 48 'contexts': [ 49 'blessed_extension', 'unblessed_extension', 'content_script'] 50 }, 51 'windows': { 52 'dependencies': ['api:tabs'], 53 'contexts': ['blessed_extension'] 54 } 55 }), 56 '_manifest_features.json': json.dumps({ 57 'app.content_security_policy': { 58 'channel': 'stable', 59 'extension_types': ['platform_app'], 60 'min_manifest_version': 2, 61 'whitelist': ['this isnt happening'] 62 }, 63 'background': { 64 'channel': 'stable', 65 'extension_types': ['extension', 'legacy_packaged_app', 'hosted_app'] 66 }, 67 'manifest_version': { 68 'channel': 'stable', 69 'extension_types': 'all' 70 }, 71 'omnibox': { 72 'channel': 'stable', 73 'extension_types': ['extension'] 74 }, 75 'page_action': { 76 'channel': 'stable', 77 'extension_types': ['extension'] 78 }, 79 'sockets': { 80 'channel': 'dev', 81 'extension_types': ['platform_app'] 82 } 83 }), 84 '_permission_features.json': json.dumps({ 85 'bluetooth': { 86 'channel': 'dev', 87 'extension_types': ['platform_app'] 88 }, 89 'power': { 90 'channel': 'stable', 91 'extension_types': [ 92 'extension', 'legacy_packaged_app', 'platform_app' 93 ] 94 }, 95 'syncFileSystem': { 96 'channel': 'stable', 97 'extension_types': ['platform_app'] 98 }, 99 'tabs': { 100 'channel': 'stable', 101 'extension_types': ['extension'] 102 } 103 }) 104 }, 105 'docs': { 106 'templates': { 107 'json': { 108 'manifest.json': json.dumps({ 109 'background': { 110 'documentation': 'background_pages.html' 111 }, 112 'manifest_version': { 113 'documentation': 'manifest/manifest_version.html', 114 'example': 2, 115 'level': 'required' 116 }, 117 'page_action': { 118 'documentation': 'pageAction.html', 119 'example': {}, 120 'level': 'only_one' 121 } 122 }), 123 'permissions.json': json.dumps({ 124 'fakeUnsupportedFeature': {}, 125 'syncFileSystem': { 126 'partial': 'permissions/sync_file_system.html' 127 }, 128 'tabs': { 129 'partial': 'permissions/tabs.html' 130 }, 131 }) 132 } 133 } 134 } 135} 136 137 138class FeaturesBundleTest(unittest.TestCase): 139 def setUp(self): 140 self._server = ServerInstance.ForTest( 141 TestFileSystem(_TEST_FILESYSTEM, relative_to=EXTENSIONS)) 142 143 def testManifestFeatures(self): 144 expected_features = { 145 'background': { 146 'name': 'background', 147 'channel': 'stable', 148 'platforms': ['extensions'], 149 'documentation': 'background_pages.html' 150 }, 151 'manifest_version': { 152 'name': 'manifest_version', 153 'channel': 'stable', 154 'platforms': ['apps', 'extensions'], 155 'documentation': 'manifest/manifest_version.html', 156 'level': 'required', 157 'example': 2 158 }, 159 'omnibox': { 160 'name': 'omnibox', 161 'channel': 'stable', 162 'platforms': ['extensions'] 163 }, 164 'page_action': { 165 'name': 'page_action', 166 'channel': 'stable', 167 'platforms': ['extensions'], 168 'documentation': 'pageAction.html', 169 'level': 'only_one', 170 'example': {} 171 }, 172 'sockets': { 173 'name': 'sockets', 174 'channel': 'dev', 175 'platforms': ['apps'] 176 } 177 } 178 self.assertEqual( 179 expected_features, 180 self._server.features_bundle.GetManifestFeatures().Get()) 181 182 def testPermissionFeatures(self): 183 expected_features = { 184 'bluetooth': { 185 'name': 'bluetooth', 186 'channel': 'dev', 187 'platforms': ['apps'], 188 }, 189 'fakeUnsupportedFeature': { 190 'name': 'fakeUnsupportedFeature', 191 'platforms': [] 192 }, 193 'power': { 194 'name': 'power', 195 'channel': 'stable', 196 'platforms': ['apps', 'extensions'], 197 }, 198 'syncFileSystem': { 199 'name': 'syncFileSystem', 200 'channel': 'stable', 201 'platforms': ['apps'], 202 'partial': 'permissions/sync_file_system.html' 203 }, 204 'tabs': { 205 'name': 'tabs', 206 'channel': 'stable', 207 'platforms': ['extensions'], 208 'partial': 'permissions/tabs.html' 209 } 210 } 211 self.assertEqual( 212 expected_features, 213 self._server.features_bundle.GetPermissionFeatures().Get()) 214 215 def testAPIFeatures(self): 216 expected_features = { 217 'audioCapture': { 218 'name': 'audioCapture', 219 'channel': 'stable', 220 'platforms': ['apps'] 221 }, 222 'background': { 223 'name': 'background', 224 'channel': 'stable', 225 'platforms': ['extensions'] 226 }, 227 'omnibox': { 228 'name': 'omnibox', 229 'platforms': ['extensions'], 230 'contexts': ['blessed_extension'], 231 'dependencies': ['manifest:omnibox'] 232 }, 233 'syncFileSystem': { 234 'name': 'syncFileSystem', 235 'platforms': ['apps'], 236 'contexts': ['blessed_extension'], 237 'dependencies': ['permission:syncFileSystem'] 238 }, 239 'tabs': { 240 'name': 'tabs', 241 'channel': 'stable', 242 'platforms': ['extensions'], 243 'contexts': ['blessed_extension'], 244 }, 245 'test': { 246 'name': 'test', 247 'channel': 'stable', 248 'platforms': ['apps', 'extensions'], 249 'contexts': [ 250 'blessed_extension', 'unblessed_extension', 'content_script'], 251 }, 252 'windows': { 253 'name': 'windows', 254 'platforms': ['extensions'], 255 'contexts': ['blessed_extension'], 256 'dependencies': ['api:tabs'] 257 } 258 } 259 self.assertEqual( 260 expected_features, 261 self._server.features_bundle.GetAPIFeatures().Get()) 262 263 264if __name__ == '__main__': 265 unittest.main() 266