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

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

Issue 6981001: Make the Pepper proxy support in-process font rendering. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 7 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_dispatcher.cc ('k') | ppapi/proxy/ppapi_messages.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 "ppapi/proxy/plugin_resource_tracker.h" 5 #include "ppapi/proxy/plugin_resource_tracker.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/memory/singleton.h" 8 #include "base/memory/singleton.h"
9 #include "ppapi/proxy/plugin_dispatcher.h" 9 #include "ppapi/proxy/plugin_dispatcher.h"
10 #include "ppapi/proxy/ppapi_messages.h" 10 #include "ppapi/proxy/ppapi_messages.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 PluginResource* PluginResourceTracker::GetResourceObject( 83 PluginResource* PluginResourceTracker::GetResourceObject(
84 PP_Resource pp_resource) { 84 PP_Resource pp_resource) {
85 ResourceMap::iterator found = resource_map_.find(pp_resource); 85 ResourceMap::iterator found = resource_map_.find(pp_resource);
86 if (found == resource_map_.end()) 86 if (found == resource_map_.end())
87 return NULL; 87 return NULL;
88 return found->second.resource.get(); 88 return found->second.resource.get();
89 } 89 }
90 90
91 PP_Resource PluginResourceTracker::AddResource( 91 PP_Resource PluginResourceTracker::AddResource(
92 linked_ptr<PluginResource> object) { 92 linked_ptr<PluginResource> object) {
93 if (object->host_resource().is_null()) {
94 // Prevent adding null resources or GetResourceObject(0) will return a
95 // valid pointer!
96 NOTREACHED();
97 return 0;
98 }
99
100 PP_Resource plugin_resource = ++last_resource_id_; 93 PP_Resource plugin_resource = ++last_resource_id_;
101 DCHECK(resource_map_.find(plugin_resource) == resource_map_.end()); 94 DCHECK(resource_map_.find(plugin_resource) == resource_map_.end());
102 resource_map_[plugin_resource] = ResourceInfo(1, object); 95 resource_map_[plugin_resource] = ResourceInfo(1, object);
103 host_resource_map_[object->host_resource()] = plugin_resource; 96 if (!object->host_resource().is_null()) {
97 // The host resource ID will be 0 for resources that only exist in the
98 // plugin process. Don't add those to the list.
99 host_resource_map_[object->host_resource()] = plugin_resource;
100 }
104 return plugin_resource; 101 return plugin_resource;
105 } 102 }
106 103
107 void PluginResourceTracker::AddRefResource(PP_Resource resource) { 104 void PluginResourceTracker::AddRefResource(PP_Resource resource) {
108 ResourceMap::iterator found = resource_map_.find(resource); 105 ResourceMap::iterator found = resource_map_.find(resource);
109 if (found == resource_map_.end()) { 106 if (found == resource_map_.end()) {
110 NOTREACHED(); 107 NOTREACHED();
111 return; 108 return;
112 } 109 }
113 found->second.ref_count++; 110 found->second.ref_count++;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
150 return; 147 return;
151 found->second.ref_count--; 148 found->second.ref_count--;
152 if (found->second.ref_count == 0) { 149 if (found->second.ref_count == 0) {
153 // Keep a reference while removing in case the destructor ends up 150 // Keep a reference while removing in case the destructor ends up
154 // re-entering. That way, when the destructor is called, it's out of the 151 // re-entering. That way, when the destructor is called, it's out of the
155 // maps. 152 // maps.
156 linked_ptr<PluginResource> plugin_resource = found->second.resource; 153 linked_ptr<PluginResource> plugin_resource = found->second.resource;
157 PluginDispatcher* dispatcher = 154 PluginDispatcher* dispatcher =
158 PluginDispatcher::GetForInstance(plugin_resource->instance()); 155 PluginDispatcher::GetForInstance(plugin_resource->instance());
159 HostResource host_resource = plugin_resource->host_resource(); 156 HostResource host_resource = plugin_resource->host_resource();
160 host_resource_map_.erase(host_resource); 157 if (!host_resource.is_null())
158 host_resource_map_.erase(host_resource);
161 resource_map_.erase(found); 159 resource_map_.erase(found);
162 plugin_resource.reset(); 160 plugin_resource.reset();
163 161
164 if (notify_browser_on_release) { 162 if (notify_browser_on_release) {
165 if (dispatcher) { 163 if (dispatcher) {
166 dispatcher->Send(new PpapiHostMsg_PPBCore_ReleaseResource( 164 dispatcher->Send(new PpapiHostMsg_PPBCore_ReleaseResource(
167 INTERFACE_ID_PPB_CORE, host_resource)); 165 INTERFACE_ID_PPB_CORE, host_resource));
168 } else { 166 } else {
169 NOTREACHED(); 167 NOTREACHED();
170 } 168 }
171 } 169 }
172 } 170 }
173 } 171 }
174 172
175 } // namespace proxy 173 } // namespace proxy
176 } // namespace pp 174 } // namespace pp
OLDNEW
« no previous file with comments | « ppapi/proxy/plugin_dispatcher.cc ('k') | ppapi/proxy/ppapi_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698