OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "extensions/browser/blob_holder.h" | 5 #include "extensions/browser/blob_holder.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/memory/ptr_util.h" |
11 #include "content/public/browser/blob_handle.h" | 12 #include "content/public/browser/blob_handle.h" |
12 #include "content/public/browser/browser_thread.h" | 13 #include "content/public/browser/browser_thread.h" |
13 #include "content/public/browser/render_process_host.h" | 14 #include "content/public/browser/render_process_host.h" |
14 #include "extensions/browser/bad_message.h" | 15 #include "extensions/browser/bad_message.h" |
15 | 16 |
16 namespace extensions { | 17 namespace extensions { |
17 | 18 |
18 namespace { | 19 namespace { |
19 | 20 |
20 // Address to this variable used as the user data key. | 21 // Address to this variable used as the user data key. |
21 const int kBlobHolderUserDataKey = 0; | 22 const int kBlobHolderUserDataKey = 0; |
22 } | 23 } |
23 | 24 |
24 // static | 25 // static |
25 BlobHolder* BlobHolder::FromRenderProcessHost( | 26 BlobHolder* BlobHolder::FromRenderProcessHost( |
26 content::RenderProcessHost* render_process_host) { | 27 content::RenderProcessHost* render_process_host) { |
27 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 28 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
28 DCHECK(render_process_host); | 29 DCHECK(render_process_host); |
29 BlobHolder* existing = static_cast<BlobHolder*>( | 30 BlobHolder* existing = static_cast<BlobHolder*>( |
30 render_process_host->GetUserData(&kBlobHolderUserDataKey)); | 31 render_process_host->GetUserData(&kBlobHolderUserDataKey)); |
31 | 32 |
32 if (existing) | 33 if (existing) |
33 return existing; | 34 return existing; |
34 | 35 |
35 BlobHolder* new_instance = new BlobHolder(render_process_host); | 36 BlobHolder* new_instance = new BlobHolder(render_process_host); |
36 render_process_host->SetUserData(&kBlobHolderUserDataKey, new_instance); | 37 render_process_host->SetUserData(&kBlobHolderUserDataKey, |
| 38 base::WrapUnique(new_instance)); |
37 return new_instance; | 39 return new_instance; |
38 } | 40 } |
39 | 41 |
40 BlobHolder::~BlobHolder() { | 42 BlobHolder::~BlobHolder() { |
41 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 43 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
42 } | 44 } |
43 | 45 |
44 void BlobHolder::HoldBlobReference(std::unique_ptr<content::BlobHandle> blob) { | 46 void BlobHolder::HoldBlobReference(std::unique_ptr<content::BlobHandle> blob) { |
45 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 47 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
46 DCHECK(!ContainsBlobHandle(blob.get())); | 48 DCHECK(!ContainsBlobHandle(blob.get())); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 } else { | 80 } else { |
79 DLOG(ERROR) << "Tried to release a Blob we don't have ownership to." | 81 DLOG(ERROR) << "Tried to release a Blob we don't have ownership to." |
80 << "UUID: " << *uuid_it; | 82 << "UUID: " << *uuid_it; |
81 bad_message::ReceivedBadMessage(render_process_host_, | 83 bad_message::ReceivedBadMessage(render_process_host_, |
82 bad_message::BH_BLOB_NOT_OWNED); | 84 bad_message::BH_BLOB_NOT_OWNED); |
83 } | 85 } |
84 } | 86 } |
85 } | 87 } |
86 | 88 |
87 } // namespace extensions | 89 } // namespace extensions |
OLD | NEW |