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

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: address falken's comments 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 508 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 if (running_status() == RUNNING) { 519 if (running_status() == RUNNING) {
520 DCHECK(start_callbacks_.empty()); 520 DCHECK(start_callbacks_.empty());
521 task.Run(); 521 task.Run();
522 return; 522 return;
523 } 523 }
524 StartWorker(base::Bind(&RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(), 524 StartWorker(base::Bind(&RunTaskAfterStartWorker, weak_factory_.GetWeakPtr(),
525 error_callback, task)); 525 error_callback, task));
526 } 526 }
527 527
528 void ServiceWorkerVersion::DispatchExtendableMessageEvent( 528 void ServiceWorkerVersion::DispatchExtendableMessageEvent(
529 ServiceWorkerProviderHost* sender_provider_host,
529 const base::string16& message, 530 const base::string16& message,
530 const std::vector<TransferredMessagePort>& sent_message_ports, 531 const std::vector<TransferredMessagePort>& sent_message_ports,
531 const StatusCallback& callback) { 532 const StatusCallback& callback) {
532 for (const TransferredMessagePort& port : sent_message_ports) 533 for (const TransferredMessagePort& port : sent_message_ports)
533 MessagePortService::GetInstance()->HoldMessages(port.id); 534 MessagePortService::GetInstance()->HoldMessages(port.id);
534 RunAfterStartWorker( 535
535 base::Bind( 536 switch (sender_provider_host->provider_type()) {
536 &ServiceWorkerVersion::DispatchExtendableMessageEventAfterStartWorker, 537 case SERVICE_WORKER_PROVIDER_FOR_WINDOW:
537 weak_factory_.GetWeakPtr(), message, sent_message_ports, callback), 538 case SERVICE_WORKER_PROVIDER_FOR_WORKER:
538 base::Bind(&RunErrorMessageCallback, sent_message_ports, callback)); 539 case SERVICE_WORKER_PROVIDER_FOR_SHARED_WORKER:
540 service_worker_client_utils::GetClient(
541 sender_provider_host,
542 base::Bind(
543 &ServiceWorkerVersion::DispatchExtendableMessageEventInternal<
544 ServiceWorkerClientInfo>,
545 weak_factory_.GetWeakPtr(), message, sent_message_ports,
546 callback));
547 break;
548 case SERVICE_WORKER_PROVIDER_FOR_CONTROLLER:
549 // TODO(nhiroki): Decrement a reference to ServiceWorkerHandle if starting
550 // worker fails. Handles are managed by ServiceWorkerDispatcherHost, and
551 // we might need to make a new path to ask the dispatcher host to release
552 // the handle from ServiceWorkerVersion (http://crbug.com/543198).
553 RunSoon(base::Bind(
554 &ServiceWorkerVersion::DispatchExtendableMessageEventInternal<
555 ServiceWorkerObjectInfo>,
556 weak_factory_.GetWeakPtr(), message, sent_message_ports, callback,
557 sender_provider_host->GetOrCreateServiceWorkerHandle(
558 sender_provider_host->running_hosted_version())));
559 break;
560 case SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME:
561 case SERVICE_WORKER_PROVIDER_UNKNOWN:
562 NOTREACHED() << sender_provider_host->provider_type();
563 RunSoon(base::Bind(&RunErrorMessageCallback, sent_message_ports, callback,
564 SERVICE_WORKER_ERROR_FAILED));
565 break;
566 }
539 } 567 }
540 568
541 void ServiceWorkerVersion::DispatchMessageEvent( 569 void ServiceWorkerVersion::DispatchMessageEvent(
542 const base::string16& message, 570 const base::string16& message,
543 const std::vector<TransferredMessagePort>& sent_message_ports, 571 const std::vector<TransferredMessagePort>& sent_message_ports,
544 const StatusCallback& callback) { 572 const StatusCallback& callback) {
545 for (const TransferredMessagePort& port : sent_message_ports) { 573 for (const TransferredMessagePort& port : sent_message_ports) {
546 MessagePortService::GetInstance()->HoldMessages(port.id); 574 MessagePortService::GetInstance()->HoldMessages(port.id);
547 } 575 }
548 576
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
901 929
902 void ServiceWorkerVersion::OnStartSentAndScriptEvaluated( 930 void ServiceWorkerVersion::OnStartSentAndScriptEvaluated(
903 ServiceWorkerStatusCode status) { 931 ServiceWorkerStatusCode status) {
904 if (status != SERVICE_WORKER_OK) { 932 if (status != SERVICE_WORKER_OK) {
905 scoped_refptr<ServiceWorkerVersion> protect(this); 933 scoped_refptr<ServiceWorkerVersion> protect(this);
906 RunCallbacks(this, &start_callbacks_, 934 RunCallbacks(this, &start_callbacks_,
907 DeduceStartWorkerFailureReason(status)); 935 DeduceStartWorkerFailureReason(status));
908 } 936 }
909 } 937 }
910 938
939 template <typename SourceInfo>
940 void ServiceWorkerVersion::DispatchExtendableMessageEventInternal(
941 const base::string16& message,
942 const std::vector<TransferredMessagePort>& sent_message_ports,
943 const StatusCallback& callback,
944 const SourceInfo& source_info) {
945 if (!source_info.IsValid()) {
946 RunErrorMessageCallback(sent_message_ports, callback,
947 SERVICE_WORKER_ERROR_FAILED);
948 return;
949 }
950 RunAfterStartWorker(
951 base::Bind(
952 &ServiceWorkerVersion::DispatchExtendableMessageEventAfterStartWorker,
953 weak_factory_.GetWeakPtr(), message, sent_message_ports,
954 ExtendableMessageEventSource(source_info), callback),
955 base::Bind(&RunErrorMessageCallback, sent_message_ports, callback));
956 }
957
911 void ServiceWorkerVersion::DispatchExtendableMessageEventAfterStartWorker( 958 void ServiceWorkerVersion::DispatchExtendableMessageEventAfterStartWorker(
912 const base::string16& message, 959 const base::string16& message,
913 const std::vector<TransferredMessagePort>& sent_message_ports, 960 const std::vector<TransferredMessagePort>& sent_message_ports,
961 const ExtendableMessageEventSource& source,
914 const StatusCallback& callback) { 962 const StatusCallback& callback) {
915 int request_id = 963 int request_id =
916 StartRequest(ServiceWorkerMetrics::EventType::MESSAGE, callback); 964 StartRequest(ServiceWorkerMetrics::EventType::MESSAGE, callback);
917 965
918 MessagePortMessageFilter* filter = 966 MessagePortMessageFilter* filter =
919 embedded_worker_->message_port_message_filter(); 967 embedded_worker_->message_port_message_filter();
920 std::vector<int> new_routing_ids; 968 std::vector<int> new_routing_ids;
921 filter->UpdateMessagePortsWithNewRoutes(sent_message_ports, &new_routing_ids); 969 filter->UpdateMessagePortsWithNewRoutes(sent_message_ports, &new_routing_ids);
922 970
923 DispatchSimpleEvent<ServiceWorkerHostMsg_ExtendableMessageEventFinished>( 971 DispatchSimpleEvent<ServiceWorkerHostMsg_ExtendableMessageEventFinished>(
924 request_id, 972 request_id,
925 ServiceWorkerMsg_ExtendableMessageEvent( 973 ServiceWorkerMsg_ExtendableMessageEvent(
926 request_id, message, sent_message_ports, new_routing_ids)); 974 request_id, message, sent_message_ports, new_routing_ids, source));
927 } 975 }
928 976
929 void ServiceWorkerVersion::OnGetClient(int request_id, 977 void ServiceWorkerVersion::OnGetClient(int request_id,
930 const std::string& client_uuid) { 978 const std::string& client_uuid) {
931 if (!context_) 979 if (!context_)
932 return; 980 return;
933 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", "ServiceWorkerVersion::OnGetClient", 981 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", "ServiceWorkerVersion::OnGetClient",
934 request_id, "client_uuid", client_uuid); 982 request_id, "client_uuid", client_uuid);
935 ServiceWorkerProviderHost* provider_host = 983 ServiceWorkerProviderHost* provider_host =
936 context_->GetProviderHostByClientID(client_uuid); 984 context_->GetProviderHostByClientID(client_uuid);
(...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after
1718 void ServiceWorkerVersion::OnBeginEvent() { 1766 void ServiceWorkerVersion::OnBeginEvent() {
1719 if (should_exclude_from_uma_ || running_status() != RUNNING || 1767 if (should_exclude_from_uma_ || running_status() != RUNNING ||
1720 idle_time_.is_null()) { 1768 idle_time_.is_null()) {
1721 return; 1769 return;
1722 } 1770 }
1723 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - 1771 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() -
1724 idle_time_); 1772 idle_time_);
1725 } 1773 }
1726 1774
1727 } // namespace content 1775 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698