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