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

Side by Side Diff: blimp/net/blimp_connection.cc

Issue 1909143002: Use ConnectionErrorObserver, not callbacks, for error handling. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 7 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 | « blimp/common/BUILD.gn ('k') | blimp/net/blimp_connection_unittest.cc » ('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 "blimp/net/blimp_connection.h" 5 #include "blimp/net/blimp_connection.h"
6 6
7 #include "base/callback_helpers.h" 7 #include "base/callback_helpers.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/memory/weak_ptr.h" 10 #include "base/memory/weak_ptr.h"
(...skipping 14 matching lines...) Expand all
25 class BlimpMessageSender : public BlimpMessageProcessor { 25 class BlimpMessageSender : public BlimpMessageProcessor {
26 public: 26 public:
27 explicit BlimpMessageSender(PacketWriter* writer); 27 explicit BlimpMessageSender(PacketWriter* writer);
28 ~BlimpMessageSender() override; 28 ~BlimpMessageSender() override;
29 29
30 void set_error_observer(ConnectionErrorObserver* observer) { 30 void set_error_observer(ConnectionErrorObserver* observer) {
31 error_observer_ = observer; 31 error_observer_ = observer;
32 } 32 }
33 33
34 // BlimpMessageProcessor implementation. 34 // BlimpMessageProcessor implementation.
35 // |callback| receives net::OK on write success, or receives an error code
36 // otherwise.
35 void ProcessMessage(std::unique_ptr<BlimpMessage> message, 37 void ProcessMessage(std::unique_ptr<BlimpMessage> message,
36 const net::CompletionCallback& callback) override; 38 const net::CompletionCallback& callback) override;
37 39
38 private: 40 private:
39 void OnWritePacketComplete(int result); 41 void OnWritePacketComplete(int result);
40 42
41 PacketWriter* writer_; 43 PacketWriter* writer_;
42 ConnectionErrorObserver* error_observer_ = nullptr; 44 ConnectionErrorObserver* error_observer_ = nullptr;
43 scoped_refptr<net::IOBuffer> buffer_; 45 scoped_refptr<net::IOBuffer> buffer_;
44 net::CompletionCallback pending_process_msg_callback_; 46 net::CompletionCallback pending_process_msg_callback_;
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 writer_->WritePacket( 85 writer_->WritePacket(
84 scoped_refptr<net::DrainableIOBuffer>( 86 scoped_refptr<net::DrainableIOBuffer>(
85 new net::DrainableIOBuffer(buffer_.get(), message->ByteSize())), 87 new net::DrainableIOBuffer(buffer_.get(), message->ByteSize())),
86 base::Bind(&BlimpMessageSender::OnWritePacketComplete, 88 base::Bind(&BlimpMessageSender::OnWritePacketComplete,
87 weak_factory_.GetWeakPtr())); 89 weak_factory_.GetWeakPtr()));
88 } 90 }
89 91
90 void BlimpMessageSender::OnWritePacketComplete(int result) { 92 void BlimpMessageSender::OnWritePacketComplete(int result) {
91 DVLOG(2) << "OnWritePacketComplete, result=" << result; 93 DVLOG(2) << "OnWritePacketComplete, result=" << result;
92 DCHECK_NE(net::ERR_IO_PENDING, result); 94 DCHECK_NE(net::ERR_IO_PENDING, result);
93 base::ResetAndReturn(&pending_process_msg_callback_).Run(result); 95
96 // Create a stack-local copy of |pending_process_msg_callback_|, in case an
97 // observer deletes |this|.
98 net::CompletionCallback process_callback =
99 base::ResetAndReturn(&pending_process_msg_callback_);
100
94 if (result != net::OK) { 101 if (result != net::OK) {
95 error_observer_->OnConnectionError(result); 102 error_observer_->OnConnectionError(result);
96 } 103 }
104
105 process_callback.Run(result);
97 } 106 }
98 107
99 BlimpConnection::BlimpConnection(std::unique_ptr<PacketReader> reader, 108 BlimpConnection::BlimpConnection(std::unique_ptr<PacketReader> reader,
100 std::unique_ptr<PacketWriter> writer) 109 std::unique_ptr<PacketWriter> writer)
101 : reader_(std::move(reader)), 110 : reader_(std::move(reader)),
102 message_pump_(new BlimpMessagePump(reader_.get())), 111 message_pump_(new BlimpMessagePump(reader_.get())),
103 writer_(std::move(writer)), 112 writer_(std::move(writer)),
104 outgoing_msg_processor_(new BlimpMessageSender(writer_.get())) { 113 outgoing_msg_processor_(new BlimpMessageSender(writer_.get())) {
105 DCHECK(writer_); 114 DCHECK(writer_);
115 DCHECK(reader_);
106 116
107 // Observe the connection errors received by any of this connection's network
108 // objects.
109 message_pump_->set_error_observer(this); 117 message_pump_->set_error_observer(this);
110 outgoing_msg_processor_->set_error_observer(this); 118 outgoing_msg_processor_->set_error_observer(this);
111 } 119 }
112 120
113 BlimpConnection::BlimpConnection() {} 121 BlimpConnection::BlimpConnection() {}
114 122
115 BlimpConnection::~BlimpConnection() { 123 BlimpConnection::~BlimpConnection() {
116 VLOG(1) << "BlimpConnection destroyed."; 124 VLOG(1) << "BlimpConnection destroyed.";
117 } 125 }
118 126
(...skipping 18 matching lines...) Expand all
137 145
138 void BlimpConnection::OnConnectionError(int error) { 146 void BlimpConnection::OnConnectionError(int error) {
139 VLOG(1) << "OnConnectionError, error=" << error; 147 VLOG(1) << "OnConnectionError, error=" << error;
140 148
141 // Propagate the error to all observers. 149 // Propagate the error to all observers.
142 FOR_EACH_OBSERVER(ConnectionErrorObserver, error_observers_, 150 FOR_EACH_OBSERVER(ConnectionErrorObserver, error_observers_,
143 OnConnectionError(error)); 151 OnConnectionError(error));
144 } 152 }
145 153
146 } // namespace blimp 154 } // namespace blimp
OLDNEW
« no previous file with comments | « blimp/common/BUILD.gn ('k') | blimp/net/blimp_connection_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698