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

Side by Side Diff: chrome/test/data/extensions/api_test/stubs/content_script.js

Issue 8540012: Enable extension APIs for content scripts. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 9 years, 1 month 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
1 1
2 // Helper function to log message to both the local console and to the 2 // Helper function to log message to both the local console and to the
3 // background page, so that the latter can output the message via the 3 // background page, so that the latter can output the message via the
4 // chrome.test.log() function. 4 // chrome.test.log() function.
5 function logToConsoleAndStdout(msg) { 5 function logToConsoleAndStdout(msg) {
6 console.log(msg); 6 console.log(msg);
7 chrome.extension.sendRequest("log: " + msg); 7 chrome.extension.sendRequest("log: " + msg);
8 } 8 }
9 9
10 // We ask the background page to get the extension API to test against. When it 10 // We ask the background page to get the extension API to test against. When it
11 // responds we start the test. 11 // responds we start the test.
12 console.log("asking for api ..."); 12 console.log("asking for api ...");
13 chrome.extension.sendRequest("getApi", function(apis) { 13 chrome.extension.sendRequest("getApi", function(apis) {
14 console.log("got api response"); 14 console.log("got api response");
15 var privilegedPaths = []; 15 var privilegedPaths = [];
16 var unprivilegedPaths = []; 16 var unprivilegedPaths = [];
17 apis.forEach(function(module) { 17 apis.forEach(function(module) {
18 var namespace = module.namespace; 18 var namespace = module.namespace;
19 if (!module.unprivileged) {
20 privilegedPaths.push(namespace);
21 return;
22 }
23 19
24 ["functions", "events"].forEach(function(section) { 20 ["functions", "events"].forEach(function(section) {
25 if (typeof(module[section]) == "undefined") 21 if (typeof(module[section]) == "undefined")
26 return; 22 return;
27 module[section].forEach(function(entry) { 23 module[section].forEach(function(entry) {
28 var path = namespace + "." + entry.name; 24 var path = namespace + "." + entry.name;
29 if (entry.unprivileged) { 25 if (entry.unprivileged) {
30 unprivilegedPaths.push(path); 26 unprivilegedPaths.push(path);
31 } else { 27 } else {
32 privilegedPaths.push(path); 28 privilegedPaths.push(path);
(...skipping 13 matching lines...) Expand all
46 } 42 }
47 }); 43 });
48 doTest(privilegedPaths, unprivilegedPaths); 44 doTest(privilegedPaths, unprivilegedPaths);
49 }); 45 });
50 46
51 47
52 // Tests whether missing properties of the chrome object correctly throw an 48 // Tests whether missing properties of the chrome object correctly throw an
53 // error on access. The path is a namespace or function/property/event etc. 49 // error on access. The path is a namespace or function/property/event etc.
54 // within a namespace, and is dot-separated. 50 // within a namespace, and is dot-separated.
55 function testPath(path, expectError) { 51 function testPath(path, expectError) {
56 console.log("trying " + path);
57 var parts = path.split('.'); 52 var parts = path.split('.');
58 53
59 // Iterate over each component of the path, making sure all but the last part
60 // is defined. The last part should either be defined or throw an error on
61 // attempted access.
62 var module = chrome; 54 var module = chrome;
63 for (var i = 0; i < parts.length; i++) { 55 for (var i = 0; i < parts.length; i++) {
64 if (i < parts.length - 1) { 56 if (i < parts.length - 1) {
65 // Not the last component, so expect non-null / no exception. 57 // Not the last component. Should not throw an exception, but allowed to
58 // be undefined (because some paths are only defined on some platforms).
66 try { 59 try {
67 module = module[parts[i]]; 60 module = module[parts[i]];
68 } catch (err) { 61 } catch (err) {
69 logToConsoleAndStdout("testPath failed on " + 62 logToConsoleAndStdout("testPath failed on " +
70 parts.slice(0, i+1).join('.') + '(' + err + ')'); 63 parts.slice(0, i+1).join('.') + '(' + err + ')');
71 return false; 64 return false;
72 } 65 }
66 if (typeof(module) == "undefined")
67 return true;
73 } else { 68 } else {
74 // This is the last component - we expect it to either be defined or 69 // This is the last component - we expect it to either be defined or
75 // to throw an error on access. 70 // to throw an error on access.
76 try { 71 try {
77 if (typeof(module[parts[i]]) == "undefined" && 72 if (typeof(module[parts[i]]) == "undefined" &&
78 path != "extension.lastError") { 73 path != "extension.lastError") {
79 logToConsoleAndStdout(" fail (undefined and not throwing error): " + 74 logToConsoleAndStdout(" fail (undefined and not throwing error): " +
80 path); 75 path);
81 return false; 76 return false;
82 } else if (!expectError) { 77 } else if (!expectError) {
83 console.log(" ok (defined): " + path);
84 return true; 78 return true;
85 } 79 }
86 } catch (err) { 80 } catch (err) {
87 if (!expectError) { 81 if (!expectError) {
88 logToConsoleAndStdout(" fail (did not expect error): " + path); 82 logToConsoleAndStdout(" fail (did not expect error): " + path);
89 return false; 83 return false;
90 } 84 }
91 var str = err.toString(); 85 var str = err.toString();
92 if (str.search("can only be used in extension processes.") != -1) { 86 if (str.search("can only be used in extension processes.") != -1) {
93 console.log(" ok (correct error thrown): " + path);
94 return true; 87 return true;
95 } else { 88 } else {
96 logToConsoleAndStdout(" fail (wrong error: '" + str + "')"); 89 logToConsoleAndStdout(
90 "fail: " + path + " (wrong error: '" + str + "')");
97 return false; 91 return false;
98 } 92 }
99 } 93 }
100 } 94 }
101 } 95 }
102 logToConsoleAndStdout(" fail (no error when we were expecting one): " + path); 96 logToConsoleAndStdout(" fail (no error when we were expecting one): " + path);
103 return false; 97 return false;
104 } 98 }
105 99
106 function displayResult(status) { 100 function displayResult(status) {
(...skipping 16 matching lines...) Expand all
123 }, 1000); 117 }, 1000);
124 } 118 }
125 119
126 // Runs over each string path in privilegedPaths and unprivilegedPaths, testing 120 // Runs over each string path in privilegedPaths and unprivilegedPaths, testing
127 // to ensure a proper error is thrown on access or the path is defined. 121 // to ensure a proper error is thrown on access or the path is defined.
128 function doTest(privilegedPaths, unprivilegedPaths) { 122 function doTest(privilegedPaths, unprivilegedPaths) {
129 console.log("starting"); 123 console.log("starting");
130 124
131 if (!privilegedPaths || privilegedPaths.length < 1 || !unprivilegedPaths || 125 if (!privilegedPaths || privilegedPaths.length < 1 || !unprivilegedPaths ||
132 unprivilegedPaths.length < 1) { 126 unprivilegedPaths.length < 1) {
133 port.postMessage("fail"); 127 reportFailure();
134 return; 128 return;
135 } 129 }
136 130
137 var failures = []; 131 var failures = [];
138 var success = true; 132 var success = true;
139 133
140 // Returns a function that will test a path and record any failures. 134 // Returns a function that will test a path and record any failures.
141 function makeTestFunction(expectError) { 135 function makeTestFunction(expectError) {
142 return function(path) { 136 return function(path) {
143 if (!testPath(path, expectError)) { 137 if (!testPath(path, expectError)) {
144 success = false; 138 success = false;
145 failures.push(path); 139 failures.push(path);
146 } 140 }
147 }; 141 };
148 } 142 }
149 privilegedPaths.forEach(makeTestFunction(true)); 143 privilegedPaths.forEach(makeTestFunction(true));
150 unprivilegedPaths.forEach(makeTestFunction(false)); 144 unprivilegedPaths.forEach(makeTestFunction(false));
151 145
152 console.log(success ? "pass" : "fail"); 146 console.log(success ? "pass" : "fail");
153 if (success) { 147 if (success) {
154 reportSuccess(); 148 reportSuccess();
155 } else { 149 } else {
156 logToConsoleAndStdout("failures on:\n" + failures.join("\n") + 150 logToConsoleAndStdout("failures on:\n" + failures.join("\n") +
157 "\n\n\n>>> See comment in stubs_apitest.cc for a " + 151 "\n\n\n>>> See comment in stubs_apitest.cc for a " +
158 "hint about fixing this failure.\n\n"); 152 "hint about fixing this failure.\n\n");
159 reportFailure(); 153 reportFailure();
160 } 154 }
161 } 155 }
OLDNEW
« no previous file with comments | « chrome/test/data/extensions/api_test/stubs/background.html ('k') | content/public/renderer/v8_value_converter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698