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

Side by Side Diff: remoting/base/buffered_socket_writer.cc

Issue 2386733002: Remove stl_util's deletion functions from remoting/. (Closed)
Patch Set: fix Created 4 years, 2 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
« no previous file with comments | « remoting/base/buffered_socket_writer.h ('k') | remoting/protocol/channel_multiplexer.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "remoting/base/buffered_socket_writer.h" 5 #include "remoting/base/buffered_socket_writer.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback_helpers.h" 8 #include "base/callback_helpers.h"
9 #include "base/stl_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "net/base/io_buffer.h" 10 #include "net/base/io_buffer.h"
11 #include "net/base/net_errors.h" 11 #include "net/base/net_errors.h"
12 #include "net/socket/socket.h" 12 #include "net/socket/socket.h"
13 13
14 namespace remoting { 14 namespace remoting {
15 15
16 namespace { 16 namespace {
17 17
18 int WriteNetSocket(net::Socket* socket, 18 int WriteNetSocket(net::Socket* socket,
19 const scoped_refptr<net::IOBuffer>& buf, 19 const scoped_refptr<net::IOBuffer>& buf,
(...skipping 19 matching lines...) Expand all
39 std::unique_ptr<BufferedSocketWriter> BufferedSocketWriter::CreateForSocket( 39 std::unique_ptr<BufferedSocketWriter> BufferedSocketWriter::CreateForSocket(
40 net::Socket* socket, 40 net::Socket* socket,
41 const WriteFailedCallback& write_failed_callback) { 41 const WriteFailedCallback& write_failed_callback) {
42 std::unique_ptr<BufferedSocketWriter> result(new BufferedSocketWriter()); 42 std::unique_ptr<BufferedSocketWriter> result(new BufferedSocketWriter());
43 result->Start(base::Bind(&WriteNetSocket, socket), write_failed_callback); 43 result->Start(base::Bind(&WriteNetSocket, socket), write_failed_callback);
44 return result; 44 return result;
45 } 45 }
46 46
47 BufferedSocketWriter::BufferedSocketWriter() : weak_factory_(this) {} 47 BufferedSocketWriter::BufferedSocketWriter() : weak_factory_(this) {}
48 48
49 BufferedSocketWriter::~BufferedSocketWriter() { 49 BufferedSocketWriter::~BufferedSocketWriter() {}
50 base::STLDeleteElements(&queue_);
51 }
52 50
53 void BufferedSocketWriter::Start( 51 void BufferedSocketWriter::Start(
54 const WriteCallback& write_callback, 52 const WriteCallback& write_callback,
55 const WriteFailedCallback& write_failed_callback) { 53 const WriteFailedCallback& write_failed_callback) {
56 write_callback_ = write_callback; 54 write_callback_ = write_callback;
57 write_failed_callback_ = write_failed_callback; 55 write_failed_callback_ = write_failed_callback;
58 DoWrite(); 56 DoWrite();
59 } 57 }
60 58
61 void BufferedSocketWriter::Write( 59 void BufferedSocketWriter::Write(
62 const scoped_refptr<net::IOBufferWithSize>& data, 60 const scoped_refptr<net::IOBufferWithSize>& data,
63 const base::Closure& done_task) { 61 const base::Closure& done_task) {
64 DCHECK(thread_checker_.CalledOnValidThread()); 62 DCHECK(thread_checker_.CalledOnValidThread());
65 DCHECK(data.get()); 63 DCHECK(data.get());
66 64
67 // Don't write after error. 65 // Don't write after error.
68 if (closed_) 66 if (closed_)
69 return; 67 return;
70 68
71 queue_.push_back(new PendingPacket( 69 queue_.push_back(base::MakeUnique<PendingPacket>(
72 new net::DrainableIOBuffer(data.get(), data->size()), done_task)); 70 new net::DrainableIOBuffer(data.get(), data->size()), done_task));
73 71
74 DoWrite(); 72 DoWrite();
75 } 73 }
76 74
77 void BufferedSocketWriter::DoWrite() { 75 void BufferedSocketWriter::DoWrite() {
78 DCHECK(thread_checker_.CalledOnValidThread()); 76 DCHECK(thread_checker_.CalledOnValidThread());
79 77
80 base::WeakPtr<BufferedSocketWriter> self = weak_factory_.GetWeakPtr(); 78 base::WeakPtr<BufferedSocketWriter> self = weak_factory_.GetWeakPtr();
81 while (self && !write_pending_ && !write_callback_.is_null() && 79 while (self && !write_pending_ && !write_callback_.is_null() &&
(...skipping 18 matching lines...) Expand all
100 } 98 }
101 return; 99 return;
102 } 100 }
103 101
104 DCHECK(!queue_.empty()); 102 DCHECK(!queue_.empty());
105 103
106 queue_.front()->data->DidConsume(result); 104 queue_.front()->data->DidConsume(result);
107 105
108 if (queue_.front()->data->BytesRemaining() == 0) { 106 if (queue_.front()->data->BytesRemaining() == 0) {
109 base::Closure done_task = queue_.front()->done_task; 107 base::Closure done_task = queue_.front()->done_task;
110 delete queue_.front();
111 queue_.pop_front(); 108 queue_.pop_front();
112 109
113 if (!done_task.is_null()) 110 if (!done_task.is_null())
114 done_task.Run(); 111 done_task.Run();
115 } 112 }
116 } 113 }
117 114
118 void BufferedSocketWriter::OnWritten(int result) { 115 void BufferedSocketWriter::OnWritten(int result) {
119 DCHECK(thread_checker_.CalledOnValidThread()); 116 DCHECK(thread_checker_.CalledOnValidThread());
120 DCHECK(write_pending_); 117 DCHECK(write_pending_);
121 write_pending_ = false; 118 write_pending_ = false;
122 119
123 base::WeakPtr<BufferedSocketWriter> self = weak_factory_.GetWeakPtr(); 120 base::WeakPtr<BufferedSocketWriter> self = weak_factory_.GetWeakPtr();
124 HandleWriteResult(result); 121 HandleWriteResult(result);
125 if (self) 122 if (self)
126 DoWrite(); 123 DoWrite();
127 } 124 }
128 125
129 } // namespace remoting 126 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/base/buffered_socket_writer.h ('k') | remoting/protocol/channel_multiplexer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698