Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(270)

Side by Side Diff: webkit/glue/plugins/resource_tracker_unittest.cc

Issue 5685002: Make it possible to write simple unit tests for the pepper implementation. Th... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
Property Changes:
Added: svn:eol-style
+ LF
OLDNEW
(Empty)
1 // Copyright (c) 2010 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 "webkit/glue/plugins/ppapi_unittest.h"
6
7 #include "webkit/glue/plugins/pepper_resource_tracker.h"
8 #include "webkit/glue/plugins/mock_resource.h"
9
10 namespace pepper {
11
12 namespace {
13
14 class TrackedMockResource : public MockResource {
15 public:
16 static int tracked_objects_alive;
17
18 TrackedMockResource(PluginModule* module) : MockResource(module) {
19 tracked_objects_alive++;
20 }
21 ~TrackedMockResource() {
22 tracked_objects_alive--;
23 }
24 };
25
26 int TrackedMockResource::tracked_objects_alive = 0;
27
28 } // namespace
29
30 class ResourceTrackerTest : public PpapiUnittest {
31 public:
32 ResourceTrackerTest() {
33 }
34
35 virtual void SetUp() {
36 PpapiUnittest::SetUp();
37 ResourceTracker::SetSingletonOverride(&tracker_);
38 }
39 virtual void TearDown() {
40 ResourceTracker::ClearSingletonOverride();
41 PpapiUnittest::TearDown();
42 }
43
44 ResourceTracker& tracker() { return tracker_; }
45
46 private:
47 ResourceTracker tracker_;
48 };
49
50 TEST_F(ResourceTrackerTest, Ref) {
51 ASSERT_EQ(0, TrackedMockResource::tracked_objects_alive);
52 EXPECT_EQ(0, tracker().GetLiveObjectsForModule(module()));
53 {
54 scoped_refptr<TrackedMockResource> new_resource(
55 new TrackedMockResource(module()));
56 ASSERT_EQ(1, TrackedMockResource::tracked_objects_alive);
57
58 // Since we haven't gotten a PP_Resource, it's not associated with the
59 // module.
60 EXPECT_EQ(0, tracker().GetLiveObjectsForModule(module()));
61 }
62 ASSERT_EQ(0, TrackedMockResource::tracked_objects_alive);
63
64 // Make a new resource and get it as a PP_Resource.
65 PP_Resource resource_id = 0;
66 {
67 scoped_refptr<TrackedMockResource> new_resource(
68 new TrackedMockResource(module()));
69 ASSERT_EQ(1, TrackedMockResource::tracked_objects_alive);
70 resource_id = new_resource->GetReference();
71 EXPECT_EQ(1, tracker().GetLiveObjectsForModule(module()));
72
73 // Resource IDs should be consistent.
74 PP_Resource resource_id_2 = new_resource->GetReference();
75 ASSERT_EQ(resource_id, resource_id_2);
76 }
77
78 // This time it should not have been deleted since the PP_Resource carries
79 // a ref.
80 ASSERT_EQ(1, TrackedMockResource::tracked_objects_alive);
81
82 // Now we have two refs, derefing twice should delete the object.
83 tracker().UnrefResource(resource_id);
84 ASSERT_EQ(1, TrackedMockResource::tracked_objects_alive);
85 tracker().UnrefResource(resource_id);
86 ASSERT_EQ(0, TrackedMockResource::tracked_objects_alive);
87 }
88
89 TEST_F(ResourceTrackerTest, ForceDelete) {
90 // Make two resources.
91 scoped_refptr<TrackedMockResource> resource1(
92 new TrackedMockResource(module()));
93 PP_Resource pp_resource1 = resource1->GetReference();
94 scoped_refptr<TrackedMockResource> resource2(
95 new TrackedMockResource(module()));
96 PP_Resource pp_resource2 = resource2->GetReference();
97
98 // Keep an "internal" ref to only the first (the PP_Resource also holds a
99 // ref to each resource on behalf of the plugin).
100 resource2 = NULL;
101
102 ASSERT_EQ(2, TrackedMockResource::tracked_objects_alive);
103 EXPECT_EQ(2, tracker().GetLiveObjectsForModule(module()));
104
105 // Force delete both refs.
106 tracker().ForceDeletePluginResourceRefs(pp_resource1);
107 tracker().ForceDeletePluginResourceRefs(pp_resource2);
108 EXPECT_EQ(0, tracker().GetLiveObjectsForModule(module()));
109
110 // The resource we have a scoped_refptr to should still be alive.
111 ASSERT_EQ(1, TrackedMockResource::tracked_objects_alive);
112 resource1 = NULL;
113 ASSERT_EQ(0, TrackedMockResource::tracked_objects_alive);
114 }
115
116 } // namespace pepper
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698