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

Side by Side Diff: ppapi/proxy/plugin_var_tracker_unittest.cc

Issue 6286070: Remove all uses of the global Dispatcher Get function. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 10 months 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
« no previous file with comments | « ppapi/proxy/plugin_var_tracker.cc ('k') | ppapi/proxy/ppapi_messages_internal.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ipc/ipc_test_sink.h" 5 #include "ipc/ipc_test_sink.h"
6 #include "ppapi/proxy/plugin_var_tracker.h" 6 #include "ppapi/proxy/plugin_var_tracker.h"
7 #include "ppapi/proxy/ppapi_messages.h" 7 #include "ppapi/proxy/ppapi_messages.h"
8 #include "ppapi/proxy/ppapi_proxy_test.h" 8 #include "ppapi/proxy/ppapi_proxy_test.h"
9 9
10 namespace pp { 10 namespace pp {
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 EXPECT_EQ(str, result); 62 EXPECT_EQ(str, result);
63 result = var_tracker().GetString(MakeString(str_id2)); 63 result = var_tracker().GetString(MakeString(str_id2));
64 EXPECT_EQ(str, result); 64 EXPECT_EQ(str, result);
65 } 65 }
66 66
67 TEST_F(PluginVarTrackerTest, GetHostObject) { 67 TEST_F(PluginVarTrackerTest, GetHostObject) {
68 PP_Var host_object = MakeObject(12345); 68 PP_Var host_object = MakeObject(12345);
69 69
70 // Round-trip through the tracker to make sure the host object comes out the 70 // Round-trip through the tracker to make sure the host object comes out the
71 // other end. 71 // other end.
72 PP_Var plugin_object = var_tracker().ReceiveObjectPassRef(host_object, 72 PP_Var plugin_object = var_tracker().ReceiveObjectPassRef(
73 &sink()); 73 host_object, plugin_dispatcher());
74 PP_Var host_object2 = var_tracker().GetHostObject(plugin_object); 74 PP_Var host_object2 = var_tracker().GetHostObject(plugin_object);
75 EXPECT_EQ(PP_VARTYPE_OBJECT, host_object2.type); 75 EXPECT_EQ(PP_VARTYPE_OBJECT, host_object2.type);
76 EXPECT_EQ(host_object.value.as_id, host_object2.value.as_id); 76 EXPECT_EQ(host_object.value.as_id, host_object2.value.as_id);
77 77
78 var_tracker().Release(plugin_object); 78 var_tracker().Release(plugin_object);
79 } 79 }
80 80
81 TEST_F(PluginVarTrackerTest, ReceiveObjectPassRef) { 81 TEST_F(PluginVarTrackerTest, ReceiveObjectPassRef) {
82 PP_Var host_object = MakeObject(12345); 82 PP_Var host_object = MakeObject(12345);
83 83
84 // Receive the object, we should have one ref and no messages. 84 // Receive the object, we should have one ref and no messages.
85 PP_Var plugin_object = var_tracker().ReceiveObjectPassRef(host_object, 85 PP_Var plugin_object = var_tracker().ReceiveObjectPassRef(
86 &sink()); 86 host_object, plugin_dispatcher());
87 EXPECT_EQ(0u, sink().message_count()); 87 EXPECT_EQ(0u, sink().message_count());
88 EXPECT_EQ(1, var_tracker().GetRefCountForObject(plugin_object)); 88 EXPECT_EQ(1, var_tracker().GetRefCountForObject(plugin_object));
89 EXPECT_EQ(0, 89 EXPECT_EQ(0,
90 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_object)); 90 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_object));
91 91
92 // Receive the same object again, we should get the same plugin ID out. 92 // Receive the same object again, we should get the same plugin ID out.
93 PP_Var plugin_object2 = var_tracker().ReceiveObjectPassRef(host_object, 93 PP_Var plugin_object2 = var_tracker().ReceiveObjectPassRef(
94 &sink()); 94 host_object, plugin_dispatcher());
95 EXPECT_EQ(plugin_object.value.as_id, plugin_object2.value.as_id); 95 EXPECT_EQ(plugin_object.value.as_id, plugin_object2.value.as_id);
96 EXPECT_EQ(2, var_tracker().GetRefCountForObject(plugin_object)); 96 EXPECT_EQ(2, var_tracker().GetRefCountForObject(plugin_object));
97 EXPECT_EQ(0, 97 EXPECT_EQ(0,
98 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_object)); 98 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_object));
99 99
100 // It should have sent one message to decerment the refcount in the host. 100 // It should have sent one message to decerment the refcount in the host.
101 // This is because it only maintains one host refcount for all references 101 // This is because it only maintains one host refcount for all references
102 // in the plugin, but the host just sent the second one. 102 // in the plugin, but the host just sent the second one.
103 EXPECT_EQ(host_object.value.as_id, GetObjectIDForUniqueReleaseObject()); 103 EXPECT_EQ(host_object.value.as_id, GetObjectIDForUniqueReleaseObject());
104 sink().ClearMessages(); 104 sink().ClearMessages();
105 105
106 // Release the object, one ref at a time. The second release should free 106 // Release the object, one ref at a time. The second release should free
107 // the tracking data and send a release message to the browser. 107 // the tracking data and send a release message to the browser.
108 var_tracker().Release(plugin_object); 108 var_tracker().Release(plugin_object);
109 EXPECT_EQ(1, var_tracker().GetRefCountForObject(plugin_object)); 109 EXPECT_EQ(1, var_tracker().GetRefCountForObject(plugin_object));
110 var_tracker().Release(plugin_object); 110 var_tracker().Release(plugin_object);
111 EXPECT_EQ(-1, var_tracker().GetRefCountForObject(plugin_object)); 111 EXPECT_EQ(-1, var_tracker().GetRefCountForObject(plugin_object));
112 EXPECT_EQ(host_object.value.as_id, GetObjectIDForUniqueReleaseObject()); 112 EXPECT_EQ(host_object.value.as_id, GetObjectIDForUniqueReleaseObject());
113 } 113 }
114 114
115 // Tests freeing objects that have both refcounts and "tracked with no ref". 115 // Tests freeing objects that have both refcounts and "tracked with no ref".
116 TEST_F(PluginVarTrackerTest, FreeTrackedAndReferencedObject) { 116 TEST_F(PluginVarTrackerTest, FreeTrackedAndReferencedObject) {
117 PP_Var host_object = MakeObject(12345); 117 PP_Var host_object = MakeObject(12345);
118 118
119 // Phase one: First receive via a "pass ref", then a tracked with no ref. 119 // Phase one: First receive via a "pass ref", then a tracked with no ref.
120 PP_Var plugin_var = var_tracker().ReceiveObjectPassRef(host_object, &sink()); 120 PP_Var plugin_var = var_tracker().ReceiveObjectPassRef(
121 PP_Var plugin_var2 = 121 host_object, plugin_dispatcher());
122 var_tracker().TrackObjectWithNoReference(host_object, &sink()); 122 PP_Var plugin_var2 = var_tracker().TrackObjectWithNoReference(
123 host_object, plugin_dispatcher());
123 EXPECT_EQ(plugin_var.value.as_id, plugin_var2.value.as_id); 124 EXPECT_EQ(plugin_var.value.as_id, plugin_var2.value.as_id);
124 EXPECT_EQ(1, var_tracker().GetRefCountForObject(plugin_var)); 125 EXPECT_EQ(1, var_tracker().GetRefCountForObject(plugin_var));
125 EXPECT_EQ(1, 126 EXPECT_EQ(1,
126 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_var)); 127 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_var));
127 128
128 // Free via the refcount, this should release the object to the browser but 129 // Free via the refcount, this should release the object to the browser but
129 // maintain the tracked object. 130 // maintain the tracked object.
130 var_tracker().Release(plugin_var); 131 var_tracker().Release(plugin_var);
131 EXPECT_EQ(0, var_tracker().GetRefCountForObject(plugin_var)); 132 EXPECT_EQ(0, var_tracker().GetRefCountForObject(plugin_var));
132 EXPECT_EQ(1u, sink().message_count()); 133 EXPECT_EQ(1u, sink().message_count());
133 EXPECT_EQ(host_object.value.as_id, GetObjectIDForUniqueReleaseObject()); 134 EXPECT_EQ(host_object.value.as_id, GetObjectIDForUniqueReleaseObject());
134 135
135 // Now free via the tracked object, this should free it. 136 // Now free via the tracked object, this should free it.
136 var_tracker().StopTrackingObjectWithNoReference(plugin_var); 137 var_tracker().StopTrackingObjectWithNoReference(plugin_var);
137 EXPECT_EQ(-1, var_tracker().GetRefCountForObject(plugin_var)); 138 EXPECT_EQ(-1, var_tracker().GetRefCountForObject(plugin_var));
138 139
139 // Phase two: Receive via a tracked, then get an addref. 140 // Phase two: Receive via a tracked, then get an addref.
140 sink().ClearMessages(); 141 sink().ClearMessages();
141 plugin_var = var_tracker().TrackObjectWithNoReference(host_object, &sink()); 142 plugin_var = var_tracker().TrackObjectWithNoReference(
142 plugin_var2 = var_tracker().ReceiveObjectPassRef(host_object, &sink()); 143 host_object, plugin_dispatcher());
144 plugin_var2 = var_tracker().ReceiveObjectPassRef(
145 host_object, plugin_dispatcher());
143 EXPECT_EQ(plugin_var.value.as_id, plugin_var2.value.as_id); 146 EXPECT_EQ(plugin_var.value.as_id, plugin_var2.value.as_id);
144 EXPECT_EQ(1, var_tracker().GetRefCountForObject(plugin_var)); 147 EXPECT_EQ(1, var_tracker().GetRefCountForObject(plugin_var));
145 EXPECT_EQ(1, 148 EXPECT_EQ(1,
146 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_var)); 149 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_var));
147 150
148 // Free via the tracked object, this should have no effect. 151 // Free via the tracked object, this should have no effect.
149 var_tracker().StopTrackingObjectWithNoReference(plugin_var); 152 var_tracker().StopTrackingObjectWithNoReference(plugin_var);
150 EXPECT_EQ(0, 153 EXPECT_EQ(0,
151 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_var)); 154 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_var));
152 EXPECT_EQ(0u, sink().message_count()); 155 EXPECT_EQ(0u, sink().message_count());
153 156
154 // Now free via the refcount, this should delete it. 157 // Now free via the refcount, this should delete it.
155 var_tracker().Release(plugin_var); 158 var_tracker().Release(plugin_var);
156 EXPECT_EQ(-1, var_tracker().GetRefCountForObject(plugin_var)); 159 EXPECT_EQ(-1, var_tracker().GetRefCountForObject(plugin_var));
157 EXPECT_EQ(host_object.value.as_id, GetObjectIDForUniqueReleaseObject()); 160 EXPECT_EQ(host_object.value.as_id, GetObjectIDForUniqueReleaseObject());
158 } 161 }
159 162
160 TEST_F(PluginVarTrackerTest, RecursiveTrackWithNoRef) { 163 TEST_F(PluginVarTrackerTest, RecursiveTrackWithNoRef) {
161 PP_Var host_object = MakeObject(12345); 164 PP_Var host_object = MakeObject(12345);
162 165
163 // Receive a tracked object twice. 166 // Receive a tracked object twice.
164 PP_Var plugin_var = var_tracker().TrackObjectWithNoReference( 167 PP_Var plugin_var = var_tracker().TrackObjectWithNoReference(
165 host_object, &sink()); 168 host_object, plugin_dispatcher());
166 EXPECT_EQ(1, 169 EXPECT_EQ(1,
167 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_var)); 170 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_var));
168 PP_Var plugin_var2 = var_tracker().TrackObjectWithNoReference(host_object, 171 PP_Var plugin_var2 = var_tracker().TrackObjectWithNoReference(
169 &sink()); 172 host_object, plugin_dispatcher());
170 EXPECT_EQ(plugin_var.value.as_id, plugin_var2.value.as_id); 173 EXPECT_EQ(plugin_var.value.as_id, plugin_var2.value.as_id);
171 EXPECT_EQ(0, var_tracker().GetRefCountForObject(plugin_var)); 174 EXPECT_EQ(0, var_tracker().GetRefCountForObject(plugin_var));
172 EXPECT_EQ(2, 175 EXPECT_EQ(2,
173 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_var)); 176 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_var));
174 177
175 // Now release those tracked items, the reference should be freed. 178 // Now release those tracked items, the reference should be freed.
176 var_tracker().StopTrackingObjectWithNoReference(plugin_var); 179 var_tracker().StopTrackingObjectWithNoReference(plugin_var);
177 EXPECT_EQ(1, 180 EXPECT_EQ(1,
178 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_var)); 181 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_var));
179 var_tracker().StopTrackingObjectWithNoReference(plugin_var); 182 var_tracker().StopTrackingObjectWithNoReference(plugin_var);
180 EXPECT_EQ(-1, 183 EXPECT_EQ(-1,
181 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_var)); 184 var_tracker().GetTrackedWithNoReferenceCountForObject(plugin_var));
182 } 185 }
183 186
184 } // namespace proxy 187 } // namespace proxy
185 } // namespace pp 188 } // namespace pp
OLDNEW
« no previous file with comments | « ppapi/proxy/plugin_var_tracker.cc ('k') | ppapi/proxy/ppapi_messages_internal.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698