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

Side by Side Diff: content/child/webblobregistry_impl.cc

Issue 897563002: Unify the three places that patch font loading for PDFium on Windows. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/child/webblobregistry_impl.h" 5 #include "content/child/webblobregistry_impl.h"
6 6
7 #include "base/files/file_path.h" 7 #include "base/files/file_path.h"
8 #include "base/guid.h" 8 #include "base/guid.h"
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/memory/shared_memory.h" 10 #include "base/memory/shared_memory.h"
11 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "content/child/child_thread.h" 12 #include "content/child/child_thread_impl.h"
13 #include "content/child/thread_safe_sender.h" 13 #include "content/child/thread_safe_sender.h"
14 #include "content/common/fileapi/webblob_messages.h" 14 #include "content/common/fileapi/webblob_messages.h"
15 #include "storage/common/data_element.h" 15 #include "storage/common/data_element.h"
16 #include "third_party/WebKit/public/platform/WebBlobData.h" 16 #include "third_party/WebKit/public/platform/WebBlobData.h"
17 #include "third_party/WebKit/public/platform/WebString.h" 17 #include "third_party/WebKit/public/platform/WebString.h"
18 #include "third_party/WebKit/public/platform/WebThreadSafeData.h" 18 #include "third_party/WebKit/public/platform/WebThreadSafeData.h"
19 #include "third_party/WebKit/public/platform/WebURL.h" 19 #include "third_party/WebKit/public/platform/WebURL.h"
20 20
21 using blink::WebBlobData; 21 using blink::WebBlobData;
22 using blink::WebString; 22 using blink::WebString;
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 } 151 }
152 152
153 void WebBlobRegistryImpl::SendOversizedDataForBlob( 153 void WebBlobRegistryImpl::SendOversizedDataForBlob(
154 const std::string& uuid_str, 154 const std::string& uuid_str,
155 const blink::WebThreadSafeData& data) { 155 const blink::WebThreadSafeData& data) {
156 DCHECK_GE(data.size(), kLargeThresholdBytes); 156 DCHECK_GE(data.size(), kLargeThresholdBytes);
157 // We handle larger amounts of data via SharedMemory instead of 157 // We handle larger amounts of data via SharedMemory instead of
158 // writing it directly to the IPC channel. 158 // writing it directly to the IPC channel.
159 size_t shared_memory_size = std::min(data.size(), kMaxSharedMemoryBytes); 159 size_t shared_memory_size = std::min(data.size(), kMaxSharedMemoryBytes);
160 scoped_ptr<base::SharedMemory> shared_memory( 160 scoped_ptr<base::SharedMemory> shared_memory(
161 ChildThread::AllocateSharedMemory(shared_memory_size, sender_.get())); 161 ChildThreadImpl::AllocateSharedMemory(shared_memory_size, sender_.get()));
162 CHECK(shared_memory.get()); 162 CHECK(shared_memory.get());
163 if (!shared_memory->Map(shared_memory_size)) 163 if (!shared_memory->Map(shared_memory_size))
164 CHECK(false); 164 CHECK(false);
165 165
166 size_t data_size = data.size(); 166 size_t data_size = data.size();
167 const char* data_ptr = data.data(); 167 const char* data_ptr = data.data();
168 while (data_size) { 168 while (data_size) {
169 size_t chunk_size = std::min(data_size, shared_memory_size); 169 size_t chunk_size = std::min(data_size, shared_memory_size);
170 memcpy(shared_memory->memory(), data_ptr, chunk_size); 170 memcpy(shared_memory->memory(), data_ptr, chunk_size);
171 sender_->Send(new BlobHostMsg_SyncAppendSharedMemory( 171 sender_->Send(new BlobHostMsg_SyncAppendSharedMemory(
172 uuid_str, shared_memory->handle(), chunk_size)); 172 uuid_str, shared_memory->handle(), chunk_size));
173 data_size -= chunk_size; 173 data_size -= chunk_size;
174 data_ptr += chunk_size; 174 data_ptr += chunk_size;
175 } 175 }
176 } 176 }
177 177
178 // ------ streams stuff ----- 178 // ------ streams stuff -----
179 179
180 void WebBlobRegistryImpl::registerStreamURL( 180 void WebBlobRegistryImpl::registerStreamURL(
181 const WebURL& url, const WebString& content_type) { 181 const WebURL& url, const WebString& content_type) {
182 DCHECK(ChildThread::current()); 182 DCHECK(ChildThreadImpl::current());
183 sender_->Send(new StreamHostMsg_StartBuilding(url, content_type.utf8())); 183 sender_->Send(new StreamHostMsg_StartBuilding(url, content_type.utf8()));
184 } 184 }
185 185
186 void WebBlobRegistryImpl::registerStreamURL( 186 void WebBlobRegistryImpl::registerStreamURL(
187 const WebURL& url, const WebURL& src_url) { 187 const WebURL& url, const WebURL& src_url) {
188 DCHECK(ChildThread::current()); 188 DCHECK(ChildThreadImpl::current());
189 sender_->Send(new StreamHostMsg_Clone(url, src_url)); 189 sender_->Send(new StreamHostMsg_Clone(url, src_url));
190 } 190 }
191 191
192 void WebBlobRegistryImpl::addDataToStream(const WebURL& url, 192 void WebBlobRegistryImpl::addDataToStream(const WebURL& url,
193 const char* data, size_t length) { 193 const char* data, size_t length) {
194 DCHECK(ChildThread::current()); 194 DCHECK(ChildThreadImpl::current());
195 if (length == 0) 195 if (length == 0)
196 return; 196 return;
197 if (length < kLargeThresholdBytes) { 197 if (length < kLargeThresholdBytes) {
198 storage::DataElement item; 198 storage::DataElement item;
199 item.SetToBytes(data, length); 199 item.SetToBytes(data, length);
200 sender_->Send(new StreamHostMsg_AppendBlobDataItem(url, item)); 200 sender_->Send(new StreamHostMsg_AppendBlobDataItem(url, item));
201 } else { 201 } else {
202 // We handle larger amounts of data via SharedMemory instead of 202 // We handle larger amounts of data via SharedMemory instead of
203 // writing it directly to the IPC channel. 203 // writing it directly to the IPC channel.
204 size_t shared_memory_size = std::min( 204 size_t shared_memory_size = std::min(
205 length, kMaxSharedMemoryBytes); 205 length, kMaxSharedMemoryBytes);
206 scoped_ptr<base::SharedMemory> shared_memory( 206 scoped_ptr<base::SharedMemory> shared_memory(
207 ChildThread::AllocateSharedMemory(shared_memory_size, 207 ChildThreadImpl::AllocateSharedMemory(shared_memory_size,
208 sender_.get())); 208 sender_.get()));
209 CHECK(shared_memory.get()); 209 CHECK(shared_memory.get());
210 if (!shared_memory->Map(shared_memory_size)) 210 if (!shared_memory->Map(shared_memory_size))
211 CHECK(false); 211 CHECK(false);
212 212
213 size_t remaining_bytes = length; 213 size_t remaining_bytes = length;
214 const char* current_ptr = data; 214 const char* current_ptr = data;
215 while (remaining_bytes) { 215 while (remaining_bytes) {
216 size_t chunk_size = std::min(remaining_bytes, shared_memory_size); 216 size_t chunk_size = std::min(remaining_bytes, shared_memory_size);
217 memcpy(shared_memory->memory(), current_ptr, chunk_size); 217 memcpy(shared_memory->memory(), current_ptr, chunk_size);
218 sender_->Send(new StreamHostMsg_SyncAppendSharedMemory( 218 sender_->Send(new StreamHostMsg_SyncAppendSharedMemory(
219 url, shared_memory->handle(), chunk_size)); 219 url, shared_memory->handle(), chunk_size));
220 remaining_bytes -= chunk_size; 220 remaining_bytes -= chunk_size;
221 current_ptr += chunk_size; 221 current_ptr += chunk_size;
222 } 222 }
223 } 223 }
224 } 224 }
225 225
226 void WebBlobRegistryImpl::flushStream(const WebURL& url) { 226 void WebBlobRegistryImpl::flushStream(const WebURL& url) {
227 DCHECK(ChildThread::current()); 227 DCHECK(ChildThreadImpl::current());
228 sender_->Send(new StreamHostMsg_Flush(url)); 228 sender_->Send(new StreamHostMsg_Flush(url));
229 } 229 }
230 230
231 void WebBlobRegistryImpl::finalizeStream(const WebURL& url) { 231 void WebBlobRegistryImpl::finalizeStream(const WebURL& url) {
232 DCHECK(ChildThread::current()); 232 DCHECK(ChildThreadImpl::current());
233 sender_->Send(new StreamHostMsg_FinishBuilding(url)); 233 sender_->Send(new StreamHostMsg_FinishBuilding(url));
234 } 234 }
235 235
236 void WebBlobRegistryImpl::abortStream(const WebURL& url) { 236 void WebBlobRegistryImpl::abortStream(const WebURL& url) {
237 DCHECK(ChildThread::current()); 237 DCHECK(ChildThreadImpl::current());
238 sender_->Send(new StreamHostMsg_AbortBuilding(url)); 238 sender_->Send(new StreamHostMsg_AbortBuilding(url));
239 } 239 }
240 240
241 void WebBlobRegistryImpl::unregisterStreamURL(const WebURL& url) { 241 void WebBlobRegistryImpl::unregisterStreamURL(const WebURL& url) {
242 DCHECK(ChildThread::current()); 242 DCHECK(ChildThreadImpl::current());
243 sender_->Send(new StreamHostMsg_Remove(url)); 243 sender_->Send(new StreamHostMsg_Remove(url));
244 } 244 }
245 245
246 } // namespace content 246 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698