blob: cb2663802abe4adf0d87ebc2920a541508a5a81e [file] [log] [blame]
[email protected]f24448db2011-01-27 20:40:391// 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
[email protected]3b63f8f42011-03-28 01:54:155#include "base/memory/scoped_ptr.h"
[email protected]f24448db2011-01-27 20:40:396#include "base/process.h"
[email protected]f24448db2011-01-27 20:40:397#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
[email protected]be0a84b2011-08-13 04:18:4413using ppapi::HostResource;
14
[email protected]f24448db2011-01-27 20:40:3915namespace pp {
16namespace proxy {
17
18namespace {
19
20// Object so we know when a resource has been released.
21class TrackedMockResource : public MockResource {
22 public:
23 TrackedMockResource(const HostResource& serialized)
24 : MockResource(serialized) {
25 tracked_alive_count++;
26 }
27 ~TrackedMockResource() {
28 tracked_alive_count--;
29 }
30
31 static int tracked_alive_count;
32};
33
34int TrackedMockResource::tracked_alive_count = 0;
35
36} // namespace
37
38class PluginResourceTrackerTest : public PluginProxyTest {
39 public:
40 PluginResourceTrackerTest() {}
41 ~PluginResourceTrackerTest() {}
[email protected]f24448db2011-01-27 20:40:3942};
43
44TEST_F(PluginResourceTrackerTest, PluginResourceForHostResource) {
[email protected]f24448db2011-01-27 20:40:3945 PP_Resource host_resource = 0x5678;
46
47 HostResource serialized;
[email protected]465faa22011-02-08 16:31:4648 serialized.SetHostResource(pp_instance(), host_resource);
[email protected]f24448db2011-01-27 20:40:3949
50 // When we haven't added an object, the return value should be 0.
[email protected]7f8b26b2011-08-18 15:41:0151 EXPECT_EQ(0, resource_tracker().PluginResourceForHostResource(serialized));
[email protected]f24448db2011-01-27 20:40:3952
53 EXPECT_EQ(0, TrackedMockResource::tracked_alive_count);
54 TrackedMockResource* object = new TrackedMockResource(serialized);
55 EXPECT_EQ(1, TrackedMockResource::tracked_alive_count);
[email protected]7f8b26b2011-08-18 15:41:0156 PP_Resource plugin_resource = object->GetReference();
[email protected]f24448db2011-01-27 20:40:3957
58 // Now that the object has been added, the return value should be the plugin
59 // resource ID we already got.
60 EXPECT_EQ(plugin_resource,
[email protected]7f8b26b2011-08-18 15:41:0161 resource_tracker().PluginResourceForHostResource(serialized));
[email protected]f24448db2011-01-27 20:40:3962
63 // Releasing the resource should have freed it.
[email protected]7f8b26b2011-08-18 15:41:0164 resource_tracker().ReleaseResource(plugin_resource);
[email protected]f24448db2011-01-27 20:40:3965 EXPECT_EQ(0, TrackedMockResource::tracked_alive_count);
[email protected]7f8b26b2011-08-18 15:41:0166 EXPECT_EQ(0, resource_tracker().PluginResourceForHostResource(serialized));
[email protected]f24448db2011-01-27 20:40:3967}
68
69} // namespace proxy
70} // namespace pp