Index: chrome/test/ui/ppapi_uitest.cc |
=================================================================== |
--- chrome/test/ui/ppapi_uitest.cc (revision 110336) |
+++ chrome/test/ui/ppapi_uitest.cc (working copy) |
@@ -6,7 +6,10 @@ |
#include "base/path_service.h" |
#include "base/test/test_timeouts.h" |
#include "build/build_config.h" |
+#include "content/browser/plugin_service.h" |
#include "content/public/common/content_switches.h" |
+#include "content/common/pepper_plugin_registry.h" |
+#include "chrome/common/chrome_paths.h" |
#include "chrome/common/chrome_switches.h" |
#include "chrome/test/automation/tab_proxy.h" |
#include "chrome/test/ui/ui_test.h" |
@@ -14,6 +17,8 @@ |
#include "net/test/test_server.h" |
#include "webkit/plugins/plugin_switches.h" |
+#include <iostream> |
+ |
namespace { |
// Platform-specific filename relative to the chrome executable. |
@@ -27,24 +32,9 @@ |
} // namespace |
-// In-process plugin test runner. See OutOfProcessPPAPITest below for the |
-// out-of-process version. |
-class PPAPITest : public UITest { |
+class PPAPITestBase : public UITest { |
public: |
- PPAPITest() { |
- // Append the switch to register the pepper plugin. |
- // library name = <out dir>/<test_name>.<library_extension> |
- // MIME type = application/x-ppapi-<test_name> |
- FilePath plugin_dir; |
- PathService::Get(base::DIR_EXE, &plugin_dir); |
- |
- FilePath plugin_lib = plugin_dir.Append(library_name); |
- EXPECT_TRUE(file_util::PathExists(plugin_lib)); |
- FilePath::StringType pepper_plugin = plugin_lib.value(); |
- pepper_plugin.append(FILE_PATH_LITERAL(";application/x-ppapi-tests")); |
- launch_arguments_.AppendSwitchNative(switches::kRegisterPepperPlugins, |
- pepper_plugin); |
- |
+ PPAPITestBase() { |
// The test sends us the result via a cookie. |
launch_arguments_.AppendSwitch(switches::kEnableFileCookies); |
@@ -56,9 +46,12 @@ |
launch_arguments_.AppendSwitch(switches::kDisableSmoothScrolling); |
} |
+ virtual std::string BuildQuery(const std::string& base, |
+ const std::string& test_case)=0; |
+ |
void RunTest(const std::string& test_case) { |
FilePath test_path; |
- PathService::Get(base::DIR_SOURCE_ROOT, &test_path); |
+ EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &test_path)); |
test_path = test_path.Append(FILE_PATH_LITERAL("ppapi")); |
test_path = test_path.Append(FILE_PATH_LITERAL("tests")); |
test_path = test_path.Append(FILE_PATH_LITERAL("test_case.html")); |
@@ -67,20 +60,49 @@ |
EXPECT_TRUE(file_util::PathExists(test_path)); |
GURL::Replacements replacements; |
- std::string query("testcase="); |
- query += test_case; |
+ std::string query = BuildQuery("", test_case); |
replacements.SetQuery(query.c_str(), url_parse::Component(0, query.size())); |
GURL test_url = net::FilePathToFileURL(test_path); |
RunTestURL(test_url.ReplaceComponents(replacements)); |
} |
void RunTestViaHTTP(const std::string& test_case) { |
- net::TestServer test_server( |
- net::TestServer::TYPE_HTTP, |
- FilePath(FILE_PATH_LITERAL("ppapi/tests"))); |
+ FilePath exe_dir = CommandLine::ForCurrentProcess()->GetProgram().DirName(); |
dmichael (off chromium)
2011/11/18 20:10:25
nit: could you add a comment explaining why you ne
noelallen1
2011/11/18 20:39:39
Done.
|
+ FilePath src_dir; |
+ ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &src_dir)); |
+ |
+ // TestServer expects a path relative to source. So we must first |
+ // generate absolute paths to SRC and EXE and from there generate |
+ // a relative path. |
+ if (!exe_dir.IsAbsolute()) file_util::AbsolutePath(&exe_dir); |
+ if (!src_dir.IsAbsolute()) file_util::AbsolutePath(&src_dir); |
+ ASSERT_TRUE(exe_dir.IsAbsolute()); |
+ ASSERT_TRUE(src_dir.IsAbsolute()); |
+ |
+ size_t match, exe_size, src_size; |
+ std::vector<FilePath::StringType> src_parts, exe_parts; |
+ |
+ // Determine point at which src and exe diverge, and create a relative path. |
+ exe_dir.GetComponents(&exe_parts); |
+ src_dir.GetComponents(&src_parts); |
+ exe_size = exe_parts.size(); |
+ src_size = src_parts.size(); |
+ for (match = 0; match < exe_size && match < src_size; ++match) { |
+ if (exe_parts[match] != src_parts[match]) |
+ break; |
+ } |
+ FilePath web_dir; |
+ for (size_t tmp_itr = match; tmp_itr < src_size; ++tmp_itr) { |
+ web_dir = web_dir.Append(FILE_PATH_LITERAL("..")); |
+ } |
+ for (; match < exe_size; ++match) { |
+ web_dir = web_dir.Append(exe_parts[match]); |
+ } |
+ |
+ net::TestServer test_server(net::TestServer::TYPE_HTTP, web_dir); |
ASSERT_TRUE(test_server.Start()); |
- RunTestURL( |
- test_server.GetURL("files/test_case.html?testcase=" + test_case)); |
+ std::string query = BuildQuery("files/test_case.html?", test_case); |
+ RunTestURL(test_server.GetURL(query)); |
} |
private: |
@@ -119,6 +141,32 @@ |
} |
}; |
+// In-process plugin test runner. See OutOfProcessPPAPITest below for the |
+// out-of-process version. |
+class PPAPITest : public PPAPITestBase { |
+ public: |
+ PPAPITest() { |
+ // Append the switch to register the pepper plugin. |
+ // library name = <out dir>/<test_name>.<library_extension> |
+ // MIME type = application/x-ppapi-<test_name> |
+ FilePath plugin_dir; |
+ EXPECT_TRUE(PathService::Get(base::DIR_EXE, &plugin_dir)); |
+ |
+ FilePath plugin_lib = plugin_dir.Append(library_name); |
+ EXPECT_TRUE(file_util::PathExists(plugin_lib)); |
+ FilePath::StringType pepper_plugin = plugin_lib.value(); |
+ pepper_plugin.append(FILE_PATH_LITERAL(";application/x-ppapi-tests")); |
+ launch_arguments_.AppendSwitchNative(switches::kRegisterPepperPlugins, |
+ pepper_plugin); |
+ } |
+ |
+ std::string BuildQuery(const std::string& base, |
+ const std::string& test_case){ |
+ return StringPrintf("%stestcase=%s", base.c_str(), test_case.c_str()); |
dmichael (off chromium)
2011/11/18 20:10:25
optional nit: I guess it's fine, but why not just
noelallen1
2011/11/18 20:39:39
Previous comment from other reviewer to use String
|
+ } |
+ |
+}; |
+ |
// Variant of PPAPITest that runs plugins out-of-process to test proxy |
// codepaths. |
class OutOfProcessPPAPITest : public PPAPITest { |
@@ -129,6 +177,27 @@ |
} |
}; |
+// NaCl plugin test runner. |
+class PPAPINaClTest : public PPAPITestBase { |
+ public: |
+ PPAPINaClTest() { |
+ FilePath plugin_lib; |
+ EXPECT_TRUE(PathService::Get(chrome::FILE_NACL_PLUGIN, &plugin_lib)); |
+ EXPECT_TRUE(file_util::PathExists(plugin_lib)); |
+ |
+ // Enable running NaCl outside of the store. |
+ launch_arguments_.AppendSwitch(switches::kEnableNaCl); |
+ } |
+ |
+ // Append the correct mode and testcase string |
+ std::string BuildQuery(const std::string& base, |
+ const std::string& test_case) { |
+ return StringPrintf("%smode=nacl&testcase=%s", base.c_str(), |
+ test_case.c_str()); |
+ } |
+}; |
+ |
+ |
// Use these macros to run the tests for a specific interface. |
// Most interfaces should be tested with both macros. |
#define TEST_PPAPI_IN_PROCESS(test_name) \ |
@@ -151,6 +220,12 @@ |
} |
+// NaCl based PPAPI tests |
+#define TEST_PPAPI_NACL_VIA_HTTP(test_name) \ |
+ TEST_F(PPAPINaClTest, test_name) { \ |
+ RunTestViaHTTP(#test_name); \ |
+} |
+ |
// |
// Interface tests. |
// |
@@ -163,6 +238,7 @@ |
TEST_PPAPI_IN_PROCESS(CursorControl) |
TEST_PPAPI_OUT_OF_PROCESS(CursorControl) |
+TEST_PPAPI_NACL_VIA_HTTP(CursorControl) |
TEST_PPAPI_IN_PROCESS(Instance) |
// http://crbug.com/91729 |
@@ -170,15 +246,16 @@ |
TEST_PPAPI_IN_PROCESS(Graphics2D) |
TEST_PPAPI_OUT_OF_PROCESS(Graphics2D) |
+TEST_PPAPI_NACL_VIA_HTTP(Graphics2D) |
TEST_PPAPI_IN_PROCESS(ImageData) |
TEST_PPAPI_OUT_OF_PROCESS(ImageData) |
+TEST_PPAPI_NACL_VIA_HTTP(ImageData) |
TEST_PPAPI_IN_PROCESS(Buffer) |
TEST_PPAPI_OUT_OF_PROCESS(Buffer) |
TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader) |
- |
// http://crbug.com/89961 |
#if defined(OS_WIN) |
// It often takes too long time (and fails otherwise) on Windows. |
@@ -186,19 +263,22 @@ |
#else |
#define MAYBE_URLLoader FAILS_URLLoader |
#endif |
- |
TEST_F(OutOfProcessPPAPITest, MAYBE_URLLoader) { |
RunTestViaHTTP("URLLoader"); |
} |
+ |
+ |
TEST_PPAPI_IN_PROCESS(PaintAggregator) |
TEST_PPAPI_OUT_OF_PROCESS(PaintAggregator) |
+TEST_PPAPI_NACL_VIA_HTTP(PaintAggregator) |
TEST_PPAPI_IN_PROCESS(Scrollbar) |
// http://crbug.com/89961 |
TEST_F(OutOfProcessPPAPITest, FAILS_Scrollbar) { |
RunTest("Scrollbar"); |
} |
+TEST_PPAPI_NACL_VIA_HTTP(Scrollbar) |
TEST_PPAPI_IN_PROCESS(URLUtil) |
TEST_PPAPI_OUT_OF_PROCESS(URLUtil) |
@@ -214,6 +294,7 @@ |
TEST_F(OutOfProcessPPAPITest, FAILS_Var) { |
RunTest("Var"); |
} |
+TEST_PPAPI_NACL_VIA_HTTP(Var) |
TEST_PPAPI_IN_PROCESS(VarDeprecated) |
// Disabled because it times out: http://crbug.com/89961 |
@@ -240,6 +321,7 @@ |
TEST_PPAPI_IN_PROCESS(Memory) |
TEST_PPAPI_OUT_OF_PROCESS(Memory) |
+TEST_PPAPI_NACL_VIA_HTTP(Memory) |
TEST_PPAPI_IN_PROCESS(VideoDecoder) |
TEST_PPAPI_OUT_OF_PROCESS(VideoDecoder) |
@@ -252,13 +334,18 @@ |
TEST_F(OutOfProcessPPAPITest, DISABLED_FileIO) { |
RunTestViaHTTP("FileIO"); |
} |
+TEST_PPAPI_NACL_VIA_HTTP(DISABLED_FileIO) |
+ |
TEST_PPAPI_IN_PROCESS_VIA_HTTP(FileRef) |
// Disabled because it times out: http://crbug.com/89961 |
//TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(FileRef) |
+TEST_PPAPI_NACL_VIA_HTTP(FileRef) |
+ |
TEST_PPAPI_IN_PROCESS_VIA_HTTP(FileSystem) |
TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(FileSystem) |
+TEST_PPAPI_NACL_VIA_HTTP(FileSystem) |
// http://crbug.com/96767 and 104384 for aura. |
#if !defined(OS_MACOSX) && !defined(USE_AURA) |