Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(98)

Side by Side Diff: chrome/test/data/extensions/api_test/stubs_app/background.js

Issue 264923009: Add browser_test for extension app API with missing schema (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 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 var apiFeatures = chrome.test.getApiFeatures();
6
7 // Returns true if the feature is available to platform apps, either via a
8 // specific path or via an entire namespace.
9 function isAvailableToPlatformApps(namespace, path) {
10 function checkFeature(feature) {
11 return typeof(feature.extension_types) == "undefined" ||
not at google - send to devlin 2014/05/02 22:19:57 this first check isn't right, since if it's undefi
James Cook 2014/05/02 23:59:15 I took out this isAvailableToPlatformApps check an
12 feature.extension_types.indexOf('all') != -1 ||
not at google - send to devlin 2014/05/02 22:19:57 however, this test could be much stronger if the s
James Cook 2014/05/02 23:59:15 Added permissions from app REPL and a pass through
not at google - send to devlin 2014/05/03 00:12:43 Awesome :) though won't pick up on people acciden
13 feature.extension_types.indexOf('platform_app') != -1;
14 }
15
16 if (apiFeatures.hasOwnProperty(path))
17 return checkFeature(apiFeatures[path]);
18 return apiFeatures.hasOwnProperty(namespace) &&
19 checkFeature(apiFeatures[namespace]);
20 }
21
22 // Returns a list of all chrome.foo.bar API paths available to an app.
23 function getApiPaths() {
24 var apiPaths = [];
25 var apiDefinitions = chrome.test.getApiDefinitions();
26 apiDefinitions.forEach(function(module) {
27 var namespace = module.namespace;
28
29 // Get the API functions and events.
30 ["functions", "events"].forEach(function(section) {
31 if (typeof(module[section]) == "undefined")
32 return;
33 module[section].forEach(function(entry) {
34 var path = namespace + "." + entry.name;
35 if (isAvailableToPlatformApps(namespace, path)) {
36 apiPaths.push(path);
37 }
38 });
39 });
40
41 // Get the API properties.
42 if (module.properties) {
43 for (var propName in module.properties) {
not at google - send to devlin 2014/05/02 22:19:57 Object.getOwnPropertyNames(module.properties).forE
James Cook 2014/05/02 23:59:15 Done.
44 var path = namespace + "." + propName;
45 if (isAvailableToPlatformApps(namespace, path)) {
46 apiPaths.push(path);
47 }
48 }
49 }
50 });
51 return apiPaths;
52 }
53
54 // Tests whether all parts of an API path can be accessed. The path is a
55 // namespace or function/property/event etc. within a namespace, and is
56 // dot-separated.
57 function testPath(path) {
58 var parts = path.split('.');
59
60 var module = chrome;
61 for (var i = 0; i < parts.length; i++) {
62 // Touch this component of the path. This will die if an API does not have
63 // a schema registered.
64 module = module[parts[i]];
65
66 if (i < parts.length - 1) {
67 // Not the last component. Allowed to be undefined because some paths are
not at google - send to devlin 2014/05/02 22:19:57 this check confuses me.
James Cook 2014/05/02 23:01:39 A quick question while I'm working on the rest of
not at google - send to devlin 2014/05/02 23:03:17 ah yeah you need to filter out internal APIs.
James Cook 2014/05/02 23:59:15 Filtering out internal APIs gets rid of the need f
68 // only defined on some platforms.
69 if (typeof(module) == "undefined")
70 return true;
71 } else {
72 // This is the last component. It should be defined, unless it is the
73 // lastError property, which depends on there being an error.
74 if (typeof(module) == "undefined" &&
75 path != "extension.lastError" &&
76 path != "runtime.lastError") {
77 console.log(" fail (should not be undefined): " + path);
78 return false;
79 }
80 }
81 }
82 return true;
83 }
84
85 function doTest() {
86 var apiPaths = getApiPaths();
not at google - send to devlin 2014/05/02 22:19:57 I would just inline this
James Cook 2014/05/02 23:59:15 Done.
87 var failures = [];
88 var success = true;
89
90 // Run over each string path in apiPaths and ensure each path is defined.
91 apiPaths.forEach(function(path) {
92 if (!testPath(path)) {
93 success = false;
94 failures.push(path);
95 }
96 });
97
98 if (success) {
not at google - send to devlin 2014/05/02 22:19:57 use "failures.length == 0" here and you don't need
James Cook 2014/05/02 23:59:15 Done.
99 chrome.test.notifyPass();
100 } else {
101 console.log("failures on:\n" + failures.join("\n") +
102 "\n\n\n>>> See comment in stubs_apitest.cc for a " +
103 "hint about fixing this failure.\n\n");
104 chrome.test.notifyFail("failed");
105 }
106 }
107
108 chrome.app.runtime.onLaunched.addListener(function() {
109 doTest();
110 });
OLDNEW
« no previous file with comments | « chrome/browser/extensions/stubs_apitest.cc ('k') | chrome/test/data/extensions/api_test/stubs_app/manifest.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698