| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "chrome/browser/renderer_host/render_widget_helper.h" | 5 #include "chrome/browser/renderer_host/render_widget_helper.h" |
| 6 | 6 |
| 7 #include "base/thread.h" | 7 #include "base/thread.h" |
| 8 #include "chrome/browser/browser_process.h" | 8 #include "chrome/browser/browser_process.h" |
| 9 #include "chrome/browser/renderer_host/render_process_host.h" | 9 #include "chrome/browser/renderer_host/render_process_host.h" |
| 10 #include "chrome/browser/renderer_host/resource_dispatcher_host.h" | 10 #include "chrome/browser/renderer_host/resource_dispatcher_host.h" |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 256 const std::map<TransportDIB::Id, int>::iterator | 256 const std::map<TransportDIB::Id, int>::iterator |
| 257 i = allocated_dibs_.find(dib_id); | 257 i = allocated_dibs_.find(dib_id); |
| 258 if (i == allocated_dibs_.end()) | 258 if (i == allocated_dibs_.end()) |
| 259 return NULL; | 259 return NULL; |
| 260 | 260 |
| 261 base::FileDescriptor fd(dup(i->second), true); | 261 base::FileDescriptor fd(dup(i->second), true); |
| 262 return TransportDIB::Map(fd); | 262 return TransportDIB::Map(fd); |
| 263 } | 263 } |
| 264 | 264 |
| 265 void RenderWidgetHelper::AllocTransportDIB( | 265 void RenderWidgetHelper::AllocTransportDIB( |
| 266 size_t size, IPC::Maybe<TransportDIB::Handle>* result) { | 266 size_t size, TransportDIB::Handle* result) { |
| 267 base::SharedMemory* shared_memory = new base::SharedMemory(); | 267 base::SharedMemory* shared_memory = new base::SharedMemory(); |
| 268 if (!shared_memory->Create(L"", false /* read write */, | 268 if (!shared_memory->Create(L"", false /* read write */, |
| 269 false /* do not open existing */, size)) { | 269 false /* do not open existing */, size)) { |
| 270 result->valid = false; | 270 result->fd = -1; |
| 271 result->auto_close = false; |
| 271 delete shared_memory; | 272 delete shared_memory; |
| 272 return; | 273 return; |
| 273 } | 274 } |
| 274 | 275 |
| 275 result->valid = true; | 276 shared_memory->GiveToProcess(0 /* pid, not needed */, result); |
| 276 shared_memory->GiveToProcess(0 /* pid, not needed */, &result->value); | |
| 277 | 277 |
| 278 // Keep a copy of the file descriptor around | 278 // Keep a copy of the file descriptor around |
| 279 AutoLock locked(allocated_dibs_lock_); | 279 AutoLock locked(allocated_dibs_lock_); |
| 280 allocated_dibs_[shared_memory->id()] = dup(result->value.fd); | 280 allocated_dibs_[shared_memory->id()] = dup(result->fd); |
| 281 } | 281 } |
| 282 | 282 |
| 283 void RenderWidgetHelper::FreeTransportDIB(TransportDIB::Id dib_id) { | 283 void RenderWidgetHelper::FreeTransportDIB(TransportDIB::Id dib_id) { |
| 284 AutoLock locked(allocated_dibs_lock_); | 284 AutoLock locked(allocated_dibs_lock_); |
| 285 | 285 |
| 286 const std::map<TransportDIB::Id, int>::iterator | 286 const std::map<TransportDIB::Id, int>::iterator |
| 287 i = allocated_dibs_.find(dib_id); | 287 i = allocated_dibs_.find(dib_id); |
| 288 | 288 |
| 289 if (i != allocated_dibs_.end()) { | 289 if (i != allocated_dibs_.end()) { |
| 290 close(i->second); | 290 close(i->second); |
| 291 allocated_dibs_.erase(i); | 291 allocated_dibs_.erase(i); |
| 292 } else { | 292 } else { |
| 293 DLOG(WARNING) << "Renderer asked us to free unknown transport DIB"; | 293 DLOG(WARNING) << "Renderer asked us to free unknown transport DIB"; |
| 294 } | 294 } |
| 295 } | 295 } |
| 296 | 296 |
| 297 void RenderWidgetHelper::ClearAllocatedDIBs() { | 297 void RenderWidgetHelper::ClearAllocatedDIBs() { |
| 298 for (std::map<TransportDIB::Id, int>::iterator | 298 for (std::map<TransportDIB::Id, int>::iterator |
| 299 i = allocated_dibs_.begin(); i != allocated_dibs_.end(); ++i) { | 299 i = allocated_dibs_.begin(); i != allocated_dibs_.end(); ++i) { |
| 300 close(i->second); | 300 close(i->second); |
| 301 } | 301 } |
| 302 | 302 |
| 303 allocated_dibs_.clear(); | 303 allocated_dibs_.clear(); |
| 304 } | 304 } |
| 305 #endif | 305 #endif |
| OLD | NEW |