| // 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/proxy/plugin_resource_tracker.h" | |
| #include "base/process/process.h" | |
| #include "ppapi/proxy/mock_resource.h" | |
| #include "ppapi/proxy/plugin_dispatcher.h" | |
| #include "ppapi/proxy/ppapi_messages.h" | |
| #include "ppapi/proxy/ppapi_proxy_test.h" | |
| #include "ppapi/shared_impl/proxy_lock.h" | |
| namespace ppapi { | |
| namespace proxy { | |
| namespace { | |
| // Object so we know when a resource has been released. | |
| class TrackedMockResource : public MockResource { | |
| public: | |
| TrackedMockResource(const HostResource& serialized) | |
| : MockResource(serialized) { | |
| tracked_alive_count++; | |
| } | |
| ~TrackedMockResource() { | |
| tracked_alive_count--; | |
| } | |
| static int tracked_alive_count; | |
| }; | |
| int TrackedMockResource::tracked_alive_count = 0; | |
| } // namespace | |
| class PluginResourceTrackerTest : public PluginProxyTest { | |
| public: | |
| PluginResourceTrackerTest() {} | |
| ~PluginResourceTrackerTest() {} | |
| }; | |
| TEST_F(PluginResourceTrackerTest, PluginResourceForHostResource) { | |
| ProxyAutoLock lock; | |
| PP_Resource host_resource = 0x5678; | |
| HostResource serialized; | |
| serialized.SetHostResource(pp_instance(), host_resource); | |
| // When we haven't added an object, the return value should be 0. | |
| EXPECT_EQ(0, resource_tracker().PluginResourceForHostResource(serialized)); | |
| EXPECT_EQ(0, TrackedMockResource::tracked_alive_count); | |
| TrackedMockResource* object = new TrackedMockResource(serialized); | |
| EXPECT_EQ(1, TrackedMockResource::tracked_alive_count); | |
| PP_Resource plugin_resource = object->GetReference(); | |
| // Now that the object has been added, the return value should be the plugin | |
| // resource ID we already got. | |
| EXPECT_EQ(plugin_resource, | |
| resource_tracker().PluginResourceForHostResource(serialized)); | |
| // Releasing the resource should have freed it. | |
| resource_tracker().ReleaseResource(plugin_resource); | |
| EXPECT_EQ(0, TrackedMockResource::tracked_alive_count); | |
| EXPECT_EQ(0, resource_tracker().PluginResourceForHostResource(serialized)); | |
| } | |
| } // namespace proxy | |
| } // namespace ppapi |