diff options
author | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-14 18:38:47 +0000 |
---|---|---|
committer | viettrungluu@chromium.org <viettrungluu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-01-14 18:38:47 +0000 |
commit | 9748b6404d71065c8e939a85241dbe95ea8b6879 (patch) | |
tree | 27405e3a1b643ccbbfd531cc582970a9daff12ab /ppapi | |
parent | 8d71797322893a3402cd86723726782bdca31285 (diff) | |
download | chromium_src-9748b6404d71065c8e939a85241dbe95ea8b6879.zip chromium_src-9748b6404d71065c8e939a85241dbe95ea8b6879.tar.gz chromium_src-9748b6404d71065c8e939a85241dbe95ea8b6879.tar.bz2 |
Fix Pepper URL Loader callbacks.
(Previously committed r71334, reverted r71400. Added null check pointed out by
jam.)
Add some tests (for aborting calls).
BUG=none
TEST=ppapi_tests
Review URL: http://codereview.chromium.org/6280005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@71463 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi')
-rw-r--r-- | ppapi/tests/test_file_io.cc | 5 | ||||
-rw-r--r-- | ppapi/tests/test_url_loader.cc | 73 | ||||
-rw-r--r-- | ppapi/tests/test_url_loader.h | 3 |
3 files changed, 74 insertions, 7 deletions
diff --git a/ppapi/tests/test_file_io.cc b/ppapi/tests/test_file_io.cc index 11fe62b..9b12ed6 100644 --- a/ppapi/tests/test_file_io.cc +++ b/ppapi/tests/test_file_io.cc @@ -484,5 +484,10 @@ std::string TestFileIO::TestAbortCalls() { } } + // TODO(viettrungluu): Also test that Close() aborts callbacks. + // crbug.com/69457 + PASS(); } + +// TODO(viettrungluu): Test Close(). crbug.com/69457 diff --git a/ppapi/tests/test_url_loader.cc b/ppapi/tests/test_url_loader.cc index 8b0dfc6..72e6d40 100644 --- a/ppapi/tests/test_url_loader.cc +++ b/ppapi/tests/test_url_loader.cc @@ -1,10 +1,11 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ppapi/tests/test_url_loader.h" #include <stdio.h> +#include <string.h> #include <string> #include "ppapi/c/dev/ppb_file_io_dev.h" @@ -50,6 +51,7 @@ void TestURLLoader::RunTest() { RUN_TEST(SameOriginRestriction); RUN_TEST(StreamToFile); RUN_TEST(AuditURLRedirect); + RUN_TEST(AbortCalls); } std::string TestURLLoader::ReadEntireFile(pp::FileIO_Dev* file_io, @@ -70,13 +72,13 @@ std::string TestURLLoader::ReadEntireFile(pp::FileIO_Dev* file_io, data->append(buf, rv); } - return ""; + PASS(); } std::string TestURLLoader::ReadEntireResponseBody(pp::URLLoader* loader, std::string* body) { TestCompletionCallback callback; - char buf[256]; + char buf[2]; // Small so that multiple reads are needed. for (;;) { int32_t rv = loader->ReadResponseBody(buf, sizeof(buf), callback); @@ -89,7 +91,7 @@ std::string TestURLLoader::ReadEntireResponseBody(pp::URLLoader* loader, body->append(buf, rv); } - return ""; + PASS(); } std::string TestURLLoader::LoadAndCompareBody( @@ -121,7 +123,7 @@ std::string TestURLLoader::LoadAndCompareBody( if (body != expected_body) return "URLLoader::ReadResponseBody returned unexpected content"; - return ""; + PASS(); } std::string TestURLLoader::TestBasicGET() { @@ -296,7 +298,66 @@ std::string TestURLLoader::TestAuditURLRedirect() { if (response_info.GetRedirectURL().AsString() != "www.google.com") return "Redirect URL should be www.google.com"; - return ""; + PASS(); +} + +std::string TestURLLoader::TestAbortCalls() { + pp::URLRequestInfo request; + request.SetURL("test_url_loader_data/hello.txt"); + + TestCompletionCallback callback; + int32_t rv; + + // Abort |Open()|. + { + callback.reset_run_count(); + rv = pp::URLLoader(*instance_).Open(request, callback); + if (callback.run_count() > 0) + return "URLLoader::Open ran callback synchronously."; + if (rv == PP_ERROR_WOULDBLOCK) { + rv = callback.WaitForResult(); + if (rv != PP_ERROR_ABORTED) + return "URLLoader::Open not aborted."; + } else if (rv != PP_OK) { + return ReportError("URLLoader::Open", rv); + } + } + + // Abort |ReadResponseBody()|. + { + char buf[2] = { 0 }; + { + pp::URLLoader loader(*instance_); + rv = loader.Open(request, callback); + if (rv == PP_ERROR_WOULDBLOCK) + rv = callback.WaitForResult(); + if (rv != PP_OK) + return ReportError("URLLoader::Open", rv); + + callback.reset_run_count(); + rv = loader.ReadResponseBody(buf, sizeof(buf), callback); + } // Destroy |loader|. + if (rv == PP_ERROR_WOULDBLOCK) { + // Save a copy and make sure |buf| doesn't get written to. + char buf_copy[2]; + memcpy(&buf_copy, &buf, sizeof(buf)); + rv = callback.WaitForResult(); + if (rv != PP_ERROR_ABORTED) + return "URLLoader::ReadResponseBody not aborted."; + if (memcmp(&buf_copy, &buf, sizeof(buf)) != 0) + return "URLLoader::ReadResponseBody wrote data after resource " + "destruction."; + } else if (rv != PP_OK) { + return ReportError("URLLoader::ReadResponseBody", rv); + } + } + + // TODO(viettrungluu): More abort tests (but add basic tests first). + // Also test that Close() aborts properly. crbug.com/69457 + + PASS(); } +// TODO(viettrungluu): Add tests for FollowRedirect, +// Get{Upload,Download}Progress, Close (including abort tests if applicable). // TODO(darin): Add a test for GrantUniversalAccess. diff --git a/ppapi/tests/test_url_loader.h b/ppapi/tests/test_url_loader.h index 447b7e2..0b14bd2 100644 --- a/ppapi/tests/test_url_loader.h +++ b/ppapi/tests/test_url_loader.h @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -42,6 +42,7 @@ class TestURLLoader : public TestCase { std::string TestStreamToFile(); std::string TestSameOriginRestriction(); std::string TestAuditURLRedirect(); + std::string TestAbortCalls(); const PPB_FileIOTrusted_Dev* file_io_trusted_interface_; }; |