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

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

Issue 1701843002: ServiceWorker: Implement 'source' and 'origin' attributes of ExtendableMessageEvent (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move_focus_into_utils
Patch Set: Created 4 years, 9 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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <map> 9 #include <map>
10 #include <string> 10 #include <string>
(...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 if (running_status() == RUNNING) { 531 if (running_status() == RUNNING) {
532 DCHECK(start_callbacks_.empty()); 532 DCHECK(start_callbacks_.empty());
533 task.Run(); 533 task.Run();
534 return; 534 return;
535 } 535 }
536 StartWorker(base::Bind(&RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(), 536 StartWorker(base::Bind(&RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(),
537 error_callback, task)); 537 error_callback, task));
538 } 538 }
539 539
540 void ServiceWorkerVersion::DispatchExtendableMessageEvent( 540 void ServiceWorkerVersion::DispatchExtendableMessageEvent(
541 ServiceWorkerProviderHost* sender_provider_host,
541 const base::string16& message, 542 const base::string16& message,
542 const std::vector<TransferredMessagePort>& sent_message_ports, 543 const std::vector<TransferredMessagePort>& sent_message_ports,
543 const StatusCallback& callback) { 544 const StatusCallback& callback) {
544 for (const TransferredMessagePort& port : sent_message_ports) 545 for (const TransferredMessagePort& port : sent_message_ports)
545 MessagePortService::GetInstance()->HoldMessages(port.id); 546 MessagePortService::GetInstance()->HoldMessages(port.id);
546 RunAfterStartWorker( 547
547 base::Bind( 548 switch (sender_provider_host->provider_type()) {
548 &ServiceWorkerVersion::DispatchExtendableMessageEventAfterStartWorker, 549 case SERVICE_WORKER_PROVIDER_FOR_WINDOW:
549 weak_factory_.GetWeakPtr(), message, sent_message_ports, callback), 550 case SERVICE_WORKER_PROVIDER_FOR_WORKER:
550 base::Bind(&RunErrorMessageCallback, sent_message_ports, callback)); 551 case SERVICE_WORKER_PROVIDER_FOR_SHARED_WORKER:
552 service_worker_client_utils::GetClient(
553 sender_provider_host,
554 base::Bind(
555 &ServiceWorkerVersion::DispatchExtendableMessageEventInternal<
556 ServiceWorkerClientInfo>,
557 weak_factory_.GetWeakPtr(), message, sent_message_ports,
558 callback));
559 break;
560 case SERVICE_WORKER_PROVIDER_FOR_CONTROLLER:
561 // TODO(nhiroki): Decrement a reference to ServiceWorkerHandle if starting
562 // worker fails. Handles are managed by ServiceWorkerDispatcherHost, and
563 // we might need to make a new path to ask the dispatcher host to release
564 // the handle from ServiceWorkerVersion (http://crbug.com/543198).
565 RunSoon(base::Bind(
566 &ServiceWorkerVersion::DispatchExtendableMessageEventInternal<
567 ServiceWorkerObjectInfo>,
568 weak_factory_.GetWeakPtr(), message, sent_message_ports, callback,
569 sender_provider_host->GetOrCreateServiceWorkerHandle(
570 sender_provider_host->running_hosted_version())));
571 break;
572 case SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME:
573 case SERVICE_WORKER_PROVIDER_UNKNOWN:
574 NOTREACHED() << sender_provider_host->provider_type();
575 RunSoon(base::Bind(&RunErrorMessageCallback, sent_message_ports, callback,
576 SERVICE_WORKER_ERROR_FAILED));
577 break;
578 }
551 } 579 }
552 580
553 void ServiceWorkerVersion::DispatchMessageEvent( 581 void ServiceWorkerVersion::DispatchMessageEvent(
554 const base::string16& message, 582 const base::string16& message,
555 const std::vector<TransferredMessagePort>& sent_message_ports, 583 const std::vector<TransferredMessagePort>& sent_message_ports,
556 const StatusCallback& callback) { 584 const StatusCallback& callback) {
557 for (const TransferredMessagePort& port : sent_message_ports) { 585 for (const TransferredMessagePort& port : sent_message_ports) {
558 MessagePortService::GetInstance()->HoldMessages(port.id); 586 MessagePortService::GetInstance()->HoldMessages(port.id);
559 } 587 }
560 588
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
915 943
916 void ServiceWorkerVersion::OnStartSentAndScriptEvaluated( 944 void ServiceWorkerVersion::OnStartSentAndScriptEvaluated(
917 ServiceWorkerStatusCode status) { 945 ServiceWorkerStatusCode status) {
918 if (status != SERVICE_WORKER_OK) { 946 if (status != SERVICE_WORKER_OK) {
919 scoped_refptr<ServiceWorkerVersion> protect(this); 947 scoped_refptr<ServiceWorkerVersion> protect(this);
920 RunCallbacks(this, &start_callbacks_, 948 RunCallbacks(this, &start_callbacks_,
921 DeduceStartWorkerFailureReason(status)); 949 DeduceStartWorkerFailureReason(status));
922 } 950 }
923 } 951 }
924 952
953 template <typename SourceInfo>
954 void ServiceWorkerVersion::DispatchExtendableMessageEventInternal(
955 const base::string16& message,
956 const std::vector<TransferredMessagePort>& sent_message_ports,
957 const StatusCallback& callback,
958 const SourceInfo& source_info) {
959 if (!source_info.IsValid()) {
960 RunErrorMessageCallback(sent_message_ports, callback,
961 SERVICE_WORKER_ERROR_FAILED);
962 return;
963 }
964 RunAfterStartWorker(
965 base::Bind(
966 &ServiceWorkerVersion::DispatchExtendableMessageEventAfterStartWorker,
967 weak_factory_.GetWeakPtr(), message, sent_message_ports,
968 ExtendableMessageEventSource(source_info), callback),
969 base::Bind(&RunErrorMessageCallback, sent_message_ports, callback));
970 }
971
925 void ServiceWorkerVersion::DispatchExtendableMessageEventAfterStartWorker( 972 void ServiceWorkerVersion::DispatchExtendableMessageEventAfterStartWorker(
926 const base::string16& message, 973 const base::string16& message,
927 const std::vector<TransferredMessagePort>& sent_message_ports, 974 const std::vector<TransferredMessagePort>& sent_message_ports,
975 const ExtendableMessageEventSource& source,
928 const StatusCallback& callback) { 976 const StatusCallback& callback) {
929 int request_id = 977 int request_id =
930 StartRequest(ServiceWorkerMetrics::EventType::MESSAGE, callback); 978 StartRequest(ServiceWorkerMetrics::EventType::MESSAGE, callback);
931 979
932 MessagePortMessageFilter* filter = 980 MessagePortMessageFilter* filter =
933 embedded_worker_->message_port_message_filter(); 981 embedded_worker_->message_port_message_filter();
934 std::vector<int> new_routing_ids; 982 std::vector<int> new_routing_ids;
935 filter->UpdateMessagePortsWithNewRoutes(sent_message_ports, &new_routing_ids); 983 filter->UpdateMessagePortsWithNewRoutes(sent_message_ports, &new_routing_ids);
936 984
937 DispatchSimpleEvent<ServiceWorkerHostMsg_ExtendableMessageEventFinished>( 985 DispatchSimpleEvent<ServiceWorkerHostMsg_ExtendableMessageEventFinished>(
938 request_id, 986 request_id,
939 ServiceWorkerMsg_ExtendableMessageEvent( 987 ServiceWorkerMsg_ExtendableMessageEvent(
940 request_id, message, sent_message_ports, new_routing_ids)); 988 request_id, message, sent_message_ports, new_routing_ids, source));
941 } 989 }
942 990
943 void ServiceWorkerVersion::OnGetClient(int request_id, 991 void ServiceWorkerVersion::OnGetClient(int request_id,
944 const std::string& client_uuid) { 992 const std::string& client_uuid) {
945 if (!context_) 993 if (!context_)
946 return; 994 return;
947 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", "ServiceWorkerVersion::OnGetClient", 995 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", "ServiceWorkerVersion::OnGetClient",
948 request_id, "client_uuid", client_uuid); 996 request_id, "client_uuid", client_uuid);
949 ServiceWorkerProviderHost* provider_host = 997 ServiceWorkerProviderHost* provider_host =
950 context_->GetProviderHostByClientID(client_uuid); 998 context_->GetProviderHostByClientID(client_uuid);
(...skipping 822 matching lines...) Expand 10 before | Expand all | Expand 10 after
1773 void ServiceWorkerVersion::OnBeginEvent() { 1821 void ServiceWorkerVersion::OnBeginEvent() {
1774 if (should_exclude_from_uma_ || running_status() != RUNNING || 1822 if (should_exclude_from_uma_ || running_status() != RUNNING ||
1775 idle_time_.is_null()) { 1823 idle_time_.is_null()) {
1776 return; 1824 return;
1777 } 1825 }
1778 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - 1826 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() -
1779 idle_time_); 1827 idle_time_);
1780 } 1828 }
1781 1829
1782 } // namespace content 1830 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698