1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/memory/scoped_ptr.h" 6 #include "base/process/process.h" 7 #include "ppapi/proxy/mock_resource.h" 8 #include "ppapi/proxy/plugin_dispatcher.h" 9 #include "ppapi/proxy/plugin_resource_tracker.h" 10 #include "ppapi/proxy/ppapi_messages.h" 11 #include "ppapi/proxy/ppapi_proxy_test.h" 12 #include "ppapi/shared_impl/proxy_lock.h" 13 14 namespace ppapi { 15 namespace proxy { 16 17 namespace { 18 19 // Object so we know when a resource has been released. 20 class TrackedMockResource : public MockResource { 21 public: 22 TrackedMockResource(const HostResource& serialized) 23 : MockResource(serialized) { 24 tracked_alive_count++; 25 } 26 ~TrackedMockResource() { 27 tracked_alive_count--; 28 } 29 30 static int tracked_alive_count; 31 }; 32 33 int TrackedMockResource::tracked_alive_count = 0; 34 35 } // namespace 36 37 class PluginResourceTrackerTest : public PluginProxyTest { 38 public: 39 PluginResourceTrackerTest() {} 40 ~PluginResourceTrackerTest() {} 41 }; 42 43 TEST_F(PluginResourceTrackerTest, PluginResourceForHostResource) { 44 ProxyAutoLock lock; 45 46 PP_Resource host_resource = 0x5678; 47 48 HostResource serialized; 49 serialized.SetHostResource(pp_instance(), host_resource); 50 51 // When we haven't added an object, the return value should be 0. 52 EXPECT_EQ(0, resource_tracker().PluginResourceForHostResource(serialized)); 53 54 EXPECT_EQ(0, TrackedMockResource::tracked_alive_count); 55 TrackedMockResource* object = new TrackedMockResource(serialized); 56 EXPECT_EQ(1, TrackedMockResource::tracked_alive_count); 57 PP_Resource plugin_resource = object->GetReference(); 58 59 // Now that the object has been added, the return value should be the plugin 60 // resource ID we already got. 61 EXPECT_EQ(plugin_resource, 62 resource_tracker().PluginResourceForHostResource(serialized)); 63 64 // Releasing the resource should have freed it. 65 resource_tracker().ReleaseResource(plugin_resource); 66 EXPECT_EQ(0, TrackedMockResource::tracked_alive_count); 67 EXPECT_EQ(0, resource_tracker().PluginResourceForHostResource(serialized)); 68 } 69 70 } // namespace proxy 71 } // namespace ppapi 72