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

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

Issue 322003002: Mojo message validation tests: add integration tests and move existing conformance tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « mojo/public/cpp/bindings/lib/router.h ('k') | mojo/public/cpp/bindings/lib/validation_errors.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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/router.h" 5 #include "mojo/public/cpp/bindings/lib/router.h"
6 6
7 namespace mojo { 7 namespace mojo {
8 namespace internal { 8 namespace internal {
9 9
10 // ---------------------------------------------------------------------------- 10 // ----------------------------------------------------------------------------
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 // ---------------------------------------------------------------------------- 50 // ----------------------------------------------------------------------------
51 51
52 Router::Router(ScopedMessagePipeHandle message_pipe, 52 Router::Router(ScopedMessagePipeHandle message_pipe,
53 FilterChain filters, 53 FilterChain filters,
54 MojoAsyncWaiter* waiter) 54 MojoAsyncWaiter* waiter)
55 : thunk_(this), 55 : thunk_(this),
56 filters_(filters.Pass()), 56 filters_(filters.Pass()),
57 connector_(message_pipe.Pass(), waiter), 57 connector_(message_pipe.Pass(), waiter),
58 weak_self_(this), 58 weak_self_(this),
59 incoming_receiver_(NULL), 59 incoming_receiver_(NULL),
60 next_request_id_(0) { 60 next_request_id_(0),
61 testing_mode_(false) {
61 filters_.SetSink(&thunk_); 62 filters_.SetSink(&thunk_);
62 connector_.set_incoming_receiver(filters_.GetHead()); 63 connector_.set_incoming_receiver(filters_.GetHead());
63 } 64 }
64 65
65 Router::~Router() { 66 Router::~Router() {
66 weak_self_.set_value(NULL); 67 weak_self_.set_value(NULL);
67 68
68 for (ResponderMap::const_iterator i = responders_.begin(); 69 for (ResponderMap::const_iterator i = responders_.begin();
69 i != responders_.end(); ++i) { 70 i != responders_.end(); ++i) {
70 delete i->second; 71 delete i->second;
(...skipping 16 matching lines...) Expand all
87 88
88 message->set_request_id(request_id); 89 message->set_request_id(request_id);
89 if (!connector_.Accept(message)) 90 if (!connector_.Accept(message))
90 return false; 91 return false;
91 92
92 // We assume ownership of |responder|. 93 // We assume ownership of |responder|.
93 responders_[request_id] = responder; 94 responders_[request_id] = responder;
94 return true; 95 return true;
95 } 96 }
96 97
98 void Router::EnableTestingMode() {
99 testing_mode_ = true;
100 connector_.set_enforce_errors_from_incoming_receiver(false);
101 }
102
97 bool Router::HandleIncomingMessage(Message* message) { 103 bool Router::HandleIncomingMessage(Message* message) {
98 if (message->has_flag(kMessageExpectsResponse)) { 104 if (message->has_flag(kMessageExpectsResponse)) {
99 if (incoming_receiver_) { 105 if (incoming_receiver_) {
100 MessageReceiver* responder = new ResponderThunk(weak_self_); 106 MessageReceiver* responder = new ResponderThunk(weak_self_);
101 bool ok = incoming_receiver_->AcceptWithResponder(message, responder); 107 bool ok = incoming_receiver_->AcceptWithResponder(message, responder);
102 if (!ok) 108 if (!ok)
103 delete responder; 109 delete responder;
104 return ok; 110 return ok;
105 } 111 }
106 112
107 // If we receive a request expecting a response when the client is not 113 // If we receive a request expecting a response when the client is not
108 // listening, then we have no choice but to tear down the pipe. 114 // listening, then we have no choice but to tear down the pipe.
109 connector_.CloseMessagePipe(); 115 connector_.CloseMessagePipe();
110 } else if (message->has_flag(kMessageIsResponse)) { 116 } else if (message->has_flag(kMessageIsResponse)) {
111 uint64_t request_id = message->request_id(); 117 uint64_t request_id = message->request_id();
112 ResponderMap::iterator it = responders_.find(request_id); 118 ResponderMap::iterator it = responders_.find(request_id);
113 if (it == responders_.end()) { 119 if (it == responders_.end()) {
114 assert(false); 120 assert(testing_mode_);
115 return false; 121 return false;
116 } 122 }
117 MessageReceiver* responder = it->second; 123 MessageReceiver* responder = it->second;
118 responders_.erase(it); 124 responders_.erase(it);
119 bool ok = responder->Accept(message); 125 bool ok = responder->Accept(message);
120 delete responder; 126 delete responder;
121 return ok; 127 return ok;
122 } else { 128 } else {
123 if (incoming_receiver_) 129 if (incoming_receiver_)
124 return incoming_receiver_->Accept(message); 130 return incoming_receiver_->Accept(message);
125 // OK to drop message on the floor. 131 // OK to drop message on the floor.
126 } 132 }
127 133
128 return false; 134 return false;
129 } 135 }
130 136
131 // ---------------------------------------------------------------------------- 137 // ----------------------------------------------------------------------------
132 138
133 } // namespace internal 139 } // namespace internal
134 } // namespace mojo 140 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/lib/router.h ('k') | mojo/public/cpp/bindings/lib/validation_errors.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698