Have PNaCl use debug pexe URL instead of stripped pexe w/ kEnableNaClDebug
[chromium-blink-merge.git] / chrome / test / nacl / nacl_browsertest.cc
blob6ee4debe87eca925a33d7b0bb7b70c86d2a58742
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.
5 #include <stdio.h>
6 #if defined(OS_POSIX)
7 #include <unistd.h>
8 #elif defined(OS_WIN)
9 #include <windows.h>
10 #endif
12 #define TELEMETRY 1
14 #include "base/command_line.h"
15 #include "base/environment.h"
16 #include "base/path_service.h"
17 #include "chrome/common/chrome_switches.h"
18 #include "chrome/test/nacl/nacl_browsertest_util.h"
19 #include "components/nacl/common/nacl_switches.h"
20 #include "content/public/common/content_switches.h"
22 namespace {
24 #if defined(OS_WIN)
25 // crbug.com/98721
26 # define MAYBE_Crash DISABLED_Crash
27 # define MAYBE_SysconfNprocessorsOnln DISABLED_SysconfNprocessorsOnln
28 #else
29 # define MAYBE_Crash Crash
30 # define MAYBE_SysconfNprocessorsOnln SysconfNprocessorsOnln
31 #endif
33 NACL_BROWSER_TEST_F(NaClBrowserTest, SimpleLoad, {
34 RunLoadTest(FILE_PATH_LITERAL("nacl_load_test.html"));
37 NACL_BROWSER_TEST_F(NaClBrowserTest, ExitStatus0, {
38 RunNaClIntegrationTest(FILE_PATH_LITERAL(
39 "pm_exit_status_test.html?trigger=exit0&expected_exit=0"));
42 NACL_BROWSER_TEST_F(NaClBrowserTest, ExitStatus254, {
43 RunNaClIntegrationTest(FILE_PATH_LITERAL(
44 "pm_exit_status_test.html?trigger=exit254&expected_exit=254"));
47 NACL_BROWSER_TEST_F(NaClBrowserTest, ExitStatusNeg2, {
48 RunNaClIntegrationTest(FILE_PATH_LITERAL(
49 "pm_exit_status_test.html?trigger=exitneg2&expected_exit=254"));
52 NACL_BROWSER_TEST_F(NaClBrowserTest, PPAPICore, {
53 RunNaClIntegrationTest(FILE_PATH_LITERAL("ppapi_ppb_core.html"));
56 NACL_BROWSER_TEST_F(NaClBrowserTest, PPAPIPPBInstance, {
57 RunNaClIntegrationTest(FILE_PATH_LITERAL("ppapi_ppb_instance.html"));
60 NACL_BROWSER_TEST_F(NaClBrowserTest, PPAPIPPPInstance, {
61 RunNaClIntegrationTest(FILE_PATH_LITERAL("ppapi_ppp_instance.html"));
64 NACL_BROWSER_TEST_F(NaClBrowserTest, ProgressEvents, {
65 RunNaClIntegrationTest(FILE_PATH_LITERAL("ppapi_progress_events.html"));
68 // Note: currently not run on PNaCl because crash throttling causes the last few
69 // tests to fail for the wrong reasons. Enabling this test would also require
70 // creating a new set of manifests because shared NaCl/PNaCl manifests are not
71 // allowed. Also not run on GLibc because it's a large test that is at risk of
72 // causing timeouts.
73 // crbug/338444
74 #if defined(OS_WIN)
75 #define MAYBE_Bad DISABLED_Bad
76 #else
77 #define MAYBE_Bad Bad
78 #endif
79 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlib, MAYBE_Bad) {
80 RunNaClIntegrationTest(FILE_PATH_LITERAL("ppapi_bad.html"));
83 // partially_invalid.c does not have an ARM version of its asm.
84 #if !defined(__arm__)
85 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlib, BadNative) {
86 RunNaClIntegrationTest(FILE_PATH_LITERAL("ppapi_bad_native.html"));
88 #endif
90 NACL_BROWSER_TEST_F(NaClBrowserTest, MAYBE_Crash, {
91 RunNaClIntegrationTest(FILE_PATH_LITERAL("ppapi_crash.html"));
94 // PNaCl version does not work.
95 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlib, ManifestFile) {
96 RunNaClIntegrationTest(FILE_PATH_LITERAL("pm_manifest_file_test.html"));
98 IN_PROC_BROWSER_TEST_F(NaClBrowserTestGLibc, ManifestFile) {
99 RunNaClIntegrationTest(FILE_PATH_LITERAL("pm_manifest_file_test.html"));
101 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlib, PreInitManifestFile) {
102 RunNaClIntegrationTest(FILE_PATH_LITERAL(
103 "pm_pre_init_manifest_file_test.html"));
105 IN_PROC_BROWSER_TEST_F(NaClBrowserTestGLibc, PreInitManifestFile) {
106 RunNaClIntegrationTest(FILE_PATH_LITERAL(
107 "pm_pre_init_manifest_file_test.html"));
109 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlib, IrtManifestFile) {
110 RunNaClIntegrationTest(FILE_PATH_LITERAL("irt_manifest_file_test.html"));
113 NACL_BROWSER_TEST_F(NaClBrowserTest, Nameservice, {
114 RunNaClIntegrationTest(FILE_PATH_LITERAL("pm_nameservice_test.html"));
117 // Some versions of Visual Studio does not like preprocessor
118 // conditionals inside the argument of a macro, so we put the
119 // conditionals on a helper function. We are already in an anonymous
120 // namespace, so the name of the helper is not visible in external
121 // scope.
122 #if defined(OS_POSIX)
123 base::FilePath::StringType NumberOfCoresAsFilePathString() {
124 char string_rep[23];
125 long nprocessors = sysconf(_SC_NPROCESSORS_ONLN);
126 #if TELEMETRY
127 fprintf(stderr, "browser says nprocessors = %ld\n", nprocessors);
128 fflush(NULL);
129 #endif
130 snprintf(string_rep, sizeof string_rep, "%ld", nprocessors);
131 return string_rep;
133 #elif defined(OS_WIN)
134 base::FilePath::StringType NumberOfCoresAsFilePathString() {
135 wchar_t string_rep[23];
136 SYSTEM_INFO system_info;
137 GetSystemInfo(&system_info);
138 #if TELEMETRY
139 fprintf(stderr, "browser says nprocessors = %d\n",
140 system_info.dwNumberOfProcessors);
141 fflush(NULL);
142 #endif
143 _snwprintf_s(string_rep, sizeof string_rep / sizeof string_rep[0], _TRUNCATE,
144 L"%u", system_info.dwNumberOfProcessors);
145 return string_rep;
147 #endif
149 #if TELEMETRY
150 static void PathTelemetry(base::FilePath::StringType const &path) {
151 # if defined(OS_WIN)
152 fwprintf(stderr, L"path = %s\n", path.c_str());
153 # else
154 fprintf(stderr, "path = %s\n", path.c_str());
155 # endif
156 fflush(NULL);
158 #else
159 static void PathTelemetry(base::FilePath::StringType const &path) {
160 (void) path;
162 #endif
164 NACL_BROWSER_TEST_F(NaClBrowserTest, MAYBE_SysconfNprocessorsOnln, {
165 base::FilePath::StringType path =
166 FILE_PATH_LITERAL("sysconf_nprocessors_onln_test.html?cpu_count=");
167 path = path + NumberOfCoresAsFilePathString();
168 PathTelemetry(path);
169 RunNaClIntegrationTest(path);
172 IN_PROC_BROWSER_TEST_F(NaClBrowserTestStatic, CrossOriginCORS) {
173 RunLoadTest(FILE_PATH_LITERAL("cross_origin/cors.html"));
176 IN_PROC_BROWSER_TEST_F(NaClBrowserTestStatic, CrossOriginFail) {
177 RunLoadTest(FILE_PATH_LITERAL("cross_origin/fail.html"));
180 IN_PROC_BROWSER_TEST_F(NaClBrowserTestStatic, SameOriginCookie) {
181 RunLoadTest(FILE_PATH_LITERAL("cross_origin/same_origin_cookie.html"));
184 IN_PROC_BROWSER_TEST_F(NaClBrowserTestStatic, CORSNoCookie) {
185 RunLoadTest(FILE_PATH_LITERAL("cross_origin/cors_no_cookie.html"));
188 IN_PROC_BROWSER_TEST_F(NaClBrowserTestStatic, RelativeManifest) {
189 RunLoadTest(FILE_PATH_LITERAL("manifest/relative_manifest.html"));
192 class NaClBrowserTestPnaclDebugURL : public NaClBrowserTestPnacl {
193 public:
194 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
195 NaClBrowserTestPnacl::SetUpCommandLine(command_line);
196 // Turn on debugging to influence the PNaCl URL loaded
197 command_line->AppendSwitch(switches::kEnableNaClDebug);
198 // On windows, the debug stub requires --no-sandbox:
199 // crbug.com/265624
200 #if defined(OS_WIN)
201 command_line->AppendSwitch(switches::kNoSandbox);
202 #endif
203 // Don't actually debug the app though.
204 command_line->AppendSwitchASCII(switches::kNaClDebugMask,
205 "!<all_urls>");
209 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnaclDebugURL,
210 MAYBE_PNACL(PnaclDebugURLFlagOn)) {
211 RunLoadTest(FILE_PATH_LITERAL("pnacl_debug_url.html?debug_flag=1"));
214 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl,
215 MAYBE_PNACL(PnaclDebugURLFlagOff)) {
216 RunLoadTest(FILE_PATH_LITERAL("pnacl_debug_url.html?debug_flag=0"));
219 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl,
220 MAYBE_PNACL(PnaclErrorHandling)) {
221 RunNaClIntegrationTest(FILE_PATH_LITERAL("pnacl_error_handling.html"));
224 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl,
225 MAYBE_PNACL(PnaclNMFOptionsO0)) {
226 RunLoadTest(FILE_PATH_LITERAL("pnacl_options.html?use_nmf=o_0"));
229 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl,
230 MAYBE_PNACL(PnaclNMFOptionsO2)) {
231 RunLoadTest(FILE_PATH_LITERAL("pnacl_options.html?use_nmf=o_2"));
234 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl,
235 MAYBE_PNACL(PnaclNMFOptionsOlarge)) {
236 RunLoadTest(FILE_PATH_LITERAL("pnacl_options.html?use_nmf=o_large"));
239 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl,
240 MAYBE_PNACL(PnaclDyncodeSyscallDisabled)) {
241 RunNaClIntegrationTest(FILE_PATH_LITERAL(
242 "pnacl_dyncode_syscall_disabled.html"));
245 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl,
246 MAYBE_PNACL(PnaclExceptionHandlingDisabled)) {
247 RunNaClIntegrationTest(FILE_PATH_LITERAL(
248 "pnacl_exception_handling_disabled.html"));
251 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl, PnaclMimeType) {
252 RunLoadTest(FILE_PATH_LITERAL("pnacl_mime_type.html"));
255 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnaclDisabled, PnaclMimeType) {
256 RunLoadTest(FILE_PATH_LITERAL("pnacl_mime_type.html"));
259 class NaClBrowserTestNewlibStdoutPM : public NaClBrowserTestNewlib {
260 public:
261 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
262 // Env needs to be set early because nacl_helper is spawned before the test
263 // body on Linux.
264 scoped_ptr<base::Environment> env(base::Environment::Create());
265 env->SetVar("NACL_EXE_STDOUT", "DEBUG_ONLY:dev://postmessage");
266 NaClBrowserTestNewlib::SetUpInProcessBrowserTestFixture();
270 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStdoutPM, RedirectFg0) {
271 RunNaClIntegrationTest(FILE_PATH_LITERAL(
272 "pm_redir_test.html?stream=stdout&thread=fg&delay_us=0"));
275 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStdoutPM, RedirectBg0) {
276 RunNaClIntegrationTest(FILE_PATH_LITERAL(
277 "pm_redir_test.html?stream=stdout&thread=bg&delay_us=0"));
280 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStdoutPM, RedirectFg1) {
281 RunNaClIntegrationTest(FILE_PATH_LITERAL(
282 "pm_redir_test.html?stream=stdout&thread=fg&delay_us=1000000"));
285 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStdoutPM, RedirectBg1) {
286 RunNaClIntegrationTest(FILE_PATH_LITERAL(
287 "pm_redir_test.html?stream=stdout&thread=bg&delay_us=1000000"));
290 class NaClBrowserTestNewlibStderrPM : public NaClBrowserTestNewlib {
291 public:
292 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
293 // Env needs to be set early because nacl_helper is spawned before the test
294 // body on Linux.
295 scoped_ptr<base::Environment> env(base::Environment::Create());
296 env->SetVar("NACL_EXE_STDERR", "DEBUG_ONLY:dev://postmessage");
297 NaClBrowserTestNewlib::SetUpInProcessBrowserTestFixture();
301 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStderrPM, RedirectFg0) {
302 RunNaClIntegrationTest(FILE_PATH_LITERAL(
303 "pm_redir_test.html?stream=stderr&thread=fg&delay_us=0"));
306 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStderrPM, RedirectBg0) {
307 RunNaClIntegrationTest(FILE_PATH_LITERAL(
308 "pm_redir_test.html?stream=stderr&thread=bg&delay_us=0"));
311 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStderrPM, RedirectFg1) {
312 RunNaClIntegrationTest(FILE_PATH_LITERAL(
313 "pm_redir_test.html?stream=stderr&thread=fg&delay_us=1000000"));
316 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStderrPM, RedirectBg1) {
317 RunNaClIntegrationTest(FILE_PATH_LITERAL(
318 "pm_redir_test.html?stream=stderr&thread=bg&delay_us=1000000"));
321 class NaClBrowserTestNewlibExtension : public NaClBrowserTestNewlib {
322 public:
323 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
324 NaClBrowserTestNewlib::SetUpCommandLine(command_line);
325 base::FilePath src_root;
326 ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &src_root));
328 base::FilePath document_root;
329 ASSERT_TRUE(GetDocumentRoot(&document_root));
331 // Document root is relative to source root, and source root may not be CWD.
332 command_line->AppendSwitchPath(switches::kLoadExtension,
333 src_root.Append(document_root));
337 // TODO(ncbray) support glibc and PNaCl
338 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibExtension, MimeHandler) {
339 RunNaClIntegrationTest(FILE_PATH_LITERAL(
340 "ppapi_extension_mime_handler.html"));
343 } // namespace