1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/mozapps/extensions/test/xpcshell/test_manifest.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,562 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ 1.6 + */ 1.7 + 1.8 +// This tests that all properties are read from the install manifests and that 1.9 +// items are correctly enabled/disabled based on them (blocklist tests are 1.10 +// elsewhere) 1.11 + 1.12 +function run_test() { 1.13 + createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); 1.14 + const profileDir = gProfD.clone(); 1.15 + profileDir.append("extensions"); 1.16 + 1.17 + writeInstallRDFForExtension({ 1.18 + id: "addon1@tests.mozilla.org", 1.19 + version: "1.0", 1.20 + optionsURL: "chrome://test/content/options.xul", 1.21 + aboutURL: "chrome://test/content/about.xul", 1.22 + iconURL: "chrome://test/skin/icon.png", 1.23 + icon64URL: "chrome://test/skin/icon64.png", 1.24 + targetApplications: [{ 1.25 + id: "xpcshell@tests.mozilla.org", 1.26 + minVersion: "1", 1.27 + maxVersion: "1" 1.28 + }], 1.29 + name: "Test Addon 1", 1.30 + description: "Test Description", 1.31 + creator: "Test Creator", 1.32 + homepageURL: "http://www.example.com", 1.33 + developer: [ 1.34 + "Test Developer 1", 1.35 + "Test Developer 2" 1.36 + ], 1.37 + translator: [ 1.38 + "Test Translator 1", 1.39 + "Test Translator 2" 1.40 + ], 1.41 + contributor: [ 1.42 + "Test Contributor 1", 1.43 + "Test Contributor 2" 1.44 + ] 1.45 + }, profileDir); 1.46 + 1.47 + writeInstallRDFForExtension({ 1.48 + id: "addon2@tests.mozilla.org", 1.49 + version: "1.0", 1.50 + updateURL: "https://www.foo.com", 1.51 + targetApplications: [{ 1.52 + id: "xpcshell@tests.mozilla.org", 1.53 + minVersion: "1", 1.54 + maxVersion: "1" 1.55 + }], 1.56 + name: "Test Addon 2" 1.57 + }, profileDir); 1.58 + 1.59 + writeInstallRDFForExtension({ 1.60 + id: "addon3@tests.mozilla.org", 1.61 + version: "1.0", 1.62 + updateURL: "http://www.foo.com", 1.63 + targetApplications: [{ 1.64 + id: "xpcshell@tests.mozilla.org", 1.65 + minVersion: "1", 1.66 + maxVersion: "1" 1.67 + }], 1.68 + name: "Test Addon 3" 1.69 + }, profileDir); 1.70 + 1.71 + writeInstallRDFForExtension({ 1.72 + id: "addon4@tests.mozilla.org", 1.73 + version: "1.0", 1.74 + updateURL: "http://www.foo.com", 1.75 + updateKey: "foo", 1.76 + targetApplications: [{ 1.77 + id: "xpcshell@tests.mozilla.org", 1.78 + minVersion: "1", 1.79 + maxVersion: "1" 1.80 + }], 1.81 + name: "Test Addon 4" 1.82 + }, profileDir); 1.83 + 1.84 + writeInstallRDFForExtension({ 1.85 + id: "addon5@tests.mozilla.org", 1.86 + version: "1.0", 1.87 + targetApplications: [{ 1.88 + id: "xpcshell@tests.mozilla.org", 1.89 + minVersion: "1", 1.90 + maxVersion: "*" 1.91 + }], 1.92 + name: "Test Addon 5" 1.93 + }, profileDir); 1.94 + 1.95 + writeInstallRDFForExtension({ 1.96 + id: "addon6@tests.mozilla.org", 1.97 + version: "1.0", 1.98 + targetApplications: [{ 1.99 + id: "xpcshell@tests.mozilla.org", 1.100 + minVersion: "0", 1.101 + maxVersion: "1" 1.102 + }], 1.103 + name: "Test Addon 6" 1.104 + }, profileDir); 1.105 + 1.106 + writeInstallRDFForExtension({ 1.107 + id: "addon7@tests.mozilla.org", 1.108 + version: "1.0", 1.109 + targetApplications: [{ 1.110 + id: "xpcshell@tests.mozilla.org", 1.111 + minVersion: "0", 1.112 + maxVersion: "0" 1.113 + }], 1.114 + name: "Test Addon 7" 1.115 + }, profileDir); 1.116 + 1.117 + writeInstallRDFForExtension({ 1.118 + id: "addon8@tests.mozilla.org", 1.119 + version: "1.0", 1.120 + targetApplications: [{ 1.121 + id: "xpcshell@tests.mozilla.org", 1.122 + minVersion: "1.1", 1.123 + maxVersion: "*" 1.124 + }], 1.125 + name: "Test Addon 8" 1.126 + }, profileDir); 1.127 + 1.128 + writeInstallRDFForExtension({ 1.129 + id: "addon9@tests.mozilla.org", 1.130 + version: "1.0", 1.131 + targetApplications: [{ 1.132 + id: "toolkit@mozilla.org", 1.133 + minVersion: "1.9.2", 1.134 + maxVersion: "1.9.*" 1.135 + }], 1.136 + name: "Test Addon 9" 1.137 + }, profileDir); 1.138 + 1.139 + writeInstallRDFForExtension({ 1.140 + id: "addon10@tests.mozilla.org", 1.141 + version: "1.0", 1.142 + targetApplications: [{ 1.143 + id: "toolkit@mozilla.org", 1.144 + minVersion: "1.9.2.1", 1.145 + maxVersion: "1.9.*" 1.146 + }], 1.147 + name: "Test Addon 10" 1.148 + }, profileDir); 1.149 + 1.150 + writeInstallRDFForExtension({ 1.151 + id: "addon11@tests.mozilla.org", 1.152 + version: "1.0", 1.153 + targetApplications: [{ 1.154 + id: "toolkit@mozilla.org", 1.155 + minVersion: "1.9", 1.156 + maxVersion: "1.9.2" 1.157 + }], 1.158 + name: "Test Addon 11" 1.159 + }, profileDir); 1.160 + 1.161 + writeInstallRDFForExtension({ 1.162 + id: "addon12@tests.mozilla.org", 1.163 + version: "1.0", 1.164 + targetApplications: [{ 1.165 + id: "toolkit@mozilla.org", 1.166 + minVersion: "1.9", 1.167 + maxVersion: "1.9.1.*" 1.168 + }], 1.169 + name: "Test Addon 12" 1.170 + }, profileDir); 1.171 + 1.172 + writeInstallRDFForExtension({ 1.173 + id: "addon13@tests.mozilla.org", 1.174 + version: "1.0", 1.175 + targetApplications: [{ 1.176 + id: "toolkit@mozilla.org", 1.177 + minVersion: "1.9", 1.178 + maxVersion: "1.9.*" 1.179 + }, { 1.180 + id: "xpcshell@tests.mozilla.org", 1.181 + minVersion: "0", 1.182 + maxVersion: "0.5" 1.183 + }], 1.184 + name: "Test Addon 13" 1.185 + }, profileDir); 1.186 + 1.187 + writeInstallRDFForExtension({ 1.188 + id: "addon14@tests.mozilla.org", 1.189 + version: "1.0", 1.190 + targetApplications: [{ 1.191 + id: "toolkit@mozilla.org", 1.192 + minVersion: "1.9", 1.193 + maxVersion: "1.9.1" 1.194 + }, { 1.195 + id: "xpcshell@tests.mozilla.org", 1.196 + minVersion: "1", 1.197 + maxVersion: "1" 1.198 + }], 1.199 + name: "Test Addon 14" 1.200 + }, profileDir); 1.201 + 1.202 + writeInstallRDFForExtension({ 1.203 + id: "addon15@tests.mozilla.org", 1.204 + version: "1.0", 1.205 + updateKey: "foo", 1.206 + targetApplications: [{ 1.207 + id: "xpcshell@tests.mozilla.org", 1.208 + minVersion: "1", 1.209 + maxVersion: "1" 1.210 + }], 1.211 + name: "Test Addon 15" 1.212 + }, profileDir); 1.213 + 1.214 + writeInstallRDFForExtension({ 1.215 + id: "addon16@tests.mozilla.org", 1.216 + version: "1.0", 1.217 + updateKey: "foo", 1.218 + updateURL: "https://www.foo.com", 1.219 + targetApplications: [{ 1.220 + id: "xpcshell@tests.mozilla.org", 1.221 + minVersion: "1", 1.222 + maxVersion: "1" 1.223 + }], 1.224 + name: "Test Addon 16" 1.225 + }, profileDir); 1.226 + 1.227 + writeInstallRDFForExtension({ 1.228 + id: "addon17@tests.mozilla.org", 1.229 + version: "1.0", 1.230 + optionsURL: "chrome://test/content/options.xul", 1.231 + optionsType: "2", 1.232 + targetApplications: [{ 1.233 + id: "xpcshell@tests.mozilla.org", 1.234 + minVersion: "1", 1.235 + maxVersion: "1" 1.236 + }], 1.237 + name: "Test Addon 17" 1.238 + }, profileDir); 1.239 + 1.240 + writeInstallRDFForExtension({ 1.241 + id: "addon18@tests.mozilla.org", 1.242 + version: "1.0", 1.243 + targetApplications: [{ 1.244 + id: "xpcshell@tests.mozilla.org", 1.245 + minVersion: "1", 1.246 + maxVersion: "1" 1.247 + }], 1.248 + name: "Test Addon 18" 1.249 + }, profileDir, null, "options.xul"); 1.250 + 1.251 + writeInstallRDFForExtension({ 1.252 + id: "addon19@tests.mozilla.org", 1.253 + version: "1.0", 1.254 + optionsType: "99", 1.255 + targetApplications: [{ 1.256 + id: "xpcshell@tests.mozilla.org", 1.257 + minVersion: "1", 1.258 + maxVersion: "1" 1.259 + }], 1.260 + name: "Test Addon 19" 1.261 + }, profileDir); 1.262 + 1.263 + writeInstallRDFForExtension({ 1.264 + id: "addon20@tests.mozilla.org", 1.265 + version: "1.0", 1.266 + optionsType: "1", 1.267 + optionsURL: "chrome://test/content/options.xul", 1.268 + targetApplications: [{ 1.269 + id: "xpcshell@tests.mozilla.org", 1.270 + minVersion: "1", 1.271 + maxVersion: "1" 1.272 + }], 1.273 + name: "Test Addon 20" 1.274 + }, profileDir); 1.275 + 1.276 + writeInstallRDFForExtension({ 1.277 + id: "addon21@tests.mozilla.org", 1.278 + version: "1.0", 1.279 + optionsType: "3", 1.280 + optionsURL: "chrome://test/content/options.xul", 1.281 + targetApplications: [{ 1.282 + id: "xpcshell@tests.mozilla.org", 1.283 + minVersion: "1", 1.284 + maxVersion: "1" 1.285 + }], 1.286 + name: "Test Addon 21" 1.287 + }, profileDir); 1.288 + 1.289 + writeInstallRDFForExtension({ 1.290 + id: "addon22@tests.mozilla.org", 1.291 + version: "1.0", 1.292 + optionsType: "2", 1.293 + targetApplications: [{ 1.294 + id: "xpcshell@tests.mozilla.org", 1.295 + minVersion: "1", 1.296 + maxVersion: "1" 1.297 + }], 1.298 + name: "Test Addon 22" 1.299 + }, profileDir); 1.300 + 1.301 + writeInstallRDFForExtension({ 1.302 + id: "addon23@tests.mozilla.org", 1.303 + version: "1.0", 1.304 + optionsType: "2", 1.305 + targetApplications: [{ 1.306 + id: "xpcshell@tests.mozilla.org", 1.307 + minVersion: "1", 1.308 + maxVersion: "1" 1.309 + }], 1.310 + name: "Test Addon 23" 1.311 + }, profileDir, null, "options.xul"); 1.312 + 1.313 + writeInstallRDFForExtension({ 1.314 + id: "addon24@tests.mozilla.org", 1.315 + version: "1.0", 1.316 + targetApplications: [{ 1.317 + id: "xpcshell@tests.mozilla.org", 1.318 + minVersion: "1", 1.319 + maxVersion: "1" 1.320 + }], 1.321 + name: "Test Addon 24" 1.322 + }, profileDir, null, "options.xul"); 1.323 + 1.324 + writeInstallRDFForExtension({ 1.325 + id: "addon25@tests.mozilla.org", 1.326 + version: "1.0", 1.327 + optionsType: "3", 1.328 + targetApplications: [{ 1.329 + id: "xpcshell@tests.mozilla.org", 1.330 + minVersion: "1", 1.331 + maxVersion: "1" 1.332 + }], 1.333 + name: "Test Addon 25" 1.334 + }, profileDir); 1.335 + 1.336 + writeInstallRDFForExtension({ 1.337 + id: "addon26@tests.mozilla.org", 1.338 + version: "1.0", 1.339 + optionsType: "4", 1.340 + targetApplications: [{ 1.341 + id: "xpcshell@tests.mozilla.org", 1.342 + minVersion: "1", 1.343 + maxVersion: "1" 1.344 + }], 1.345 + name: "Test Addon 26" 1.346 + }, profileDir, null, "options.xul"); 1.347 + 1.348 + do_test_pending(); 1.349 + startupManager(); 1.350 + AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", 1.351 + "addon2@tests.mozilla.org", 1.352 + "addon3@tests.mozilla.org", 1.353 + "addon4@tests.mozilla.org", 1.354 + "addon5@tests.mozilla.org", 1.355 + "addon6@tests.mozilla.org", 1.356 + "addon7@tests.mozilla.org", 1.357 + "addon8@tests.mozilla.org", 1.358 + "addon9@tests.mozilla.org", 1.359 + "addon10@tests.mozilla.org", 1.360 + "addon11@tests.mozilla.org", 1.361 + "addon12@tests.mozilla.org", 1.362 + "addon13@tests.mozilla.org", 1.363 + "addon14@tests.mozilla.org", 1.364 + "addon15@tests.mozilla.org", 1.365 + "addon16@tests.mozilla.org", 1.366 + "addon17@tests.mozilla.org", 1.367 + "addon18@tests.mozilla.org", 1.368 + "addon19@tests.mozilla.org", 1.369 + "addon20@tests.mozilla.org", 1.370 + "addon21@tests.mozilla.org", 1.371 + "addon22@tests.mozilla.org", 1.372 + "addon23@tests.mozilla.org", 1.373 + "addon24@tests.mozilla.org", 1.374 + "addon25@tests.mozilla.org", 1.375 + "addon26@tests.mozilla.org"], 1.376 + function([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, 1.377 + a11, a12, a13, a14, a15, a16, a17, a18, a19, a20, 1.378 + a21, a22, a23, a24, a25, a26]) { 1.379 + 1.380 + do_check_neq(a1, null); 1.381 + do_check_eq(a1.id, "addon1@tests.mozilla.org"); 1.382 + do_check_eq(a1.type, "extension"); 1.383 + do_check_eq(a1.version, "1.0"); 1.384 + do_check_eq(a1.optionsURL, "chrome://test/content/options.xul"); 1.385 + do_check_eq(a1.optionsType, AddonManager.OPTIONS_TYPE_DIALOG); 1.386 + do_check_eq(a1.aboutURL, "chrome://test/content/about.xul"); 1.387 + do_check_eq(a1.iconURL, "chrome://test/skin/icon.png"); 1.388 + do_check_eq(a1.icon64URL, "chrome://test/skin/icon64.png"); 1.389 + do_check_eq(a1.icons[32], "chrome://test/skin/icon.png"); 1.390 + do_check_eq(a1.icons[64], "chrome://test/skin/icon64.png"); 1.391 + do_check_eq(a1.name, "Test Addon 1"); 1.392 + do_check_eq(a1.description, "Test Description"); 1.393 + do_check_eq(a1.creator, "Test Creator"); 1.394 + do_check_eq(a1.homepageURL, "http://www.example.com"); 1.395 + do_check_eq(a1.developers[0], "Test Developer 1"); 1.396 + do_check_eq(a1.developers[1], "Test Developer 2"); 1.397 + do_check_eq(a1.translators[0], "Test Translator 1"); 1.398 + do_check_eq(a1.translators[1], "Test Translator 2"); 1.399 + do_check_eq(a1.contributors[0], "Test Contributor 1"); 1.400 + do_check_eq(a1.contributors[1], "Test Contributor 2"); 1.401 + do_check_true(a1.isActive); 1.402 + do_check_false(a1.userDisabled); 1.403 + do_check_false(a1.appDisabled); 1.404 + do_check_true(a1.isCompatible); 1.405 + do_check_true(a1.providesUpdatesSecurely); 1.406 + do_check_eq(a1.blocklistState, AM_Ci.nsIBlocklistService.STATE_NOT_BLOCKED); 1.407 + 1.408 + do_check_neq(a2, null); 1.409 + do_check_eq(a2.id, "addon2@tests.mozilla.org"); 1.410 + do_check_true(a2.isActive); 1.411 + do_check_false(a2.userDisabled); 1.412 + do_check_false(a2.appDisabled); 1.413 + do_check_true(a2.providesUpdatesSecurely); 1.414 + 1.415 + do_check_neq(a3, null); 1.416 + do_check_eq(a3.id, "addon3@tests.mozilla.org"); 1.417 + do_check_false(a3.isActive); 1.418 + do_check_false(a3.userDisabled); 1.419 + do_check_true(a3.appDisabled); 1.420 + do_check_false(a3.providesUpdatesSecurely); 1.421 + 1.422 + do_check_neq(a4, null); 1.423 + do_check_eq(a4.id, "addon4@tests.mozilla.org"); 1.424 + do_check_true(a4.isActive); 1.425 + do_check_false(a4.userDisabled); 1.426 + do_check_false(a4.appDisabled); 1.427 + do_check_true(a4.providesUpdatesSecurely); 1.428 + 1.429 + do_check_neq(a5, null); 1.430 + do_check_true(a5.isActive); 1.431 + do_check_false(a5.userDisabled); 1.432 + do_check_false(a5.appDisabled); 1.433 + do_check_true(a5.isCompatible); 1.434 + 1.435 + do_check_neq(a6, null); 1.436 + do_check_true(a6.isActive); 1.437 + do_check_false(a6.userDisabled); 1.438 + do_check_false(a6.appDisabled); 1.439 + do_check_true(a6.isCompatible); 1.440 + 1.441 + do_check_neq(a7, null); 1.442 + do_check_false(a7.isActive); 1.443 + do_check_false(a7.userDisabled); 1.444 + do_check_true(a7.appDisabled); 1.445 + do_check_false(a7.isCompatible); 1.446 + 1.447 + do_check_neq(a8, null); 1.448 + do_check_false(a8.isActive); 1.449 + do_check_false(a8.userDisabled); 1.450 + do_check_true(a8.appDisabled); 1.451 + do_check_false(a8.isCompatible); 1.452 + 1.453 + do_check_neq(a9, null); 1.454 + do_check_true(a9.isActive); 1.455 + do_check_false(a9.userDisabled); 1.456 + do_check_false(a9.appDisabled); 1.457 + do_check_true(a9.isCompatible); 1.458 + 1.459 + do_check_neq(a10, null); 1.460 + do_check_false(a10.isActive); 1.461 + do_check_false(a10.userDisabled); 1.462 + do_check_true(a10.appDisabled); 1.463 + do_check_false(a10.isCompatible); 1.464 + 1.465 + do_check_neq(a11, null); 1.466 + do_check_true(a11.isActive); 1.467 + do_check_false(a11.userDisabled); 1.468 + do_check_false(a11.appDisabled); 1.469 + do_check_true(a11.isCompatible); 1.470 + 1.471 + do_check_neq(a12, null); 1.472 + do_check_false(a12.isActive); 1.473 + do_check_false(a12.userDisabled); 1.474 + do_check_true(a12.appDisabled); 1.475 + do_check_false(a12.isCompatible); 1.476 + 1.477 + do_check_neq(a13, null); 1.478 + do_check_false(a13.isActive); 1.479 + do_check_false(a13.userDisabled); 1.480 + do_check_true(a13.appDisabled); 1.481 + do_check_false(a13.isCompatible); 1.482 + 1.483 + do_check_neq(a14, null); 1.484 + do_check_true(a14.isActive); 1.485 + do_check_false(a14.userDisabled); 1.486 + do_check_false(a14.appDisabled); 1.487 + do_check_true(a14.isCompatible); 1.488 + 1.489 + do_check_neq(a15, null); 1.490 + do_check_true(a15.isActive); 1.491 + do_check_false(a15.userDisabled); 1.492 + do_check_false(a15.appDisabled); 1.493 + do_check_true(a15.isCompatible); 1.494 + do_check_true(a15.providesUpdatesSecurely); 1.495 + 1.496 + do_check_neq(a16, null); 1.497 + do_check_true(a16.isActive); 1.498 + do_check_false(a16.userDisabled); 1.499 + do_check_false(a16.appDisabled); 1.500 + do_check_true(a16.isCompatible); 1.501 + do_check_true(a16.providesUpdatesSecurely); 1.502 + 1.503 + do_check_neq(a17, null); 1.504 + do_check_true(a17.isActive); 1.505 + do_check_false(a17.userDisabled); 1.506 + do_check_false(a17.appDisabled); 1.507 + do_check_true(a17.isCompatible); 1.508 + do_check_eq(a17.optionsURL, "chrome://test/content/options.xul"); 1.509 + do_check_eq(a17.optionsType, AddonManager.OPTIONS_TYPE_INLINE); 1.510 + 1.511 + do_check_neq(a18, null); 1.512 + do_check_true(a18.isActive); 1.513 + do_check_false(a18.userDisabled); 1.514 + do_check_false(a18.appDisabled); 1.515 + do_check_true(a18.isCompatible); 1.516 + if (Services.prefs.getBoolPref("extensions.alwaysUnpack")) { 1.517 + do_check_eq(a18.optionsURL, Services.io.newFileURI(profileDir).spec + 1.518 + "addon18@tests.mozilla.org/options.xul"); 1.519 + } else { 1.520 + do_check_eq(a18.optionsURL, "jar:" + Services.io.newFileURI(profileDir).spec + 1.521 + "addon18@tests.mozilla.org.xpi!/options.xul"); 1.522 + } 1.523 + do_check_eq(a18.optionsType, AddonManager.OPTIONS_TYPE_INLINE); 1.524 + 1.525 + do_check_eq(a19, null); 1.526 + 1.527 + do_check_neq(a20, null); 1.528 + do_check_true(a20.isActive); 1.529 + do_check_false(a20.userDisabled); 1.530 + do_check_false(a20.appDisabled); 1.531 + do_check_true(a20.isCompatible); 1.532 + do_check_eq(a20.optionsURL, "chrome://test/content/options.xul"); 1.533 + do_check_eq(a20.optionsType, AddonManager.OPTIONS_TYPE_DIALOG); 1.534 + 1.535 + do_check_neq(a21, null); 1.536 + do_check_true(a21.isActive); 1.537 + do_check_false(a21.userDisabled); 1.538 + do_check_false(a21.appDisabled); 1.539 + do_check_true(a21.isCompatible); 1.540 + do_check_eq(a21.optionsURL, "chrome://test/content/options.xul"); 1.541 + do_check_eq(a21.optionsType, AddonManager.OPTIONS_TYPE_TAB); 1.542 + 1.543 + do_check_neq(a22, null); 1.544 + do_check_eq(a22.optionsType, null); 1.545 + do_check_eq(a22.optionsURL, null); 1.546 + 1.547 + do_check_neq(a23, null); 1.548 + do_check_eq(a23.optionsType, AddonManager.OPTIONS_TYPE_INLINE); 1.549 + do_check_neq(a23.optionsURL, null); 1.550 + 1.551 + do_check_neq(a24, null); 1.552 + do_check_eq(a24.optionsType, AddonManager.OPTIONS_TYPE_INLINE); 1.553 + do_check_neq(a24.optionsURL, null); 1.554 + 1.555 + do_check_neq(a25, null); 1.556 + do_check_eq(a25.optionsType, null); 1.557 + do_check_eq(a25.optionsURL, null); 1.558 + 1.559 + do_check_neq(a26, null); 1.560 + do_check_eq(a26.optionsType, AddonManager.OPTIONS_TYPE_INLINE_INFO); 1.561 + do_check_neq(a26.optionsURL, null); 1.562 + 1.563 + do_execute_soon(do_test_finished); 1.564 + }); 1.565 +}