| OLD | NEW |
| 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 "base/base_paths.h" | 5 #include "base/base_paths.h" |
| 6 #include "base/bind.h" | 6 #include "base/bind.h" |
| 7 #include "base/files/file_path.h" | 7 #include "base/files/file_path.h" |
| 8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
| 9 #include "base/path_service.h" | 9 #include "base/path_service.h" |
| 10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
| 11 #include "base/strings/string_util.h" | 11 #include "base/strings/string_util.h" |
| 12 #include "base/strings/stringprintf.h" | 12 #include "base/strings/stringprintf.h" |
| 13 #include "mojo/converters/base/base_type_converters.h" |
| 13 #include "mojo/data_pipe_utils/data_pipe_utils.h" | 14 #include "mojo/data_pipe_utils/data_pipe_utils.h" |
| 14 #include "mojo/public/cpp/application/application_impl.h" | 15 #include "mojo/public/cpp/application/application_impl.h" |
| 15 #include "mojo/public/cpp/application/application_test_base.h" | 16 #include "mojo/public/cpp/application/application_test_base.h" |
| 16 #include "mojo/public/cpp/application/connect.h" | 17 #include "mojo/public/cpp/application/connect.h" |
| 17 #include "mojo/public/cpp/system/macros.h" | 18 #include "mojo/public/cpp/system/macros.h" |
| 18 #include "mojo/public/interfaces/application/application_connector.mojom.h" | 19 #include "mojo/public/interfaces/application/application_connector.mojom.h" |
| 19 #include "mojo/services/http_server/cpp/http_server_util.h" | 20 #include "mojo/services/http_server/cpp/http_server_util.h" |
| 20 #include "mojo/services/http_server/interfaces/http_server.mojom.h" | 21 #include "mojo/services/http_server/interfaces/http_server.mojom.h" |
| 21 #include "mojo/services/http_server/interfaces/http_server_factory.mojom.h" | 22 #include "mojo/services/http_server/interfaces/http_server_factory.mojom.h" |
| 22 #include "mojo/services/network/interfaces/net_address.mojom.h" | 23 #include "mojo/services/network/interfaces/net_address.mojom.h" |
| (...skipping 15 matching lines...) Expand all Loading... |
| 38 uint16_t port) | 39 uint16_t port) |
| 39 : binding_(this, request.Pass()), port_(port) {} | 40 : binding_(this, request.Pass()), port_(port) {} |
| 40 ~GetHandler() override {} | 41 ~GetHandler() override {} |
| 41 | 42 |
| 42 private: | 43 private: |
| 43 // http_server::HttpHandler: | 44 // http_server::HttpHandler: |
| 44 void HandleRequest(http_server::HttpRequestPtr request, | 45 void HandleRequest(http_server::HttpRequestPtr request, |
| 45 const mojo::Callback<void(http_server::HttpResponsePtr)>& | 46 const mojo::Callback<void(http_server::HttpResponsePtr)>& |
| 46 callback) override { | 47 callback) override { |
| 47 http_server::HttpResponsePtr response; | 48 http_server::HttpResponsePtr response; |
| 48 if (StartsWithASCII(request->relative_url, "/app", true)) { | 49 if (base::StartsWith(request->relative_url.To<base::StringPiece>(), "/app", |
| 50 base::CompareCase::SENSITIVE)) { |
| 49 response = http_server::CreateHttpResponse( | 51 response = http_server::CreateHttpResponse( |
| 50 200, std::string(shell::test::kPingable.data, | 52 200, std::string(shell::test::kPingable.data, |
| 51 shell::test::kPingable.size)); | 53 shell::test::kPingable.size)); |
| 52 response->content_type = "application/octet-stream"; | 54 response->content_type = "application/octet-stream"; |
| 53 } else if (request->relative_url == "/redirect") { | 55 } else if (request->relative_url == "/redirect") { |
| 54 response = http_server::HttpResponse::New(); | 56 response = http_server::HttpResponse::New(); |
| 55 response->status_code = 302; | 57 response->status_code = 302; |
| 56 response->custom_headers.insert("Location", GetURL(port_, "app")); | 58 response->custom_headers.insert("Location", GetURL(port_, "app")); |
| 57 } else { | 59 } else { |
| 58 NOTREACHED(); | 60 NOTREACHED(); |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 pingable2->Ping("hello", callbacks_builder(2)); | 183 pingable2->Ping("hello", callbacks_builder(2)); |
| 182 base::RunLoop().Run(); | 184 base::RunLoop().Run(); |
| 183 } | 185 } |
| 184 | 186 |
| 185 // mojo: URLs can have querystrings too | 187 // mojo: URLs can have querystrings too |
| 186 TEST_F(ShellAppTest, MojoURLQueryHandling) { | 188 TEST_F(ShellAppTest, MojoURLQueryHandling) { |
| 187 PingablePtr pingable; | 189 PingablePtr pingable; |
| 188 application_impl()->ConnectToService("mojo:pingable_app?foo", &pingable); | 190 application_impl()->ConnectToService("mojo:pingable_app?foo", &pingable); |
| 189 auto callback = [](const String& app_url, const String& connection_url, | 191 auto callback = [](const String& app_url, const String& connection_url, |
| 190 const String& message) { | 192 const String& message) { |
| 191 EXPECT_TRUE(EndsWith(app_url, "/pingable_app.mojo", true)); | 193 EXPECT_TRUE(base::EndsWith(app_url.To<base::StringPiece>(), |
| 194 "/pingable_app.mojo", |
| 195 base::CompareCase::SENSITIVE)); |
| 192 EXPECT_EQ(app_url.To<std::string>() + "?foo", connection_url); | 196 EXPECT_EQ(app_url.To<std::string>() + "?foo", connection_url); |
| 193 EXPECT_EQ("hello", message); | 197 EXPECT_EQ("hello", message); |
| 194 base::MessageLoop::current()->Quit(); | 198 base::MessageLoop::current()->Quit(); |
| 195 }; | 199 }; |
| 196 pingable->Ping("hello", callback); | 200 pingable->Ping("hello", callback); |
| 197 base::RunLoop().Run(); | 201 base::RunLoop().Run(); |
| 198 } | 202 } |
| 199 | 203 |
| 200 void TestApplicationConnector(mojo::ApplicationConnector* app_connector) { | 204 void TestApplicationConnector(mojo::ApplicationConnector* app_connector) { |
| 201 PingablePtr pingable; | 205 PingablePtr pingable; |
| 202 ConnectToService(app_connector, "mojo:pingable_app", &pingable); | 206 ConnectToService(app_connector, "mojo:pingable_app", &pingable); |
| 203 auto callback = [](const String& app_url, const String& connection_url, | 207 auto callback = [](const String& app_url, const String& connection_url, |
| 204 const String& message) { | 208 const String& message) { |
| 205 EXPECT_TRUE(EndsWith(app_url, "/pingable_app.mojo", true)); | 209 EXPECT_TRUE(base::EndsWith(app_url.To<base::StringPiece>(), |
| 210 "/pingable_app.mojo", |
| 211 base::CompareCase::SENSITIVE)); |
| 206 EXPECT_EQ(app_url, connection_url); | 212 EXPECT_EQ(app_url, connection_url); |
| 207 EXPECT_EQ("hello", message); | 213 EXPECT_EQ("hello", message); |
| 208 base::MessageLoop::current()->Quit(); | 214 base::MessageLoop::current()->Quit(); |
| 209 }; | 215 }; |
| 210 pingable->Ping("hello", callback); | 216 pingable->Ping("hello", callback); |
| 211 base::RunLoop().Run(); | 217 base::RunLoop().Run(); |
| 212 } | 218 } |
| 213 | 219 |
| 214 TEST_F(ShellAppTest, ApplicationConnector) { | 220 TEST_F(ShellAppTest, ApplicationConnector) { |
| 215 mojo::ApplicationConnectorPtr app_connector; | 221 mojo::ApplicationConnectorPtr app_connector; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 233 } | 239 } |
| 234 | 240 |
| 235 // The first one should still work. | 241 // The first one should still work. |
| 236 { | 242 { |
| 237 SCOPED_TRACE("app_connector1 again"); | 243 SCOPED_TRACE("app_connector1 again"); |
| 238 TestApplicationConnector(app_connector1.get()); | 244 TestApplicationConnector(app_connector1.get()); |
| 239 } | 245 } |
| 240 } | 246 } |
| 241 | 247 |
| 242 } // namespace | 248 } // namespace |
| OLD | NEW |