summaryrefslogtreecommitdiff
path: root/chromium/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc')
-rw-r--r--chromium/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc135
1 files changed, 69 insertions, 66 deletions
diff --git a/chromium/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc b/chromium/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc
index f5dd6631a21..8b71293e79f 100644
--- a/chromium/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc
+++ b/chromium/third_party/blink/renderer/modules/service_worker/service_worker_global_scope_proxy.cc
@@ -38,6 +38,7 @@
#include "third_party/blink/public/mojom/service_worker/service_worker_client.mojom-blink.h"
#include "third_party/blink/public/mojom/service_worker/service_worker_event_status.mojom-blink.h"
#include "third_party/blink/public/platform/modules/notifications/web_notification_data.h"
+#include "third_party/blink/public/platform/modules/service_worker/web_service_worker_error.h"
#include "third_party/blink/public/platform/modules/service_worker/web_service_worker_request.h"
#include "third_party/blink/public/web/modules/service_worker/web_service_worker_context_client.h"
#include "third_party/blink/public/web/web_serialized_script_value.h"
@@ -86,6 +87,7 @@
#include "third_party/blink/renderer/platform/loader/fetch/resource_response.h"
#include "third_party/blink/renderer/platform/wtf/assertions.h"
#include "third_party/blink/renderer/platform/wtf/functional.h"
+#include "third_party/blink/renderer/platform/wtf/std_lib_extras.h"
namespace mojo {
@@ -143,10 +145,11 @@ struct TypeConverter<blink::mojom::blink::NotificationDataPtr,
static blink::mojom::blink::NotificationDataPtr Convert(
const blink::WebNotificationData& input) {
Vector<int32_t> vibration_pattern;
- vibration_pattern.Append(input.vibrate.Data(), input.vibrate.size());
+ vibration_pattern.Append(input.vibrate.Data(),
+ SafeCast<wtf_size_t>(input.vibrate.size()));
Vector<uint8_t> data;
- data.Append(input.data.Data(), input.data.size());
+ data.Append(input.data.Data(), SafeCast<wtf_size_t>(input.data.size()));
Vector<blink::mojom::blink::NotificationActionPtr> actions;
for (const auto& web_action : input.actions) {
@@ -169,7 +172,8 @@ namespace blink {
ServiceWorkerGlobalScopeProxy* ServiceWorkerGlobalScopeProxy::Create(
WebEmbeddedWorkerImpl& embedded_worker,
WebServiceWorkerContextClient& client) {
- return new ServiceWorkerGlobalScopeProxy(embedded_worker, client);
+ return MakeGarbageCollected<ServiceWorkerGlobalScopeProxy>(embedded_worker,
+ client);
}
ServiceWorkerGlobalScopeProxy::~ServiceWorkerGlobalScopeProxy() {
@@ -192,9 +196,9 @@ void ServiceWorkerGlobalScopeProxy::BindServiceWorkerHost(
}
void ServiceWorkerGlobalScopeProxy::SetRegistration(
- std::unique_ptr<WebServiceWorkerRegistration::Handle> handle) {
+ WebServiceWorkerRegistrationObjectInfo info) {
DCHECK(WorkerGlobalScope()->IsContextThread());
- WorkerGlobalScope()->SetRegistration(std::move(handle));
+ WorkerGlobalScope()->SetRegistration(std::move(info));
}
void ServiceWorkerGlobalScopeProxy::ReadyToEvaluateScript() {
@@ -215,13 +219,13 @@ void ServiceWorkerGlobalScopeProxy::DispatchBackgroundFetchAbortEvent(
// BackgroundFetchEvent::Create which eventually calls ToV8.
ScriptState::Scope scope(script_state);
- BackgroundFetchEventInit init;
- init.setRegistration(new BackgroundFetchRegistration(
+ BackgroundFetchEventInit* init = BackgroundFetchEventInit::Create();
+ init->setRegistration(new BackgroundFetchRegistration(
WorkerGlobalScope()->registration() /* service_worker_registration */,
registration));
BackgroundFetchEvent* event = BackgroundFetchEvent::Create(
- EventTypeNames::backgroundfetchabort, init, observer);
+ event_type_names::kBackgroundfetchabort, init, observer);
WorkerGlobalScope()->DispatchExtendableEvent(event, observer);
}
@@ -233,13 +237,13 @@ void ServiceWorkerGlobalScopeProxy::DispatchBackgroundFetchClickEvent(
WaitUntilObserver* observer = WaitUntilObserver::Create(
WorkerGlobalScope(), WaitUntilObserver::kBackgroundFetchClick, event_id);
- BackgroundFetchEventInit init;
- init.setRegistration(new BackgroundFetchRegistration(
+ BackgroundFetchEventInit* init = BackgroundFetchEventInit::Create();
+ init->setRegistration(new BackgroundFetchRegistration(
WorkerGlobalScope()->registration() /* service_worker_registration */,
registration));
BackgroundFetchEvent* event = BackgroundFetchEvent::Create(
- EventTypeNames::backgroundfetchclick, init, observer);
+ event_type_names::kBackgroundfetchclick, init, observer);
WorkerGlobalScope()->DispatchExtendableEvent(event, observer);
}
@@ -258,13 +262,13 @@ void ServiceWorkerGlobalScopeProxy::DispatchBackgroundFetchFailEvent(
// BackgroundFetchSettledEvent::Create which eventually calls ToV8.
ScriptState::Scope scope(script_state);
- BackgroundFetchEventInit init;
- init.setRegistration(new BackgroundFetchRegistration(
+ BackgroundFetchEventInit* init = BackgroundFetchEventInit::Create();
+ init->setRegistration(new BackgroundFetchRegistration(
WorkerGlobalScope()->registration() /* service_worker_registration */,
registration));
BackgroundFetchUpdateUIEvent* event = BackgroundFetchUpdateUIEvent::Create(
- EventTypeNames::backgroundfetchfail, init, observer,
+ event_type_names::kBackgroundfetchfail, init, observer,
worker_global_scope_->registration());
WorkerGlobalScope()->DispatchExtendableEvent(event, observer);
@@ -285,13 +289,13 @@ void ServiceWorkerGlobalScopeProxy::DispatchBackgroundFetchSuccessEvent(
// BackgroundFetchSettledEvent::Create which eventually calls ToV8.
ScriptState::Scope scope(script_state);
- BackgroundFetchEventInit init;
- init.setRegistration(new BackgroundFetchRegistration(
+ BackgroundFetchEventInit* init = BackgroundFetchEventInit::Create();
+ init->setRegistration(new BackgroundFetchRegistration(
WorkerGlobalScope()->registration() /* service_worker_registration */,
registration));
BackgroundFetchUpdateUIEvent* event = BackgroundFetchUpdateUIEvent::Create(
- EventTypeNames::backgroundfetchsuccess, init, observer,
+ event_type_names::kBackgroundfetchsuccess, init, observer,
worker_global_scope_->registration());
WorkerGlobalScope()->DispatchExtendableEvent(event, observer);
@@ -301,8 +305,8 @@ void ServiceWorkerGlobalScopeProxy::DispatchActivateEvent(int event_id) {
DCHECK(WorkerGlobalScope()->IsContextThread());
WaitUntilObserver* observer = WaitUntilObserver::Create(
WorkerGlobalScope(), WaitUntilObserver::kActivate, event_id);
- Event* event = ExtendableEvent::Create(EventTypeNames::activate,
- ExtendableEventInit(), observer);
+ Event* event = ExtendableEvent::Create(
+ event_type_names::kActivate, ExtendableEventInit::Create(), observer);
WorkerGlobalScope()->DispatchExtendableEvent(event, observer);
}
@@ -314,11 +318,11 @@ void ServiceWorkerGlobalScopeProxy::DispatchCookieChangeEvent(
WaitUntilObserver* observer = WaitUntilObserver::Create(
WorkerGlobalScope(), WaitUntilObserver::kCookieChange, event_id);
- HeapVector<CookieListItem> changed;
- HeapVector<CookieListItem> deleted;
+ HeapVector<Member<CookieListItem>> changed;
+ HeapVector<Member<CookieListItem>> deleted;
CookieChangeEvent::ToEventInfo(cookie, change_cause, changed, deleted);
Event* event = ExtendableCookieChangeEvent::Create(
- EventTypeNames::cookiechange, std::move(changed), std::move(deleted),
+ event_type_names::kCookiechange, std::move(changed), std::move(deleted),
observer);
// TODO(pwnall): Handle handle the case when
@@ -393,16 +397,18 @@ void ServiceWorkerGlobalScopeProxy::DispatchFetchEvent(
Request* request = Request::Create(
WorkerGlobalScope()->ScriptController()->GetScriptState(), web_request);
request->getHeaders()->SetGuard(Headers::kImmutableGuard);
- FetchEventInit event_init;
- event_init.setCancelable(true);
- event_init.setRequest(request);
- event_init.setClientId(
+ FetchEventInit* event_init = FetchEventInit::Create();
+ event_init->setCancelable(true);
+ event_init->setRequest(request);
+ event_init->setClientId(
web_request.IsMainResourceLoad() ? WebString() : web_request.ClientId());
- event_init.setIsReload(web_request.IsReload());
+ event_init->setResultingClientId(
+ !web_request.IsMainResourceLoad() ? WebString() : web_request.ClientId());
+ event_init->setIsReload(web_request.IsReload());
ScriptState* script_state =
WorkerGlobalScope()->ScriptController()->GetScriptState();
FetchEvent* fetch_event = FetchEvent::Create(
- script_state, EventTypeNames::fetch, event_init, respond_with_observer,
+ script_state, event_type_names::kFetch, event_init, respond_with_observer,
wait_until_observer, navigation_preload_sent);
if (navigation_preload_sent) {
// Keep |fetchEvent| until OnNavigationPreloadComplete() or
@@ -468,8 +474,9 @@ void ServiceWorkerGlobalScopeProxy::DispatchInstallEvent(int event_id) {
DCHECK(WorkerGlobalScope()->IsContextThread());
WaitUntilObserver* observer = WaitUntilObserver::Create(
WorkerGlobalScope(), WaitUntilObserver::kInstall, event_id);
- Event* event = InstallEvent::Create(
- EventTypeNames::install, ExtendableEventInit(), event_id, observer);
+ Event* event =
+ InstallEvent::Create(event_type_names::kInstall,
+ ExtendableEventInit::Create(), event_id, observer);
WorkerGlobalScope()->SetIsInstalling(true);
WorkerGlobalScope()->DispatchExtendableEvent(event, observer);
}
@@ -483,14 +490,14 @@ void ServiceWorkerGlobalScopeProxy::DispatchNotificationClickEvent(
DCHECK(WorkerGlobalScope()->IsContextThread());
WaitUntilObserver* observer = WaitUntilObserver::Create(
WorkerGlobalScope(), WaitUntilObserver::kNotificationClick, event_id);
- NotificationEventInit event_init;
- event_init.setNotification(Notification::Create(
+ NotificationEventInit* event_init = NotificationEventInit::Create();
+ event_init->setNotification(Notification::Create(
WorkerGlobalScope(), notification_id,
mojom::blink::NotificationData::From(data), true /* showing */));
if (0 <= action_index && action_index < static_cast<int>(data.actions.size()))
- event_init.setAction(data.actions[action_index].action);
- event_init.setReply(reply);
- Event* event = NotificationEvent::Create(EventTypeNames::notificationclick,
+ event_init->setAction(data.actions[action_index].action);
+ event_init->setReply(reply);
+ Event* event = NotificationEvent::Create(event_type_names::kNotificationclick,
event_init, observer);
WorkerGlobalScope()->DispatchExtendableEvent(event, observer);
}
@@ -502,12 +509,12 @@ void ServiceWorkerGlobalScopeProxy::DispatchNotificationCloseEvent(
DCHECK(WorkerGlobalScope()->IsContextThread());
WaitUntilObserver* observer = WaitUntilObserver::Create(
WorkerGlobalScope(), WaitUntilObserver::kNotificationClose, event_id);
- NotificationEventInit event_init;
- event_init.setAction(WTF::String()); // initialize as null.
- event_init.setNotification(Notification::Create(
+ NotificationEventInit* event_init = NotificationEventInit::Create();
+ event_init->setAction(WTF::String()); // initialize as null.
+ event_init->setNotification(Notification::Create(
WorkerGlobalScope(), notification_id,
mojom::blink::NotificationData::From(data), false /* showing */));
- Event* event = NotificationEvent::Create(EventTypeNames::notificationclose,
+ Event* event = NotificationEvent::Create(event_type_names::kNotificationclose,
event_init, observer);
WorkerGlobalScope()->DispatchExtendableEvent(event, observer);
}
@@ -517,7 +524,7 @@ void ServiceWorkerGlobalScopeProxy::DispatchPushEvent(int event_id,
DCHECK(WorkerGlobalScope()->IsContextThread());
WaitUntilObserver* observer = WaitUntilObserver::Create(
WorkerGlobalScope(), WaitUntilObserver::kPush, event_id);
- Event* event = PushEvent::Create(EventTypeNames::push,
+ Event* event = PushEvent::Create(event_type_names::kPush,
PushMessageData::Create(data), observer);
WorkerGlobalScope()->DispatchExtendableEvent(event, observer);
}
@@ -529,7 +536,7 @@ void ServiceWorkerGlobalScopeProxy::DispatchSyncEvent(int event_id,
WaitUntilObserver* observer = WaitUntilObserver::Create(
WorkerGlobalScope(), WaitUntilObserver::kSync, event_id);
Event* event =
- SyncEvent::Create(EventTypeNames::sync, id, last_chance, observer);
+ SyncEvent::Create(event_type_names::kSync, id, last_chance, observer);
WorkerGlobalScope()->DispatchExtendableEvent(event, observer);
}
@@ -542,7 +549,7 @@ void ServiceWorkerGlobalScopeProxy::DispatchAbortPaymentEvent(int event_id) {
wait_until_observer);
Event* event = AbortPaymentEvent::Create(
- EventTypeNames::abortpayment, ExtendableEventInit(),
+ event_type_names::kAbortpayment, ExtendableEventInit::Create(),
respond_with_observer, wait_until_observer);
WorkerGlobalScope()->DispatchExtendableEventWithRespondWith(
@@ -560,7 +567,7 @@ void ServiceWorkerGlobalScopeProxy::DispatchCanMakePaymentEvent(
wait_until_observer);
Event* event = CanMakePaymentEvent::Create(
- EventTypeNames::canmakepayment,
+ event_type_names::kCanmakepayment,
PaymentEventDataConversion::ToCanMakePaymentEventInit(
WorkerGlobalScope()->ScriptController()->GetScriptState(),
web_event_data),
@@ -581,7 +588,7 @@ void ServiceWorkerGlobalScopeProxy::DispatchPaymentRequestEvent(
wait_until_observer);
Event* event = PaymentRequestEvent::Create(
- EventTypeNames::paymentrequest,
+ event_type_names::kPaymentrequest,
PaymentEventDataConversion::ToPaymentRequestEventInit(
WorkerGlobalScope()->ScriptController()->GetScriptState(),
web_app_request),
@@ -593,7 +600,7 @@ void ServiceWorkerGlobalScopeProxy::DispatchPaymentRequestEvent(
bool ServiceWorkerGlobalScopeProxy::HasFetchEventHandler() {
DCHECK(WorkerGlobalScope()->IsContextThread());
- return WorkerGlobalScope()->HasEventListeners(EventTypeNames::fetch);
+ return WorkerGlobalScope()->HasEventListeners(event_type_names::kFetch);
}
void ServiceWorkerGlobalScopeProxy::CountFeature(WebFeature feature) {
@@ -624,19 +631,6 @@ void ServiceWorkerGlobalScopeProxy::ReportConsoleMessage(
location->Url());
}
-void ServiceWorkerGlobalScopeProxy::PostMessageToPageInspector(
- int session_id,
- const String& message) {
- DCHECK(embedded_worker_);
- PostCrossThreadTask(
- *parent_execution_context_task_runners_->Get(
- TaskType::kInternalInspector),
- FROM_HERE,
- CrossThreadBind(&WebEmbeddedWorkerImpl::PostMessageToPageInspector,
- CrossThreadUnretained(embedded_worker_), session_id,
- message));
-}
-
void ServiceWorkerGlobalScopeProxy::DidCreateWorkerGlobalScope(
WorkerOrWorkletGlobalScope* worker_global_scope) {
DCHECK(!worker_global_scope_);
@@ -658,6 +652,20 @@ void ServiceWorkerGlobalScopeProxy::DidLoadInstalledScript() {
Client().WorkerScriptLoaded();
}
+void ServiceWorkerGlobalScopeProxy::DidFailToLoadInstalledClassicScript() {
+ DCHECK(WorkerGlobalScope()->IsContextThread());
+
+ // Tell ServiceWorkerContextClient about the failure. The generic
+ // WorkerContextFailedToStart() wouldn't make sense because
+ // WorkerContextStarted() was already called.
+ Client().FailedToLoadInstalledClassicScript();
+}
+
+void ServiceWorkerGlobalScopeProxy::DidFailToFetchModuleScript() {
+ DCHECK(WorkerGlobalScope()->IsContextThread());
+ Client().FailedToFetchModuleScript();
+}
+
void ServiceWorkerGlobalScopeProxy::WillEvaluateClassicScript(
size_t script_size,
size_t cached_metadata_size) {
@@ -695,18 +703,13 @@ void ServiceWorkerGlobalScopeProxy::DidEvaluateModuleScript(bool success) {
void ServiceWorkerGlobalScopeProxy::DidCloseWorkerGlobalScope() {
DCHECK(WorkerGlobalScope()->IsContextThread());
- // close() is not web-exposed. This is called when ServiceWorkerGlobalScope
- // internally requests close() due to failure on startup when installed
- // scripts couldn't be read.
+ // close() is not web-exposed for ServiceWorker. This is called when
+ // ServiceWorkerGlobalScope internally requests close(), for example, due to
+ // failure on startup when installed scripts couldn't be read.
//
// This may look like a roundabout way to terminate the thread, but close()
// seems like the standard way to initiate termination from inside the thread.
- // Tell ServiceWorkerContextClient about the failure. The generic
- // WorkerContextFailedToStart() wouldn't make sense because
- // WorkerContextStarted() was already called.
- Client().FailedToLoadInstalledScript();
-
// ServiceWorkerGlobalScope expects us to terminate the thread, so request
// that here.
PostCrossThreadTask(