| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Helper function to log message to both the local console and to the | 5 // Helper function to log message to both the local console and to the |
| 6 // background page, so that the latter can output the message via the | 6 // background page, so that the latter can output the message via the |
| 7 // chrome.test.log() function. | 7 // chrome.test.log() function. |
| 8 function logToConsoleAndStdout(msg) { | 8 function logToConsoleAndStdout(msg) { |
| 9 console.log(msg); | 9 console.log(msg); |
| 10 chrome.extension.sendRequest("log: " + msg); | 10 chrome.extension.sendRequest("log: " + msg); |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 | 66 |
| 67 // Tests whether missing properties of the chrome object correctly throw an | 67 // Tests whether missing properties of the chrome object correctly throw an |
| 68 // error on access. The path is a namespace or function/property/event etc. | 68 // error on access. The path is a namespace or function/property/event etc. |
| 69 // within a namespace, and is dot-separated. | 69 // within a namespace, and is dot-separated. |
| 70 function testPath(path, expectError) { | 70 function testPath(path, expectError) { |
| 71 var parts = path.split('.'); | 71 var parts = path.split('.'); |
| 72 | 72 |
| 73 var module = chrome; | 73 var module = chrome; |
| 74 for (var i = 0; i < parts.length; i++) { | 74 for (var i = 0; i < parts.length; i++) { |
| 75 if (i < parts.length - 1) { | 75 if (i < parts.length - 1) { |
| 76 // Not the last component. Should not throw an exception, but allowed to | 76 // Not the last component. Allowed to be undefined because some paths are |
| 77 // be undefined (because some paths are only defined on some platforms). | 77 // only defined on some platforms. |
| 78 try { | 78 module = module[parts[i]]; |
| 79 module = module[parts[i]]; | |
| 80 } catch (err) { | |
| 81 logToConsoleAndStdout("testPath failed on " + | |
| 82 parts.slice(0, i+1).join('.') + '(' + err + ')'); | |
| 83 return false; | |
| 84 } | |
| 85 if (typeof(module) == "undefined") | 79 if (typeof(module) == "undefined") |
| 86 return true; | 80 return true; |
| 87 } else { | 81 } else { |
| 88 // This is the last component - we expect it to either be undefined or | 82 // This is the last component - we expect it to either be undefined or |
| 89 // to throw an error on access. | 83 // to throw an error on access. |
| 90 try { | 84 if (typeof(module[parts[i]]) == "undefined" && |
| 91 if (typeof(module[parts[i]]) == "undefined" && | 85 // lastError being defined depends on there being an error obviously. |
| 92 path != "extension.lastError" && | 86 path != "extension.lastError" && |
| 93 path != "runtime.lastError") { | 87 path != "runtime.lastError") { |
| 94 if (expectError) { | 88 if (expectError) { |
| 95 return true; | |
| 96 } else { | |
| 97 logToConsoleAndStdout(" fail (should not be undefined): " + path); | |
| 98 return false; | |
| 99 } | |
| 100 } else if (!expectError) { | |
| 101 return true; | 89 return true; |
| 102 } | 90 } else { |
| 103 } catch (err) { | 91 logToConsoleAndStdout(" fail (should not be undefined): " + path); |
| 104 if (!expectError) { | |
| 105 logToConsoleAndStdout(" fail (did not expect error): " + path); | |
| 106 return false; | 92 return false; |
| 107 } | 93 } |
| 108 var str = err.toString(); | 94 } else if (!expectError) { |
| 109 if (str.search("can only be used in extension processes.") != -1) { | 95 return true; |
| 110 return true; | |
| 111 } else { | |
| 112 logToConsoleAndStdout( | |
| 113 "fail: " + path + " (wrong error: '" + str + "')"); | |
| 114 return false; | |
| 115 } | |
| 116 } | 96 } |
| 117 } | 97 } |
| 118 } | 98 } |
| 119 logToConsoleAndStdout(" fail (no error when we were expecting one): " + path); | 99 logToConsoleAndStdout(" fail (no error when we were expecting one): " + path); |
| 120 return false; | 100 return false; |
| 121 } | 101 } |
| 122 | 102 |
| 123 function displayResult(status) { | 103 function displayResult(status) { |
| 124 var div = document.createElement("div"); | 104 var div = document.createElement("div"); |
| 125 div.innerHTML = "<h1>" + status + "</h2>"; | 105 div.innerHTML = "<h1>" + status + "</h2>"; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 150 reportFailure(); | 130 reportFailure(); |
| 151 return; | 131 return; |
| 152 } | 132 } |
| 153 | 133 |
| 154 var failures = []; | 134 var failures = []; |
| 155 var success = true; | 135 var success = true; |
| 156 | 136 |
| 157 // Returns a function that will test a path and record any failures. | 137 // Returns a function that will test a path and record any failures. |
| 158 function makeTestFunction(expectError) { | 138 function makeTestFunction(expectError) { |
| 159 return function(path) { | 139 return function(path) { |
| 160 if (!testPath(path, expectError)) { | 140 // runtime.connect and runtime.sendMessage are available in all contexts, |
| 141 // unlike the runtime API in general. |
| 142 var expectErrorForPath = expectError && |
| 143 path != 'runtime.connect' && |
| 144 path != 'runtime.sendMessage'; |
| 145 if (!testPath(path, expectErrorForPath)) { |
| 161 success = false; | 146 success = false; |
| 162 failures.push(path); | 147 failures.push(path); |
| 163 } | 148 } |
| 164 }; | 149 }; |
| 165 } | 150 } |
| 166 privilegedPaths.forEach(makeTestFunction(true)); | 151 privilegedPaths.forEach(makeTestFunction(true)); |
| 167 unprivilegedPaths.forEach(makeTestFunction(false)); | 152 unprivilegedPaths.forEach(makeTestFunction(false)); |
| 168 | 153 |
| 169 console.log(success ? "pass" : "fail"); | 154 console.log(success ? "pass" : "fail"); |
| 170 if (success) { | 155 if (success) { |
| 171 reportSuccess(); | 156 reportSuccess(); |
| 172 } else { | 157 } else { |
| 173 logToConsoleAndStdout("failures on:\n" + failures.join("\n") + | 158 logToConsoleAndStdout("failures on:\n" + failures.join("\n") + |
| 174 "\n\n\n>>> See comment in stubs_apitest.cc for a " + | 159 "\n\n\n>>> See comment in stubs_apitest.cc for a " + |
| 175 "hint about fixing this failure.\n\n"); | 160 "hint about fixing this failure.\n\n"); |
| 176 reportFailure(); | 161 reportFailure(); |
| 177 } | 162 } |
| 178 } | 163 } |
| OLD | NEW |