Chromium Code Reviews| Index: content/shell/shell_browser_main.cc |
| diff --git a/content/shell/shell_browser_main.cc b/content/shell/shell_browser_main.cc |
| index b1f0e9f6f1d10a160b0c02acaa33b5252b151f70..1fb18e6bb3fa700d907c8d1e806a169e77f098b0 100644 |
| --- a/content/shell/shell_browser_main.cc |
| +++ b/content/shell/shell_browser_main.cc |
| @@ -25,6 +25,7 @@ |
| #include "webkit/support/webkit_support.h" |
| #if defined(OS_ANDROID) |
| +#include "base/android/fifo_utils.h" |
| #include "base/android/jni_android.h" |
| #include "base/run_loop.h" |
| #include "content/public/test/nested_message_pump_android.h" |
| @@ -33,6 +34,11 @@ |
| namespace { |
| #if defined(OS_ANDROID) |
| +// Directory on the device where the FIFOs will be created. The value of this |
| +// constant must by synchronized with that in the chromium_android.py file. |
| +const char kAndroidFifoPath[] = |
|
bulach
2013/06/19 14:42:14
see below, looks like we can gather this from java
jochen (gone - plz use gerrit)
2013/06/19 15:37:13
and it should be FILE_PATH_LITERAL(), no? also kAn
Peter Beverloo
2013/06/19 17:40:28
Done.
|
| + "/data/data/org.chromium.content_shell_apk/files/"; |
| + |
| // Path to search for when translating a layout test path to an URL. |
| const char kAndroidLayoutTestPath[] = |
| "/data/local/tmp/third_party/WebKit/LayoutTests/"; |
| @@ -40,6 +46,32 @@ const char kAndroidLayoutTestPath[] = |
| // The base URL from which layout tests are being served on Android. |
| const char kAndroidLayoutTestBase[] = "http://127.0.0.1:8000/all-tests/"; |
| +void EnsureCreateFIFO(const base::FilePath& path) { |
| + unlink(path.value().c_str()); |
| + CHECK(base::android::CreateFIFO(path, 0666)) |
| + << "Unable to create one of Android's FIFOs: " << path.value().c_str(); |
| +} |
| + |
| +bool CreateAndroidFIFOs() { |
| + // Android will need three FIFOs to communicate with the Blink test runner, |
| + // one for each of [stdout, stderr, stdin]. Redirecting stdout needs to happen |
| + // before redirecting stdin, which needs to happen before redirecting stderr. |
| + base::FilePath files_dir(kAndroidFifoPath); |
| + |
| + base::FilePath stdout_fifo(files_dir.Append(base::FilePath("test.fifo"))); |
|
jochen (gone - plz use gerrit)
2013/06/19 15:37:13
also FILE_PATH_LITERAL() instead of full filepath
Peter Beverloo
2013/06/19 17:40:28
Done.
|
| + EnsureCreateFIFO(stdout_fifo); |
| + |
| + base::FilePath stderr_fifo(files_dir.Append(base::FilePath("stderr.fifo"))); |
| + EnsureCreateFIFO(stderr_fifo); |
| + |
| + base::FilePath stdin_fifo(files_dir.Append(base::FilePath("stdin.fifo"))); |
| + EnsureCreateFIFO(stdin_fifo); |
| + |
| + return base::android::RedirectStream(stdout, stdout_fifo, "w") && |
| + base::android::RedirectStream(stdin, stdin_fifo, "r") && |
| + base::android::RedirectStream(stderr, stderr_fifo, "w"); |
| +} |
| + |
| base::MessagePump* CreateMessagePumpForUI() { |
| return new content::NestedMessagePumpAndroid(); |
| } |
|
bulach
2013/06/19 14:42:14
how about moving this entire block to a shell_layo
Peter Beverloo
2013/06/19 17:40:28
Done.
|
| @@ -144,14 +176,14 @@ int ShellBrowserMain(const content::MainFunctionParams& parameters, |
| browser_context_path_for_layout_tests.path().MaybeAsASCII()); |
| #if defined(OS_ANDROID) |
| - // TODO(beverloo): Create the FIFOs required for Android layout tests. |
| - |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| content::NestedMessagePumpAndroid::RegisterJni(env); |
| const bool success = base::MessageLoop::InitMessagePumpForUIFactory( |
| &CreateMessagePumpForUI); |
| CHECK(success) << "Unable to initialize the message pump for Android."; |
| + |
| + CHECK(CreateAndroidFIFOs()) << "Unable to initialize the Android FIFOs."; |
|
bulach
2013/06/19 14:42:14
since this one has JNI available, you can add a @C
Peter Beverloo
2013/06/19 17:40:28
Done.
|
| #endif |
| } |