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

View File

@ -85,7 +85,9 @@ interface nsIPaymentRequest : nsISupports
readonly attribute nsIArray paymentMethods;
readonly attribute nsIPaymentDetails paymentDetails;
readonly attribute nsIPaymentOptions paymentOptions;
readonly attribute AString shippingOption;
[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,
nsIArray* aMethodData,
nsIPaymentDetails* aDetails,
nsIPaymentOptions* aOptions)
nsIPaymentOptions* aOptions,
const nsAString& aShippingOption)
{
NS_ENSURE_ARG_POINTER(aCallback);
NS_ENSURE_ARG_POINTER(aTopLevelPrincipal);
@ -94,6 +95,7 @@ PaymentCreateActionRequest::InitRequest(const nsAString& aRequestId,
mMethodData = aMethodData;
mDetails = aDetails;
mOptions = aOptions;
mShippingOption = aShippingOption;
return NS_OK;
}
@ -145,6 +147,13 @@ PaymentCreateActionRequest::GetOptions(nsIPaymentOptions** aOptions)
return NS_OK;
}
NS_IMETHODIMP
PaymentCreateActionRequest::GetShippingOption(nsAString& aShippingOption)
{
aShippingOption = mShippingOption;
return NS_OK;
}
/* PaymentCompleteActionRequest */
NS_IMPL_ISUPPORTS_INHERITED(PaymentCompleteActionRequest,
@ -193,10 +202,18 @@ PaymentUpdateActionRequest::GetDetails(nsIPaymentDetails** aDetails)
return NS_OK;
}
NS_IMETHODIMP
PaymentUpdateActionRequest::GetShippingOption(nsAString& aShippingOption)
{
aShippingOption = mShippingOption;
return NS_OK;
}
NS_IMETHODIMP
PaymentUpdateActionRequest::InitRequest(const nsAString& aRequestId,
nsIPaymentActionCallback* aCallback,
nsIPaymentDetails* aDetails)
nsIPaymentDetails* aDetails,
const nsAString& aShippingOption)
{
NS_ENSURE_ARG_POINTER(aCallback);
NS_ENSURE_ARG_POINTER(aDetails);
@ -205,6 +222,7 @@ PaymentUpdateActionRequest::InitRequest(const nsAString& aRequestId,
return rv;
}
mDetails = aDetails;
mShippingOption = aShippingOption;
return NS_OK;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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