| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 <stdio.h> | 5 #include <stdio.h> |
| 6 #include <string> | 6 #include <string> |
| 7 #include <sstream> | 7 #include <sstream> |
| 8 | 8 |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/platform_thread.h" | 10 #include "base/platform_thread.h" |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 178 RoundtripAckReply(FUZZER_ROUTING_ID, MsgClassIS::ID, value); | 178 RoundtripAckReply(FUZZER_ROUTING_ID, MsgClassIS::ID, value); |
| 179 Cleanup(); | 179 Cleanup(); |
| 180 } | 180 } |
| 181 | 181 |
| 182 void OnMsgClassSIMessage(const std::wstring& text, int value) { | 182 void OnMsgClassSIMessage(const std::wstring& text, int value) { |
| 183 UseData(MsgClassSI::ID, value, text); | 183 UseData(MsgClassSI::ID, value, text); |
| 184 RoundtripAckReply(FUZZER_ROUTING_ID, MsgClassSI::ID, value); | 184 RoundtripAckReply(FUZZER_ROUTING_ID, MsgClassSI::ID, value); |
| 185 Cleanup(); | 185 Cleanup(); |
| 186 } | 186 } |
| 187 | 187 |
| 188 bool RoundtripAckReply(int routing, int type_id, int reply) { | 188 bool RoundtripAckReply(int routing, uint32 type_id, int reply) { |
| 189 IPC::Message* message = new IPC::Message(routing, type_id, | 189 IPC::Message* message = new IPC::Message(routing, type_id, |
| 190 IPC::Message::PRIORITY_NORMAL); | 190 IPC::Message::PRIORITY_NORMAL); |
| 191 message->WriteInt(reply + 1); | 191 message->WriteInt(reply + 1); |
| 192 message->WriteInt(reply); | 192 message->WriteInt(reply); |
| 193 return other_->Send(message); | 193 return other_->Send(message); |
| 194 } | 194 } |
| 195 | 195 |
| 196 void Cleanup() { | 196 void Cleanup() { |
| 197 --message_count_; | 197 --message_count_; |
| 198 --pending_messages_; | 198 --pending_messages_; |
| 199 if (0 == message_count_) | 199 if (0 == message_count_) |
| 200 MessageLoop::current()->Quit(); | 200 MessageLoop::current()->Quit(); |
| 201 } | 201 } |
| 202 | 202 |
| 203 void ReplyMsgNotHandled(int type_id) { | 203 void ReplyMsgNotHandled(uint32 type_id) { |
| 204 RoundtripAckReply(FUZZER_ROUTING_ID, CLIENT_UNHANDLED_IPC, type_id); | 204 RoundtripAckReply(FUZZER_ROUTING_ID, CLIENT_UNHANDLED_IPC, type_id); |
| 205 Cleanup(); | 205 Cleanup(); |
| 206 } | 206 } |
| 207 | 207 |
| 208 void UseData(int caller, int value, const std::wstring& text) { | 208 void UseData(int caller, int value, const std::wstring& text) { |
| 209 std::wostringstream wos; | 209 std::wostringstream wos; |
| 210 wos << L"IPC fuzzer:" << caller << " [" << value << L" " << text << L"]\n"; | 210 wos << L"IPC fuzzer:" << caller << " [" << value << L" " << text << L"]\n"; |
| 211 std::wstring output = wos.str(); | 211 std::wstring output = wos.str(); |
| 212 LOG(WARNING) << output.c_str(); | 212 LOG(WARNING) << output.c_str(); |
| 213 }; | 213 }; |
| 214 | 214 |
| 215 int message_count_; | 215 int message_count_; |
| 216 int pending_messages_; | 216 int pending_messages_; |
| 217 }; | 217 }; |
| 218 | 218 |
| 219 class FuzzerClientListener : public SimpleListener { | 219 class FuzzerClientListener : public SimpleListener { |
| 220 public: | 220 public: |
| 221 FuzzerClientListener() : last_msg_(NULL) { | 221 FuzzerClientListener() : last_msg_(NULL) { |
| 222 } | 222 } |
| 223 | 223 |
| 224 virtual void OnMessageReceived(const IPC::Message& msg) { | 224 virtual void OnMessageReceived(const IPC::Message& msg) { |
| 225 last_msg_ = new IPC::Message(msg); | 225 last_msg_ = new IPC::Message(msg); |
| 226 MessageLoop::current()->Quit(); | 226 MessageLoop::current()->Quit(); |
| 227 } | 227 } |
| 228 | 228 |
| 229 bool ExpectMessage(int value, int type_id) { | 229 bool ExpectMessage(int value, uint32 type_id) { |
| 230 if (!MsgHandlerInternal(type_id)) | 230 if (!MsgHandlerInternal(type_id)) |
| 231 return false; | 231 return false; |
| 232 int msg_value1 = 0; | 232 int msg_value1 = 0; |
| 233 int msg_value2 = 0; | 233 int msg_value2 = 0; |
| 234 void* iter = NULL; | 234 void* iter = NULL; |
| 235 if (!last_msg_->ReadInt(&iter, &msg_value1)) | 235 if (!last_msg_->ReadInt(&iter, &msg_value1)) |
| 236 return false; | 236 return false; |
| 237 if (!last_msg_->ReadInt(&iter, &msg_value2)) | 237 if (!last_msg_->ReadInt(&iter, &msg_value2)) |
| 238 return false; | 238 return false; |
| 239 if ((msg_value2 + 1) != msg_value1) | 239 if ((msg_value2 + 1) != msg_value1) |
| 240 return false; | 240 return false; |
| 241 if (msg_value2 != value) | 241 if (msg_value2 != value) |
| 242 return false; | 242 return false; |
| 243 | 243 |
| 244 delete last_msg_; | 244 delete last_msg_; |
| 245 last_msg_ = NULL; | 245 last_msg_ = NULL; |
| 246 return true; | 246 return true; |
| 247 } | 247 } |
| 248 | 248 |
| 249 bool ExpectMsgNotHandled(int type_id) { | 249 bool ExpectMsgNotHandled(uint32 type_id) { |
| 250 return ExpectMessage(type_id, CLIENT_UNHANDLED_IPC); | 250 return ExpectMessage(type_id, CLIENT_UNHANDLED_IPC); |
| 251 } | 251 } |
| 252 | 252 |
| 253 private: | 253 private: |
| 254 bool MsgHandlerInternal(int type_id) { | 254 bool MsgHandlerInternal(uint32 type_id) { |
| 255 MessageLoop::current()->Run(); | 255 MessageLoop::current()->Run(); |
| 256 if (NULL == last_msg_) | 256 if (NULL == last_msg_) |
| 257 return false; | 257 return false; |
| 258 if (FUZZER_ROUTING_ID != last_msg_->routing_id()) | 258 if (FUZZER_ROUTING_ID != last_msg_->routing_id()) |
| 259 return false; | 259 return false; |
| 260 return (type_id == last_msg_->type()); | 260 return (type_id == last_msg_->type()); |
| 261 }; | 261 }; |
| 262 | 262 |
| 263 IPC::Message* last_msg_; | 263 IPC::Message* last_msg_; |
| 264 }; | 264 }; |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 420 msg = new IPC::Message(MSG_ROUTING_CONTROL, MsgClassIS::ID, | 420 msg = new IPC::Message(MSG_ROUTING_CONTROL, MsgClassIS::ID, |
| 421 IPC::Message::PRIORITY_NORMAL); | 421 IPC::Message::PRIORITY_NORMAL); |
| 422 msg->WriteInt(0x64); | 422 msg->WriteInt(0x64); |
| 423 msg->WriteInt(0x32); | 423 msg->WriteInt(0x32); |
| 424 EXPECT_FALSE(server.OnMessageReceived(*msg)); | 424 EXPECT_FALSE(server.OnMessageReceived(*msg)); |
| 425 delete msg; | 425 delete msg; |
| 426 | 426 |
| 427 EXPECT_EQ(0, server.unhandled_msgs()); | 427 EXPECT_EQ(0, server.unhandled_msgs()); |
| 428 #endif | 428 #endif |
| 429 } | 429 } |
| OLD | NEW |