blob: 1d4d560bc03f97d18caa47a40b2323c2a8276c7a [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "modules/payments/CanMakePaymentRespondWithObserver.h"
#include <v8.h>
#include "bindings/core/v8/ScriptValue.h"
#include "bindings/core/v8/V8BindingForCore.h"
#include "core/dom/ExecutionContext.h"
#include "modules/payments/PaymentHandlerUtils.h"
#include "modules/serviceworkers/ServiceWorkerGlobalScopeClient.h"
#include "modules/serviceworkers/WaitUntilObserver.h"
namespace blink {
CanMakePaymentRespondWithObserver::CanMakePaymentRespondWithObserver(
ExecutionContext* context,
int event_id,
WaitUntilObserver* observer)
: RespondWithObserver(context, event_id, observer) {}
void CanMakePaymentRespondWithObserver::OnResponseRejected(
blink::mojom::ServiceWorkerResponseError error) {
PaymentHandlerUtils::ReportResponseError(GetExecutionContext(),
"CanMakePaymentEvent", error);
ServiceWorkerGlobalScopeClient::From(GetExecutionContext())
->RespondToCanMakePaymentEvent(event_id_, false, event_dispatch_time_);
}
void CanMakePaymentRespondWithObserver::OnResponseFulfilled(
const ScriptValue& value) {
DCHECK(GetExecutionContext());
ExceptionState exception_state(value.GetIsolate(),
ExceptionState::kUnknownContext,
"PaymentRequestEvent", "respondWith");
bool response = ToBoolean(ToIsolate(GetExecutionContext()), value.V8Value(),
exception_state);
if (exception_state.HadException()) {
exception_state.ClearException();
OnResponseRejected(blink::mojom::ServiceWorkerResponseError::kNoV8Instance);
return;
}
ServiceWorkerGlobalScopeClient::From(GetExecutionContext())
->RespondToCanMakePaymentEvent(event_id_, response, event_dispatch_time_);
}
void CanMakePaymentRespondWithObserver::OnNoResponse() {
DCHECK(GetExecutionContext());
ServiceWorkerGlobalScopeClient::From(GetExecutionContext())
->RespondToCanMakePaymentEvent(event_id_, true, event_dispatch_time_);
}
void CanMakePaymentRespondWithObserver::Trace(blink::Visitor* visitor) {
RespondWithObserver::Trace(visitor);
}
} // namespace blink