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

Side by Side Diff: Source/core/inspector/NetworkResourcesData.cpp

Issue 23658039: [ABANDONED] Get content of resources from Blob when the downloadToFile option is enabled (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2011 Google Inc. All rights reserved. 2 * Copyright (C) 2011 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * 1. Redistributions of source code must retain the above copyright 8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * 10 *
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 , m_isContentEvicted(false) 73 , m_isContentEvicted(false)
74 , m_type(InspectorPageAgent::OtherResource) 74 , m_type(InspectorPageAgent::OtherResource)
75 , m_cachedResource(0) 75 , m_cachedResource(0)
76 { 76 {
77 } 77 }
78 78
79 void NetworkResourcesData::ResourceData::setContent(const String& content, bool base64Encoded) 79 void NetworkResourcesData::ResourceData::setContent(const String& content, bool base64Encoded)
80 { 80 {
81 ASSERT(!hasData()); 81 ASSERT(!hasData());
82 ASSERT(!hasContent()); 82 ASSERT(!hasContent());
83 ASSERT(!hasBlob());
83 m_content = content; 84 m_content = content;
84 m_base64Encoded = base64Encoded; 85 m_base64Encoded = base64Encoded;
85 } 86 }
86 87
88 void NetworkResourcesData::ResourceData::setBlob(PassRefPtr<Blob> blob, const St ring& textEncodingName)
89 {
90 ASSERT(!hasData());
91 ASSERT(!hasContent());
92 ASSERT(!hasBlob());
93 m_blob = blob;
94 m_blobTextEncodingName = textEncodingName;
95 }
96
87 static size_t contentSizeInBytes(const String& content) 97 static size_t contentSizeInBytes(const String& content)
88 { 98 {
89 return content.isNull() ? 0 : content.impl()->sizeInBytes(); 99 return content.isNull() ? 0 : content.impl()->sizeInBytes();
90 } 100 }
91 101
92 unsigned NetworkResourcesData::ResourceData::removeContent() 102 unsigned NetworkResourcesData::ResourceData::removeContent()
93 { 103 {
94 unsigned result = 0; 104 unsigned result = 0;
95 if (hasData()) { 105 if (hasData()) {
96 ASSERT(!hasContent()); 106 ASSERT(!hasContent() && !hasBlob());
97 result = m_dataBuffer->size(); 107 result = m_dataBuffer->size();
98 m_dataBuffer = nullptr; 108 m_dataBuffer = nullptr;
99 } 109 }
100 110
101 if (hasContent()) { 111 if (hasContent()) {
102 ASSERT(!hasData()); 112 ASSERT(!hasData() && !hasBlob());
103 result = contentSizeInBytes(m_content); 113 result = contentSizeInBytes(m_content);
104 m_content = String(); 114 m_content = String();
105 } 115 }
116
117 if (hasBlob()) {
118 ASSERT(!hasData() && !hasContent());
119 result = m_blob->size();
120 m_blob = nullptr;
121 m_blobTextEncodingName = String();
122 }
106 return result; 123 return result;
107 } 124 }
108 125
109 unsigned NetworkResourcesData::ResourceData::evictContent() 126 unsigned NetworkResourcesData::ResourceData::evictContent()
110 { 127 {
111 m_isContentEvicted = true; 128 m_isContentEvicted = true;
112 return removeContent(); 129 return removeContent();
113 } 130 }
114 131
115 size_t NetworkResourcesData::ResourceData::dataLength() const 132 size_t NetworkResourcesData::ResourceData::dataLength() const
116 { 133 {
117 return m_dataBuffer ? m_dataBuffer->size() : 0; 134 return m_dataBuffer ? m_dataBuffer->size() : 0;
118 } 135 }
119 136
120 void NetworkResourcesData::ResourceData::appendData(const char* data, size_t dat aLength) 137 void NetworkResourcesData::ResourceData::appendData(const char* data, size_t dat aLength)
121 { 138 {
122 ASSERT(!hasContent()); 139 ASSERT(!hasContent() && !hasBlob());
123 if (!m_dataBuffer) 140 if (!m_dataBuffer)
124 m_dataBuffer = SharedBuffer::create(data, dataLength); 141 m_dataBuffer = SharedBuffer::create(data, dataLength);
125 else 142 else
126 m_dataBuffer->append(data, dataLength); 143 m_dataBuffer->append(data, dataLength);
127 } 144 }
128 145
129 size_t NetworkResourcesData::ResourceData::decodeDataToContent() 146 size_t NetworkResourcesData::ResourceData::decodeDataToContent()
130 { 147 {
131 ASSERT(!hasContent()); 148 ASSERT(!hasContent() && !hasBlob());
132 size_t dataLength = m_dataBuffer->size(); 149 size_t dataLength = m_dataBuffer->size();
133 m_content = m_decoder->decode(m_dataBuffer->data(), m_dataBuffer->size()); 150 m_content = m_decoder->decode(m_dataBuffer->data(), m_dataBuffer->size());
134 m_content.append(m_decoder->flush()); 151 m_content.append(m_decoder->flush());
135 m_dataBuffer = nullptr; 152 m_dataBuffer = nullptr;
136 return contentSizeInBytes(m_content) - dataLength; 153 return contentSizeInBytes(m_content) - dataLength;
137 } 154 }
138 155
139 // NetworkResourcesData 156 // NetworkResourcesData
140 NetworkResourcesData::NetworkResourcesData() 157 NetworkResourcesData::NetworkResourcesData()
141 : m_contentSize(0) 158 : m_contentSize(0)
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 ResourceData* resourceData = resourceDataForRequestId(requestId); 219 ResourceData* resourceData = resourceDataForRequestId(requestId);
203 if (!resourceData) 220 if (!resourceData)
204 return; 221 return;
205 size_t dataLength = contentSizeInBytes(content); 222 size_t dataLength = contentSizeInBytes(content);
206 if (dataLength > m_maximumSingleResourceContentSize) 223 if (dataLength > m_maximumSingleResourceContentSize)
207 return; 224 return;
208 if (resourceData->isContentEvicted()) 225 if (resourceData->isContentEvicted())
209 return; 226 return;
210 if (ensureFreeSpace(dataLength) && !resourceData->isContentEvicted()) { 227 if (ensureFreeSpace(dataLength) && !resourceData->isContentEvicted()) {
211 // We can not be sure that we didn't try to save this request data while it was loading, so remove it, if any. 228 // We can not be sure that we didn't try to save this request data while it was loading, so remove it, if any.
212 if (resourceData->hasContent()) 229 if (resourceData->hasContent() || resourceData->hasBlob())
213 m_contentSize -= resourceData->removeContent(); 230 m_contentSize -= resourceData->removeContent();
214 m_requestIdsDeque.append(requestId); 231 m_requestIdsDeque.append(requestId);
215 resourceData->setContent(content, base64Encoded); 232 resourceData->setContent(content, base64Encoded);
216 m_contentSize += dataLength; 233 m_contentSize += dataLength;
217 } 234 }
218 } 235 }
219 236
237 void NetworkResourcesData::setResourceBlob(const String& requestId, PassRefPtr<B lob> prpBlob, const String& textEncodingName)
238 {
239 RefPtr<Blob> blob = prpBlob;
240 ResourceData* resourceData = resourceDataForRequestId(requestId);
241 if (!resourceData)
242 return;
243 size_t dataLength = blob->size();
244 if (dataLength > m_maximumSingleResourceContentSize)
245 return;
246 if (resourceData->isContentEvicted())
247 return;
248 if (ensureFreeSpace(dataLength) && !resourceData->isContentEvicted()) {
249 // We can not be sure that we didn't try to save this request data while it was loading, so remove it, if any.
250 if (resourceData->hasContent() || resourceData->hasBlob())
251 m_contentSize -= resourceData->removeContent();
252 m_requestIdsDeque.append(requestId);
253 resourceData->setBlob(blob, textEncodingName);
254 m_contentSize += dataLength;
255 }
256 }
257
220 void NetworkResourcesData::maybeAddResourceData(const String& requestId, const c har* data, size_t dataLength) 258 void NetworkResourcesData::maybeAddResourceData(const String& requestId, const c har* data, size_t dataLength)
221 { 259 {
222 ResourceData* resourceData = resourceDataForRequestId(requestId); 260 ResourceData* resourceData = resourceDataForRequestId(requestId);
223 if (!resourceData) 261 if (!resourceData)
224 return; 262 return;
225 if (!resourceData->decoder()) 263 if (!resourceData->decoder())
226 return; 264 return;
227 if (resourceData->dataLength() + dataLength > m_maximumSingleResourceContent Size) 265 if (resourceData->dataLength() + dataLength > m_maximumSingleResourceContent Size)
228 m_contentSize -= resourceData->evictContent(); 266 m_contentSize -= resourceData->evictContent();
229 if (resourceData->isContentEvicted()) 267 if (resourceData->isContentEvicted())
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
359 if (requestId.isNull()) 397 if (requestId.isNull())
360 return 0; 398 return 0;
361 return m_requestIdToResourceDataMap.get(requestId); 399 return m_requestIdToResourceDataMap.get(requestId);
362 } 400 }
363 401
364 void NetworkResourcesData::ensureNoDataForRequestId(const String& requestId) 402 void NetworkResourcesData::ensureNoDataForRequestId(const String& requestId)
365 { 403 {
366 ResourceData* resourceData = resourceDataForRequestId(requestId); 404 ResourceData* resourceData = resourceDataForRequestId(requestId);
367 if (!resourceData) 405 if (!resourceData)
368 return; 406 return;
369 if (resourceData->hasContent() || resourceData->hasData()) 407 if (resourceData->hasContent() || resourceData->hasData() || resourceData->h asBlob())
370 m_contentSize -= resourceData->evictContent(); 408 m_contentSize -= resourceData->evictContent();
371 delete resourceData; 409 delete resourceData;
372 m_requestIdToResourceDataMap.remove(requestId); 410 m_requestIdToResourceDataMap.remove(requestId);
373 } 411 }
374 412
375 bool NetworkResourcesData::ensureFreeSpace(size_t size) 413 bool NetworkResourcesData::ensureFreeSpace(size_t size)
376 { 414 {
377 if (size > m_maximumResourcesContentSize) 415 if (size > m_maximumResourcesContentSize)
378 return false; 416 return false;
379 417
380 while (size > m_maximumResourcesContentSize - m_contentSize) { 418 while (size > m_maximumResourcesContentSize - m_contentSize) {
381 String requestId = m_requestIdsDeque.takeFirst(); 419 String requestId = m_requestIdsDeque.takeFirst();
382 ResourceData* resourceData = resourceDataForRequestId(requestId); 420 ResourceData* resourceData = resourceDataForRequestId(requestId);
383 if (resourceData) 421 if (resourceData)
384 m_contentSize -= resourceData->evictContent(); 422 m_contentSize -= resourceData->evictContent();
385 } 423 }
386 return true; 424 return true;
387 } 425 }
388 426
389 } // namespace WebCore 427 } // namespace WebCore
390 428
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698