features_bundle_test.py revision 46d4c2bc3267f3f028f39e7e311b0f89aba2e4fd
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 CHROME_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 'inheritsFromDifferentDependencyName': { 33 'dependencies': ['manifest:inheritsPlatformAndChannelFromDependency'] 34 }, 35 'inheritsPlatformAndChannelFromDependency': { 36 'dependencies': ['manifest:inheritsPlatformAndChannelFromDependency'] 37 }, 38 'omnibox': { 39 'dependencies': ['manifest:omnibox'], 40 'contexts': ['blessed_extension'] 41 }, 42 'syncFileSystem': { 43 'dependencies': ['permission:syncFileSystem'], 44 'contexts': ['blessed_extension'] 45 }, 46 'tabs': { 47 'channel': 'stable', 48 'extension_types': ['extension', 'legacy_packaged_app'], 49 'contexts': ['blessed_extension'] 50 }, 51 'test': { 52 'channel': 'stable', 53 'extension_types': 'all', 54 'contexts': [ 55 'blessed_extension', 'unblessed_extension', 'content_script'] 56 }, 57 'overridesPlatformAndChannelFromDependency': { 58 'channel': 'beta', 59 'dependencies': [ 60 'permission:overridesPlatformAndChannelFromDependency' 61 ], 62 'extension_types': ['platform_app'] 63 }, 64 'windows': { 65 'dependencies': ['api:tabs'], 66 'contexts': ['blessed_extension'] 67 } 68 }), 69 '_manifest_features.json': json.dumps({ 70 'app.content_security_policy': { 71 'channel': 'stable', 72 'extension_types': ['platform_app'], 73 'min_manifest_version': 2, 74 'whitelist': ['this isnt happening'] 75 }, 76 'background': { 77 'channel': 'stable', 78 'extension_types': ['extension', 'legacy_packaged_app', 'hosted_app'] 79 }, 80 'inheritsPlatformAndChannelFromDependency': { 81 'channel': 'dev', 82 'extension_types': ['extension'] 83 }, 84 'manifest_version': { 85 'channel': 'stable', 86 'extension_types': 'all' 87 }, 88 'omnibox': { 89 'channel': 'stable', 90 'extension_types': ['extension'], 91 'platforms': ['win'] 92 }, 93 'page_action': { 94 'channel': 'stable', 95 'extension_types': ['extension'] 96 }, 97 'sockets': { 98 'channel': 'dev', 99 'extension_types': ['platform_app'] 100 } 101 }), 102 '_permission_features.json': json.dumps({ 103 'bluetooth': { 104 'channel': 'dev', 105 'extension_types': ['platform_app'] 106 }, 107 'overridesPlatformAndChannelFromDependency': { 108 'channel': 'stable', 109 'extension_types': ['extension'] 110 }, 111 'power': { 112 'channel': 'stable', 113 'extension_types': [ 114 'extension', 'legacy_packaged_app', 'platform_app' 115 ] 116 }, 117 'syncFileSystem': { 118 'channel': 'beta', 119 'extension_types': ['platform_app'] 120 }, 121 'tabs': { 122 'channel': 'stable', 123 'extension_types': ['extension'] 124 } 125 }) 126 }, 127 'docs': { 128 'templates': { 129 'json': { 130 'manifest.json': json.dumps({ 131 'background': { 132 'documentation': 'background_pages.html' 133 }, 134 'manifest_version': { 135 'documentation': 'manifest/manifest_version.html', 136 'example': 2, 137 'level': 'required' 138 }, 139 'page_action': { 140 'documentation': 'pageAction.html', 141 'example': {}, 142 'level': 'only_one' 143 } 144 }), 145 'permissions.json': json.dumps({ 146 'fakeUnsupportedFeature': {}, 147 'syncFileSystem': { 148 'partial': 'permissions/sync_file_system.html' 149 }, 150 'tabs': { 151 'partial': 'permissions/tabs.html' 152 }, 153 }) 154 } 155 } 156 } 157} 158 159 160class FeaturesBundleTest(unittest.TestCase): 161 def setUp(self): 162 self._server = ServerInstance.ForTest( 163 TestFileSystem(_TEST_FILESYSTEM, relative_to=CHROME_EXTENSIONS)) 164 165 def testManifestFeatures(self): 166 expected_features = { 167 'background': { 168 'name': 'background', 169 'channel': 'stable', 170 'platforms': ['extensions'], 171 'documentation': 'background_pages.html' 172 }, 173 'inheritsPlatformAndChannelFromDependency': { 174 'channel': 'dev', 175 'name': 'inheritsPlatformAndChannelFromDependency', 176 'platforms': ['extensions'] 177 }, 178 'manifest_version': { 179 'name': 'manifest_version', 180 'channel': 'stable', 181 'platforms': ['apps', 'extensions'], 182 'documentation': 'manifest/manifest_version.html', 183 'level': 'required', 184 'example': 2 185 }, 186 'omnibox': { 187 'name': 'omnibox', 188 'channel': 'stable', 189 'platforms': ['extensions'] 190 }, 191 'page_action': { 192 'name': 'page_action', 193 'channel': 'stable', 194 'platforms': ['extensions'], 195 'documentation': 'pageAction.html', 196 'level': 'only_one', 197 'example': {} 198 }, 199 'sockets': { 200 'name': 'sockets', 201 'channel': 'dev', 202 'platforms': ['apps'] 203 } 204 } 205 self.assertEqual( 206 expected_features, 207 self._server.features_bundle.GetManifestFeatures().Get()) 208 209 def testPermissionFeatures(self): 210 expected_features = { 211 'bluetooth': { 212 'name': 'bluetooth', 213 'channel': 'dev', 214 'platforms': ['apps'], 215 }, 216 'fakeUnsupportedFeature': { 217 'name': 'fakeUnsupportedFeature', 218 'platforms': [] 219 }, 220 'overridesPlatformAndChannelFromDependency': { 221 'name': 'overridesPlatformAndChannelFromDependency', 222 'channel': 'stable', 223 'platforms': ['extensions'] 224 }, 225 'power': { 226 'name': 'power', 227 'channel': 'stable', 228 'platforms': ['apps', 'extensions'], 229 }, 230 'syncFileSystem': { 231 'name': 'syncFileSystem', 232 'channel': 'beta', 233 'platforms': ['apps'], 234 'partial': 'permissions/sync_file_system.html' 235 }, 236 'tabs': { 237 'name': 'tabs', 238 'channel': 'stable', 239 'platforms': ['extensions'], 240 'partial': 'permissions/tabs.html' 241 } 242 } 243 self.assertEqual( 244 expected_features, 245 self._server.features_bundle.GetPermissionFeatures().Get()) 246 247 def testAPIFeatures(self): 248 expected_features = { 249 'audioCapture': { 250 'name': 'audioCapture', 251 'channel': 'stable', 252 'platforms': ['apps'] 253 }, 254 'background': { 255 'name': 'background', 256 'channel': 'stable', 257 'platforms': ['extensions'] 258 }, 259 'inheritsFromDifferentDependencyName': { 260 'channel': 'dev', 261 'name': 'inheritsFromDifferentDependencyName', 262 'dependencies': ['manifest:inheritsPlatformAndChannelFromDependency'], 263 'platforms': ['extensions'] 264 }, 265 'inheritsPlatformAndChannelFromDependency': { 266 'channel': 'dev', 267 'name': 'inheritsPlatformAndChannelFromDependency', 268 'dependencies': ['manifest:inheritsPlatformAndChannelFromDependency'], 269 'platforms': ['extensions'] 270 }, 271 'omnibox': { 272 'channel': 'stable', 273 'name': 'omnibox', 274 'platforms': ['extensions'], 275 'contexts': ['blessed_extension'], 276 'dependencies': ['manifest:omnibox'] 277 }, 278 'overridesPlatformAndChannelFromDependency': { 279 'channel': 'beta', 280 'name': 'overridesPlatformAndChannelFromDependency', 281 'dependencies': [ 282 'permission:overridesPlatformAndChannelFromDependency' 283 ], 284 'platforms': ['apps'] 285 }, 286 'syncFileSystem': { 287 'channel': 'beta', 288 'name': 'syncFileSystem', 289 'platforms': ['apps'], 290 'contexts': ['blessed_extension'], 291 'dependencies': ['permission:syncFileSystem'] 292 }, 293 'tabs': { 294 'channel': 'stable', 295 'name': 'tabs', 296 'channel': 'stable', 297 'platforms': ['extensions'], 298 'contexts': ['blessed_extension'], 299 }, 300 'test': { 301 'channel': 'stable', 302 'name': 'test', 303 'channel': 'stable', 304 'platforms': ['apps', 'extensions'], 305 'contexts': [ 306 'blessed_extension', 'unblessed_extension', 'content_script'], 307 }, 308 'windows': { 309 'channel': 'stable', 310 'name': 'windows', 311 'platforms': ['extensions'], 312 'contexts': ['blessed_extension'], 313 'dependencies': ['api:tabs'] 314 } 315 } 316 self.assertEqual( 317 expected_features, 318 self._server.features_bundle.GetAPIFeatures().Get()) 319 320 321if __name__ == '__main__': 322 unittest.main() 323