Commit b347ca13 authored by mazda@chromium.org's avatar mazda@chromium.org

Add a PPAPI browser tests for an issue of NaCl crash.

These tests verifie that the crash of NaCl module introduced by r200088 does
not occur when PPB_FileIO_Private::RequestOSFileHandle is called with
PPB_FileIO opened with PP_FILEOPENFLAG_EXCLUSIVE. 

BUG=243241,241726
TEST=
browser_tests --gtest_filter="PPAPI*Test.FileIO" passes
Revert r200088
browser_tests --gtest_filter="PPAPI*Test.FileIO" crashes

Review URL: https://chromiumcodereview.appspot.com/15864005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@203124 0039d316-1c4b-4281-b951-d872f2087c98
parent 6b694cf8
...@@ -644,6 +644,7 @@ IN_PROC_BROWSER_TEST_F(PPAPITest, FileIO) { ...@@ -644,6 +644,7 @@ IN_PROC_BROWSER_TEST_F(PPAPITest, FileIO) {
LIST_TEST(FileIO_TouchQuery) LIST_TEST(FileIO_TouchQuery)
LIST_TEST(FileIO_WillWriteWillSetLength) LIST_TEST(FileIO_WillWriteWillSetLength)
LIST_TEST(FileIO_RequestOSFileHandle) LIST_TEST(FileIO_RequestOSFileHandle)
LIST_TEST(FileIO_RequestOSFileHandleWithOpenExclusive)
LIST_TEST(FileIO_Mmap) LIST_TEST(FileIO_Mmap)
); );
} }
...@@ -659,6 +660,7 @@ IN_PROC_BROWSER_TEST_F(OutOfProcessPPAPITest, FileIO) { ...@@ -659,6 +660,7 @@ IN_PROC_BROWSER_TEST_F(OutOfProcessPPAPITest, FileIO) {
LIST_TEST(FileIO_TouchQuery) LIST_TEST(FileIO_TouchQuery)
LIST_TEST(FileIO_WillWriteWillSetLength) LIST_TEST(FileIO_WillWriteWillSetLength)
LIST_TEST(FileIO_RequestOSFileHandle) LIST_TEST(FileIO_RequestOSFileHandle)
LIST_TEST(FileIO_RequestOSFileHandleWithOpenExclusive)
LIST_TEST(FileIO_Mmap) LIST_TEST(FileIO_Mmap)
); );
} }
...@@ -675,6 +677,7 @@ IN_PROC_BROWSER_TEST_F(PPAPINaClNewlibTest, FileIO) { ...@@ -675,6 +677,7 @@ IN_PROC_BROWSER_TEST_F(PPAPINaClNewlibTest, FileIO) {
// The following test requires PPB_FileIO_Trusted, not available in NaCl. // The following test requires PPB_FileIO_Trusted, not available in NaCl.
LIST_TEST(DISABLED_FileIO_WillWriteWillSetLength) LIST_TEST(DISABLED_FileIO_WillWriteWillSetLength)
LIST_TEST(FileIO_RequestOSFileHandle) LIST_TEST(FileIO_RequestOSFileHandle)
LIST_TEST(FileIO_RequestOSFileHandleWithOpenExclusive)
LIST_TEST(FileIO_Mmap) LIST_TEST(FileIO_Mmap)
); );
} }
...@@ -691,6 +694,7 @@ IN_PROC_BROWSER_TEST_F(PPAPINaClGLibcTest, MAYBE_GLIBC(FileIO)) { ...@@ -691,6 +694,7 @@ IN_PROC_BROWSER_TEST_F(PPAPINaClGLibcTest, MAYBE_GLIBC(FileIO)) {
// The following test requires PPB_FileIO_Trusted, not available in NaCl. // The following test requires PPB_FileIO_Trusted, not available in NaCl.
LIST_TEST(DISABLED_FileIO_WillWriteWillSetLength) LIST_TEST(DISABLED_FileIO_WillWriteWillSetLength)
LIST_TEST(FileIO_RequestOSFileHandle) LIST_TEST(FileIO_RequestOSFileHandle)
LIST_TEST(FileIO_RequestOSFileHandleWithOpenExclusive)
LIST_TEST(FileIO_Mmap) LIST_TEST(FileIO_Mmap)
); );
} }
...@@ -707,6 +711,7 @@ IN_PROC_BROWSER_TEST_F(PPAPINaClPNaClTest, FileIO) { ...@@ -707,6 +711,7 @@ IN_PROC_BROWSER_TEST_F(PPAPINaClPNaClTest, FileIO) {
// The following test requires PPB_FileIO_Trusted, not available in NaCl. // The following test requires PPB_FileIO_Trusted, not available in NaCl.
LIST_TEST(DISABLED_FileIO_WillWriteWillSetLength) LIST_TEST(DISABLED_FileIO_WillWriteWillSetLength)
LIST_TEST(FileIO_RequestOSFileHandle) LIST_TEST(FileIO_RequestOSFileHandle)
LIST_TEST(FileIO_RequestOSFileHandleWithOpenExclusive)
LIST_TEST(FileIO_Mmap) LIST_TEST(FileIO_Mmap)
); );
} }
......
...@@ -184,6 +184,7 @@ void TestFileIO::RunTests(const std::string& filter) { ...@@ -184,6 +184,7 @@ void TestFileIO::RunTests(const std::string& filter) {
RUN_CALLBACK_TEST(TestFileIO, NotAllowMixedReadWrite, filter); RUN_CALLBACK_TEST(TestFileIO, NotAllowMixedReadWrite, filter);
RUN_CALLBACK_TEST(TestFileIO, WillWriteWillSetLength, filter); RUN_CALLBACK_TEST(TestFileIO, WillWriteWillSetLength, filter);
RUN_CALLBACK_TEST(TestFileIO, RequestOSFileHandle, filter); RUN_CALLBACK_TEST(TestFileIO, RequestOSFileHandle, filter);
RUN_CALLBACK_TEST(TestFileIO, RequestOSFileHandleWithOpenExclusive, filter);
RUN_CALLBACK_TEST(TestFileIO, Mmap, filter); RUN_CALLBACK_TEST(TestFileIO, Mmap, filter);
// TODO(viettrungluu): add tests: // TODO(viettrungluu): add tests:
...@@ -1108,6 +1109,39 @@ std::string TestFileIO::TestRequestOSFileHandle() { ...@@ -1108,6 +1109,39 @@ std::string TestFileIO::TestRequestOSFileHandle() {
PASS(); PASS();
} }
// Calling RequestOSFileHandle with the FileIO that is opened with
// PP_FILEOPENFLAG_EXCLUSIVE used to cause NaCl module to crash while loading.
// This is a regression test for crbug.com/243241.
std::string TestFileIO::TestRequestOSFileHandleWithOpenExclusive() {
TestCompletionCallback callback(instance_->pp_instance(), callback_type());
pp::FileSystem file_system(instance_, PP_FILESYSTEMTYPE_LOCALTEMPORARY);
pp::FileRef file_ref(file_system, "/file_os_fd2");
callback.WaitForResult(file_system.Open(1024, callback.GetCallback()));
ASSERT_EQ(PP_OK, callback.result());
pp::FileIO_Private file_io(instance_);
callback.WaitForResult(file_io.Open(file_ref,
PP_FILEOPENFLAG_CREATE |
PP_FILEOPENFLAG_READ |
PP_FILEOPENFLAG_WRITE |
PP_FILEOPENFLAG_EXCLUSIVE,
callback.GetCallback()));
ASSERT_EQ(PP_OK, callback.result());
TestCompletionCallbackWithOutput<pp::PassFileHandle> output_callback(
instance_->pp_instance(), callback_type());
output_callback.WaitForResult(
file_io.RequestOSFileHandle(output_callback.GetCallback()));
PP_FileHandle handle = output_callback.output().Release();
if (handle == PP_kInvalidFileHandle)
return "FileIO::RequestOSFileHandle() returned a bad file handle.";
ASSERT_EQ(PP_OK, output_callback.result());
PASS();
}
std::string TestFileIO::TestMmap() { std::string TestFileIO::TestMmap() {
#if !defined(PPAPI_OS_WIN) #if !defined(PPAPI_OS_WIN)
TestCompletionCallback callback(instance_->pp_instance(), callback_type()); TestCompletionCallback callback(instance_->pp_instance(), callback_type());
......
...@@ -48,6 +48,7 @@ class TestFileIO : public TestCase { ...@@ -48,6 +48,7 @@ class TestFileIO : public TestCase {
std::string TestNotAllowMixedReadWrite(); std::string TestNotAllowMixedReadWrite();
std::string TestWillWriteWillSetLength(); std::string TestWillWriteWillSetLength();
std::string TestRequestOSFileHandle(); std::string TestRequestOSFileHandle();
std::string TestRequestOSFileHandleWithOpenExclusive();
std::string TestMmap(); std::string TestMmap();
// Helper method used by TestOpen(). // Helper method used by TestOpen().
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment