| OLD | NEW |
| 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 <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 args->ui64 = kExpectedUInt64Value; | 97 args->ui64 = kExpectedUInt64Value; |
| 98 args->ui32 = kExpectedUInt32Value; | 98 args->ui32 = kExpectedUInt32Value; |
| 99 args->ui16 = kExpectedUInt16Value; | 99 args->ui16 = kExpectedUInt16Value; |
| 100 args->ui8 = kExpectedUInt8Value; | 100 args->ui8 = kExpectedUInt8Value; |
| 101 args->float_val = kExpectedFloatVal; | 101 args->float_val = kExpectedFloatVal; |
| 102 args->float_inf = kExpectedFloatInf; | 102 args->float_inf = kExpectedFloatInf; |
| 103 args->float_nan = kExpectedFloatNan; | 103 args->float_nan = kExpectedFloatNan; |
| 104 args->double_val = kExpectedDoubleVal; | 104 args->double_val = kExpectedDoubleVal; |
| 105 args->double_inf = kExpectedDoubleInf; | 105 args->double_inf = kExpectedDoubleInf; |
| 106 args->double_nan = kExpectedDoubleNan; | 106 args->double_nan = kExpectedDoubleNan; |
| 107 args->name = "coming"; | 107 args->name.emplace("coming"); |
| 108 Array<String> string_array(3); | 108 args->string_array.emplace(3); |
| 109 string_array[0] = "one"; | 109 (*args->string_array)[0] = "one"; |
| 110 string_array[1] = "two"; | 110 (*args->string_array)[1] = "two"; |
| 111 string_array[2] = "three"; | 111 (*args->string_array)[2] = "three"; |
| 112 args->string_array = std::move(string_array); | |
| 113 return args; | 112 return args; |
| 114 } | 113 } |
| 115 | 114 |
| 116 void CheckSampleEchoArgs(js_to_cpp::EchoArgsPtr arg) { | 115 void CheckSampleEchoArgs(js_to_cpp::EchoArgsPtr arg) { |
| 117 EXPECT_EQ(kExpectedInt64Value, arg->si64); | 116 EXPECT_EQ(kExpectedInt64Value, arg->si64); |
| 118 EXPECT_EQ(kExpectedInt32Value, arg->si32); | 117 EXPECT_EQ(kExpectedInt32Value, arg->si32); |
| 119 EXPECT_EQ(kExpectedInt16Value, arg->si16); | 118 EXPECT_EQ(kExpectedInt16Value, arg->si16); |
| 120 EXPECT_EQ(kExpectedInt8Value, arg->si8); | 119 EXPECT_EQ(kExpectedInt8Value, arg->si8); |
| 121 EXPECT_EQ(kExpectedUInt64Value, arg->ui64); | 120 EXPECT_EQ(kExpectedUInt64Value, arg->ui64); |
| 122 EXPECT_EQ(kExpectedUInt32Value, arg->ui32); | 121 EXPECT_EQ(kExpectedUInt32Value, arg->ui32); |
| 123 EXPECT_EQ(kExpectedUInt16Value, arg->ui16); | 122 EXPECT_EQ(kExpectedUInt16Value, arg->ui16); |
| 124 EXPECT_EQ(kExpectedUInt8Value, arg->ui8); | 123 EXPECT_EQ(kExpectedUInt8Value, arg->ui8); |
| 125 EXPECT_EQ(kExpectedFloatVal, arg->float_val); | 124 EXPECT_EQ(kExpectedFloatVal, arg->float_val); |
| 126 EXPECT_EQ(kExpectedFloatInf, arg->float_inf); | 125 EXPECT_EQ(kExpectedFloatInf, arg->float_inf); |
| 127 EXPECT_NAN(arg->float_nan); | 126 EXPECT_NAN(arg->float_nan); |
| 128 EXPECT_EQ(kExpectedDoubleVal, arg->double_val); | 127 EXPECT_EQ(kExpectedDoubleVal, arg->double_val); |
| 129 EXPECT_EQ(kExpectedDoubleInf, arg->double_inf); | 128 EXPECT_EQ(kExpectedDoubleInf, arg->double_inf); |
| 130 EXPECT_NAN(arg->double_nan); | 129 EXPECT_NAN(arg->double_nan); |
| 131 EXPECT_EQ(std::string("coming"), arg->name.get()); | 130 EXPECT_EQ(std::string("coming"), *arg->name); |
| 132 EXPECT_EQ(std::string("one"), arg->string_array[0].get()); | 131 EXPECT_EQ(std::string("one"), (*arg->string_array)[0]); |
| 133 EXPECT_EQ(std::string("two"), arg->string_array[1].get()); | 132 EXPECT_EQ(std::string("two"), (*arg->string_array)[1]); |
| 134 EXPECT_EQ(std::string("three"), arg->string_array[2].get()); | 133 EXPECT_EQ(std::string("three"), (*arg->string_array)[2]); |
| 135 CheckDataPipe(std::move(arg->data_handle)); | 134 CheckDataPipe(std::move(arg->data_handle)); |
| 136 CheckMessagePipe(arg->message_handle.get()); | 135 CheckMessagePipe(arg->message_handle.get()); |
| 137 } | 136 } |
| 138 | 137 |
| 139 void CheckSampleEchoArgsList(const js_to_cpp::EchoArgsListPtr& list) { | 138 void CheckSampleEchoArgsList(const js_to_cpp::EchoArgsListPtr& list) { |
| 140 if (list.is_null()) | 139 if (list.is_null()) |
| 141 return; | 140 return; |
| 142 CheckSampleEchoArgs(std::move(list->item)); | 141 CheckSampleEchoArgs(std::move(list->item)); |
| 143 CheckSampleEchoArgsList(list->next); | 142 CheckSampleEchoArgsList(list->next); |
| 144 } | 143 } |
| 145 | 144 |
| 146 // More forgiving checks are needed in the face of potentially corrupt | 145 // More forgiving checks are needed in the face of potentially corrupt |
| 147 // messages. The values don't matter so long as all accesses are within | 146 // messages. The values don't matter so long as all accesses are within |
| 148 // bounds. | 147 // bounds. |
| 149 void CheckCorruptedString(const String& arg) { | 148 void CheckCorruptedString(const std::string& arg) { |
| 150 if (arg.is_null()) | |
| 151 return; | |
| 152 for (size_t i = 0; i < arg.size(); ++i) | 149 for (size_t i = 0; i < arg.size(); ++i) |
| 153 g_waste_accumulator += arg[i]; | 150 g_waste_accumulator += arg[i]; |
| 154 } | 151 } |
| 155 | 152 |
| 156 void CheckCorruptedStringArray(const Array<String>& string_array) { | 153 void CheckCorruptedString(const base::Optional<std::string>& arg) { |
| 157 if (string_array.is_null()) | 154 if (!arg) |
| 158 return; | 155 return; |
| 159 for (size_t i = 0; i < string_array.size(); ++i) | 156 CheckCorruptedString(*arg); |
| 160 CheckCorruptedString(string_array[i]); | 157 } |
| 158 |
| 159 void CheckCorruptedStringArray( |
| 160 const base::Optional<std::vector<std::string>>& string_array) { |
| 161 if (!string_array) |
| 162 return; |
| 163 for (size_t i = 0; i < string_array->size(); ++i) |
| 164 CheckCorruptedString((*string_array)[i]); |
| 161 } | 165 } |
| 162 | 166 |
| 163 void CheckCorruptedDataPipe(MojoHandle data_pipe_handle) { | 167 void CheckCorruptedDataPipe(MojoHandle data_pipe_handle) { |
| 164 unsigned char buffer[100]; | 168 unsigned char buffer[100]; |
| 165 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); | 169 uint32_t buffer_size = static_cast<uint32_t>(sizeof(buffer)); |
| 166 MojoResult result = MojoReadData( | 170 MojoResult result = MojoReadData( |
| 167 data_pipe_handle, buffer, &buffer_size, MOJO_READ_DATA_FLAG_NONE); | 171 data_pipe_handle, buffer, &buffer_size, MOJO_READ_DATA_FLAG_NONE); |
| 168 if (result != MOJO_RESULT_OK) | 172 if (result != MOJO_RESULT_OK) |
| 169 return; | 173 return; |
| 170 for (uint32_t i = 0; i < buffer_size; ++i) | 174 for (uint32_t i = 0; i < buffer_size; ++i) |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 js_side_->Echo(kExpectedMessageCount, BuildSampleEchoArgs()); | 294 js_side_->Echo(kExpectedMessageCount, BuildSampleEchoArgs()); |
| 291 } | 295 } |
| 292 | 296 |
| 293 void EchoResponse(js_to_cpp::EchoArgsListPtr list) override { | 297 void EchoResponse(js_to_cpp::EchoArgsListPtr list) override { |
| 294 const js_to_cpp::EchoArgsPtr& special_arg = list->item; | 298 const js_to_cpp::EchoArgsPtr& special_arg = list->item; |
| 295 message_count_ += 1; | 299 message_count_ += 1; |
| 296 EXPECT_EQ(-1, special_arg->si64); | 300 EXPECT_EQ(-1, special_arg->si64); |
| 297 EXPECT_EQ(-1, special_arg->si32); | 301 EXPECT_EQ(-1, special_arg->si32); |
| 298 EXPECT_EQ(-1, special_arg->si16); | 302 EXPECT_EQ(-1, special_arg->si16); |
| 299 EXPECT_EQ(-1, special_arg->si8); | 303 EXPECT_EQ(-1, special_arg->si8); |
| 300 EXPECT_EQ(std::string("going"), special_arg->name.To<std::string>()); | 304 EXPECT_EQ(std::string("going"), *special_arg->name); |
| 301 CheckSampleEchoArgsList(list->next); | 305 CheckSampleEchoArgsList(list->next); |
| 302 } | 306 } |
| 303 | 307 |
| 304 void TestFinished() override { | 308 void TestFinished() override { |
| 305 termination_seen_ = true; | 309 termination_seen_ = true; |
| 306 run_loop()->Quit(); | 310 run_loop()->Quit(); |
| 307 } | 311 } |
| 308 | 312 |
| 309 bool DidSucceed() { | 313 bool DidSucceed() { |
| 310 return termination_seen_ && | 314 return termination_seen_ && |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 | 440 |
| 437 TEST_F(JsToCppTest, BackPointer) { | 441 TEST_F(JsToCppTest, BackPointer) { |
| 438 BackPointerCppSideConnection cpp_side_connection; | 442 BackPointerCppSideConnection cpp_side_connection; |
| 439 RunTest("mojo/edk/js/tests/js_to_cpp_tests", &cpp_side_connection); | 443 RunTest("mojo/edk/js/tests/js_to_cpp_tests", &cpp_side_connection); |
| 440 EXPECT_TRUE(cpp_side_connection.DidSucceed()); | 444 EXPECT_TRUE(cpp_side_connection.DidSucceed()); |
| 441 } | 445 } |
| 442 | 446 |
| 443 } // namespace js | 447 } // namespace js |
| 444 } // namespace edk | 448 } // namespace edk |
| 445 } // namespace mojo | 449 } // namespace mojo |
| OLD | NEW |