summaryrefslogtreecommitdiffstats
path: root/ppapi/tests/test_url_loader.cc
diff options
context:
space:
mode:
authorpolina@google.com <polina@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-30 21:42:37 +0000
committerpolina@google.com <polina@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-06-30 21:42:37 +0000
commit917e86adc3f824f518c999dcba20bfd4cbf18a18 (patch)
tree52fe38f61527360231c17a905015066fb5d34bba /ppapi/tests/test_url_loader.cc
parent9ae7b9195f0e06b64664bba52e9cc0e8b3470f56 (diff)
downloadchromium_src-917e86adc3f824f518c999dcba20bfd4cbf18a18.zip
chromium_src-917e86adc3f824f518c999dcba20bfd4cbf18a18.tar.gz
chromium_src-917e86adc3f824f518c999dcba20bfd4cbf18a18.tar.bz2
Add a flag field to PP_CompletionCallback to control if the callback should
always be invoked asynchronously on success or error or skipped if the operation can complete synchronously without blocking. Keep the default behavior as-is until clients update their code. Bump revisions of all interfaces that take callbacks as args. Update browser interface function implementations and C++ layer to force callbacks if sync option is not set. Change ppapi/tests to run tests involving callbacks with both flag options. BUG=79376 TEST=ppapi_tests + bots Review URL: http://codereview.chromium.org/6899055 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@91205 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ppapi/tests/test_url_loader.cc')
-rw-r--r--ppapi/tests/test_url_loader.cc58
1 files changed, 41 insertions, 17 deletions
diff --git a/ppapi/tests/test_url_loader.cc b/ppapi/tests/test_url_loader.cc
index 8fda286..6ecb15d 100644
--- a/ppapi/tests/test_url_loader.cc
+++ b/ppapi/tests/test_url_loader.cc
@@ -44,27 +44,29 @@ bool TestURLLoader::Init() {
void TestURLLoader::RunTest() {
RUN_TEST(BasicGET);
- RUN_TEST(BasicPOST);
- RUN_TEST(CompoundBodyPOST);
- RUN_TEST(EmptyDataPOST);
+ RUN_TEST_FORCEASYNC(BasicPOST);
+ RUN_TEST_FORCEASYNC_AND_NOT(CompoundBodyPOST);
+ RUN_TEST_FORCEASYNC(EmptyDataPOST);
RUN_TEST(BinaryDataPOST);
- RUN_TEST(CustomRequestHeader);
- RUN_TEST(IgnoresBogusContentLength);
+ RUN_TEST_FORCEASYNC_AND_NOT(CustomRequestHeader);
+ RUN_TEST_FORCEASYNC(IgnoresBogusContentLength);
RUN_TEST(SameOriginRestriction);
- RUN_TEST(CrossOriginRequest);
- RUN_TEST(StreamToFile);
+ RUN_TEST_FORCEASYNC(CrossOriginRequest);
+ RUN_TEST_FORCEASYNC_AND_NOT(StreamToFile);
RUN_TEST(AuditURLRedirect);
- RUN_TEST(AbortCalls);
+ RUN_TEST_FORCEASYNC(AbortCalls);
}
std::string TestURLLoader::ReadEntireFile(pp::FileIO_Dev* file_io,
std::string* data) {
- TestCompletionCallback callback(instance_->pp_instance());
+ TestCompletionCallback callback(instance_->pp_instance(), force_async_);
char buf[256];
int64_t offset = 0;
for (;;) {
int32_t rv = file_io->Read(offset, buf, sizeof(buf), callback);
+ if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
+ return ReportError("FileIO::Read force_async", rv);
if (rv == PP_OK_COMPLETIONPENDING)
rv = callback.WaitForResult();
if (rv < 0)
@@ -80,11 +82,13 @@ std::string TestURLLoader::ReadEntireFile(pp::FileIO_Dev* file_io,
std::string TestURLLoader::ReadEntireResponseBody(pp::URLLoader* loader,
std::string* body) {
- TestCompletionCallback callback(instance_->pp_instance());
+ TestCompletionCallback callback(instance_->pp_instance(), force_async_);
char buf[2]; // Small so that multiple reads are needed.
for (;;) {
int32_t rv = loader->ReadResponseBody(buf, sizeof(buf), callback);
+ if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
+ return ReportError("URLLoader::ReadResponseBody force_async", rv);
if (rv == PP_OK_COMPLETIONPENDING)
rv = callback.WaitForResult();
if (rv < 0)
@@ -100,10 +104,12 @@ std::string TestURLLoader::ReadEntireResponseBody(pp::URLLoader* loader,
std::string TestURLLoader::LoadAndCompareBody(
const pp::URLRequestInfo& request,
const std::string& expected_body) {
- TestCompletionCallback callback(instance_->pp_instance());
+ TestCompletionCallback callback(instance_->pp_instance(), force_async_);
pp::URLLoader loader(*instance_);
int32_t rv = loader.Open(request, callback);
+ if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
+ return ReportError("URLLoader::Open force_async", rv);
if (rv == PP_OK_COMPLETIONPENDING)
rv = callback.WaitForResult();
if (rv != PP_OK)
@@ -197,10 +203,12 @@ std::string TestURLLoader::TestStreamToFile() {
request.SetURL("test_url_loader_data/hello.txt");
request.SetStreamToFile(true);
- TestCompletionCallback callback(instance_->pp_instance());
+ TestCompletionCallback callback(instance_->pp_instance(), force_async_);
pp::URLLoader loader(*instance_);
int32_t rv = loader.Open(request, callback);
+ if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
+ return ReportError("URLLoader::Open force_async", rv);
if (rv == PP_OK_COMPLETIONPENDING)
rv = callback.WaitForResult();
if (rv != PP_OK)
@@ -218,6 +226,8 @@ std::string TestURLLoader::TestStreamToFile() {
return "URLResponseInfo::GetBody returned null";
rv = loader.FinishStreamingToFile(callback);
+ if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
+ return ReportError("URLLoader::FinishStreamingToFile force_async", rv);
if (rv == PP_OK_COMPLETIONPENDING)
rv = callback.WaitForResult();
if (rv != PP_OK)
@@ -225,6 +235,8 @@ std::string TestURLLoader::TestStreamToFile() {
pp::FileIO_Dev reader(instance_);
rv = reader.Open(body, PP_FILEOPENFLAG_READ, callback);
+ if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
+ return ReportError("FileIO::Open force_async", rv);
if (rv == PP_OK_COMPLETIONPENDING)
rv = callback.WaitForResult();
if (rv != PP_OK)
@@ -253,10 +265,12 @@ std::string TestURLLoader::TestSameOriginRestriction() {
pp::URLRequestInfo request(instance_);
request.SetURL("http://www.google.com/");
- TestCompletionCallback callback(instance_->pp_instance());
+ TestCompletionCallback callback(instance_->pp_instance(), force_async_);
pp::URLLoader loader(*instance_);
int32_t rv = loader.Open(request, callback);
+ if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
+ return ReportError("URLLoader::Open force_async", rv);
if (rv == PP_OK_COMPLETIONPENDING)
rv = callback.WaitForResult();
@@ -290,11 +304,13 @@ std::string TestURLLoader::TestCrossOriginRequest() {
request.SetURL(cross_origin_url);
request.SetAllowCrossOriginRequests(true);
- TestCompletionCallback callback(instance_->pp_instance());
+ TestCompletionCallback callback(instance_->pp_instance(), force_async_);
pp::URLLoader loader(*instance_);
int32_t rv = loader.Open(request, callback);
- if (rv == PP_ERROR_WOULDBLOCK)
+ if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
+ return ReportError("URLLoader::Open force_async", rv);
+ if (rv == PP_OK_COMPLETIONPENDING)
rv = callback.WaitForResult();
// We expect success since we allowed a cross-origin request.
@@ -312,10 +328,12 @@ std::string TestURLLoader::TestAuditURLRedirect() {
request.SetURL("/server-redirect?www.google.com");
request.SetFollowRedirects(false);
- TestCompletionCallback callback(instance_->pp_instance());
+ TestCompletionCallback callback(instance_->pp_instance(), force_async_);
pp::URLLoader loader(*instance_);
int32_t rv = loader.Open(request, callback);
+ if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
+ return ReportError("URLLoader::Open force_async", rv);
if (rv == PP_OK_COMPLETIONPENDING)
rv = callback.WaitForResult();
if (rv != PP_OK)
@@ -339,13 +357,15 @@ std::string TestURLLoader::TestAbortCalls() {
pp::URLRequestInfo request(instance_);
request.SetURL("test_url_loader_data/hello.txt");
- TestCompletionCallback callback(instance_->pp_instance());
+ TestCompletionCallback callback(instance_->pp_instance(), force_async_);
int32_t rv;
// Abort |Open()|.
{
callback.reset_run_count();
rv = pp::URLLoader(*instance_).Open(request, callback);
+ if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
+ return ReportError("URLLoader::Open force_async", rv);
if (callback.run_count() > 0)
return "URLLoader::Open ran callback synchronously.";
if (rv == PP_OK_COMPLETIONPENDING) {
@@ -363,6 +383,8 @@ std::string TestURLLoader::TestAbortCalls() {
{
pp::URLLoader loader(*instance_);
rv = loader.Open(request, callback);
+ if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
+ return ReportError("URLLoader::Open force_async", rv);
if (rv == PP_OK_COMPLETIONPENDING)
rv = callback.WaitForResult();
if (rv != PP_OK)
@@ -370,6 +392,8 @@ std::string TestURLLoader::TestAbortCalls() {
callback.reset_run_count();
rv = loader.ReadResponseBody(buf, sizeof(buf), callback);
+ if (force_async_ && rv != PP_OK_COMPLETIONPENDING)
+ return ReportError("URLLoader::ReadResponseBody force_async", rv);
} // Destroy |loader|.
if (rv == PP_OK_COMPLETIONPENDING) {
// Save a copy and make sure |buf| doesn't get written to.