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

Side by Side Diff: ppapi/shared_impl/resource_tracker_unittest.cc

Issue 19492014: PPAPI: Purposely leak ProxyLock, fix shutdown race (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove static initializer Created 7 years, 3 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/shared_impl/proxy_lock.cc ('k') | ppapi/shared_impl/test_globals.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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "testing/gtest/include/gtest/gtest.h" 5 #include "testing/gtest/include/gtest/gtest.h"
6 6
7 #include "base/compiler_specific.h" 7 #include "base/compiler_specific.h"
8 #include "ppapi/shared_impl/proxy_lock.h"
8 #include "ppapi/shared_impl/resource.h" 9 #include "ppapi/shared_impl/resource.h"
9 #include "ppapi/shared_impl/resource_tracker.h" 10 #include "ppapi/shared_impl/resource_tracker.h"
10 #include "ppapi/shared_impl/test_globals.h" 11 #include "ppapi/shared_impl/test_globals.h"
11 12
12 namespace ppapi { 13 namespace ppapi {
13 14
14 namespace { 15 namespace {
15 16
16 int mock_resource_alive_count = 0; 17 int mock_resource_alive_count = 0;
17 int last_plugin_ref_was_deleted_count = 0; 18 int last_plugin_ref_was_deleted_count = 0;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 ResourceTracker& resource_tracker() { return *globals_.GetResourceTracker(); } 53 ResourceTracker& resource_tracker() { return *globals_.GetResourceTracker(); }
53 54
54 private: 55 private:
55 TestGlobals globals_; 56 TestGlobals globals_;
56 }; 57 };
57 58
58 // Test that LastPluginRefWasDeleted is called when the last plugin ref was 59 // Test that LastPluginRefWasDeleted is called when the last plugin ref was
59 // deleted but the object lives on. 60 // deleted but the object lives on.
60 TEST_F(ResourceTrackerTest, LastPluginRef) { 61 TEST_F(ResourceTrackerTest, LastPluginRef) {
61 PP_Instance instance = 0x1234567; 62 PP_Instance instance = 0x1234567;
63 ProxyAutoLock lock;
62 resource_tracker().DidCreateInstance(instance); 64 resource_tracker().DidCreateInstance(instance);
63 65
64 scoped_refptr<MyMockResource> resource(new MyMockResource(instance)); 66 scoped_refptr<MyMockResource> resource(new MyMockResource(instance));
65 PP_Resource pp_resource = resource->GetReference(); 67 PP_Resource pp_resource = resource->GetReference();
66 EXPECT_TRUE(resource_tracker().GetResource(pp_resource)); 68 EXPECT_TRUE(resource_tracker().GetResource(pp_resource));
67 69
68 // Releasing it should keep the object (because we have a ref) but fire the 70 // Releasing it should keep the object (because we have a ref) but fire the
69 // "last plugin ref" message. 71 // "last plugin ref" message.
70 resource_tracker().ReleaseResource(pp_resource); 72 resource_tracker().ReleaseResource(pp_resource);
71 EXPECT_EQ(1, last_plugin_ref_was_deleted_count); 73 EXPECT_EQ(1, last_plugin_ref_was_deleted_count);
72 EXPECT_EQ(1, mock_resource_alive_count); 74 EXPECT_EQ(1, mock_resource_alive_count);
73 75
74 resource_tracker().DidDeleteInstance(instance); 76 resource_tracker().DidDeleteInstance(instance);
75 resource = NULL; 77 resource = NULL;
76 EXPECT_FALSE(resource_tracker().GetResource(pp_resource)); 78 EXPECT_FALSE(resource_tracker().GetResource(pp_resource));
77 } 79 }
78 80
79 // Tests when the plugin is holding a ref to a resource when the instance is 81 // Tests when the plugin is holding a ref to a resource when the instance is
80 // deleted. 82 // deleted.
81 TEST_F(ResourceTrackerTest, InstanceDeletedWithPluginRef) { 83 TEST_F(ResourceTrackerTest, InstanceDeletedWithPluginRef) {
82 // Make a resource with one ref held by the plugin, and delete the instance. 84 // Make a resource with one ref held by the plugin, and delete the instance.
83 PP_Instance instance = 0x2345678; 85 PP_Instance instance = 0x2345678;
86 ProxyAutoLock lock;
84 resource_tracker().DidCreateInstance(instance); 87 resource_tracker().DidCreateInstance(instance);
85 MyMockResource* resource = new MyMockResource(instance); 88 MyMockResource* resource = new MyMockResource(instance);
86 resource->GetReference(); 89 resource->GetReference();
87 EXPECT_EQ(1, mock_resource_alive_count); 90 EXPECT_EQ(1, mock_resource_alive_count);
88 resource_tracker().DidDeleteInstance(instance); 91 resource_tracker().DidDeleteInstance(instance);
89 92
90 // The resource should have been deleted, and before it was, it should have 93 // The resource should have been deleted, and before it was, it should have
91 // received a "last plugin ref was deleted" notification. 94 // received a "last plugin ref was deleted" notification.
92 EXPECT_EQ(0, mock_resource_alive_count); 95 EXPECT_EQ(0, mock_resource_alive_count);
93 EXPECT_EQ(1, last_plugin_ref_was_deleted_count); 96 EXPECT_EQ(1, last_plugin_ref_was_deleted_count);
94 EXPECT_EQ(0, instance_was_deleted_count); 97 EXPECT_EQ(0, instance_was_deleted_count);
95 } 98 }
96 99
97 // Test when the plugin and the internal implementation (via scoped_refptr) is 100 // Test when the plugin and the internal implementation (via scoped_refptr) is
98 // holding a ref to a resource when the instance is deleted. 101 // holding a ref to a resource when the instance is deleted.
99 TEST_F(ResourceTrackerTest, InstanceDeletedWithBothRefed) { 102 TEST_F(ResourceTrackerTest, InstanceDeletedWithBothRefed) {
100 // Create a new instance. 103 // Create a new instance.
101 PP_Instance instance = 0x3456789; 104 PP_Instance instance = 0x3456789;
105 ProxyAutoLock lock;
102 106
103 // Make a resource with one ref held by the plugin and one ref held by us 107 // Make a resource with one ref held by the plugin and one ref held by us
104 // (outlives the plugin), and delete the instance. 108 // (outlives the plugin), and delete the instance.
105 resource_tracker().DidCreateInstance(instance); 109 resource_tracker().DidCreateInstance(instance);
106 scoped_refptr<MyMockResource> resource = new MyMockResource(instance); 110 scoped_refptr<MyMockResource> resource = new MyMockResource(instance);
107 resource->GetReference(); 111 resource->GetReference();
108 EXPECT_EQ(1, mock_resource_alive_count); 112 EXPECT_EQ(1, mock_resource_alive_count);
109 resource_tracker().DidDeleteInstance(instance); 113 resource_tracker().DidDeleteInstance(instance);
110 114
111 // The resource should NOT have been deleted, and it should have received both 115 // The resource should NOT have been deleted, and it should have received both
112 // a "last plugin ref was deleted" and a "instance was deleted" notification. 116 // a "last plugin ref was deleted" and a "instance was deleted" notification.
113 EXPECT_EQ(1, mock_resource_alive_count); 117 EXPECT_EQ(1, mock_resource_alive_count);
114 EXPECT_EQ(1, last_plugin_ref_was_deleted_count); 118 EXPECT_EQ(1, last_plugin_ref_was_deleted_count);
115 EXPECT_EQ(1, instance_was_deleted_count); 119 EXPECT_EQ(1, instance_was_deleted_count);
116 EXPECT_EQ(0, resource->pp_instance()); 120 EXPECT_EQ(0, resource->pp_instance());
117 121
118 resource = NULL; 122 resource = NULL;
119 EXPECT_EQ(0, mock_resource_alive_count); 123 EXPECT_EQ(0, mock_resource_alive_count);
120 } 124 }
121 125
122 } // namespace ppapi 126 } // namespace ppapi
OLDNEW
« no previous file with comments | « ppapi/shared_impl/proxy_lock.cc ('k') | ppapi/shared_impl/test_globals.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698