Bug 1440041 - Add a new readonly attribute nsIPaymentRequest.shippingOption. r=baku.

This commit is contained in:
Eden Chuang 2018-04-13 18:47:20 -07:00
parent bbd8c5be30
commit b206167b93
10 changed files with 74 additions and 14 deletions

View File

@ -81,6 +81,11 @@ interface nsIPaymentCreateActionRequest : nsIPaymentActionRequest
*/ */
readonly attribute nsIPaymentOptions options; readonly attribute nsIPaymentOptions options;
/*
* The selected shipping option of the payment request;
*/
readonly attribute AString shippingOption;
/* /*
* Initialize function the this request. * Initialize function the this request.
*/ */
@ -90,7 +95,8 @@ interface nsIPaymentCreateActionRequest : nsIPaymentActionRequest
in nsIPrincipal aPrincipal, in nsIPrincipal aPrincipal,
in nsIArray aMethodData, in nsIArray aMethodData,
in nsIPaymentDetails aDetails, in nsIPaymentDetails aDetails,
in nsIPaymentOptions aOptions); in nsIPaymentOptions aOptions,
in AString aShippingOption);
}; };
[builtinclass, uuid(4429697d-1135-47de-a46e-5196d399ec55)] [builtinclass, uuid(4429697d-1135-47de-a46e-5196d399ec55)]
@ -117,12 +123,18 @@ interface nsIPaymentUpdateActionRequest : nsIPaymentActionRequest
*/ */
readonly attribute nsIPaymentDetails details; readonly attribute nsIPaymentDetails details;
/*
* The selected shipping option information
*/
readonly attribute AString shippingOption;
/* /*
* Initialize function for this request. * Initialize function for this request.
*/ */
void initRequest(in AString aRequestId, void initRequest(in AString aRequestId,
in nsIPaymentActionCallback aCallback, in nsIPaymentActionCallback aCallback,
in nsIPaymentDetails aDetails); in nsIPaymentDetails aDetails,
in AString aShippingOption);
}; };
%{C++ %{C++

View File

@ -85,7 +85,9 @@ interface nsIPaymentRequest : nsISupports
readonly attribute nsIArray paymentMethods; readonly attribute nsIArray paymentMethods;
readonly attribute nsIPaymentDetails paymentDetails; readonly attribute nsIPaymentDetails paymentDetails;
readonly attribute nsIPaymentOptions paymentOptions; readonly attribute nsIPaymentOptions paymentOptions;
readonly attribute AString shippingOption;
[noscript] void setCompleteStatus(in AString aCompleteStatus); [noscript] void setCompleteStatus(in AString aCompleteStatus);
void updatePaymentDetails(in nsIPaymentDetails aDetails); void updatePaymentDetails(in nsIPaymentDetails aDetails,
in AString aShippingOption);
}; };

View File

@ -78,7 +78,8 @@ PaymentCreateActionRequest::InitRequest(const nsAString& aRequestId,
nsIPrincipal* aTopLevelPrincipal, nsIPrincipal* aTopLevelPrincipal,
nsIArray* aMethodData, nsIArray* aMethodData,
nsIPaymentDetails* aDetails, nsIPaymentDetails* aDetails,
nsIPaymentOptions* aOptions) nsIPaymentOptions* aOptions,
const nsAString& aShippingOption)
{ {
NS_ENSURE_ARG_POINTER(aCallback); NS_ENSURE_ARG_POINTER(aCallback);
NS_ENSURE_ARG_POINTER(aTopLevelPrincipal); NS_ENSURE_ARG_POINTER(aTopLevelPrincipal);
@ -94,6 +95,7 @@ PaymentCreateActionRequest::InitRequest(const nsAString& aRequestId,
mMethodData = aMethodData; mMethodData = aMethodData;
mDetails = aDetails; mDetails = aDetails;
mOptions = aOptions; mOptions = aOptions;
mShippingOption = aShippingOption;
return NS_OK; return NS_OK;
} }
@ -145,6 +147,13 @@ PaymentCreateActionRequest::GetOptions(nsIPaymentOptions** aOptions)
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP
PaymentCreateActionRequest::GetShippingOption(nsAString& aShippingOption)
{
aShippingOption = mShippingOption;
return NS_OK;
}
/* PaymentCompleteActionRequest */ /* PaymentCompleteActionRequest */
NS_IMPL_ISUPPORTS_INHERITED(PaymentCompleteActionRequest, NS_IMPL_ISUPPORTS_INHERITED(PaymentCompleteActionRequest,
@ -193,10 +202,18 @@ PaymentUpdateActionRequest::GetDetails(nsIPaymentDetails** aDetails)
return NS_OK; return NS_OK;
} }
NS_IMETHODIMP
PaymentUpdateActionRequest::GetShippingOption(nsAString& aShippingOption)
{
aShippingOption = mShippingOption;
return NS_OK;
}
NS_IMETHODIMP NS_IMETHODIMP
PaymentUpdateActionRequest::InitRequest(const nsAString& aRequestId, PaymentUpdateActionRequest::InitRequest(const nsAString& aRequestId,
nsIPaymentActionCallback* aCallback, nsIPaymentActionCallback* aCallback,
nsIPaymentDetails* aDetails) nsIPaymentDetails* aDetails,
const nsAString& aShippingOption)
{ {
NS_ENSURE_ARG_POINTER(aCallback); NS_ENSURE_ARG_POINTER(aCallback);
NS_ENSURE_ARG_POINTER(aDetails); NS_ENSURE_ARG_POINTER(aDetails);
@ -205,6 +222,7 @@ PaymentUpdateActionRequest::InitRequest(const nsAString& aRequestId,
return rv; return rv;
} }
mDetails = aDetails; mDetails = aDetails;
mShippingOption = aShippingOption;
return NS_OK; return NS_OK;
} }

View File

@ -49,6 +49,7 @@ private:
nsCOMPtr<nsIArray> mMethodData; nsCOMPtr<nsIArray> mMethodData;
nsCOMPtr<nsIPaymentDetails> mDetails; nsCOMPtr<nsIPaymentDetails> mDetails;
nsCOMPtr<nsIPaymentOptions> mOptions; nsCOMPtr<nsIPaymentOptions> mOptions;
nsString mShippingOption;
}; };
class PaymentCompleteActionRequest final : public nsIPaymentCompleteActionRequest class PaymentCompleteActionRequest final : public nsIPaymentCompleteActionRequest
@ -80,6 +81,7 @@ private:
~PaymentUpdateActionRequest() = default; ~PaymentUpdateActionRequest() = default;
nsCOMPtr<nsIPaymentDetails> mDetails; nsCOMPtr<nsIPaymentDetails> mDetails;
nsString mShippingOption;
}; };
} // end of namespace dom } // end of namespace dom

View File

@ -609,13 +609,15 @@ PaymentRequest::PaymentRequest(const uint64_t aTabId,
nsIPrincipal* aTopLevelPrincipal, nsIPrincipal* aTopLevelPrincipal,
nsIArray* aPaymentMethods, nsIArray* aPaymentMethods,
nsIPaymentDetails* aPaymentDetails, nsIPaymentDetails* aPaymentDetails,
nsIPaymentOptions* aPaymentOptions) nsIPaymentOptions* aPaymentOptions,
const nsAString& aShippingOption)
: mTabId(aTabId) : mTabId(aTabId)
, mRequestId(aRequestId) , mRequestId(aRequestId)
, mTopLevelPrincipal(aTopLevelPrincipal) , mTopLevelPrincipal(aTopLevelPrincipal)
, mPaymentMethods(aPaymentMethods) , mPaymentMethods(aPaymentMethods)
, mPaymentDetails(aPaymentDetails) , mPaymentDetails(aPaymentDetails)
, mPaymentOptions(aPaymentOptions) , mPaymentOptions(aPaymentOptions)
, mShippingOption(aShippingOption)
{ {
} }
@ -675,7 +677,15 @@ PaymentRequest::GetPaymentOptions(nsIPaymentOptions** aPaymentOptions)
} }
NS_IMETHODIMP NS_IMETHODIMP
PaymentRequest::UpdatePaymentDetails(nsIPaymentDetails* aPaymentDetails) PaymentRequest::GetShippingOption(nsAString& aShippingOption)
{
aShippingOption = mShippingOption;
return NS_OK;
}
NS_IMETHODIMP
PaymentRequest::UpdatePaymentDetails(nsIPaymentDetails* aPaymentDetails,
const nsAString& aShippingOption)
{ {
MOZ_ASSERT(aPaymentDetails); MOZ_ASSERT(aPaymentDetails);
bool requestShipping; bool requestShipping;
@ -683,6 +693,7 @@ PaymentRequest::UpdatePaymentDetails(nsIPaymentDetails* aPaymentDetails)
if (NS_WARN_IF(NS_FAILED(rv))) { if (NS_WARN_IF(NS_FAILED(rv))) {
return rv; return rv;
} }
mShippingOption = aShippingOption;
return mPaymentDetails->Update(aPaymentDetails, requestShipping); return mPaymentDetails->Update(aPaymentDetails, requestShipping);
} }

View File

@ -184,7 +184,8 @@ public:
nsIPrincipal* aPrincipal, nsIPrincipal* aPrincipal,
nsIArray* aPaymentMethods, nsIArray* aPaymentMethods,
nsIPaymentDetails* aPaymentDetails, nsIPaymentDetails* aPaymentDetails,
nsIPaymentOptions* aPaymentOptions); nsIPaymentOptions* aPaymentOptions,
const nsAString& aShippingOption);
private: private:
~PaymentRequest() = default; ~PaymentRequest() = default;
@ -196,6 +197,7 @@ private:
nsCOMPtr<nsIArray> mPaymentMethods; nsCOMPtr<nsIArray> mPaymentMethods;
nsCOMPtr<nsIPaymentDetails> mPaymentDetails; nsCOMPtr<nsIPaymentDetails> mPaymentDetails;
nsCOMPtr<nsIPaymentOptions> mPaymentOptions; nsCOMPtr<nsIPaymentOptions> mPaymentOptions;
nsString mShippingOption;
}; };
class PaymentAddress final : public nsIPaymentAddress class PaymentAddress final : public nsIPaymentAddress

