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 #ifndef CONTENT_BROWSER_SERVICE_WORKER_EMBEDDED_WORKER_TEST_HELPER_H_ | 5 #ifndef CONTENT_BROWSER_SERVICE_WORKER_EMBEDDED_WORKER_TEST_HELPER_H_ |
6 #define CONTENT_BROWSER_SERVICE_WORKER_EMBEDDED_WORKER_TEST_HELPER_H_ | 6 #define CONTENT_BROWSER_SERVICE_WORKER_EMBEDDED_WORKER_TEST_HELPER_H_ |
7 | 7 |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 // also returns success for event messages (e.g. InstallEvent, FetchEvent). | 55 // also returns success for event messages (e.g. InstallEvent, FetchEvent). |
56 // | 56 // |
57 // Alternatively consumers can subclass this helper and override On*() | 57 // Alternatively consumers can subclass this helper and override On*() |
58 // methods to add their own logic/verification code. | 58 // methods to add their own logic/verification code. |
59 // | 59 // |
60 // See embedded_worker_instance_unittest.cc for example usages. | 60 // See embedded_worker_instance_unittest.cc for example usages. |
61 // | 61 // |
62 class EmbeddedWorkerTestHelper : public IPC::Sender, | 62 class EmbeddedWorkerTestHelper : public IPC::Sender, |
63 public IPC::Listener { | 63 public IPC::Listener { |
64 public: | 64 public: |
65 enum class Event { Activate }; | 65 enum class Event { Install, Activate }; |
66 using FetchCallback = | 66 using FetchCallback = |
67 base::Callback<void(ServiceWorkerStatusCode, | 67 base::Callback<void(ServiceWorkerStatusCode, |
68 base::Time /* dispatch_event_time */)>; | 68 base::Time /* dispatch_event_time */)>; |
69 | 69 |
70 class MockEmbeddedWorkerInstanceClient | 70 class MockEmbeddedWorkerInstanceClient |
71 : public mojom::EmbeddedWorkerInstanceClient { | 71 : public mojom::EmbeddedWorkerInstanceClient { |
72 public: | 72 public: |
73 explicit MockEmbeddedWorkerInstanceClient( | 73 explicit MockEmbeddedWorkerInstanceClient( |
74 base::WeakPtr<EmbeddedWorkerTestHelper> helper); | 74 base::WeakPtr<EmbeddedWorkerTestHelper> helper); |
75 ~MockEmbeddedWorkerInstanceClient() override; | 75 ~MockEmbeddedWorkerInstanceClient() override; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 // Register a mojo endpoint object derived from | 116 // Register a mojo endpoint object derived from |
117 // MockEmbeddedWorkerInstanceClient. | 117 // MockEmbeddedWorkerInstanceClient. |
118 void RegisterMockInstanceClient( | 118 void RegisterMockInstanceClient( |
119 std::unique_ptr<MockEmbeddedWorkerInstanceClient> client); | 119 std::unique_ptr<MockEmbeddedWorkerInstanceClient> client); |
120 | 120 |
121 template <typename MockType, typename... Args> | 121 template <typename MockType, typename... Args> |
122 MockType* CreateAndRegisterMockInstanceClient(Args&&... args); | 122 MockType* CreateAndRegisterMockInstanceClient(Args&&... args); |
123 | 123 |
124 // IPC sink for EmbeddedWorker messages. | 124 // IPC sink for EmbeddedWorker messages. |
125 IPC::TestSink* ipc_sink() { return &sink_; } | 125 IPC::TestSink* ipc_sink() { return &sink_; } |
126 // Inner IPC sink for script context messages sent via EmbeddedWorker. | |
127 IPC::TestSink* inner_ipc_sink() { return &inner_sink_; } | |
128 | 126 |
129 std::vector<Event>* dispatched_events() { return &events_; } | 127 std::vector<Event>* dispatched_events() { return &events_; } |
130 | 128 |
131 std::vector<std::unique_ptr<MockEmbeddedWorkerInstanceClient>>* | 129 std::vector<std::unique_ptr<MockEmbeddedWorkerInstanceClient>>* |
132 mock_instance_clients() { | 130 mock_instance_clients() { |
133 return &mock_instance_clients_; | 131 return &mock_instance_clients_; |
134 } | 132 } |
135 | 133 |
136 ServiceWorkerContextCore* context(); | 134 ServiceWorkerContextCore* context(); |
137 ServiceWorkerContextWrapper* context_wrapper() { return wrapper_.get(); } | 135 ServiceWorkerContextWrapper* context_wrapper() { return wrapper_.get(); } |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 int64_t service_worker_version_id, | 167 int64_t service_worker_version_id, |
170 const GURL& scope, | 168 const GURL& scope, |
171 const GURL& script_url, | 169 const GURL& script_url, |
172 bool pause_after_download, | 170 bool pause_after_download, |
173 mojom::ServiceWorkerEventDispatcherRequest request, | 171 mojom::ServiceWorkerEventDispatcherRequest request, |
174 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host); | 172 mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host); |
175 virtual void OnResumeAfterDownload(int embedded_worker_id); | 173 virtual void OnResumeAfterDownload(int embedded_worker_id); |
176 // StopWorker IPC handler routed through MockEmbeddedWorkerInstanceClient. | 174 // StopWorker IPC handler routed through MockEmbeddedWorkerInstanceClient. |
177 // This calls SimulateWorkerStopped() by default. | 175 // This calls SimulateWorkerStopped() by default. |
178 virtual void OnStopWorker(int embedded_worker_id); | 176 virtual void OnStopWorker(int embedded_worker_id); |
179 // The legacy IPC message handler. This passes the messages to their | |
180 // respective On*Event handler by default. | |
181 virtual bool OnMessageToWorker(int thread_id, | |
182 int embedded_worker_id, | |
183 const IPC::Message& message); | |
184 | 177 |
185 // On*Event handlers. Called by the default implementation of | 178 // On*Event handlers. |
186 // OnMessageToWorker when events are sent to the embedded | |
187 // worker. By default they just return success via | |
188 // SimulateSendReplyToBrowser. | |
189 virtual void OnActivateEvent( | 179 virtual void OnActivateEvent( |
190 const mojom::ServiceWorkerEventDispatcher::DispatchActivateEventCallback& | 180 const mojom::ServiceWorkerEventDispatcher::DispatchActivateEventCallback& |
191 callback); | 181 callback); |
192 virtual void OnBackgroundFetchAbortEvent( | 182 virtual void OnBackgroundFetchAbortEvent( |
193 const std::string& tag, | 183 const std::string& tag, |
194 const mojom::ServiceWorkerEventDispatcher:: | 184 const mojom::ServiceWorkerEventDispatcher:: |
195 DispatchBackgroundFetchAbortEventCallback& callback); | 185 DispatchBackgroundFetchAbortEventCallback& callback); |
196 virtual void OnBackgroundFetchClickEvent( | 186 virtual void OnBackgroundFetchClickEvent( |
197 const std::string& tag, | 187 const std::string& tag, |
198 mojom::BackgroundFetchState state, | 188 mojom::BackgroundFetchState state, |
199 const mojom::ServiceWorkerEventDispatcher:: | 189 const mojom::ServiceWorkerEventDispatcher:: |
200 DispatchBackgroundFetchClickEventCallback& callback); | 190 DispatchBackgroundFetchClickEventCallback& callback); |
201 virtual void OnBackgroundFetchFailEvent( | 191 virtual void OnBackgroundFetchFailEvent( |
202 const std::string& tag, | 192 const std::string& tag, |
203 const std::vector<BackgroundFetchSettledFetch>& fetches, | 193 const std::vector<BackgroundFetchSettledFetch>& fetches, |
204 const mojom::ServiceWorkerEventDispatcher:: | 194 const mojom::ServiceWorkerEventDispatcher:: |
205 DispatchBackgroundFetchFailEventCallback& callback); | 195 DispatchBackgroundFetchFailEventCallback& callback); |
206 virtual void OnBackgroundFetchedEvent( | 196 virtual void OnBackgroundFetchedEvent( |
207 const std::string& tag, | 197 const std::string& tag, |
208 const std::vector<BackgroundFetchSettledFetch>& fetches, | 198 const std::vector<BackgroundFetchSettledFetch>& fetches, |
209 const mojom::ServiceWorkerEventDispatcher:: | 199 const mojom::ServiceWorkerEventDispatcher:: |
210 DispatchBackgroundFetchedEventCallback& callback); | 200 DispatchBackgroundFetchedEventCallback& callback); |
211 virtual void OnExtendableMessageEvent( | 201 virtual void OnExtendableMessageEvent( |
212 mojom::ExtendableMessageEventPtr event, | 202 mojom::ExtendableMessageEventPtr event, |
213 const mojom::ServiceWorkerEventDispatcher:: | 203 const mojom::ServiceWorkerEventDispatcher:: |
214 DispatchExtendableMessageEventCallback& callback); | 204 DispatchExtendableMessageEventCallback& callback); |
215 virtual void OnInstallEvent(int embedded_worker_id, int request_id); | 205 virtual void OnInstallEvent( |
| 206 const mojom::ServiceWorkerEventDispatcher::DispatchInstallEventCallback& |
| 207 callback); |
216 virtual void OnFetchEvent( | 208 virtual void OnFetchEvent( |
217 int embedded_worker_id, | 209 int embedded_worker_id, |
218 int fetch_event_id, | 210 int fetch_event_id, |
219 const ServiceWorkerFetchRequest& request, | 211 const ServiceWorkerFetchRequest& request, |
220 mojom::FetchEventPreloadHandlePtr preload_handle, | 212 mojom::FetchEventPreloadHandlePtr preload_handle, |
221 mojom::ServiceWorkerFetchResponseCallbackPtr response_callback, | 213 mojom::ServiceWorkerFetchResponseCallbackPtr response_callback, |
222 const FetchCallback& finish_callback); | 214 const FetchCallback& finish_callback); |
223 virtual void OnNotificationClickEvent( | 215 virtual void OnNotificationClickEvent( |
224 const std::string& notification_id, | 216 const std::string& notification_id, |
225 const PlatformNotificationData& notification_data, | 217 const PlatformNotificationData& notification_data, |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
288 DispatchBackgroundFetchFailEventCallback& callback); | 280 DispatchBackgroundFetchFailEventCallback& callback); |
289 void OnBackgroundFetchedEventStub( | 281 void OnBackgroundFetchedEventStub( |
290 const std::string& tag, | 282 const std::string& tag, |
291 const std::vector<BackgroundFetchSettledFetch>& fetches, | 283 const std::vector<BackgroundFetchSettledFetch>& fetches, |
292 const mojom::ServiceWorkerEventDispatcher:: | 284 const mojom::ServiceWorkerEventDispatcher:: |
293 DispatchBackgroundFetchedEventCallback& callback); | 285 DispatchBackgroundFetchedEventCallback& callback); |
294 void OnExtendableMessageEventStub( | 286 void OnExtendableMessageEventStub( |
295 mojom::ExtendableMessageEventPtr event, | 287 mojom::ExtendableMessageEventPtr event, |
296 const mojom::ServiceWorkerEventDispatcher:: | 288 const mojom::ServiceWorkerEventDispatcher:: |
297 DispatchExtendableMessageEventCallback& callback); | 289 DispatchExtendableMessageEventCallback& callback); |
298 void OnInstallEventStub(int request_id); | 290 void OnInstallEventStub( |
| 291 const mojom::ServiceWorkerEventDispatcher::DispatchInstallEventCallback& |
| 292 callback); |
299 void OnFetchEventStub( | 293 void OnFetchEventStub( |
300 int thread_id, | 294 int thread_id, |
301 int fetch_event_id, | 295 int fetch_event_id, |
302 const ServiceWorkerFetchRequest& request, | 296 const ServiceWorkerFetchRequest& request, |
303 mojom::FetchEventPreloadHandlePtr preload_handle, | 297 mojom::FetchEventPreloadHandlePtr preload_handle, |
304 mojom::ServiceWorkerFetchResponseCallbackPtr response_callback, | 298 mojom::ServiceWorkerFetchResponseCallbackPtr response_callback, |
305 const FetchCallback& finish_callback); | 299 const FetchCallback& finish_callback); |
306 void OnNotificationClickEventStub( | 300 void OnNotificationClickEventStub( |
307 const std::string& notification_id, | 301 const std::string& notification_id, |
308 const PlatformNotificationData& notification_data, | 302 const PlatformNotificationData& notification_data, |
(...skipping 16 matching lines...) Expand all Loading... |
325 const mojom::ServiceWorkerEventDispatcher:: | 319 const mojom::ServiceWorkerEventDispatcher:: |
326 DispatchPaymentRequestEventCallback& callback); | 320 DispatchPaymentRequestEventCallback& callback); |
327 | 321 |
328 std::unique_ptr<TestBrowserContext> browser_context_; | 322 std::unique_ptr<TestBrowserContext> browser_context_; |
329 std::unique_ptr<MockRenderProcessHost> render_process_host_; | 323 std::unique_ptr<MockRenderProcessHost> render_process_host_; |
330 std::unique_ptr<MockRenderProcessHost> new_render_process_host_; | 324 std::unique_ptr<MockRenderProcessHost> new_render_process_host_; |
331 | 325 |
332 scoped_refptr<ServiceWorkerContextWrapper> wrapper_; | 326 scoped_refptr<ServiceWorkerContextWrapper> wrapper_; |
333 | 327 |
334 IPC::TestSink sink_; | 328 IPC::TestSink sink_; |
335 IPC::TestSink inner_sink_; | |
336 | 329 |
337 std::vector<std::unique_ptr<MockEmbeddedWorkerInstanceClient>> | 330 std::vector<std::unique_ptr<MockEmbeddedWorkerInstanceClient>> |
338 mock_instance_clients_; | 331 mock_instance_clients_; |
339 size_t mock_instance_clients_next_index_; | 332 size_t mock_instance_clients_next_index_; |
340 | 333 |
341 int next_thread_id_; | 334 int next_thread_id_; |
342 int next_provider_id_; | 335 int next_provider_id_; |
343 int mock_render_process_id_; | 336 int mock_render_process_id_; |
344 int new_mock_render_process_id_; | 337 int new_mock_render_process_id_; |
345 | 338 |
346 std::map<int /* process_id */, scoped_refptr<ServiceWorkerDispatcherHost>> | 339 std::map<int /* process_id */, scoped_refptr<ServiceWorkerDispatcherHost>> |
347 dispatcher_hosts_; | 340 dispatcher_hosts_; |
348 | 341 |
349 std::map<int, int64_t> embedded_worker_id_service_worker_version_id_map_; | 342 std::map<int, int64_t> embedded_worker_id_service_worker_version_id_map_; |
350 std::map<int /* thread_id */, int /* embedded_worker_id */> | 343 std::map<int /* thread_id */, int /* embedded_worker_id */> |
351 thread_id_embedded_worker_id_map_; | 344 thread_id_embedded_worker_id_map_; |
352 | 345 |
353 std::map< | 346 std::map< |
354 int /* embedded_worker_id */, | 347 int /* embedded_worker_id */, |
355 mojom::EmbeddedWorkerInstanceHostAssociatedPtr /* instance_host_ptr */> | 348 mojom::EmbeddedWorkerInstanceHostAssociatedPtr /* instance_host_ptr */> |
356 embedded_worker_id_instance_host_ptr_map_; | 349 embedded_worker_id_instance_host_ptr_map_; |
357 | 350 |
358 // Updated each time MessageToWorker message is received. | |
359 int current_embedded_worker_id_; | |
360 | |
361 std::vector<Event> events_; | 351 std::vector<Event> events_; |
362 | 352 |
363 base::WeakPtrFactory<EmbeddedWorkerTestHelper> weak_factory_; | 353 base::WeakPtrFactory<EmbeddedWorkerTestHelper> weak_factory_; |
364 | 354 |
365 DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerTestHelper); | 355 DISALLOW_COPY_AND_ASSIGN(EmbeddedWorkerTestHelper); |
366 }; | 356 }; |
367 | 357 |
368 template <typename MockType, typename... Args> | 358 template <typename MockType, typename... Args> |
369 MockType* EmbeddedWorkerTestHelper::CreateAndRegisterMockInstanceClient( | 359 MockType* EmbeddedWorkerTestHelper::CreateAndRegisterMockInstanceClient( |
370 Args&&... args) { | 360 Args&&... args) { |
371 std::unique_ptr<MockType> mock = | 361 std::unique_ptr<MockType> mock = |
372 base::MakeUnique<MockType>(std::forward<Args>(args)...); | 362 base::MakeUnique<MockType>(std::forward<Args>(args)...); |
373 MockType* mock_rawptr = mock.get(); | 363 MockType* mock_rawptr = mock.get(); |
374 RegisterMockInstanceClient(std::move(mock)); | 364 RegisterMockInstanceClient(std::move(mock)); |
375 return mock_rawptr; | 365 return mock_rawptr; |
376 } | 366 } |
377 | 367 |
378 } // namespace content | 368 } // namespace content |
379 | 369 |
380 #endif // CONTENT_BROWSER_SERVICE_WORKER_EMBEDDED_WORKER_TEST_HELPER_H_ | 370 #endif // CONTENT_BROWSER_SERVICE_WORKER_EMBEDDED_WORKER_TEST_HELPER_H_ |
OLD | NEW |