blob: 1969f4e0d9c0889c83a197e4e6ddc40d1e691c68 [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
dchengced92242016-04-07 00:00:125#include "ppapi/proxy/plugin_resource_tracker.h"
6
[email protected]15756592013-07-25 14:17:537#include "base/process/process.h"
[email protected]f24448db2011-01-27 20:40:398#include "ppapi/proxy/mock_resource.h"
9#include "ppapi/proxy/plugin_dispatcher.h"
[email protected]f24448db2011-01-27 20:40:3910#include "ppapi/proxy/ppapi_messages.h"
11#include "ppapi/proxy/ppapi_proxy_test.h"
[email protected]b73c6592013-03-30 17:08:1312#include "ppapi/shared_impl/proxy_lock.h"
[email protected]f24448db2011-01-27 20:40:3913
[email protected]4d2efd22011-08-18 21:58:0214namespace ppapi {
[email protected]f24448db2011-01-27 20:40:3915namespace proxy {
16
17namespace {
18
19// Object so we know when a resource has been released.
20class 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
33int TrackedMockResource::tracked_alive_count = 0;
34
35} // namespace
36
37class PluginResourceTrackerTest : public PluginProxyTest {
38 public:
39 PluginResourceTrackerTest() {}
40 ~PluginResourceTrackerTest() {}
[email protected]f24448db2011-01-27 20:40:3941};
42
43TEST_F(PluginResourceTrackerTest, PluginResourceForHostResource) {
[email protected]b73c6592013-03-30 17:08:1344 ProxyAutoLock lock;
45
[email protected]f24448db2011-01-27 20:40:3946 PP_Resource host_resource = 0x5678;
47
48 HostResource serialized;
[email protected]465faa22011-02-08 16:31:4649 serialized.SetHostResource(pp_instance(), host_resource);
[email protected]f24448db2011-01-27 20:40:3950
51 // When we haven't added an object, the return value should be 0.
[email protected]7f8b26b2011-08-18 15:41:0152 EXPECT_EQ(0, resource_tracker().PluginResourceForHostResource(serialized));
[email protected]f24448db2011-01-27 20:40:3953
54 EXPECT_EQ(0, TrackedMockResource::tracked_alive_count);
55 TrackedMockResource* object = new TrackedMockResource(serialized);
56 EXPECT_EQ(1, TrackedMockResource::tracked_alive_count);
[email protected]7f8b26b2011-08-18 15:41:0157 PP_Resource plugin_resource = object->GetReference();
[email protected]f24448db2011-01-27 20:40:3958
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,
[email protected]7f8b26b2011-08-18 15:41:0162 resource_tracker().PluginResourceForHostResource(serialized));
[email protected]f24448db2011-01-27 20:40:3963
64 // Releasing the resource should have freed it.
[email protected]7f8b26b2011-08-18 15:41:0165 resource_tracker().ReleaseResource(plugin_resource);
[email protected]f24448db2011-01-27 20:40:3966 EXPECT_EQ(0, TrackedMockResource::tracked_alive_count);
[email protected]7f8b26b2011-08-18 15:41:0167 EXPECT_EQ(0, resource_tracker().PluginResourceForHostResource(serialized));
[email protected]f24448db2011-01-27 20:40:3968}
69
70} // namespace proxy
[email protected]4d2efd22011-08-18 21:58:0271} // namespace ppapi