View File

@ -467,7 +467,8 @@ PaymentRequestManager::CreatePayment(JSContext* aCx,
IPC::Principal(aTopLevelPrincipal), IPC::Principal(aTopLevelPrincipal),
methodData, methodData,
details, details,
options); options,
shippingOption);
rv = SendRequestPayment(request, action, true); rv = SendRequestPayment(request, action, true);
if (NS_WARN_IF(NS_FAILED(rv))) { if (NS_WARN_IF(NS_FAILED(rv))) {
@ -573,7 +574,7 @@ PaymentRequestManager::UpdatePayment(JSContext* aCx,
} }
nsAutoString requestId(aRequestId); nsAutoString requestId(aRequestId);
IPCPaymentUpdateActionRequest action(requestId, details); IPCPaymentUpdateActionRequest action(requestId, details, shippingOption);
return SendRequestPayment(request, action); return SendRequestPayment(request, action);
} }

View File

@ -253,9 +253,13 @@ PaymentRequestService::RequestPayment(nsIPaymentActionRequest* aRequest)
rv = request->GetOptions(getter_AddRefs(options)); rv = request->GetOptions(getter_AddRefs(options));
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
nsAutoString shippingOption;
rv = request->GetShippingOption(shippingOption);
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIPaymentRequest> payment = nsCOMPtr<nsIPaymentRequest> payment =
new payments::PaymentRequest(tabId, requestId, topLevelPrincipal, new payments::PaymentRequest(tabId, requestId, topLevelPrincipal,
methodData, details, options); methodData, details, options, shippingOption);
if (!mRequestQueue.AppendElement(payment, mozilla::fallible)) { if (!mRequestQueue.AppendElement(payment, mozilla::fallible)) {
return NS_ERROR_OUT_OF_MEMORY; return NS_ERROR_OUT_OF_MEMORY;
@ -357,6 +361,10 @@ PaymentRequestService::RequestPayment(nsIPaymentActionRequest* aRequest)
rv = request->GetDetails(getter_AddRefs(details)); rv = request->GetDetails(getter_AddRefs(details));
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
nsAutoString shippingOption;
rv = request->GetShippingOption(shippingOption);
NS_ENSURE_SUCCESS(rv, rv);
rv = request->GetRequestId(requestId); rv = request->GetRequestId(requestId);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIPaymentRequest> payment; nsCOMPtr<nsIPaymentRequest> payment;
@ -364,7 +372,7 @@ PaymentRequestService::RequestPayment(nsIPaymentActionRequest* aRequest)
if (NS_WARN_IF(NS_FAILED(rv))) { if (NS_WARN_IF(NS_FAILED(rv))) {
return rv; return rv;
} }
rv = payment->UpdatePaymentDetails(details); rv = payment->UpdatePaymentDetails(details, shippingOption);
if (NS_WARN_IF(NS_FAILED(rv))) { if (NS_WARN_IF(NS_FAILED(rv))) {
return rv; return rv;
} }

View File

@ -76,6 +76,7 @@ struct IPCPaymentCreateActionRequest
IPCPaymentMethodData[] methodData; IPCPaymentMethodData[] methodData;
IPCPaymentDetails details; IPCPaymentDetails details;
IPCPaymentOptions options; IPCPaymentOptions options;
nsString shippingOption;
}; };
struct IPCPaymentCanMakeActionRequest struct IPCPaymentCanMakeActionRequest
@ -103,6 +104,7 @@ struct IPCPaymentUpdateActionRequest
{ {
nsString requestId; nsString requestId;
IPCPaymentDetails details; IPCPaymentDetails details;
nsString shippingOption;
}; };
union IPCPaymentActionRequest union IPCPaymentActionRequest

View File

@ -76,7 +76,8 @@ PaymentRequestParent::RecvRequestPayment(const IPCPaymentActionRequest& aRequest
request.topLevelPrincipal(), request.topLevelPrincipal(),
methodData, methodData,
details, details,
options); options,
request.shippingOption());
if (NS_WARN_IF(NS_FAILED(rv))) { if (NS_WARN_IF(NS_FAILED(rv))) {
return IPC_FAIL_NO_REASON(this); return IPC_FAIL_NO_REASON(this);
} }
@ -142,7 +143,8 @@ PaymentRequestParent::RecvRequestPayment(const IPCPaymentActionRequest& aRequest
do_CreateInstance(NS_PAYMENT_UPDATE_ACTION_REQUEST_CONTRACT_ID); do_CreateInstance(NS_PAYMENT_UPDATE_ACTION_REQUEST_CONTRACT_ID);
rv = updateAction->InitRequest(request.requestId(), rv = updateAction->InitRequest(request.requestId(),
callback, callback,
details); details,
request.shippingOption());
action = do_QueryInterface(updateAction); action = do_QueryInterface(updateAction);
MOZ_ASSERT(action); MOZ_ASSERT(action);
break; break;