Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(160)

Side by Side Diff: ppapi/tests/test_url_loader.cc

Issue 10081020: PPAPI: Make blocking completion callbacks work. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: export AssertLockHeld Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ppapi/tests/test_case.cc ('k') | ppapi/tests/test_utils.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/tests/test_url_loader.h" 5 #include "ppapi/tests/test_url_loader.h"
6 6
7 #include <stdio.h> 7 #include <stdio.h>
8 #include <string.h> 8 #include <string.h>
9 #include <string> 9 #include <string>
10 10
(...skipping 15 matching lines...) Expand all
26 #include "ppapi/tests/test_utils.h" 26 #include "ppapi/tests/test_utils.h"
27 #include "ppapi/tests/testing_instance.h" 27 #include "ppapi/tests/testing_instance.h"
28 28
29 REGISTER_TEST_CASE(URLLoader); 29 REGISTER_TEST_CASE(URLLoader);
30 30
31 namespace { 31 namespace {
32 32
33 int32_t WriteEntireBuffer(PP_Instance instance, 33 int32_t WriteEntireBuffer(PP_Instance instance,
34 pp::FileIO* file_io, 34 pp::FileIO* file_io,
35 int32_t offset, 35 int32_t offset,
36 const std::string& data) { 36 const std::string& data,
37 TestCompletionCallback callback(instance); 37 CallbackType callback_type) {
38 TestCompletionCallback callback(instance, callback_type);
38 int32_t write_offset = offset; 39 int32_t write_offset = offset;
39 const char* buf = data.c_str(); 40 const char* buf = data.c_str();
40 int32_t size = data.size(); 41 int32_t size = data.size();
41 42
42 while (write_offset < offset + size) { 43 while (write_offset < offset + size) {
43 callback.WaitForResult(file_io->Write(write_offset, 44 callback.WaitForResult(file_io->Write(write_offset,
44 &buf[write_offset - offset], 45 &buf[write_offset - offset],
45 size - write_offset + offset, 46 size - write_offset + offset,
46 callback)); 47 callback));
47 if (callback.result() < 0) 48 if (callback.result() < 0)
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 if (file_io_trusted_interface_) 89 if (file_io_trusted_interface_)
89 instance_->AppendError("FileIOTrusted interface is supported by NaCl"); 90 instance_->AppendError("FileIOTrusted interface is supported by NaCl");
90 if (url_loader_trusted_interface_) 91 if (url_loader_trusted_interface_)
91 instance_->AppendError("URLLoaderTrusted interface is supported by NaCl"); 92 instance_->AppendError("URLLoaderTrusted interface is supported by NaCl");
92 #endif 93 #endif
93 } 94 }
94 return EnsureRunningOverHTTP(); 95 return EnsureRunningOverHTTP();
95 } 96 }
96 97
97 void TestURLLoader::RunTests(const std::string& filter) { 98 void TestURLLoader::RunTests(const std::string& filter) {
98 RUN_TEST_FORCEASYNC_AND_NOT(BasicGET, filter); 99 RUN_CALLBACK_TEST(TestURLLoader, BasicGET, filter);
99 RUN_TEST_FORCEASYNC_AND_NOT(BasicPOST, filter); 100 RUN_CALLBACK_TEST(TestURLLoader, BasicPOST, filter);
100 RUN_TEST_FORCEASYNC_AND_NOT(BasicFilePOST, filter); 101 RUN_CALLBACK_TEST(TestURLLoader, BasicFilePOST, filter);
101 RUN_TEST_FORCEASYNC_AND_NOT(BasicFileRangePOST, filter); 102 RUN_CALLBACK_TEST(TestURLLoader, BasicFileRangePOST, filter);
102 RUN_TEST_FORCEASYNC_AND_NOT(CompoundBodyPOST, filter); 103 RUN_CALLBACK_TEST(TestURLLoader, CompoundBodyPOST, filter);
103 RUN_TEST_FORCEASYNC_AND_NOT(EmptyDataPOST, filter); 104 RUN_CALLBACK_TEST(TestURLLoader, EmptyDataPOST, filter);
104 RUN_TEST_FORCEASYNC_AND_NOT(BinaryDataPOST, filter); 105 RUN_CALLBACK_TEST(TestURLLoader, BinaryDataPOST, filter);
105 RUN_TEST_FORCEASYNC_AND_NOT(CustomRequestHeader, filter); 106 RUN_CALLBACK_TEST(TestURLLoader, CustomRequestHeader, filter);
106 RUN_TEST_FORCEASYNC_AND_NOT(FailsBogusContentLength, filter); 107 RUN_CALLBACK_TEST(TestURLLoader, FailsBogusContentLength, filter);
107 RUN_TEST_FORCEASYNC_AND_NOT(StreamToFile, filter); 108 RUN_CALLBACK_TEST(TestURLLoader, StreamToFile, filter);
108 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedSameOriginRestriction, filter); 109 RUN_CALLBACK_TEST(TestURLLoader, UntrustedSameOriginRestriction, filter);
109 RUN_TEST_FORCEASYNC_AND_NOT(TrustedSameOriginRestriction, filter); 110 RUN_CALLBACK_TEST(TestURLLoader, TrustedSameOriginRestriction, filter);
110 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedCrossOriginRequest, filter); 111 RUN_CALLBACK_TEST(TestURLLoader, UntrustedCrossOriginRequest, filter);
111 RUN_TEST_FORCEASYNC_AND_NOT(TrustedCrossOriginRequest, filter); 112 RUN_CALLBACK_TEST(TestURLLoader, TrustedCrossOriginRequest, filter);
112 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedJavascriptURLRestriction, filter); 113 RUN_CALLBACK_TEST(TestURLLoader, UntrustedJavascriptURLRestriction, filter);
113 RUN_TEST_FORCEASYNC_AND_NOT(TrustedJavascriptURLRestriction, filter); 114 RUN_CALLBACK_TEST(TestURLLoader, TrustedJavascriptURLRestriction, filter);
114 RUN_TEST_FORCEASYNC_AND_NOT(UntrustedHttpRequests, filter); 115 RUN_CALLBACK_TEST(TestURLLoader, UntrustedHttpRequests, filter);
115 RUN_TEST_FORCEASYNC_AND_NOT(TrustedHttpRequests, filter); 116 RUN_CALLBACK_TEST(TestURLLoader, TrustedHttpRequests, filter);
116 RUN_TEST_FORCEASYNC_AND_NOT(FollowURLRedirect, filter); 117 RUN_CALLBACK_TEST(TestURLLoader, FollowURLRedirect, filter);
117 RUN_TEST_FORCEASYNC_AND_NOT(AuditURLRedirect, filter); 118 RUN_CALLBACK_TEST(TestURLLoader, AuditURLRedirect, filter);
118 RUN_TEST_FORCEASYNC_AND_NOT(AbortCalls, filter); 119 RUN_CALLBACK_TEST(TestURLLoader, AbortCalls, filter);
119 RUN_TEST_FORCEASYNC_AND_NOT(UntendedLoad, filter); 120 RUN_CALLBACK_TEST(TestURLLoader, UntendedLoad, filter);
120 RUN_TEST_FORCEASYNC_AND_NOT(PrefetchBufferThreshold, filter); 121 RUN_CALLBACK_TEST(TestURLLoader, PrefetchBufferThreshold, filter);
121 } 122 }
122 123
123 std::string TestURLLoader::ReadEntireFile(pp::FileIO* file_io, 124 std::string TestURLLoader::ReadEntireFile(pp::FileIO* file_io,
124 std::string* data) { 125 std::string* data) {
125 TestCompletionCallback callback(instance_->pp_instance(), callback_type()); 126 TestCompletionCallback callback(instance_->pp_instance(), callback_type());
126 char buf[256]; 127 char buf[256];
127 int64_t offset = 0; 128 int64_t offset = 0;
128 129
129 for (;;) { 130 for (;;) {
130 callback.WaitForResult(file_io->Read(offset, buf, sizeof(buf), callback)); 131 callback.WaitForResult(file_io->Read(offset, buf, sizeof(buf), callback));
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
215 callback)); 216 callback));
216 if (callback.failed()) { 217 if (callback.failed()) {
217 message->assign(callback.errors()); 218 message->assign(callback.errors());
218 return callback.result(); 219 return callback.result();
219 } 220 }
220 if (callback.result() != PP_OK) { 221 if (callback.result() != PP_OK) {
221 message->assign("FileIO::Open failed."); 222 message->assign("FileIO::Open failed.");
222 return callback.result(); 223 return callback.result();
223 } 224 }
224 225
225 int32_t rv = WriteEntireBuffer(instance_->pp_instance(), &file_io, 0, data); 226 int32_t rv = WriteEntireBuffer(instance_->pp_instance(), &file_io, 0, data,
227 callback_type());
226 if (rv != PP_OK) { 228 if (rv != PP_OK) {
227 message->assign("FileIO::Write failed."); 229 message->assign("FileIO::Write failed.");
228 return rv; 230 return rv;
229 } 231 }
230 232
231 return rv; 233 return rv;
232 } 234 }
233 235
234 std::string TestURLLoader::GetReachableAbsoluteURL( 236 std::string TestURLLoader::GetReachableAbsoluteURL(
235 const std::string& file_name) { 237 const std::string& file_name) {
(...skipping 544 matching lines...) Expand 10 before | Expand all | Expand 10 after
780 // another callback function, to make sure the loader works with no callback. 782 // another callback function, to make sure the loader works with no callback.
781 int64_t bytes_received = 0; 783 int64_t bytes_received = 0;
782 int64_t total_bytes_to_be_received = 0; 784 int64_t total_bytes_to_be_received = 0;
783 while (true) { 785 while (true) {
784 loader.GetDownloadProgress(&bytes_received, &total_bytes_to_be_received); 786 loader.GetDownloadProgress(&bytes_received, &total_bytes_to_be_received);
785 if (total_bytes_to_be_received <= 0) 787 if (total_bytes_to_be_received <= 0)
786 return ReportError("URLLoader::GetDownloadProgress total size", 788 return ReportError("URLLoader::GetDownloadProgress total size",
787 total_bytes_to_be_received); 789 total_bytes_to_be_received);
788 if (bytes_received == total_bytes_to_be_received) 790 if (bytes_received == total_bytes_to_be_received)
789 break; 791 break;
790 pp::Module::Get()->core()->CallOnMainThread(10, callback); 792 // TODO(dmichael): This should probably compare pp::MessageLoop::GetCurrent
791 callback.WaitForResult(); 793 // with GetForMainThread. We only need to yield on the main
794 // thread.
795 if (callback_type() != PP_BLOCKING) {
796 pp::Module::Get()->core()->CallOnMainThread(10, callback);
797 callback.WaitForResult();
798 }
792 } 799 }
793 800
794 // The loader should now have the data and have finished successfully. 801 // The loader should now have the data and have finished successfully.
795 std::string body; 802 std::string body;
796 std::string error = ReadEntireResponseBody(&loader, &body); 803 std::string error = ReadEntireResponseBody(&loader, &body);
797 if (!error.empty()) 804 if (!error.empty())
798 return error; 805 return error;
799 if (body != "hello\n") 806 if (body != "hello\n")
800 return ReportError("Couldn't read data", callback.result()); 807 return ReportError("Couldn't read data", callback.result());
801 808
(...skipping 27 matching lines...) Expand all
829 if (rv != PP_ERROR_FAILED) { 836 if (rv != PP_ERROR_FAILED) {
830 return ReportError("The lower buffer value was higher than the upper but " 837 return ReportError("The lower buffer value was higher than the upper but "
831 "the URLLoader did not fail.", rv); 838 "the URLLoader did not fail.", rv);
832 } 839 }
833 840
834 PASS(); 841 PASS();
835 } 842 }
836 843
837 // TODO(viettrungluu): Add tests for Get{Upload,Download}Progress, Close 844 // TODO(viettrungluu): Add tests for Get{Upload,Download}Progress, Close
838 // (including abort tests if applicable). 845 // (including abort tests if applicable).
OLDNEW
« no previous file with comments | « ppapi/tests/test_case.cc ('k') | ppapi/tests/test_utils.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698