Commit 747cdfcd authored by Minoru Chikamune's avatar Minoru Chikamune Committed by Commit Bot

Migrate PaymentRequest to use GC mojo wrappers.

No behavior change. This CL reduces potential risks of use-after-free bugs.

Bug: 1049056
Change-Id: I420df20fa51681d3bfa3ee0c7ca20adf85681117
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2143414Reviewed-by: default avatarKouhei Ueno <kouhei@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Commit-Queue: Minoru Chikamune <chikamune@chromium.org>
Cr-Commit-Position: refs/heads/master@{#758485}
parent 725a6393
...@@ -847,7 +847,7 @@ ScriptPromise PaymentRequest::Retry(ScriptState* script_state, ...@@ -847,7 +847,7 @@ ScriptPromise PaymentRequest::Retry(ScriptState* script_state,
return ScriptPromise(); return ScriptPromise();
} }
if (!payment_provider_) { if (!payment_provider_.is_bound()) {
exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError, exception_state.ThrowDOMException(DOMExceptionCode::kInvalidStateError,
"Payment request terminated"); "Payment request terminated");
return ScriptPromise(); return ScriptPromise();
...@@ -941,7 +941,7 @@ ScriptPromise PaymentRequest::Complete(ScriptState* script_state, ...@@ -941,7 +941,7 @@ ScriptPromise PaymentRequest::Complete(ScriptState* script_state,
} }
// User has cancelled the transaction while the website was processing it. // User has cancelled the transaction while the website was processing it.
if (!payment_provider_) { if (!payment_provider_.is_bound()) {
exception_state.ThrowDOMException(DOMExceptionCode::kAbortError, exception_state.ThrowDOMException(DOMExceptionCode::kAbortError,
"Request cancelled"); "Request cancelled");
return ScriptPromise(); return ScriptPromise();
...@@ -960,7 +960,7 @@ ScriptPromise PaymentRequest::Complete(ScriptState* script_state, ...@@ -960,7 +960,7 @@ ScriptPromise PaymentRequest::Complete(ScriptState* script_state,
void PaymentRequest::OnUpdatePaymentDetails( void PaymentRequest::OnUpdatePaymentDetails(
const ScriptValue& details_script_value) { const ScriptValue& details_script_value) {
ScriptPromiseResolver* resolver = GetPendingAcceptPromiseResolver(); ScriptPromiseResolver* resolver = GetPendingAcceptPromiseResolver();
if (!resolver || !payment_provider_ || if (!resolver || !payment_provider_.is_bound() ||
!update_payment_details_timer_.IsActive()) { !update_payment_details_timer_.IsActive()) {
return; return;
} }
...@@ -1011,7 +1011,7 @@ void PaymentRequest::OnUpdatePaymentDetails( ...@@ -1011,7 +1011,7 @@ void PaymentRequest::OnUpdatePaymentDetails(
} }
void PaymentRequest::OnUpdatePaymentDetailsFailure(const String& error) { void PaymentRequest::OnUpdatePaymentDetailsFailure(const String& error) {
if (!payment_provider_) if (!payment_provider_.is_bound())
return; return;
if (update_payment_details_timer_.IsActive()) if (update_payment_details_timer_.IsActive())
update_payment_details_timer_.Stop(); update_payment_details_timer_.Stop();
...@@ -1041,6 +1041,8 @@ void PaymentRequest::Trace(Visitor* visitor) { ...@@ -1041,6 +1041,8 @@ void PaymentRequest::Trace(Visitor* visitor) {
visitor->Trace(abort_resolver_); visitor->Trace(abort_resolver_);
visitor->Trace(can_make_payment_resolver_); visitor->Trace(can_make_payment_resolver_);
visitor->Trace(has_enrolled_instrument_resolver_); visitor->Trace(has_enrolled_instrument_resolver_);
visitor->Trace(payment_provider_);
visitor->Trace(client_receiver_);
EventTargetWithInlineData::Trace(visitor); EventTargetWithInlineData::Trace(visitor);
ExecutionContextLifecycleObserver::Trace(visitor); ExecutionContextLifecycleObserver::Trace(visitor);
} }
...@@ -1069,6 +1071,8 @@ PaymentRequest::PaymentRequest( ...@@ -1069,6 +1071,8 @@ PaymentRequest::PaymentRequest(
ExceptionState& exception_state) ExceptionState& exception_state)
: ExecutionContextLifecycleObserver(execution_context), : ExecutionContextLifecycleObserver(execution_context),
options_(options), options_(options),
payment_provider_(execution_context),
client_receiver_(this, execution_context),
complete_timer_( complete_timer_(
execution_context->GetTaskRunner(TaskType::kMiscPlatformAPI), execution_context->GetTaskRunner(TaskType::kMiscPlatformAPI),
this, this,
......
...@@ -8,8 +8,6 @@ ...@@ -8,8 +8,6 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/scoped_refptr.h" #include "base/memory/scoped_refptr.h"
#include "components/payments/mojom/payment_request_data.mojom-blink-forward.h" #include "components/payments/mojom/payment_request_data.mojom-blink-forward.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "third_party/blink/public/mojom/payments/payment_request.mojom-blink.h" #include "third_party/blink/public/mojom/payments/payment_request.mojom-blink.h"
#include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h" #include "third_party/blink/renderer/bindings/core/v8/active_script_wrappable.h"
#include "third_party/blink/renderer/bindings/core/v8/script_promise.h" #include "third_party/blink/renderer/bindings/core/v8/script_promise.h"
...@@ -23,6 +21,8 @@ ...@@ -23,6 +21,8 @@
#include "third_party/blink/renderer/modules/payments/payment_state_resolver.h" #include "third_party/blink/renderer/modules/payments/payment_state_resolver.h"
#include "third_party/blink/renderer/platform/bindings/script_wrappable.h" #include "third_party/blink/renderer/platform/bindings/script_wrappable.h"
#include "third_party/blink/renderer/platform/heap/handle.h" #include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_receiver.h"
#include "third_party/blink/renderer/platform/mojo/heap_mojo_remote.h"
#include "third_party/blink/renderer/platform/timer.h" #include "third_party/blink/renderer/platform/timer.h"
#include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h"
#include "third_party/blink/renderer/platform/wtf/vector.h" #include "third_party/blink/renderer/platform/wtf/vector.h"
...@@ -47,6 +47,7 @@ class MODULES_EXPORT PaymentRequest final ...@@ -47,6 +47,7 @@ class MODULES_EXPORT PaymentRequest final
public ActiveScriptWrappable<PaymentRequest> { public ActiveScriptWrappable<PaymentRequest> {
DEFINE_WRAPPERTYPEINFO(); DEFINE_WRAPPERTYPEINFO();
USING_GARBAGE_COLLECTED_MIXIN(PaymentRequest); USING_GARBAGE_COLLECTED_MIXIN(PaymentRequest);
// TODO(chikamune): remove this line after code freeze.
USING_PRE_FINALIZER(PaymentRequest, ClearResolversAndCloseMojoConnection); USING_PRE_FINALIZER(PaymentRequest, ClearResolversAndCloseMojoConnection);
public: public:
...@@ -172,9 +173,9 @@ class MODULES_EXPORT PaymentRequest final ...@@ -172,9 +173,9 @@ class MODULES_EXPORT PaymentRequest final
Member<ScriptPromiseResolver> abort_resolver_; Member<ScriptPromiseResolver> abort_resolver_;
Member<ScriptPromiseResolver> can_make_payment_resolver_; Member<ScriptPromiseResolver> can_make_payment_resolver_;
Member<ScriptPromiseResolver> has_enrolled_instrument_resolver_; Member<ScriptPromiseResolver> has_enrolled_instrument_resolver_;
mojo::Remote<payments::mojom::blink::PaymentRequest> payment_provider_; HeapMojoRemote<payments::mojom::blink::PaymentRequest> payment_provider_;
mojo::Receiver<payments::mojom::blink::PaymentRequestClient> client_receiver_{ HeapMojoReceiver<payments::mojom::blink::PaymentRequestClient, PaymentRequest>
this}; client_receiver_;
TaskRunnerTimer<PaymentRequest> complete_timer_; TaskRunnerTimer<PaymentRequest> complete_timer_;
TaskRunnerTimer<PaymentRequest> update_payment_details_timer_; TaskRunnerTimer<PaymentRequest> update_payment_details_timer_;
bool is_waiting_for_show_promise_to_resolve_; bool is_waiting_for_show_promise_to_resolve_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment