Use CompletionOnceCallback in struct WaitingForRead.
Since CompletionOnceCallback is non-copyable, therefore WaitingForRead
becomes non-copyable. This Cl adds a move constructor so that
WaitingForRead can be put in a std::map.
Bug: 807724
Change-Id: I57dce65d46626ce0c39cd3e2e738ad9d6979165c
Reviewed-on: https://chromium-review.googlesource.com/1156862
Reviewed-by: Ryan Hamilton <rch@chromium.org>
Commit-Queue: Bence Béky <bnc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#579961}
diff --git a/net/http/http_cache_writers.cc b/net/http/http_cache_writers.cc
index 1ab3fbb..2ccc30a2 100644
--- a/net/http/http_cache_writers.cc
+++ b/net/http/http_cache_writers.cc
@@ -66,7 +66,7 @@
// with the data returned from that read.
if (next_state_ != State::NONE) {
WaitingForRead read_info(buf, buf_len, callback);
- waiting_for_read_.insert(std::make_pair(transaction, read_info));
+ waiting_for_read_.insert(std::make_pair(transaction, std::move(read_info)));
return ERR_IO_PENDING;
}
@@ -305,19 +305,18 @@
HttpCache::Writers::WaitingForRead::WaitingForRead(
scoped_refptr<IOBuffer> buf,
int len,
- const CompletionCallback& consumer_callback)
+ CompletionOnceCallback consumer_callback)
: read_buf(std::move(buf)),
read_buf_len(len),
write_len(0),
- callback(consumer_callback) {
+ callback(std::move(consumer_callback)) {
DCHECK(read_buf);
DCHECK_GT(len, 0);
- DCHECK(!consumer_callback.is_null());
+ DCHECK(!callback.is_null());
}
HttpCache::Writers::WaitingForRead::~WaitingForRead() = default;
-HttpCache::Writers::WaitingForRead::WaitingForRead(const WaitingForRead&) =
- default;
+HttpCache::Writers::WaitingForRead::WaitingForRead(WaitingForRead&&) = default;
int HttpCache::Writers::DoLoop(int result) {
DCHECK_NE(State::UNSET, next_state_);
@@ -534,7 +533,8 @@
// Post task to notify transaction.
base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(it->second.callback, callback_result));
+ FROM_HERE,
+ base::BindOnce(std::move(it->second.callback), callback_result));
it = waiting_for_read_.erase(it);
diff --git a/net/http/http_cache_writers.h b/net/http/http_cache_writers.h
index 86eeed1f..f92f51c9 100644
--- a/net/http/http_cache_writers.h
+++ b/net/http/http_cache_writers.h
@@ -11,6 +11,7 @@
#include "base/memory/weak_ptr.h"
#include "net/base/completion_callback.h"
+#include "net/base/completion_once_callback.h"
#include "net/http/http_cache.h"
namespace net {
@@ -164,12 +165,12 @@
scoped_refptr<IOBuffer> read_buf;
int read_buf_len;
int write_len;
- const CompletionCallback callback;
+ CompletionOnceCallback callback;
WaitingForRead(scoped_refptr<IOBuffer> read_buf,
int len,
- const CompletionCallback& consumer_callback);
+ CompletionOnceCallback consumer_callback);
~WaitingForRead();
- WaitingForRead(const WaitingForRead&);
+ WaitingForRead(WaitingForRead&&);
};
using WaitingForReadMap = std::map<Transaction*, WaitingForRead>;