/chromium-webcl/src/chrome/test/data/extensions/api_test/management/test/basics.js

https://bitbucket.org/peixuan/chromium_r197479_base · JavaScript · 175 lines · 149 code · 18 blank · 8 comment · 9 complexity · 6f3edac53c678a16349457b3eba9dfcf MD5 · raw file

  1. // Copyright (c) 2012 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. function checkIcon(item, size, path) {
  5. var icons = item.icons;
  6. for (var i = 0; i < icons.length; i++) {
  7. var icon = icons[i];
  8. if (icon.size == size) {
  9. var expected_url =
  10. "chrome://extension-icon/" + item.id + "/" + size + "/0";
  11. assertEq(expected_url, icon.url);
  12. return;
  13. }
  14. }
  15. fail("didn't find icon of size " + size + " at path " + path);
  16. }
  17. function checkPermission(item, perm) {
  18. var permissions = item.permissions;
  19. console.log("permissions for " + item.name);
  20. for (var i = 0; i < permissions.length; i++) {
  21. var permission = permissions[i];
  22. console.log(" " + permission);
  23. if (permission == perm) {
  24. assertEq(perm, permission);
  25. return;
  26. }
  27. }
  28. fail("didn't find permission " + perm);
  29. }
  30. function checkHostPermission(item, perm) {
  31. var permissions = item.hostPermissions;
  32. for (var i = 0; i < permissions.length; i++) {
  33. var permission = permissions[i];
  34. if (permission == perm) {
  35. assertEq(perm, permission);
  36. return;
  37. }
  38. }
  39. fail("didn't find permission " + perm);
  40. }
  41. var tests = [
  42. function simple() {
  43. chrome.management.getAll(callback(function(items) {
  44. chrome.test.assertEq(10, items.length);
  45. checkItemInList(items, "Extension Management API Test", true,
  46. "extension");
  47. checkItemInList(items, "description", true, "extension",
  48. { "description": "a short description" });
  49. checkItemInList(items, "enabled_app", true, "hosted_app",
  50. { "appLaunchUrl": "http://www.google.com/",
  51. "offlineEnabled": true,
  52. "updateUrl": "http://example.com/update.xml" });
  53. checkItemInList(items, "disabled_app", false, "hosted_app",
  54. { "disabledReason": "unknown" });
  55. checkItemInList(items, "enabled_extension", true, "extension",
  56. { "homepageUrl": "http://example.com/" });
  57. checkItemInList(items, "disabled_extension", false, "extension",
  58. { "optionsUrl": "chrome-extension://<ID>/pages/options.html",
  59. "disabledReason": "unknown" });
  60. checkItemInList(items, "description", true, "extension",
  61. { "installType": "development" });
  62. checkItemInList(items, "internal_extension", true, "extension",
  63. { "installType": "normal" });
  64. checkItemInList(items, "external_extension", true, "extension",
  65. { "installType": "sideload" });
  66. checkItemInList(items, "admin_extension", true, "extension",
  67. { "installType": "admin" });
  68. // Check that we got the icons correctly
  69. var extension = getItemNamed(items, "enabled_extension");
  70. assertEq(3, extension.icons.length);
  71. checkIcon(extension, 128, "icon_128.png");
  72. checkIcon(extension, 48, "icon_48.png");
  73. checkIcon(extension, 16, "icon_16.png");
  74. // Check that we can retrieve this extension by ID.
  75. chrome.management.get(extension.id, callback(function(same_extension) {
  76. checkItem(same_extension, extension.name, extension.enabled,
  77. extension.type, extension.additional_properties);
  78. }));
  79. // Check that we have a permission defined.
  80. var testExtension = getItemNamed(items, "Extension Management API Test");
  81. checkPermission(testExtension, "management");
  82. var permExtension = getItemNamed(items, "permissions");
  83. checkPermission(permExtension, "unlimitedStorage");
  84. checkPermission(permExtension, "notifications");
  85. checkHostPermission(permExtension, "http://*/*");
  86. }));
  87. },
  88. function permissionWarnings() {
  89. var manifest_str = "{ \"name\": \"Hello World!\", \"version\": \"1.0\", " +
  90. "\"permissions\": [\"http://api.flickr.com/\", " +
  91. "\"bookmarks\", \"geolocation\", " +
  92. "\"history\", \"tabs\"]," +
  93. "\"content_scripts\": [{\"js\": [\"script.js\"], " +
  94. "\"matches\": [\"http://*.flickr.com/*\"]}]}";
  95. chrome.management.getPermissionWarningsByManifest(
  96. manifest_str, callback(function(warnings) {
  97. chrome.test.assertEq(5, warnings.length);
  98. chrome.test.assertEq(
  99. "Access your data on *.flickr.com and api.flickr.com", warnings[0]);
  100. chrome.test.assertEq("Read and modify your bookmarks", warnings[1]);
  101. chrome.test.assertEq("Detect your physical location", warnings[2]);
  102. chrome.test.assertEq("Read and modify your browsing history",
  103. warnings[3]);
  104. chrome.test.assertEq("Access your tabs and browsing activity",
  105. warnings[4]);
  106. }));
  107. chrome.management.getAll(callback(function(items) {
  108. var extension = getItemNamed(items, "Extension Management API Test");
  109. chrome.management.getPermissionWarningsById(extension.id,
  110. callback(function(warnings) {
  111. chrome.test.assertEq(1, warnings.length);
  112. chrome.test.assertEq("Manage your apps, extensions, and themes",
  113. warnings[0]);
  114. }));
  115. }));
  116. },
  117. function permissionWarningsLocationApi() {
  118. var manifest_str = "{ \"name\": \"Location!\", \"version\": \"1.0\", " +
  119. "\"permissions\": [\"location\"] }";
  120. chrome.management.getPermissionWarningsByManifest(
  121. manifest_str, callback(function(warnings) {
  122. chrome.test.assertEq(1, warnings.length);
  123. chrome.test.assertEq("Detect your physical location", warnings[0]);
  124. }));
  125. },
  126. // Disables an enabled app.
  127. function disable() {
  128. listenOnce(chrome.management.onDisabled, function(info) {
  129. assertEq(info.name, "enabled_app");
  130. });
  131. chrome.management.getAll(callback(function(items) {
  132. var enabled_app = getItemNamed(items, "enabled_app");
  133. checkItem(enabled_app, "enabled_app", true, "hosted_app");
  134. chrome.management.setEnabled(enabled_app.id, false, callback(function() {
  135. chrome.management.get(enabled_app.id, callback(function(now_disabled) {
  136. checkItem(now_disabled, "enabled_app", false, "hosted_app");
  137. }));
  138. }));
  139. }));
  140. },
  141. // Enables a disabled extension.
  142. function enable() {
  143. listenOnce(chrome.management.onEnabled, function(info) {
  144. assertEq(info.name, "disabled_extension");
  145. });
  146. chrome.management.getAll(callback(function(items) {
  147. var disabled = getItemNamed(items, "disabled_extension");
  148. checkItem(disabled, "disabled_extension", false, "extension");
  149. chrome.management.setEnabled(disabled.id, true, callback(function() {
  150. chrome.management.get(disabled.id, callback(function(now_enabled) {
  151. checkItem(now_enabled, "disabled_extension", true, "extension");
  152. }));
  153. }));
  154. }));
  155. }
  156. ];
  157. chrome.test.runTests(tests);