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

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

Issue 296463005: Push API: fire push event from chrome://serviceworker-internals/ (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 7 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/browser/service_worker/service_worker_version.h" 5 #include "content/browser/service_worker/service_worker_version.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "base/strings/string16.h" 9 #include "base/strings/string16.h"
10 #include "content/browser/service_worker/embedded_worker_instance.h" 10 #include "content/browser/service_worker/embedded_worker_instance.h"
(...skipping 284 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 295
296 int request_id = sync_callbacks_.Add(new StatusCallback(callback)); 296 int request_id = sync_callbacks_.Add(new StatusCallback(callback));
297 ServiceWorkerStatusCode status = embedded_worker_->SendMessage( 297 ServiceWorkerStatusCode status = embedded_worker_->SendMessage(
298 ServiceWorkerMsg_SyncEvent(request_id)); 298 ServiceWorkerMsg_SyncEvent(request_id));
299 if (status != SERVICE_WORKER_OK) { 299 if (status != SERVICE_WORKER_OK) {
300 sync_callbacks_.Remove(request_id); 300 sync_callbacks_.Remove(request_id);
301 RunSoon(base::Bind(callback, status)); 301 RunSoon(base::Bind(callback, status));
302 } 302 }
303 } 303 }
304 304
305 void ServiceWorkerVersion::DispatchPushEvent(const StatusCallback& callback) {
306 DCHECK_EQ(ACTIVE, status()) << status();
307
308 //~ if (!CommandLine::ForCurrentProcess()->HasSwitch(
Peter Beverloo 2014/05/22 16:52:25 Guard behind experimental web platform features (a
Michael van Ouwerkerk 2014/05/23 18:24:50 Done.
309 //~ switches::kEnableServiceWorkerPush)) {
310 //~ callback.Run(SERVICE_WORKER_ERROR_ABORT);
311 //~ return;
312 //~ }
313
314 if (running_status() != RUNNING) {
315 // Schedule calling this method after starting the worker.
316 StartWorker(base::Bind(&RunTaskAfterStartWorker,
317 weak_factory_.GetWeakPtr(), callback,
318 base::Bind(&self::DispatchPushEvent,
319 weak_factory_.GetWeakPtr(),
320 callback)));
321 return;
322 }
323
324 int request_id = push_callbacks_.Add(new StatusCallback(callback));
325 ServiceWorkerStatusCode status = embedded_worker_->SendMessage(
326 ServiceWorkerMsg_PushEvent(request_id));
327 if (status != SERVICE_WORKER_OK) {
328 push_callbacks_.Remove(request_id);
329 RunSoon(base::Bind(callback, status));
330 }
331 }
332
305 void ServiceWorkerVersion::AddProcessToWorker(int process_id) { 333 void ServiceWorkerVersion::AddProcessToWorker(int process_id) {
306 embedded_worker_->AddProcessReference(process_id); 334 embedded_worker_->AddProcessReference(process_id);
307 } 335 }
308 336
309 void ServiceWorkerVersion::RemoveProcessFromWorker(int process_id) { 337 void ServiceWorkerVersion::RemoveProcessFromWorker(int process_id) {
310 embedded_worker_->ReleaseProcessReference(process_id); 338 embedded_worker_->ReleaseProcessReference(process_id);
311 } 339 }
312 340
313 bool ServiceWorkerVersion::HasProcessToRun() const { 341 bool ServiceWorkerVersion::HasProcessToRun() const {
314 return embedded_worker_->HasProcessToRun(); 342 return embedded_worker_->HasProcessToRun();
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 &StatusCallback::Run, 415 &StatusCallback::Run,
388 MakeTuple(SERVICE_WORKER_ERROR_INSTALL_WORKER_FAILED)); 416 MakeTuple(SERVICE_WORKER_ERROR_INSTALL_WORKER_FAILED));
389 RunIDMapCallbacks(&fetch_callbacks_, 417 RunIDMapCallbacks(&fetch_callbacks_,
390 &FetchCallback::Run, 418 &FetchCallback::Run,
391 MakeTuple(SERVICE_WORKER_ERROR_FAILED, 419 MakeTuple(SERVICE_WORKER_ERROR_FAILED,
392 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK, 420 SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK,
393 ServiceWorkerResponse())); 421 ServiceWorkerResponse()));
394 RunIDMapCallbacks(&sync_callbacks_, 422 RunIDMapCallbacks(&sync_callbacks_,
395 &StatusCallback::Run, 423 &StatusCallback::Run,
396 MakeTuple(SERVICE_WORKER_ERROR_FAILED)); 424 MakeTuple(SERVICE_WORKER_ERROR_FAILED));
425 RunIDMapCallbacks(&push_callbacks_,
426 &StatusCallback::Run,
427 MakeTuple(SERVICE_WORKER_ERROR_FAILED));
397 428
398 FOR_EACH_OBSERVER(Listener, listeners_, OnWorkerStopped(this)); 429 FOR_EACH_OBSERVER(Listener, listeners_, OnWorkerStopped(this));
399 } 430 }
400 431
401 void ServiceWorkerVersion::OnReportException( 432 void ServiceWorkerVersion::OnReportException(
402 const base::string16& error_message, 433 const base::string16& error_message,
403 int line_number, 434 int line_number,
404 int column_number, 435 int column_number,
405 const GURL& source_url) { 436 const GURL& source_url) {
406 FOR_EACH_OBSERVER( 437 FOR_EACH_OBSERVER(
(...skipping 24 matching lines...) Expand all
431 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_GetClientDocuments, 462 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_GetClientDocuments,
432 OnGetClientDocuments) 463 OnGetClientDocuments)
433 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ActivateEventFinished, 464 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_ActivateEventFinished,
434 OnActivateEventFinished) 465 OnActivateEventFinished)
435 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_InstallEventFinished, 466 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_InstallEventFinished,
436 OnInstallEventFinished) 467 OnInstallEventFinished)
437 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_FetchEventFinished, 468 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_FetchEventFinished,
438 OnFetchEventFinished) 469 OnFetchEventFinished)
439 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_SyncEventFinished, 470 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_SyncEventFinished,
440 OnSyncEventFinished) 471 OnSyncEventFinished)
472 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PushEventFinished,
473 OnPushEventFinished)
441 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PostMessageToDocument, 474 IPC_MESSAGE_HANDLER(ServiceWorkerHostMsg_PostMessageToDocument,
442 OnPostMessageToDocument) 475 OnPostMessageToDocument)
443 IPC_MESSAGE_UNHANDLED(handled = false) 476 IPC_MESSAGE_UNHANDLED(handled = false)
444 IPC_END_MESSAGE_MAP() 477 IPC_END_MESSAGE_MAP()
445 return handled; 478 return handled;
446 } 479 }
447 480
448 void ServiceWorkerVersion::RunStartWorkerCallbacksOnError( 481 void ServiceWorkerVersion::RunStartWorkerCallbacksOnError(
449 ServiceWorkerStatusCode status) { 482 ServiceWorkerStatusCode status) {
450 if (status != SERVICE_WORKER_OK) 483 if (status != SERVICE_WORKER_OK)
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 if (!callback) { 584 if (!callback) {
552 NOTREACHED() << "Got unexpected message: " << request_id; 585 NOTREACHED() << "Got unexpected message: " << request_id;
553 return; 586 return;
554 } 587 }
555 588
556 scoped_refptr<ServiceWorkerVersion> protect(this); 589 scoped_refptr<ServiceWorkerVersion> protect(this);
557 callback->Run(SERVICE_WORKER_OK); 590 callback->Run(SERVICE_WORKER_OK);
558 sync_callbacks_.Remove(request_id); 591 sync_callbacks_.Remove(request_id);
559 } 592 }
560 593
594 void ServiceWorkerVersion::OnPushEventFinished(
595 int request_id) {
596 StatusCallback* callback = push_callbacks_.Lookup(request_id);
597 if (!callback) {
598 NOTREACHED() << "Got unexpected message: " << request_id;
599 return;
600 }
601
602 scoped_refptr<ServiceWorkerVersion> protect(this);
603 callback->Run(SERVICE_WORKER_OK);
604 push_callbacks_.Remove(request_id);
605 }
606
561 void ServiceWorkerVersion::OnPostMessageToDocument( 607 void ServiceWorkerVersion::OnPostMessageToDocument(
562 int client_id, 608 int client_id,
563 const base::string16& message, 609 const base::string16& message,
564 const std::vector<int>& sent_message_port_ids) { 610 const std::vector<int>& sent_message_port_ids) {
565 ServiceWorkerProviderHost* provider_host = 611 ServiceWorkerProviderHost* provider_host =
566 controllee_by_id_.Lookup(client_id); 612 controllee_by_id_.Lookup(client_id);
567 if (!provider_host) { 613 if (!provider_host) {
568 // The client may already have been closed, just ignore. 614 // The client may already have been closed, just ignore.
569 return; 615 return;
570 } 616 }
571 provider_host->PostMessage(message, sent_message_port_ids); 617 provider_host->PostMessage(message, sent_message_port_ids);
572 } 618 }
573 619
574 void ServiceWorkerVersion::ScheduleStopWorker() { 620 void ServiceWorkerVersion::ScheduleStopWorker() {
575 if (running_status() != RUNNING) 621 if (running_status() != RUNNING)
576 return; 622 return;
577 if (stop_worker_timer_.IsRunning()) { 623 if (stop_worker_timer_.IsRunning()) {
578 stop_worker_timer_.Reset(); 624 stop_worker_timer_.Reset();
579 return; 625 return;
580 } 626 }
581 stop_worker_timer_.Start( 627 stop_worker_timer_.Start(
582 FROM_HERE, base::TimeDelta::FromSeconds(kStopWorkerDelay), 628 FROM_HERE, base::TimeDelta::FromSeconds(kStopWorkerDelay),
583 base::Bind(&ServiceWorkerVersion::StopWorker, 629 base::Bind(&ServiceWorkerVersion::StopWorker,
584 weak_factory_.GetWeakPtr(), 630 weak_factory_.GetWeakPtr(),
585 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback))); 631 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)));
586 } 632 }
587 633
588 } // namespace content 634 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698