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

Side by Side Diff: mojo/public/cpp/bindings/lib/interface_endpoint_client.cc

Issue 2318793002: Mojo C++ bindings: support disconnect with a reason. (Closed)
Patch Set: . Created 4 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 // 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 "mojo/public/cpp/bindings/interface_endpoint_client.h" 5 #include "mojo/public/cpp/bindings/interface_endpoint_client.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 if (encountered_error_) 274 if (encountered_error_)
275 return; 275 return;
276 encountered_error_ = true; 276 encountered_error_ = true;
277 277
278 // The callbacks may hold on to resources. There is no need to keep them any 278 // The callbacks may hold on to resources. There is no need to keep them any
279 // longer. 279 // longer.
280 async_responders_.clear(); 280 async_responders_.clear();
281 281
282 control_message_proxy_.OnConnectionError(); 282 control_message_proxy_.OnConnectionError();
283 283
284 if (!error_handler_.is_null()) 284 if (!error_handler_.is_null()) {
285 error_handler_.Run(); 285 error_handler_.Run();
286 } else if (!error_with_reason_handler_.is_null()) {
287 // Make a copy on the stack. If we directly pass a reference to a member of
288 // |control_message_handler_|, that reference will be invalidated as soon as
289 // the user destroys the interface endpoint.
290 std::string description = control_message_handler_.disconnect_description();
291 error_with_reason_handler_.Run(
292 control_message_handler_.disconnect_custom_reason(), description);
293 }
286 } 294 }
287 295
288 bool InterfaceEndpointClient::HandleValidatedMessage(Message* message) { 296 bool InterfaceEndpointClient::HandleValidatedMessage(Message* message) {
289 DCHECK_EQ(handle_.id(), message->interface_id()); 297 DCHECK_EQ(handle_.id(), message->interface_id());
290 DCHECK(!encountered_error_); 298 DCHECK(!encountered_error_);
291 299
292 if (message->has_flag(Message::kFlagExpectsResponse)) { 300 if (message->has_flag(Message::kFlagExpectsResponse)) {
293 MessageReceiverWithStatus* responder = 301 MessageReceiverWithStatus* responder =
294 new ResponderThunk(weak_ptr_factory_.GetWeakPtr(), task_runner_); 302 new ResponderThunk(weak_ptr_factory_.GetWeakPtr(), task_runner_);
295 bool ok = false; 303 bool ok = false;
(...skipping 25 matching lines...) Expand all
321 return responder->Accept(message); 329 return responder->Accept(message);
322 } else { 330 } else {
323 if (mojo::internal::ControlMessageHandler::IsControlMessage(message)) 331 if (mojo::internal::ControlMessageHandler::IsControlMessage(message))
324 return control_message_handler_.Accept(message); 332 return control_message_handler_.Accept(message);
325 333
326 return incoming_receiver_->Accept(message); 334 return incoming_receiver_->Accept(message);
327 } 335 }
328 } 336 }
329 337
330 } // namespace mojo 338 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/lib/control_message_proxy.cc ('k') | mojo/public/cpp/bindings/lib/interface_ptr_state.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698