plugin_resource_tracker_unittest.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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.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 13namespace ppapi { 14namespace proxy { 15 16namespace { 17 18// Object so we know when a resource has been released. 19class TrackedMockResource : public MockResource { 20 public: 21 TrackedMockResource(const HostResource& serialized) 22 : MockResource(serialized) { 23 tracked_alive_count++; 24 } 25 ~TrackedMockResource() { 26 tracked_alive_count--; 27 } 28 29 static int tracked_alive_count; 30}; 31 32int TrackedMockResource::tracked_alive_count = 0; 33 34} // namespace 35 36class PluginResourceTrackerTest : public PluginProxyTest { 37 public: 38 PluginResourceTrackerTest() {} 39 ~PluginResourceTrackerTest() {} 40}; 41 42TEST_F(PluginResourceTrackerTest, PluginResourceForHostResource) { 43 PP_Resource host_resource = 0x5678; 44 45 HostResource serialized; 46 serialized.SetHostResource(pp_instance(), host_resource); 47 48 // When we haven't added an object, the return value should be 0. 49 EXPECT_EQ(0, resource_tracker().PluginResourceForHostResource(serialized)); 50 51 EXPECT_EQ(0, TrackedMockResource::tracked_alive_count); 52 TrackedMockResource* object = new TrackedMockResource(serialized); 53 EXPECT_EQ(1, TrackedMockResource::tracked_alive_count); 54 PP_Resource plugin_resource = object->GetReference(); 55 56 // Now that the object has been added, the return value should be the plugin 57 // resource ID we already got. 58 EXPECT_EQ(plugin_resource, 59 resource_tracker().PluginResourceForHostResource(serialized)); 60 61 // Releasing the resource should have freed it. 62 resource_tracker().ReleaseResource(plugin_resource); 63 EXPECT_EQ(0, TrackedMockResource::tracked_alive_count); 64 EXPECT_EQ(0, resource_tracker().PluginResourceForHostResource(serialized)); 65} 66 67} // namespace proxy 68} // namespace ppapi 69