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.
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"
26 # define MAYBE_Crash DISABLED_Crash
27 # define MAYBE_SysconfNprocessorsOnln DISABLED_SysconfNprocessorsOnln
29 # define MAYBE_Crash Crash
30 # define MAYBE_SysconfNprocessorsOnln SysconfNprocessorsOnln
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
75 #define MAYBE_Bad DISABLED_Bad
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.
85 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlib
, BadNative
) {
86 RunNaClIntegrationTest(FILE_PATH_LITERAL("ppapi_bad_native.html"));
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
122 #if defined(OS_POSIX)
123 base::FilePath::StringType
NumberOfCoresAsFilePathString() {
125 long nprocessors
= sysconf(_SC_NPROCESSORS_ONLN
);
127 fprintf(stderr
, "browser says nprocessors = %ld\n", nprocessors
);
130 snprintf(string_rep
, sizeof string_rep
, "%ld", nprocessors
);
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
);
139 fprintf(stderr
, "browser says nprocessors = %d\n",
140 system_info
.dwNumberOfProcessors
);
143 _snwprintf_s(string_rep
, sizeof string_rep
/ sizeof string_rep
[0], _TRUNCATE
,
144 L
"%u", system_info
.dwNumberOfProcessors
);
150 static void PathTelemetry(base::FilePath::StringType
const &path
) {
152 fwprintf(stderr
, L
"path = %s\n", path
.c_str());
154 fprintf(stderr
, "path = %s\n", path
.c_str());
159 static void PathTelemetry(base::FilePath::StringType
const &path
) {
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();
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
{
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:
201 command_line
->AppendSwitch(switches::kNoSandbox
);
203 // Don't actually debug the app though.
204 command_line
->AppendSwitchASCII(switches::kNaClDebugMask
,
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
{
261 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE
{
262 // Env needs to be set early because nacl_helper is spawned before the test
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
{
292 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE
{
293 // Env needs to be set early because nacl_helper is spawned before the test
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
{
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"));