Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(999)

Side by Side Diff: third_party/WebKit/Source/modules/payments/PaymentResponseTest.cpp

Issue 2038333002: PaymentRequest: Provide shippingAddress in PaymentResponse. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "modules/payments/PaymentResponse.h" 5 #include "modules/payments/PaymentResponse.h"
6 6
7 #include "bindings/core/v8/ExceptionState.h" 7 #include "bindings/core/v8/ExceptionState.h"
8 #include "bindings/core/v8/ScriptState.h" 8 #include "bindings/core/v8/ScriptState.h"
9 #include "bindings/core/v8/ScriptValue.h" 9 #include "bindings/core/v8/ScriptValue.h"
10 #include "bindings/modules/v8/V8PaymentResponse.h"
10 #include "core/testing/DummyPageHolder.h" 11 #include "core/testing/DummyPageHolder.h"
12 #include "modules/payments/PaymentAddress.h"
11 #include "modules/payments/PaymentCompleter.h" 13 #include "modules/payments/PaymentCompleter.h"
14 #include "modules/payments/PaymentDetailsTestHelper.h"
15 #include "modules/payments/PaymentRequest.h"
12 #include "testing/gmock/include/gmock/gmock.h" 16 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
14 #include "wtf/OwnPtr.h" 18 #include "wtf/OwnPtr.h"
15 #include <utility> 19 #include <utility>
16 20
17 namespace blink { 21 namespace blink {
18 namespace { 22 namespace {
19 23
20 class MockPaymentCompleter : public GarbageCollectedFinalized<MockPaymentComplet er>, public PaymentCompleter { 24 class MockPaymentCompleter : public GarbageCollectedFinalized<MockPaymentComplet er>, public PaymentCompleter {
21 USING_GARBAGE_COLLECTED_MIXIN(MockPaymentCompleter); 25 USING_GARBAGE_COLLECTED_MIXIN(MockPaymentCompleter);
(...skipping 14 matching lines...) Expand all
36 40
37 private: 41 private:
38 ScriptPromise m_dummyPromise; 42 ScriptPromise m_dummyPromise;
39 }; 43 };
40 44
41 class PaymentResponseTest : public testing::Test { 45 class PaymentResponseTest : public testing::Test {
42 public: 46 public:
43 PaymentResponseTest() 47 PaymentResponseTest()
44 : m_page(DummyPageHolder::create()) 48 : m_page(DummyPageHolder::create())
45 { 49 {
50 setSecurityOrigin("https://www.example.com");
please use gerrit instead 2016/06/06 01:09:35 You're calling this function only once. So it's si
zino 2016/06/06 10:02:13 Done.
46 } 51 }
47 52
48 ~PaymentResponseTest() override {} 53 ~PaymentResponseTest() override {}
49 54
50 ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->doc ument().frame()); } 55 ScriptState* getScriptState() { return ScriptState::forMainWorld(m_page->doc ument().frame()); }
51 ExceptionState& getExceptionState() { return m_exceptionState; } 56 ExceptionState& getExceptionState() { return m_exceptionState; }
52 57
58 void setSecurityOrigin(const String& securityOrigin)
59 {
60 m_page->document().setSecurityOrigin(SecurityOrigin::create(KURL(KURL(), securityOrigin)));
61 }
62
53 private: 63 private:
54 OwnPtr<DummyPageHolder> m_page; 64 OwnPtr<DummyPageHolder> m_page;
55 NonThrowableExceptionState m_exceptionState; 65 NonThrowableExceptionState m_exceptionState;
56 }; 66 };
57 67
68 class PaymentResponseFunction : public ScriptFunction {
69 public:
70 static v8::Local<v8::Function> create(ScriptState* scriptState, ScriptValue* outValue)
71 {
72 PaymentResponseFunction* self = new PaymentResponseFunction(scriptState, outValue);
73 return self->bindToV8Function();
74 }
75
76 ScriptValue call(ScriptValue value) override
77 {
78 DCHECK(!value.isEmpty());
79 *m_value = value;
80 return value;
81 }
82
83 private:
84 explicit PaymentResponseFunction(ScriptState* scriptState, ScriptValue* outV alue)
please use gerrit instead 2016/06/06 01:09:35 No need for "explicit" keyword with more than one
zino 2016/06/06 10:02:13 Done. Sorry, this code was created based on MockF
85 : ScriptFunction(scriptState)
86 , m_value(outValue)
87 {
please use gerrit instead 2016/06/06 01:09:34 DCHECK(m_value);
zino 2016/06/06 10:02:13 Done.
88 }
89
90 ScriptValue* m_value;
91 };
92
93 class UnreachableFunction : public ScriptFunction {
94 public:
95 static v8::Local<v8::Function> create(ScriptState* scriptState)
96 {
97 UnreachableFunction* self = new UnreachableFunction(scriptState);
98 return self->bindToV8Function();
99 }
100
101 ScriptValue call(ScriptValue value) override
102 {
103 ADD_FAILURE() << "Unexpected call to a null ScriptFunction.";
please use gerrit instead 2016/06/06 01:09:35 "Unexpected call"
zino 2016/06/06 10:02:13 Done.
104 return value;
105 }
106
107 private:
108 UnreachableFunction(ScriptState* scriptState)
please use gerrit instead 2016/06/06 01:09:34 Need "explicit" keyword here to avoid implicit con
zino 2016/06/06 10:02:13 Done.
109 : ScriptFunction(scriptState)
110 {
111 }
112 };
113
114
58 TEST_F(PaymentResponseTest, DataCopiedOver) 115 TEST_F(PaymentResponseTest, DataCopiedOver)
59 { 116 {
60 ScriptState::Scope scope(getScriptState()); 117 ScriptState::Scope scope(getScriptState());
61 mojom::blink::PaymentResponsePtr input = mojom::blink::PaymentResponse::New( ); 118 mojom::blink::PaymentResponsePtr input = mojom::blink::PaymentResponse::New( );
62 input->method_name = "foo"; 119 input->method_name = "foo";
63 input->stringified_details = "{\"transactionId\": 123}"; 120 input->stringified_details = "{\"transactionId\": 123}";
64 MockPaymentCompleter* completeCallback = new MockPaymentCompleter; 121 MockPaymentCompleter* completeCallback = new MockPaymentCompleter;
65 122
66 PaymentResponse output(std::move(input), completeCallback); 123 PaymentResponse output(std::move(input), completeCallback);
67 124
(...skipping 29 matching lines...) Expand all
97 input->method_name = "foo"; 154 input->method_name = "foo";
98 input->stringified_details = "{\"transactionId\": 123}"; 155 input->stringified_details = "{\"transactionId\": 123}";
99 MockPaymentCompleter* completeCallback = new MockPaymentCompleter; 156 MockPaymentCompleter* completeCallback = new MockPaymentCompleter;
100 PaymentResponse output(std::move(input), completeCallback); 157 PaymentResponse output(std::move(input), completeCallback);
101 158
102 EXPECT_CALL(*completeCallback, complete(getScriptState(), false)); 159 EXPECT_CALL(*completeCallback, complete(getScriptState(), false));
103 160
104 output.complete(getScriptState(), false); 161 output.complete(getScriptState(), false);
105 } 162 }
106 163
164 TEST_F(PaymentResponseTest, ShippingAddressAttributeWithRequestShippingTrue)
please use gerrit instead 2016/06/06 01:09:35 Plus one more test: options.setRequestShipping(tru
zino 2016/06/06 10:02:13 Done.
165 {
166 ScriptState::Scope scope(getScriptState());
167 PaymentOptions options;
168 options.setRequestShipping(true);
169 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), options, getExceptionState());
170 EXPECT_FALSE(getExceptionState().hadException());
171 mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::N ew();
172 response->shipping_address = mojom::blink::PaymentAddress::New();
173 response->shipping_address->region_code = "US";
174 response->shipping_address->language_code = "en";
175 response->shipping_address->script_code = "Latn";
176
177 ScriptValue outValue;
178 request->show(getScriptState()).then(PaymentResponseFunction::create(getScri ptState(), &outValue), UnreachableFunction::create(getScriptState()));
179 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (std::move(response));
180 v8::MicrotasksScope::PerformCheckpoint(getScriptState()->isolate());
181 PaymentResponse* pr = V8PaymentResponse::toImplWithTypeCheck(getScriptState( )->isolate(), outValue.v8Value());
182
183 EXPECT_EQ("US", pr->shippingAddress()->regionCode());
184 EXPECT_EQ("en-Latn", pr->shippingAddress()->languageCode());
185 }
186
187 TEST_F(PaymentResponseTest, ShippingAddressAttributeWithRequestShippingFalse)
188 {
189 ScriptState::Scope scope(getScriptState());
190 PaymentOptions options;
191 options.setRequestShipping(false);
192 PaymentRequest* request = PaymentRequest::create(getScriptState(), Vector<St ring>(1, "foo"), buildPaymentDetailsForTest(), options, getExceptionState());
193 EXPECT_FALSE(getExceptionState().hadException());
194 mojom::blink::PaymentResponsePtr response = mojom::blink::PaymentResponse::N ew();
195 response->shipping_address = mojom::blink::PaymentAddress::New();
196 response->shipping_address->region_code = "US";
197 response->shipping_address->language_code = "en";
198 response->shipping_address->script_code = "Latn";
199
200 ScriptValue outValue;
201 request->show(getScriptState()).then(PaymentResponseFunction::create(getScri ptState(), &outValue), UnreachableFunction::create(getScriptState()));
please use gerrit instead 2016/06/06 01:09:35 My suggestion in PaymentRequest.cpp is to reject t
zino 2016/06/06 10:02:13 Done.
202 static_cast<mojom::blink::PaymentRequestClient*>(request)->OnPaymentResponse (std::move(response));
203 v8::MicrotasksScope::PerformCheckpoint(getScriptState()->isolate());
204 PaymentResponse* pr = V8PaymentResponse::toImplWithTypeCheck(getScriptState( )->isolate(), outValue.v8Value());
205
206 EXPECT_EQ(nullptr, pr->shippingAddress());
207 }
208
107 } // namespace 209 } // namespace
108 } // namespace blink 210 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698