| Index: ppapi/native_client/tests/ppapi_browser/ppb_url_request_info/ppapi_ppb_url_request_info.cc
|
| ===================================================================
|
| --- ppapi/native_client/tests/ppapi_browser/ppb_url_request_info/ppapi_ppb_url_request_info.cc (revision 0)
|
| +++ ppapi/native_client/tests/ppapi_browser/ppb_url_request_info/ppapi_ppb_url_request_info.cc (revision 0)
|
| @@ -0,0 +1,494 @@
|
| +// Copyright (c) 2011 The Native Client Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +// Tests PPB_URLRequestInfo.
|
| +
|
| +#include <string.h>
|
| +
|
| +#include "native_client/src/shared/platform/nacl_check.h"
|
| +#include "native_client/tests/ppapi_test_lib/get_browser_interface.h"
|
| +#include "native_client/tests/ppapi_test_lib/test_interface.h"
|
| +#include "native_client/tests/ppapi_test_lib/testable_callback.h"
|
| +
|
| +#include "ppapi/c/pp_errors.h"
|
| +#include "ppapi/c/ppb_core.h"
|
| +#include "ppapi/c/ppb_file_io.h"
|
| +#include "ppapi/c/ppb_file_ref.h"
|
| +#include "ppapi/c/ppb_file_system.h"
|
| +#include "ppapi/c/ppb_url_loader.h"
|
| +#include "ppapi/c/ppb_url_request_info.h"
|
| +#include "ppapi/c/ppb_url_response_info.h"
|
| +#include "ppapi/c/ppb_var.h"
|
| +
|
| +namespace {
|
| +
|
| +// Tests
|
| +// PP_Resource Create(PP_Instance instance).
|
| +void TestCreate() {
|
| + PP_Resource url_request = kInvalidResource;
|
| +
|
| + // Invalid instance -> invalid resource.
|
| + url_request = PPBURLRequestInfo()->Create(kInvalidInstance);
|
| + EXPECT(url_request == kInvalidResource);
|
| +
|
| + // Valid instance -> valid resource.
|
| + url_request = PPBURLRequestInfo()->Create(pp_instance());
|
| + EXPECT(url_request != kInvalidResource);
|
| +
|
| + PPBCore()->ReleaseResource(url_request);
|
| + TEST_PASSED;
|
| +}
|
| +
|
| +// Tests
|
| +// PP_Bool IsURLRequestInfo(PP_Resource resource).
|
| +void TestIsURLRequestInfo() {
|
| + const PPB_URLRequestInfo* ppb = PPBURLRequestInfo();
|
| +
|
| + // Invalid / non-existent / non-URLRequestInfo resource -> false.
|
| + EXPECT(PP_FALSE == ppb->IsURLRequestInfo(kInvalidResource));
|
| + EXPECT(PP_FALSE == ppb->IsURLRequestInfo(kNotAResource));
|
| + PP_Resource url_loader = PPBURLLoader()->Create(pp_instance());
|
| + EXPECT(url_loader != kInvalidResource);
|
| + EXPECT(PP_FALSE == ppb->IsURLRequestInfo(url_loader));
|
| + PPBCore()->ReleaseResource(url_loader);
|
| +
|
| + // Current URLRequestInfo resource -> true.
|
| + PP_Resource url_request = ppb->Create(pp_instance());
|
| + EXPECT(PP_TRUE == ppb->IsURLRequestInfo(url_request));
|
| +
|
| + // Released URLRequestInfo resource -> false.
|
| + PPBCore()->ReleaseResource(url_request);
|
| + EXPECT(PP_FALSE == ppb->IsURLRequestInfo(url_request));
|
| +
|
| + TEST_PASSED;
|
| +}
|
| +
|
| +// Tests
|
| +// PP_Bool SetProperty(PP_Resource request,
|
| +// PP_URLRequestProperty property,
|
| +// struct PP_Var value);
|
| +void TestSetProperty() {
|
| + struct PropertyTestData {
|
| + PropertyTestData(PP_URLRequestProperty _property,
|
| + const std::string& _property_name,
|
| + PP_Var _var, PP_Bool _expected_value) :
|
| + property(_property), property_name(_property_name),
|
| + var(_var), expected_value(_expected_value) {
|
| + PPBVar()->AddRef(var);
|
| + }
|
| + PP_URLRequestProperty property;
|
| + std::string property_name;
|
| + PP_Var var;
|
| + PP_Bool expected_value;
|
| + };
|
| +
|
| + // All bool properties should accept PP_TRUE and PP_FALSE, while rejecting
|
| + // all other variable types.
|
| + #define ADD_BOOL_PROPERTY(_prop_name) \
|
| + PropertyTestData(ID_STR(_prop_name), PP_MakeBool(PP_TRUE), PP_TRUE), \
|
| + PropertyTestData(ID_STR(_prop_name), PP_MakeBool(PP_FALSE), PP_TRUE), \
|
| + PropertyTestData(ID_STR(_prop_name), PP_MakeUndefined(), PP_FALSE), \
|
| + PropertyTestData(ID_STR(_prop_name), PP_MakeNull(), PP_FALSE), \
|
| + PropertyTestData(ID_STR(_prop_name), PP_MakeInt32(0), PP_FALSE), \
|
| + PropertyTestData(ID_STR(_prop_name), PP_MakeDouble(0.0), PP_FALSE)
|
| +
|
| + // These property types are always invalid for string properties.
|
| + #define ADD_STRING_INVALID_PROPERTIES(_prop_name) \
|
| + PropertyTestData(ID_STR(_prop_name), PP_MakeNull(), PP_FALSE), \
|
| + PropertyTestData(ID_STR(_prop_name), PP_MakeBool(PP_FALSE), PP_FALSE), \
|
| + PropertyTestData(ID_STR(_prop_name), PP_MakeInt32(0), PP_FALSE), \
|
| + PropertyTestData(ID_STR(_prop_name), PP_MakeDouble(0.0), PP_FALSE)
|
| +
|
| + #define ADD_INT_INVALID_PROPERTIES(_prop_name) \
|
| + PropertyTestData(ID_STR(_prop_name), PP_MakeUndefined(), PP_FALSE), \
|
| + PropertyTestData(ID_STR(_prop_name), PP_MakeNull(), PP_FALSE), \
|
| + PropertyTestData(ID_STR(_prop_name), PP_MakeBool(PP_FALSE), PP_FALSE), \
|
| + PropertyTestData(ID_STR(_prop_name), PP_MakeString(""), PP_FALSE), \
|
| + PropertyTestData(ID_STR(_prop_name), PP_MakeDouble(0.0), PP_FALSE)
|
| +
|
| + #define ID_STR(arg) arg, #arg
|
| + PropertyTestData test_data[] = {
|
| + ADD_BOOL_PROPERTY(PP_URLREQUESTPROPERTY_STREAMTOFILE),
|
| + ADD_BOOL_PROPERTY(PP_URLREQUESTPROPERTY_FOLLOWREDIRECTS),
|
| + ADD_BOOL_PROPERTY(PP_URLREQUESTPROPERTY_RECORDDOWNLOADPROGRESS),
|
| + ADD_BOOL_PROPERTY(PP_URLREQUESTPROPERTY_RECORDUPLOADPROGRESS),
|
| + ADD_BOOL_PROPERTY(PP_URLREQUESTPROPERTY_ALLOWCROSSORIGINREQUESTS),
|
| + ADD_BOOL_PROPERTY(PP_URLREQUESTPROPERTY_ALLOWCREDENTIALS),
|
| + ADD_STRING_INVALID_PROPERTIES(PP_URLREQUESTPROPERTY_URL),
|
| + ADD_STRING_INVALID_PROPERTIES(PP_URLREQUESTPROPERTY_METHOD),
|
| + ADD_STRING_INVALID_PROPERTIES(PP_URLREQUESTPROPERTY_HEADERS),
|
| + ADD_STRING_INVALID_PROPERTIES(
|
| + PP_URLREQUESTPROPERTY_CUSTOMREFERRERURL),
|
| + ADD_STRING_INVALID_PROPERTIES(
|
| + PP_URLREQUESTPROPERTY_CUSTOMCONTENTTRANSFERENCODING),
|
| + ADD_INT_INVALID_PROPERTIES(
|
| + PP_URLREQUESTPROPERTY_PREFETCHBUFFERUPPERTHRESHOLD),
|
| + ADD_INT_INVALID_PROPERTIES(
|
| + PP_URLREQUESTPROPERTY_PREFETCHBUFFERLOWERTHRESHOLD),
|
| + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_URL),
|
| + PP_MakeString("http://www.google.com"), PP_TRUE),
|
| + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_URL),
|
| + PP_MakeString("foo.jpg"), PP_TRUE),
|
| + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_METHOD),
|
| + PP_MakeString("GET"), PP_TRUE),
|
| + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_METHOD),
|
| + PP_MakeString("POST"), PP_TRUE),
|
| + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_HEADERS),
|
| + PP_MakeString("Accept: text/plain"), PP_TRUE),
|
| + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_HEADERS),
|
| + PP_MakeString(""), PP_TRUE),
|
| + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_CUSTOMREFERRERURL),
|
| + PP_MakeString("http://www.google.com"), PP_TRUE),
|
| + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_CUSTOMREFERRERURL),
|
| + PP_MakeString(""), PP_TRUE),
|
| + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_CUSTOMREFERRERURL),
|
| + PP_MakeUndefined(), PP_TRUE),
|
| + PropertyTestData(
|
| + ID_STR(PP_URLREQUESTPROPERTY_CUSTOMCONTENTTRANSFERENCODING),
|
| + PP_MakeString("base64"), PP_TRUE),
|
| + PropertyTestData(
|
| + ID_STR(PP_URLREQUESTPROPERTY_CUSTOMCONTENTTRANSFERENCODING),
|
| + PP_MakeString(""), PP_TRUE),
|
| + PropertyTestData(
|
| + ID_STR(PP_URLREQUESTPROPERTY_CUSTOMCONTENTTRANSFERENCODING),
|
| + PP_MakeUndefined(), PP_TRUE),
|
| + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_URL),
|
| + PP_MakeUndefined(), PP_FALSE),
|
| + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_METHOD),
|
| + PP_MakeUndefined(), PP_FALSE),
|
| + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_HEADERS),
|
| + PP_MakeString("Proxy-Authorization: Basic dXNlcjpwYXNzd29yZA=="),
|
| + PP_FALSE),
|
| + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_HEADERS),
|
| + PP_MakeString("Accept-Encoding: *\n"
|
| + "Accept-Charset: iso-8859-5, unicode-1-1;q=0.8"),
|
| + PP_FALSE),
|
| + PropertyTestData(
|
| + ID_STR(PP_URLREQUESTPROPERTY_PREFETCHBUFFERUPPERTHRESHOLD),
|
| + PP_MakeInt32(0), PP_TRUE),
|
| + PropertyTestData(
|
| + ID_STR(PP_URLREQUESTPROPERTY_PREFETCHBUFFERUPPERTHRESHOLD),
|
| + PP_MakeInt32(100), PP_TRUE),
|
| + PropertyTestData(
|
| + ID_STR(PP_URLREQUESTPROPERTY_PREFETCHBUFFERLOWERTHRESHOLD),
|
| + PP_MakeInt32(0), PP_TRUE),
|
| + PropertyTestData(
|
| + ID_STR(PP_URLREQUESTPROPERTY_PREFETCHBUFFERLOWERTHRESHOLD),
|
| + PP_MakeInt32(100), PP_TRUE),
|
| + // Bug filed against Chrome to validate SetProperty values better.
|
| + // http://code.google.com/p/chromium/issues/detail?id=89842.
|
| + /*
|
| + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_URL),
|
| + PP_MakeString("::::::::::::"), PP_FALSE),
|
| + PropertyTestData(ID_STR(PP_URLREQUESTPROPERTY_METHOD),
|
| + PP_MakeString("INVALID"), PP_FALSE),
|
| + PropertyTestData(
|
| + ID_STR(PP_URLREQUESTPROPERTY_CUSTOMCONTENTTRANSFERENCODING),
|
| + PP_MakeString("invalid"), PP_FALSE),
|
| + PropertyTestData(
|
| + ID_STR(PP_URLREQUESTPROPERTY_PREFETCHBUFFERUPPERTHRESHOLD),
|
| + PP_MakeInt32(-100), PP_FALSE),
|
| + PropertyTestData(
|
| + ID_STR(PP_URLREQUESTPROPERTY_PREFETCHBUFFERLOWERTHRESHOLD),
|
| + PP_MakeInt32(-100), PP_TRUE),
|
| + */
|
| + };
|
| +
|
| + const PPB_URLRequestInfo* ppb = PPBURLRequestInfo();
|
| + PP_Resource url_request = ppb->Create(pp_instance());
|
| + EXPECT(url_request != kInvalidResource);
|
| +
|
| + for (size_t i = 0;
|
| + i < sizeof(test_data)/sizeof(PropertyTestData);
|
| + ++i) {
|
| + if (test_data[i].expected_value !=
|
| + ppb->SetProperty(url_request,
|
| + test_data[i].property,
|
| + test_data[i].var)) {
|
| + nacl::string error_string = nacl::string("Setting property ") +
|
| + test_data[i].property_name.c_str() + " to " +
|
| + StringifyVar(test_data[i].var) + " did not return " +
|
| + StringifyVar(PP_MakeBool(test_data[i].expected_value));
|
| + // PostTestMessage will signal test failure here.
|
| + PostTestMessage(__FUNCTION__, error_string.c_str());
|
| + }
|
| + PPBVar()->Release(test_data[i].var);
|
| + }
|
| +
|
| + PPBCore()->ReleaseResource(url_request);
|
| + TEST_PASSED;
|
| +}
|
| +
|
| +
|
| +void LoadAndCompareBody(PP_Resource request,
|
| + const nacl::string& expected_body) {
|
| + PP_Resource url_loader = PPBURLLoader()->Create(pp_instance());
|
| + EXPECT(url_loader != kInvalidResource);
|
| +
|
| + TestableCallback callback(pp_instance(), true);
|
| +
|
| + int32_t result = PPBURLLoader()->Open(url_loader,
|
| + request,
|
| + callback.GetCallback());
|
| + EXPECT(PP_OK_COMPLETIONPENDING == result);
|
| + result = callback.WaitForResult();
|
| + EXPECT(PP_OK == result);
|
| +
|
| + PP_Resource response = PPBURLLoader()->GetResponseInfo(url_loader);
|
| + EXPECT(response != kInvalidResource);
|
| +
|
| + PP_Var status =
|
| + PPBURLResponseInfo()->GetProperty(response,
|
| + PP_URLRESPONSEPROPERTY_STATUSCODE);
|
| + EXPECT_VAR_INT(status, 200);
|
| +
|
| + nacl::string actual_body;
|
| +
|
| + // Read the entire body in this loop.
|
| + for (;;) {
|
| + callback.Reset();
|
| + const size_t kBufferSize = 32;
|
| + char buf[kBufferSize];
|
| + result = PPBURLLoader()->ReadResponseBody(url_loader,
|
| + buf, kBufferSize,
|
| + callback.GetCallback());
|
| + EXPECT(PP_OK_COMPLETIONPENDING == result);
|
| + result = callback.WaitForResult();
|
| + EXPECT(result >= PP_OK);
|
| + if (result < 0) {
|
| + return;
|
| + }
|
| + if (PP_OK == result) {
|
| + break;
|
| + }
|
| + actual_body.append(buf, result);
|
| + }
|
| +
|
| + EXPECT(actual_body == expected_body);
|
| +
|
| + PPBCore()->ReleaseResource(response);
|
| + PPBCore()->ReleaseResource(url_loader);
|
| +}
|
| +
|
| +void SetupPOSTURLRequest(PP_Resource request) {
|
| + const PPB_URLRequestInfo* ppb = PPBURLRequestInfo();
|
| + EXPECT(PP_TRUE == ppb->SetProperty(request,
|
| + PP_URLREQUESTPROPERTY_METHOD,
|
| + PP_MakeString("POST")));
|
| + EXPECT(PP_TRUE == ppb->SetProperty(request,
|
| + PP_URLREQUESTPROPERTY_URL,
|
| + PP_MakeString("/echo")));
|
| +}
|
| +
|
| +void TestAppendDataToBody() {
|
| + const PPB_URLRequestInfo* ppb = PPBURLRequestInfo();
|
| + PP_Resource url_request = ppb->Create(pp_instance());
|
| + EXPECT(url_request != kInvalidResource);
|
| + nacl::string postdata("sample postdata");
|
| +
|
| + // Bad pointer passed in should fail to proxy.
|
| + EXPECT(PP_FALSE == ppb->AppendDataToBody(url_request,
|
| + NULL,
|
| + 1));
|
| + // Invalid resource should fail.
|
| + EXPECT(PP_FALSE == ppb->AppendDataToBody(kInvalidResource,
|
| + postdata.data(),
|
| + postdata.length()));
|
| + // Append data and POST to echoing web server.
|
| + SetupPOSTURLRequest(url_request);
|
| + EXPECT(PP_TRUE == ppb->AppendDataToBody(url_request,
|
| + postdata.data(),
|
| + postdata.length()));
|
| + // Check for success.
|
| + LoadAndCompareBody(url_request, postdata);
|
| +
|
| + PPBCore()->ReleaseResource(url_request);
|
| + TEST_PASSED;
|
| +}
|
| +
|
| +// TODO(elijahtaylor): Revisit this function when it is enabled. Parts could be
|
| +// factored out and it could be smaller and more readable in general.
|
| +void TestAppendFileToBody() {
|
| + const int64_t kFileSystemSize = 1024;
|
| + const PPB_URLRequestInfo* ppb = PPBURLRequestInfo();
|
| + PP_Resource url_request = ppb->Create(pp_instance());
|
| + EXPECT(url_request != kInvalidResource);
|
| +
|
| + // Creating a file reference PP_Resource is a multi-stage process.
|
| + // First, create and open a new file system.
|
| + const PPB_FileSystem* ppb_file_sys = PPBFileSystem();
|
| + PP_Resource file_sys =
|
| + ppb_file_sys->Create(pp_instance(),
|
| + PP_FILESYSTEMTYPE_EXTERNAL);
|
| + EXPECT(file_sys != kInvalidResource);
|
| +
|
| + TestableCallback callback(pp_instance(), true);
|
| +
|
| + int32_t result = ppb_file_sys->Open(file_sys,
|
| + kFileSystemSize,
|
| + callback.GetCallback());
|
| + EXPECT(PP_OK_COMPLETIONPENDING == result);
|
| + result = callback.WaitForResult();
|
| +
|
| + EXPECT(PP_OK == result);
|
| +
|
| + // Create a file reference, then tie it to a new writable file io resource.
|
| + PP_Resource file_ref = PPBFileRef()->Create(file_sys, "/foo");
|
| + EXPECT(file_ref != kInvalidResource);
|
| + PP_Resource file_io = PPBFileIO()->Create(pp_instance());
|
| + EXPECT(file_ref != kInvalidResource);
|
| +
|
| + callback.Reset();
|
| + result = PPBFileIO()->Open(file_io,
|
| + file_ref,
|
| + PP_FILEOPENFLAG_WRITE | PP_FILEOPENFLAG_CREATE |
|
| + PP_FILEOPENFLAG_TRUNCATE,
|
| + callback.GetCallback());
|
| +
|
| + EXPECT(PP_OK_COMPLETIONPENDING == result);
|
| + result = callback.WaitForResult();
|
| + EXPECT(PP_OK == result);
|
| +
|
| + // Now we can write the contents of this string to the file io resource.
|
| + nacl::string postdata("sample postdata from file");
|
| + size_t total_written = 0;
|
| + for (;;) {
|
| + callback.Reset();
|
| + result = PPBFileIO()->Write(file_io,
|
| + total_written,
|
| + postdata.data() + total_written,
|
| + postdata.length() - total_written,
|
| + callback.GetCallback());
|
| +
|
| + EXPECT(PP_OK_COMPLETIONPENDING == result);
|
| + result = callback.WaitForResult();
|
| +
|
| + EXPECT(result >= PP_OK);
|
| + if (result < 0)
|
| + return;
|
| + if (result == PP_OK)
|
| + break;
|
| + total_written += result;
|
| + }
|
| + PPBFileIO()->Close(file_io);
|
| +
|
| + const int64_t kReadUntilEOF = -1;
|
| + const PP_Time kDummyTimeValue = 5; // seconds since epoch
|
| +
|
| + // Finally, set up the url_request to post to an echoing web server.
|
| + SetupPOSTURLRequest(url_request);
|
| + EXPECT(PP_TRUE == ppb->AppendFileToBody(url_request,
|
| + file_ref,
|
| + 0, // start offset
|
| + postdata.length(),
|
| + 0)); // expected last modified time
|
| + LOG_TO_BROWSER("testing ordinary 'AppendFileToBody'");
|
| + // Check for success.
|
| + LoadAndCompareBody(url_request, postdata);
|
| +
|
| + // Use a new url_request for another POST request
|
| + PPBCore()->ReleaseResource(url_request);
|
| + url_request = ppb->Create(pp_instance());
|
| + EXPECT(url_request != kInvalidResource);
|
| +
|
| + callback.Reset();
|
| + // Set the timestamps so we can test 'expected last modified time'
|
| + result = PPBFileIO()->Touch(file_ref,
|
| + kDummyTimeValue+1,
|
| + kDummyTimeValue,
|
| + callback.GetCallback());
|
| +
|
| + SetupPOSTURLRequest(url_request);
|
| + EXPECT(PP_TRUE == ppb->AppendFileToBody(url_request,
|
| + file_ref,
|
| + 0, // start offset
|
| + postdata.length(),
|
| + kDummyTimeValue));
|
| + LOG_TO_BROWSER("testing 'expected last modified time'");
|
| + LoadAndCompareBody(url_request, postdata);
|
| +
|
| + PPBCore()->ReleaseResource(url_request);
|
| + url_request = ppb->Create(pp_instance());
|
| + EXPECT(url_request != kInvalidResource);
|
| +
|
| + SetupPOSTURLRequest(url_request);
|
| + // Test for failure on expected last modified time, it won't fail until an
|
| + // actual request is made.
|
| + EXPECT(PP_TRUE == ppb->AppendFileToBody(url_request,
|
| + file_ref,
|
| + 0, // start offset
|
| + kReadUntilEOF, // number of bytes
|
| + kDummyTimeValue - 1));
|
| + LOG_TO_BROWSER("testing 'expected last modified time' failure");
|
| + PP_Resource url_loader = PPBURLLoader()->Create(pp_instance());
|
| + EXPECT(url_loader != kInvalidResource);
|
| + callback.Reset();
|
| +
|
| + result = PPBURLLoader()->Open(url_loader,
|
| + url_request,
|
| + callback.GetCallback());
|
| + EXPECT(PP_OK_COMPLETIONPENDING == result);
|
| + result = callback.WaitForResult();
|
| + EXPECT(PP_ERROR_FILECHANGED == result);
|
| +
|
| + // Invalid Resource is failure.
|
| + EXPECT(PP_FALSE == ppb->AppendFileToBody(url_request,
|
| + kInvalidResource,
|
| + 0, // start offset
|
| + 1, // length
|
| + 0)); // expected last modified time
|
| + // Test bad start offset.
|
| + EXPECT(PP_FALSE == ppb->AppendFileToBody(url_request,
|
| + file_ref,
|
| + -1, // start offset
|
| + 1, // length
|
| + 0)); // expected last modified time
|
| + // Test invalid length. (-1 means read until end of file, hence -2)
|
| + EXPECT(PP_FALSE == ppb->AppendFileToBody(url_request,
|
| + kInvalidResource,
|
| + 0, // start offset
|
| + -2, // length
|
| + 0)); // expected last modified time
|
| + PPBCore()->ReleaseResource(url_request);
|
| + PPBCore()->ReleaseResource(file_ref);
|
| + PPBCore()->ReleaseResource(file_sys);
|
| + TEST_PASSED;
|
| +}
|
| +
|
| +// Allocates and manipulates a large number of resources.
|
| +void TestStress() {
|
| + const int kManyResources = 500;
|
| + PP_Resource url_request_info[kManyResources];
|
| + const PPB_URLRequestInfo* ppb = PPBURLRequestInfo();
|
| +
|
| + for (int i = 0; i < kManyResources; i++) {
|
| + url_request_info[i] = ppb->Create(pp_instance());
|
| + EXPECT(url_request_info[i] != kInvalidResource);
|
| + EXPECT(PP_TRUE == ppb->IsURLRequestInfo(url_request_info[i]));
|
| + EXPECT(PP_TRUE == ppb->SetProperty(url_request_info[i],
|
| + PP_URLREQUESTPROPERTY_STREAMTOFILE,
|
| + PP_MakeBool(PP_FALSE)));
|
| + }
|
| + for (int i = 0; i < kManyResources; i++) {
|
| + PPBCore()->ReleaseResource(url_request_info[i]);
|
| + EXPECT(PP_FALSE == ppb->IsURLRequestInfo(url_request_info[i]));
|
| + }
|
| +
|
| + TEST_PASSED;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +void SetupTests() {
|
| + RegisterTest("TestCreate", TestCreate);
|
| + RegisterTest("TestIsURLRequestInfo", TestIsURLRequestInfo);
|
| + RegisterTest("TestSetProperty", TestSetProperty);
|
| + RegisterTest("TestAppendDataToBody", TestAppendDataToBody);
|
| + RegisterTest("TestAppendFileToBody", TestAppendFileToBody);
|
| + RegisterTest("TestStress", TestStress);
|
| +}
|
| +
|
| +void SetupPluginInterfaces() {
|
| + // none
|
| +}
|
|
|