Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(340)

Side by Side Diff: content/browser/service_worker/service_worker_browsertest.cc

Issue 205033002: Browser side of new ServiceWorker 'sync' event. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Kinuko comments Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/callback.h" 6 #include "base/callback.h"
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "content/browser/service_worker/embedded_worker_instance.h" 9 #include "content/browser/service_worker/embedded_worker_instance.h"
10 #include "content/browser/service_worker/embedded_worker_registry.h" 10 #include "content/browser/service_worker/embedded_worker_registry.h"
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 status = SERVICE_WORKER_ERROR_FAILED; 252 status = SERVICE_WORKER_ERROR_FAILED;
253 base::RunLoop stop_run_loop; 253 base::RunLoop stop_run_loop;
254 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 254 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
255 base::Bind(&self::StopOnIOThread, this, 255 base::Bind(&self::StopOnIOThread, this,
256 stop_run_loop.QuitClosure(), 256 stop_run_loop.QuitClosure(),
257 &status)); 257 &status));
258 stop_run_loop.Run(); 258 stop_run_loop.Run();
259 ASSERT_EQ(SERVICE_WORKER_OK, status); 259 ASSERT_EQ(SERVICE_WORKER_OK, status);
260 } 260 }
261 261
262 void FetchTestHelper(const std::string& worker_url, 262 void FetchOnRegisteredWorker(ServiceWorkerFetchEventResult* result,
263 ServiceWorkerFetchEventResult* result, 263 ServiceWorkerResponse* response) {
264 ServiceWorkerResponse* response) {
265 RunOnIOThread(
266 base::Bind(&self::SetUpRegistrationOnIOThread, this, worker_url));
267
268 FetchResult fetch_result; 264 FetchResult fetch_result;
269 fetch_result.status = SERVICE_WORKER_ERROR_FAILED; 265 fetch_result.status = SERVICE_WORKER_ERROR_FAILED;
270 base::RunLoop fetch_run_loop; 266 base::RunLoop fetch_run_loop;
271 BrowserThread::PostTask(BrowserThread::IO, 267 BrowserThread::PostTask(BrowserThread::IO,
272 FROM_HERE, 268 FROM_HERE,
273 base::Bind(&self::FetchOnIOThread, 269 base::Bind(&self::FetchOnIOThread,
274 this, 270 this,
275 fetch_run_loop.QuitClosure(), 271 fetch_run_loop.QuitClosure(),
276 &fetch_result)); 272 &fetch_result));
277 fetch_run_loop.Run(); 273 fetch_run_loop.Run();
278 *result = fetch_result.result; 274 *result = fetch_result.result;
279 *response = fetch_result.response; 275 *response = fetch_result.response;
280 ASSERT_EQ(SERVICE_WORKER_OK, fetch_result.status); 276 ASSERT_EQ(SERVICE_WORKER_OK, fetch_result.status);
281 } 277 }
282 278
279 void FetchTestHelper(const std::string& worker_url,
280 ServiceWorkerFetchEventResult* result,
281 ServiceWorkerResponse* response) {
282 RunOnIOThread(
283 base::Bind(&self::SetUpRegistrationOnIOThread, this, worker_url));
284
285 FetchOnRegisteredWorker(result, response);
286 }
287
283 void SetUpRegistrationOnIOThread(const std::string& worker_url) { 288 void SetUpRegistrationOnIOThread(const std::string& worker_url) {
284 const int64 version_id = 1L; 289 const int64 version_id = 1L;
285 registration_ = new ServiceWorkerRegistration( 290 registration_ = new ServiceWorkerRegistration(
286 embedded_test_server()->GetURL("/*"), 291 embedded_test_server()->GetURL("/*"),
287 embedded_test_server()->GetURL(worker_url), 292 embedded_test_server()->GetURL(worker_url),
288 next_registration_id_++); 293 next_registration_id_++);
289 version_ = new ServiceWorkerVersion( 294 version_ = new ServiceWorkerVersion(
290 registration_, 295 registration_,
291 wrapper()->context()->embedded_worker_registry(), 296 wrapper()->context()->embedded_worker_registry(),
292 version_id); 297 version_id);
(...skipping 23 matching lines...) Expand all
316 version_->DispatchFetchEvent( 321 version_->DispatchFetchEvent(
317 request, CreateResponseReceiver(BrowserThread::UI, done, result)); 322 request, CreateResponseReceiver(BrowserThread::UI, done, result));
318 } 323 }
319 324
320 void StopOnIOThread(const base::Closure& done, 325 void StopOnIOThread(const base::Closure& done,
321 ServiceWorkerStatusCode* result) { 326 ServiceWorkerStatusCode* result) {
322 ASSERT_TRUE(version_); 327 ASSERT_TRUE(version_);
323 version_->StopWorker(CreateReceiver(BrowserThread::UI, done, result)); 328 version_->StopWorker(CreateReceiver(BrowserThread::UI, done, result));
324 } 329 }
325 330
331 void SyncEventOnIOThread(const base::Closure& done,
332 ServiceWorkerStatusCode* result) {
333 ASSERT_TRUE(BrowserThread::CurrentlyOn(BrowserThread::IO));
334 version_->DispatchSyncEvent(
335 CreateReceiver(BrowserThread::UI, done, result));
336 }
337
326 protected: 338 protected:
327 int64 next_registration_id_; 339 int64 next_registration_id_;
328 scoped_refptr<ServiceWorkerRegistration> registration_; 340 scoped_refptr<ServiceWorkerRegistration> registration_;
329 scoped_refptr<ServiceWorkerVersion> version_; 341 scoped_refptr<ServiceWorkerVersion> version_;
330 }; 342 };
331 343
332 IN_PROC_BROWSER_TEST_F(EmbeddedWorkerBrowserTest, StartAndStop) { 344 IN_PROC_BROWSER_TEST_F(EmbeddedWorkerBrowserTest, StartAndStop) {
333 // Start a worker and wait until OnStarted() is called. 345 // Start a worker and wait until OnStarted() is called.
334 base::RunLoop start_run_loop; 346 base::RunLoop start_run_loop;
335 done_closure_ = start_run_loop.QuitClosure(); 347 done_closure_ = start_run_loop.QuitClosure();
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, result); 438 ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, result);
427 } 439 }
428 440
429 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchEvent_Rejected) { 441 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, FetchEvent_Rejected) {
430 ServiceWorkerFetchEventResult result; 442 ServiceWorkerFetchEventResult result;
431 ServiceWorkerResponse response; 443 ServiceWorkerResponse response;
432 FetchTestHelper("/service_worker/fetch_event_error.js", &result, &response); 444 FetchTestHelper("/service_worker/fetch_event_error.js", &result, &response);
433 ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, result); 445 ASSERT_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, result);
434 } 446 }
435 447
448 IN_PROC_BROWSER_TEST_F(ServiceWorkerVersionBrowserTest, SyncEventHandled) {
449 RunOnIOThread(base::Bind(&self::SetUpRegistrationOnIOThread, this,
450 "/service_worker/sync.js"));
451 ServiceWorkerFetchEventResult result;
452 ServiceWorkerResponse response;
453
454 // Should 404 before sync event.
455 FetchOnRegisteredWorker(&result, &response);
456 EXPECT_EQ(404, response.status_code);
457
458 // Run the sync event.
459 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
460 base::RunLoop sync_run_loop;
461 BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
462 base::Bind(&self::SyncEventOnIOThread, this,
463 sync_run_loop.QuitClosure(),
464 &status));
465 sync_run_loop.Run();
466 ASSERT_EQ(SERVICE_WORKER_OK, status);
467
468 // Should 200 after sync event.
469 FetchOnRegisteredWorker(&result, &response);
470 EXPECT_EQ(200, response.status_code);
471 }
472
436 class ServiceWorkerBlackBoxBrowserTest : public ServiceWorkerBrowserTest { 473 class ServiceWorkerBlackBoxBrowserTest : public ServiceWorkerBrowserTest {
437 public: 474 public:
438 typedef ServiceWorkerBlackBoxBrowserTest self; 475 typedef ServiceWorkerBlackBoxBrowserTest self;
439 476
440 static void ExpectResultAndRun(bool expected, 477 static void ExpectResultAndRun(bool expected,
441 const base::Closure& continuation, 478 const base::Closure& continuation,
442 bool actual) { 479 bool actual) {
443 EXPECT_EQ(expected, actual); 480 EXPECT_EQ(expected, actual);
444 continuation.Run(); 481 continuation.Run();
445 } 482 }
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 base::Bind(&ServiceWorkerBlackBoxBrowserTest::FindRegistrationOnIO, 556 base::Bind(&ServiceWorkerBlackBoxBrowserTest::FindRegistrationOnIO,
520 this, 557 this,
521 embedded_test_server()->GetURL("/service_worker/empty.html"), 558 embedded_test_server()->GetURL("/service_worker/empty.html"),
522 &status, 559 &status,
523 &script_url)); 560 &script_url));
524 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, status); 561 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, status);
525 } 562 }
526 } 563 }
527 564
528 } // namespace content 565 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698