123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- // Copyright 2013 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_var_resource.h"
- #include <stdint.h>
- #include "ppapi/c/pp_resource.h"
- #include "ppapi/c/pp_var.h"
- #include "ppapi/cpp/instance.h"
- #include "ppapi/cpp/module.h"
- #include "ppapi/tests/testing_instance.h"
- REGISTER_TEST_CASE(VarResource);
- bool TestVarResource::Init() {
- core_interface_ = static_cast<const PPB_Core*>(
- pp::Module::Get()->GetBrowserInterface(PPB_CORE_INTERFACE));
- file_system_interface_ = static_cast<const PPB_FileSystem*>(
- pp::Module::Get()->GetBrowserInterface(PPB_FILESYSTEM_INTERFACE));
- var_interface_ = static_cast<const PPB_Var*>(
- pp::Module::Get()->GetBrowserInterface(PPB_VAR_INTERFACE));
- return core_interface_ && file_system_interface_ && var_interface_ &&
- CheckTestingInterface();
- }
- void TestVarResource::RunTests(const std::string& filter) {
- RUN_TEST(BasicResource, filter);
- RUN_TEST(InvalidAndEmpty, filter);
- RUN_TEST(WrongType, filter);
- }
- std::string TestVarResource::TestBasicResource() {
- uint32_t before_object = testing_interface_->GetLiveObjectsForInstance(
- instance_->pp_instance());
- {
- // Create an unopened FileSystem resource.
- PP_Resource file_system = file_system_interface_->Create(
- instance_->pp_instance(), PP_FILESYSTEMTYPE_LOCALTEMPORARY);
- ASSERT_NE(0, file_system);
- // Build a var to wrap the resource.
- PP_Var var = var_interface_->VarFromResource(file_system);
- ASSERT_EQ(PP_VARTYPE_RESOURCE, var.type);
- // Reading back the resource should work. This will increment the reference
- // on the resource, so we must release it afterwards.
- PP_Resource result = var_interface_->VarToResource(var);
- ASSERT_EQ(file_system, result);
- core_interface_->ReleaseResource(result);
- // Destroy the var, readback should now fail.
- var_interface_->Release(var);
- result = var_interface_->VarToResource(var);
- ASSERT_EQ(0, result);
- // Release the resource. There should be no more references to it.
- core_interface_->ReleaseResource(file_system);
- }
- // Make sure nothing leaked. This checks for both var and resource leaks.
- ASSERT_EQ(
- before_object,
- testing_interface_->GetLiveObjectsForInstance(instance_->pp_instance()));
- PASS();
- }
- std::string TestVarResource::TestInvalidAndEmpty() {
- uint32_t before_object = testing_interface_->GetLiveObjectsForInstance(
- instance_->pp_instance());
- {
- PP_Var invalid_resource;
- invalid_resource.type = PP_VARTYPE_RESOURCE;
- invalid_resource.value.as_id = 31415926;
- // Invalid resource vars should give 0 as the return value.
- PP_Resource result = var_interface_->VarToResource(invalid_resource);
- ASSERT_EQ(0, result);
- // Test writing and reading a non-existant resource.
- PP_Resource fake_resource = 27182818;
- PP_Var var = var_interface_->VarFromResource(fake_resource);
- if (testing_interface()->IsOutOfProcess()) {
- // An out-of-process plugin is expected to generate null in this case.
- ASSERT_EQ(PP_VARTYPE_NULL, var.type);
- result = var_interface_->VarToResource(var);
- ASSERT_EQ(0, result);
- } else {
- // An in-process plugin is expected to generate a valid resource var
- // (because it does not validate the resource).
- ASSERT_EQ(PP_VARTYPE_RESOURCE, var.type);
- result = var_interface_->VarToResource(var);
- ASSERT_EQ(fake_resource, result);
- var_interface_->Release(var);
- }
- // Note: Not necessary to release the resource, since it does not exist.
- // Write the resource 0; expect a valid resource var with 0.
- var = var_interface_->VarFromResource(0);
- ASSERT_EQ(PP_VARTYPE_RESOURCE, var.type);
- result = var_interface_->VarToResource(var);
- ASSERT_EQ(0, result);
- var_interface_->Release(var);
- }
- // Make sure nothing leaked. This checks for both var and resource leaks.
- ASSERT_EQ(
- before_object,
- testing_interface_->GetLiveObjectsForInstance(instance_->pp_instance()));
- PASS();
- }
- std::string TestVarResource::TestWrongType() {
- PP_Resource result = var_interface_->VarToResource(PP_MakeUndefined());
- ASSERT_EQ(0, result);
- result = var_interface_->VarToResource(PP_MakeNull());
- ASSERT_EQ(0, result);
- result = var_interface_->VarToResource(PP_MakeBool(PP_TRUE));
- ASSERT_EQ(0, result);
- result = var_interface_->VarToResource(PP_MakeInt32(42));
- ASSERT_EQ(0, result);
- result = var_interface_->VarToResource(PP_MakeDouble(1.0));
- ASSERT_EQ(0, result);
- PASS();
- }
|