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

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: clean up tests 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,
531 const url::Origin& source_origin,
530 const std::vector<TransferredMessagePort>& sent_message_ports, 532 const std::vector<TransferredMessagePort>& sent_message_ports,
531 const StatusCallback& callback) { 533 const StatusCallback& callback) {
532 for (const TransferredMessagePort& port : sent_message_ports) 534 for (const TransferredMessagePort& port : sent_message_ports)
533 MessagePortService::GetInstance()->HoldMessages(port.id); 535 MessagePortService::GetInstance()->HoldMessages(port.id);
534 RunAfterStartWorker( 536
535 base::Bind( 537 switch (sender_provider_host->provider_type()) {
536 &ServiceWorkerVersion::DispatchExtendableMessageEventAfterStartWorker, 538 case SERVICE_WORKER_PROVIDER_FOR_WINDOW:
537 weak_factory_.GetWeakPtr(), message, sent_message_ports, callback), 539 case SERVICE_WORKER_PROVIDER_FOR_WORKER:
538 base::Bind(&RunErrorMessageCallback, sent_message_ports, callback)); 540 case SERVICE_WORKER_PROVIDER_FOR_SHARED_WORKER:
541 service_worker_client_utils::GetClient(
542 sender_provider_host,
543 base::Bind(
544 &ServiceWorkerVersion::DispatchExtendableMessageEventInternal<
545 ServiceWorkerClientInfo>,
546 weak_factory_.GetWeakPtr(), message, source_origin,
547 sent_message_ports, callback));
548 break;
549 case SERVICE_WORKER_PROVIDER_FOR_CONTROLLER:
550 // TODO(nhiroki): Decrement a reference to ServiceWorkerHandle if starting
551 // worker fails. Handles are managed by ServiceWorkerDispatcherHost, and
552 // we might need to make a new path to ask the dispatcher host to release
553 // the handle from ServiceWorkerVersion (http://crbug.com/543198).
554 RunSoon(base::Bind(
555 &ServiceWorkerVersion::DispatchExtendableMessageEventInternal<
556 ServiceWorkerObjectInfo>,
557 weak_factory_.GetWeakPtr(), message, source_origin,
558 sent_message_ports, callback,
559 sender_provider_host->GetOrCreateServiceWorkerHandle(
560 sender_provider_host->running_hosted_version())));
561 break;
562 case SERVICE_WORKER_PROVIDER_FOR_SANDBOXED_FRAME:
563 case SERVICE_WORKER_PROVIDER_UNKNOWN:
564 NOTREACHED() << sender_provider_host->provider_type();
565 RunSoon(base::Bind(&RunErrorMessageCallback, sent_message_ports, callback,
566 SERVICE_WORKER_ERROR_FAILED));
567 break;
568 }
539 } 569 }
540 570
541 void ServiceWorkerVersion::DispatchMessageEvent( 571 void ServiceWorkerVersion::DispatchMessageEvent(
542 const base::string16& message, 572 const base::string16& message,
543 const std::vector<TransferredMessagePort>& sent_message_ports, 573 const std::vector<TransferredMessagePort>& sent_message_ports,
544 const StatusCallback& callback) { 574 const StatusCallback& callback) {
545 for (const TransferredMessagePort& port : sent_message_ports) { 575 for (const TransferredMessagePort& port : sent_message_ports) {
546 MessagePortService::GetInstance()->HoldMessages(port.id); 576 MessagePortService::GetInstance()->HoldMessages(port.id);
547 } 577 }
548 578
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
901 931
902 void ServiceWorkerVersion::OnStartSentAndScriptEvaluated( 932 void ServiceWorkerVersion::OnStartSentAndScriptEvaluated(
903 ServiceWorkerStatusCode status) { 933 ServiceWorkerStatusCode status) {
904 if (status != SERVICE_WORKER_OK) { 934 if (status != SERVICE_WORKER_OK) {
905 scoped_refptr<ServiceWorkerVersion> protect(this); 935 scoped_refptr<ServiceWorkerVersion> protect(this);
906 RunCallbacks(this, &start_callbacks_, 936 RunCallbacks(this, &start_callbacks_,
907 DeduceStartWorkerFailureReason(status)); 937 DeduceStartWorkerFailureReason(status));
908 } 938 }
909 } 939 }
910 940
941 template <typename SourceInfo>
942 void ServiceWorkerVersion::DispatchExtendableMessageEventInternal(
943 const base::string16& message,
944 const url::Origin& source_origin,
945 const std::vector<TransferredMessagePort>& sent_message_ports,
946 const StatusCallback& callback,
947 const SourceInfo& source_info) {
948 if (!source_info.IsValid()) {
949 RunErrorMessageCallback(sent_message_ports, callback,
950 SERVICE_WORKER_ERROR_FAILED);
951 return;
952 }
953 RunAfterStartWorker(
954 base::Bind(
955 &ServiceWorkerVersion::DispatchExtendableMessageEventAfterStartWorker,
956 weak_factory_.GetWeakPtr(), message, source_origin,
957 sent_message_ports, ExtendableMessageEventSource(source_info),
958 callback),
959 base::Bind(&RunErrorMessageCallback, sent_message_ports, callback));
960 }
961
911 void ServiceWorkerVersion::DispatchExtendableMessageEventAfterStartWorker( 962 void ServiceWorkerVersion::DispatchExtendableMessageEventAfterStartWorker(
912 const base::string16& message, 963 const base::string16& message,
964 const url::Origin& source_origin,
913 const std::vector<TransferredMessagePort>& sent_message_ports, 965 const std::vector<TransferredMessagePort>& sent_message_ports,
966 const ExtendableMessageEventSource& source,
914 const StatusCallback& callback) { 967 const StatusCallback& callback) {
915 int request_id = 968 int request_id =
916 StartRequest(ServiceWorkerMetrics::EventType::MESSAGE, callback); 969 StartRequest(ServiceWorkerMetrics::EventType::MESSAGE, callback);
917 970
918 MessagePortMessageFilter* filter = 971 MessagePortMessageFilter* filter =
919 embedded_worker_->message_port_message_filter(); 972 embedded_worker_->message_port_message_filter();
920 std::vector<int> new_routing_ids; 973 std::vector<int> new_routing_ids;
921 filter->UpdateMessagePortsWithNewRoutes(sent_message_ports, &new_routing_ids); 974 filter->UpdateMessagePortsWithNewRoutes(sent_message_ports, &new_routing_ids);
922 975
976 ServiceWorkerMsg_ExtendableMessageEvent_Params params;
977 params.message = message;
978 params.source_origin = source_origin;
979 params.message_ports = sent_message_ports;
980 params.new_routing_ids = new_routing_ids;
981 params.source = source;
982
983 // Hide the client url if the client has a unique origin.
984 if (source_origin.unique()) {
985 if (params.source.client_info.IsValid())
986 params.source.client_info.url = GURL();
987 else
988 params.source.service_worker_info.url = GURL();
989 }
990
923 DispatchSimpleEvent<ServiceWorkerHostMsg_ExtendableMessageEventFinished>( 991 DispatchSimpleEvent<ServiceWorkerHostMsg_ExtendableMessageEventFinished>(
924 request_id, 992 request_id, ServiceWorkerMsg_ExtendableMessageEvent(request_id, params));
925 ServiceWorkerMsg_ExtendableMessageEvent(
926 request_id, message, sent_message_ports, new_routing_ids));
927 } 993 }
928 994
929 void ServiceWorkerVersion::OnGetClient(int request_id, 995 void ServiceWorkerVersion::OnGetClient(int request_id,
930 const std::string& client_uuid) { 996 const std::string& client_uuid) {
931 if (!context_) 997 if (!context_)
932 return; 998 return;
933 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", "ServiceWorkerVersion::OnGetClient", 999 TRACE_EVENT_ASYNC_BEGIN1("ServiceWorker", "ServiceWorkerVersion::OnGetClient",
934 request_id, "client_uuid", client_uuid); 1000 request_id, "client_uuid", client_uuid);
935 ServiceWorkerProviderHost* provider_host = 1001 ServiceWorkerProviderHost* provider_host =
936 context_->GetProviderHostByClientID(client_uuid); 1002 context_->GetProviderHostByClientID(client_uuid);
(...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after
1724 void ServiceWorkerVersion::OnBeginEvent() { 1790 void ServiceWorkerVersion::OnBeginEvent() {
1725 if (should_exclude_from_uma_ || running_status() != RUNNING || 1791 if (should_exclude_from_uma_ || running_status() != RUNNING ||
1726 idle_time_.is_null()) { 1792 idle_time_.is_null()) {
1727 return; 1793 return;
1728 } 1794 }
1729 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() - 1795 ServiceWorkerMetrics::RecordTimeBetweenEvents(base::TimeTicks::Now() -
1730 idle_time_); 1796 idle_time_);
1731 } 1797 }
1732 1798
1733 } // namespace content 1799 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_version.h ('k') | content/child/service_worker/web_service_worker_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698