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

Unified Diff: chrome/browser/extensions/chrome_url_request_util.cc

Issue 725443003: Avoid a string copy in URLRequestResourceBundleJob::GetData(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkcr
Patch Set: Switch to RefCountedMemory. Created 6 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/chrome_url_request_util.cc
diff --git a/chrome/browser/extensions/chrome_url_request_util.cc b/chrome/browser/extensions/chrome_url_request_util.cc
index c89350aa3d05dbd19cc41baa9980db278d61b5b7..b37860f2e39e84c1cb9e64da133ae1de979f5887 100644
--- a/chrome/browser/extensions/chrome_url_request_util.cc
+++ b/chrome/browser/extensions/chrome_url_request_util.cc
@@ -59,10 +59,11 @@ class URLRequestResourceBundleJob : public net::URLRequestSimpleJob {
}
// Overridden from URLRequestSimpleJob:
- int GetData(std::string* mime_type,
- std::string* charset,
- std::string* data,
- const net::CompletionCallback& callback) const override {
+ int GetRefCountedData(
+ std::string* mime_type,
+ std::string* charset,
+ scoped_refptr<base::RefCountedMemory>* data,
+ const net::CompletionCallback& callback) const override {
// TODO(vadimt): Remove ScopedTracker below once crbug.com/422489 is fixed.
tracked_objects::ScopedTracker tracking_profile(
FROM_HERE_WITH_EXPLICIT_FUNCTION(
@@ -83,7 +84,8 @@ class URLRequestResourceBundleJob : public net::URLRequestSimpleJob {
FROM_HERE_WITH_EXPLICIT_FUNCTION(
"422489 URLRequestResourceBundleJob::GetData 1.5"));
- *data = resource_as_string_piece.as_string();
+ *data = new base::RefCountedStaticMemory(resource_as_string_piece.data(),
+ resource_as_string_piece.size());
// TODO(vadimt): Remove ScopedTracker below once crbug.com/422489 is fixed.
tracked_objects::ScopedTracker tracking_profile2(
@@ -91,10 +93,9 @@ class URLRequestResourceBundleJob : public net::URLRequestSimpleJob {
"422489 URLRequestResourceBundleJob::GetData 2"));
// Add the Content-Length header now that we know the resource length.
- response_info_.headers->AddHeader(
- base::StringPrintf("%s: %s",
- net::HttpRequestHeaders::kContentLength,
- base::UintToString(data->size()).c_str()));
+ response_info_.headers->AddHeader(base::StringPrintf(
+ "%s: %s", net::HttpRequestHeaders::kContentLength,
+ base::UintToString(resource_as_string_piece.size()).c_str()));
// TODO(vadimt): Remove ScopedTracker below once crbug.com/422489 is fixed.
tracked_objects::ScopedTracker tracking_profile3(
@@ -103,17 +104,12 @@ class URLRequestResourceBundleJob : public net::URLRequestSimpleJob {
std::string* read_mime_type = new std::string;
bool posted = base::PostTaskAndReplyWithResult(
- BrowserThread::GetBlockingPool(),
- FROM_HERE,
- base::Bind(&net::GetMimeTypeFromFile,
- filename_,
+ BrowserThread::GetBlockingPool(), FROM_HERE,
+ base::Bind(&net::GetMimeTypeFromFile, filename_,
base::Unretained(read_mime_type)),
base::Bind(&URLRequestResourceBundleJob::OnMimeTypeRead,
- weak_factory_.GetWeakPtr(),
- mime_type,
- charset,
- data,
- base::Owned(read_mime_type),
+ weak_factory_.GetWeakPtr(), mime_type, charset,
+ resource_as_string_piece, base::Owned(read_mime_type),
callback));
DCHECK(posted);
@@ -129,7 +125,7 @@ class URLRequestResourceBundleJob : public net::URLRequestSimpleJob {
void OnMimeTypeRead(std::string* out_mime_type,
std::string* charset,
- std::string* data,
+ base::StringPiece data,
std::string* read_mime_type,
const net::CompletionCallback& callback,
bool read_result) {
@@ -137,7 +133,7 @@ class URLRequestResourceBundleJob : public net::URLRequestSimpleJob {
if (StartsWithASCII(*read_mime_type, "text/", false)) {
// All of our HTML files should be UTF-8 and for other resource types
// (like images), charset doesn't matter.
- DCHECK(base::IsStringUTF8(*data));
+ DCHECK(base::IsStringUTF8(data));
*charset = "utf-8";
}
int result = read_result ? net::OK : net::ERR_INVALID_URL;

Powered by Google App Engine
This is Rietveld 408576698