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 "shell/shell_test_base.h" | 5 #include "shell/shell_test_base.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/i18n/time_formatting.h" | 8 #include "base/i18n/time_formatting.h" |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 | 64 |
65 private: | 65 private: |
66 template <typename T> | 66 template <typename T> |
67 void SetAndQuitImpl(T* val, T result) { | 67 void SetAndQuitImpl(T* val, T result) { |
68 *val = result; | 68 *val = result; |
69 message_loop()->QuitWhenIdle(); | 69 message_loop()->QuitWhenIdle(); |
70 } | 70 } |
71 TestTrackedRequestServicePtr request_tracking_; | 71 TestTrackedRequestServicePtr request_tracking_; |
72 }; | 72 }; |
73 | 73 |
74 class QuitMessageLoopErrorHandler : public mojo::ErrorHandler { | |
75 public: | |
76 QuitMessageLoopErrorHandler() {} | |
77 ~QuitMessageLoopErrorHandler() override {} | |
78 | |
79 // |mojo::ErrorHandler| implementation: | |
80 void OnConnectionError() override { | |
81 base::MessageLoop::current()->QuitWhenIdle(); | |
82 } | |
83 | |
84 private: | |
85 DISALLOW_COPY_AND_ASSIGN(QuitMessageLoopErrorHandler); | |
86 }; | |
87 | |
88 // Tests that we can connect to a single service within a single app. | 74 // Tests that we can connect to a single service within a single app. |
89 TEST_F(ShellTestBaseTest, ConnectBasic) { | 75 TEST_F(ShellTestBaseTest, ConnectBasic) { |
90 TestServicePtr service; | 76 TestServicePtr service; |
91 ConnectToService(test_app_url(), &service); | 77 ConnectToService(test_app_url(), &service); |
92 | 78 |
93 bool was_run = false; | 79 bool was_run = false; |
94 service->Ping(SetAndQuit<bool>(&was_run, true)); | 80 service->Ping(SetAndQuit<bool>(&was_run, true)); |
95 message_loop()->Run(); | 81 message_loop()->Run(); |
96 EXPECT_TRUE(was_run); | 82 EXPECT_TRUE(was_run); |
97 EXPECT_FALSE(service.encountered_error()); | 83 EXPECT_FALSE(service.encountered_error()); |
(...skipping 14 matching lines...) Expand all Loading... |
112 | 98 |
113 bool was_run = false; | 99 bool was_run = false; |
114 test_service->Ping(SetAndQuit<bool>(&was_run, true)); | 100 test_service->Ping(SetAndQuit<bool>(&was_run, true)); |
115 | 101 |
116 // This will quit because there's nothing running. | 102 // This will quit because there's nothing running. |
117 message_loop()->Run(); | 103 message_loop()->Run(); |
118 EXPECT_FALSE(was_run); | 104 EXPECT_FALSE(was_run); |
119 | 105 |
120 // It may have quit before an error was processed. | 106 // It may have quit before an error was processed. |
121 if (!test_service.encountered_error()) { | 107 if (!test_service.encountered_error()) { |
122 QuitMessageLoopErrorHandler quitter; | 108 test_service.set_connection_error_handler( |
123 test_service.set_error_handler(&quitter); | 109 []() { base::MessageLoop::current()->QuitWhenIdle(); }); |
124 message_loop()->Run(); | 110 message_loop()->Run(); |
125 EXPECT_TRUE(test_service.encountered_error()); | 111 EXPECT_TRUE(test_service.encountered_error()); |
126 } | 112 } |
127 | 113 |
128 test_service.reset(); | 114 test_service.reset(); |
129 } | 115 } |
130 | 116 |
131 // Tests that we can connect to a single service within a single app using | 117 // Tests that we can connect to a single service within a single app using |
132 // a network based loader instead of local files. | 118 // a network based loader instead of local files. |
133 // TODO(tim): Disabled because network service leaks NSS at exit, meaning | 119 // TODO(tim): Disabled because network service leaks NSS at exit, meaning |
(...skipping 21 matching lines...) Expand all Loading... |
155 } | 141 } |
156 | 142 |
157 // Tests that trying to connect to a service over network fails preoprly | 143 // Tests that trying to connect to a service over network fails preoprly |
158 // if the service doesn't exist. | 144 // if the service doesn't exist. |
159 // TODO(tim): Disabled because network service leaks NSS at exit, meaning | 145 // TODO(tim): Disabled because network service leaks NSS at exit, meaning |
160 // subsequent tests can't init properly. | 146 // subsequent tests can't init properly. |
161 TEST_F(ShellTestBaseTest, DISABLED_ConnectInvalidServiceNetwork) { | 147 TEST_F(ShellTestBaseTest, DISABLED_ConnectInvalidServiceNetwork) { |
162 TestServicePtr test_service; | 148 TestServicePtr test_service; |
163 ConnectToService(GURL("http://example.com/non_existent_service"), | 149 ConnectToService(GURL("http://example.com/non_existent_service"), |
164 &test_service); | 150 &test_service); |
165 QuitMessageLoopErrorHandler quitter; | 151 test_service.set_connection_error_handler( |
166 test_service.set_error_handler(&quitter); | 152 []() { base::MessageLoop::current()->QuitWhenIdle(); }); |
167 bool was_run = false; | 153 bool was_run = false; |
168 test_service->Ping(SetAndQuit<bool>(&was_run, true)); | 154 test_service->Ping(SetAndQuit<bool>(&was_run, true)); |
169 message_loop()->Run(); | 155 message_loop()->Run(); |
170 EXPECT_TRUE(test_service.encountered_error()); | 156 EXPECT_TRUE(test_service.encountered_error()); |
171 | 157 |
172 // TODO(tim): crbug.com/392685. Calling this explicitly shouldn't be | 158 // TODO(tim): crbug.com/392685. Calling this explicitly shouldn't be |
173 // necessary once the shell terminates if the primordial app exits, which | 159 // necessary once the shell terminates if the primordial app exits, which |
174 // we could enforce here by resetting |service|. | 160 // we could enforce here by resetting |service|. |
175 shell_context()->application_manager()->TerminateShellConnections(); | 161 shell_context()->application_manager()->TerminateShellConnections(); |
176 message_loop()->Run(); // Waits for all connections to die. | 162 message_loop()->Run(); // Waits for all connections to die. |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
299 EXPECT_EQ(6U, reports[0].total_requests); | 285 EXPECT_EQ(6U, reports[0].total_requests); |
300 EXPECT_EQ(TestTimeService::Name_, reports[1].service_name); | 286 EXPECT_EQ(TestTimeService::Name_, reports[1].service_name); |
301 EXPECT_EQ(1U, reports[1].total_requests); | 287 EXPECT_EQ(1U, reports[1].total_requests); |
302 EXPECT_EQ(TestTimeService::Name_, reports[2].service_name); | 288 EXPECT_EQ(TestTimeService::Name_, reports[2].service_name); |
303 EXPECT_EQ(20U, reports[2].total_requests); | 289 EXPECT_EQ(20U, reports[2].total_requests); |
304 } | 290 } |
305 | 291 |
306 } // namespace | 292 } // namespace |
307 } // namespace test | 293 } // namespace test |
308 } // namespace shell | 294 } // namespace shell |
OLD | NEW |