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

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

Issue 2064903002: Mojo: Report bindings validation errors via MojoNotifyBadMessage (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 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/lib/control_message_handler.h" 5 #include "mojo/public/cpp/bindings/lib/control_message_handler.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 11 matching lines...) Expand all
22 message->header()->name == kRunOrClosePipeMessageId; 22 message->header()->name == kRunOrClosePipeMessageId;
23 } 23 }
24 24
25 ControlMessageHandler::ControlMessageHandler(uint32_t interface_version) 25 ControlMessageHandler::ControlMessageHandler(uint32_t interface_version)
26 : interface_version_(interface_version) { 26 : interface_version_(interface_version) {
27 } 27 }
28 28
29 ControlMessageHandler::~ControlMessageHandler() { 29 ControlMessageHandler::~ControlMessageHandler() {
30 } 30 }
31 31
32 bool ControlMessageHandler::Accept(Message* message) { 32 bool ControlMessageHandler::Accept(Message* message, Error* error) {
33 if (message->header()->name == kRunOrClosePipeMessageId) 33 if (message->header()->name == kRunOrClosePipeMessageId)
34 return RunOrClosePipe(message); 34 return RunOrClosePipe(message);
35 35
36 NOTREACHED(); 36 NOTREACHED();
37 return false; 37 return false;
38 } 38 }
39 39
40 bool ControlMessageHandler::AcceptWithResponder( 40 bool ControlMessageHandler::AcceptWithResponder(
41 Message* message, 41 Message* message,
42 MessageReceiverWithStatus* responder) { 42 MessageReceiverWithStatus* responder,
43 Error* error) {
43 if (message->header()->name == kRunMessageId) 44 if (message->header()->name == kRunMessageId)
44 return Run(message, responder); 45 return Run(message, responder);
45 46
46 NOTREACHED(); 47 NOTREACHED();
47 return false; 48 return false;
48 } 49 }
49 50
50 bool ControlMessageHandler::Run(Message* message, 51 bool ControlMessageHandler::Run(Message* message,
51 MessageReceiverWithStatus* responder) { 52 MessageReceiverWithStatus* responder) {
52 RunResponseMessageParamsPtr response_params_ptr( 53 RunResponseMessageParamsPtr response_params_ptr(
53 RunResponseMessageParams::New()); 54 RunResponseMessageParams::New());
54 response_params_ptr->reserved0 = 16u; 55 response_params_ptr->reserved0 = 16u;
55 response_params_ptr->reserved1 = 0u; 56 response_params_ptr->reserved1 = 0u;
56 response_params_ptr->query_version_result = QueryVersionResult::New(); 57 response_params_ptr->query_version_result = QueryVersionResult::New();
57 response_params_ptr->query_version_result->version = interface_version_; 58 response_params_ptr->query_version_result->version = interface_version_;
58 59
59 size_t size = PrepareToSerialize<RunResponseMessageParamsPtr>( 60 size_t size = PrepareToSerialize<RunResponseMessageParamsPtr>(
60 response_params_ptr, &context_); 61 response_params_ptr, &context_);
61 ResponseMessageBuilder builder(kRunMessageId, size, message->request_id()); 62 ResponseMessageBuilder builder(kRunMessageId, size, message->request_id());
62 63
63 RunResponseMessageParams_Data* response_params = nullptr; 64 RunResponseMessageParams_Data* response_params = nullptr;
64 Serialize<RunResponseMessageParamsPtr>(response_params_ptr, builder.buffer(), 65 Serialize<RunResponseMessageParamsPtr>(response_params_ptr, builder.buffer(),
65 &response_params, &context_); 66 &response_params, &context_);
66 response_params->EncodePointers(); 67 response_params->EncodePointers();
67 bool ok = responder->Accept(builder.message()); 68
69 Error send_error;
70 bool ok = responder->Accept(builder.message(), &send_error);
68 ALLOW_UNUSED_LOCAL(ok); 71 ALLOW_UNUSED_LOCAL(ok);
69 delete responder; 72 delete responder;
70 73
71 return true; 74 return true;
72 } 75 }
73 76
74 bool ControlMessageHandler::RunOrClosePipe(Message* message) { 77 bool ControlMessageHandler::RunOrClosePipe(Message* message) {
75 RunOrClosePipeMessageParams_Data* params = 78 RunOrClosePipeMessageParams_Data* params =
76 reinterpret_cast<RunOrClosePipeMessageParams_Data*>( 79 reinterpret_cast<RunOrClosePipeMessageParams_Data*>(
77 message->mutable_payload()); 80 message->mutable_payload());
78 params->DecodePointers(); 81 params->DecodePointers();
79 82
80 RunOrClosePipeMessageParamsPtr params_ptr; 83 RunOrClosePipeMessageParamsPtr params_ptr;
81 Deserialize<RunOrClosePipeMessageParamsPtr>(params, &params_ptr, &context_); 84 Deserialize<RunOrClosePipeMessageParamsPtr>(params, &params_ptr, &context_);
82 85
83 return interface_version_ >= params_ptr->require_version->version; 86 return interface_version_ >= params_ptr->require_version->version;
84 } 87 }
85 88
86 } // namespace internal 89 } // namespace internal
87 } // namespace mojo 90 } // namespace mojo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698