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

Side by Side Diff: chrome/browser/ui/autofill/save_card_bubble_controller_impl_unittest.cc

Issue 1540423004: Add card details and legal message to Android save credit card infobar. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Initial draft Created 4 years, 11 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "chrome/browser/ui/autofill/save_card_bubble_controller_impl.h" 5 #include "chrome/browser/ui/autofill/save_card_bubble_controller_impl.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
11 #include "base/macros.h" 11 #include "base/macros.h"
12 #include "base/strings/utf_string_conversions.h" 12 #include "base/strings/utf_string_conversions.h"
13 #include "base/test/histogram_tester.h" 13 #include "base/test/histogram_tester.h"
14 #include "base/values.h" 14 #include "base/values.h"
15 #include "chrome/browser/ui/autofill/save_card_bubble_view.h" 15 #include "chrome/browser/ui/autofill/save_card_bubble_view.h"
16 #include "chrome/browser/ui/tabs/tab_strip_model.h" 16 #include "chrome/browser/ui/tabs/tab_strip_model.h"
17 #include "chrome/test/base/browser_with_test_window_test.h" 17 #include "chrome/test/base/browser_with_test_window_test.h"
18 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 18 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
19 #include "components/autofill/core/browser/autofill_metrics.h" 19 #include "components/autofill/core/browser/autofill_metrics.h"
20 #include "content/public/browser/navigation_details.h" 20 #include "content/public/browser/navigation_details.h"
21 #include "testing/gmock/include/gmock/gmock.h" 21 #include "testing/gmock/include/gmock/gmock.h"
22 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
23 23
24 using base::Bucket; 24 using base::Bucket;
25 using testing::ElementsAre; 25 using testing::ElementsAre;
26 26
27 namespace autofill { 27 namespace autofill {
28 28
29 typedef SaveCardBubbleController::LegalMessageLine LegalMessageLine;
30 typedef SaveCardBubbleController::LegalMessageLines LegalMessageLines;
31
32 class TestSaveCardBubbleControllerImpl : public SaveCardBubbleControllerImpl { 29 class TestSaveCardBubbleControllerImpl : public SaveCardBubbleControllerImpl {
33 public: 30 public:
34 static void CreateForTesting(content::WebContents* web_contents) { 31 static void CreateForTesting(content::WebContents* web_contents) {
35 web_contents->SetUserData( 32 web_contents->SetUserData(
36 UserDataKey(), new TestSaveCardBubbleControllerImpl(web_contents)); 33 UserDataKey(), new TestSaveCardBubbleControllerImpl(web_contents));
37 } 34 }
38 35
39 explicit TestSaveCardBubbleControllerImpl(content::WebContents* web_contents) 36 explicit TestSaveCardBubbleControllerImpl(content::WebContents* web_contents)
40 : SaveCardBubbleControllerImpl(web_contents) {} 37 : SaveCardBubbleControllerImpl(web_contents) {}
41 38
(...skipping 27 matching lines...) Expand all
69 scoped_ptr<base::Value> value(base::JSONReader::Read(message_json)); 66 scoped_ptr<base::Value> value(base::JSONReader::Read(message_json));
70 ASSERT_TRUE(value); 67 ASSERT_TRUE(value);
71 base::DictionaryValue* dictionary; 68 base::DictionaryValue* dictionary;
72 ASSERT_TRUE(value->GetAsDictionary(&dictionary)); 69 ASSERT_TRUE(value->GetAsDictionary(&dictionary));
73 scoped_ptr<base::DictionaryValue> legal_message = 70 scoped_ptr<base::DictionaryValue> legal_message =
74 dictionary->CreateDeepCopy(); 71 dictionary->CreateDeepCopy();
75 controller()->ShowBubbleForUpload(base::Bind(&SaveCardCallback), 72 controller()->ShowBubbleForUpload(base::Bind(&SaveCardCallback),
76 std::move(legal_message)); 73 std::move(legal_message));
77 } 74 }
78 75
79 // Returns true if lines are the same.
80 bool CompareLegalMessageLines(const LegalMessageLine& a,
81 const LegalMessageLine& b) {
82 if (a.text != b.text)
83 return false;
84 if (a.links.size() != b.links.size())
85 return false;
86 for (size_t i = 0; i < a.links.size(); ++i) {
87 if (a.links[i].range != b.links[i].range)
88 return false;
89 if (a.links[i].url != b.links[i].url)
90 return false;
91 }
92 return true;
93 }
94
95 // Returns true if messages are the same.
96 bool CompareLegalMessages(const LegalMessageLines& a,
97 const LegalMessageLines& b) {
98 if (a.size() != b.size())
99 return false;
100 for (size_t i = 0; i < a.size(); ++i) {
101 if (!CompareLegalMessageLines(a[i], b[i]))
102 return false;
103 }
104 return true;
105 }
106
107 void ShowLocalBubble() { 76 void ShowLocalBubble() {
108 controller()->ShowBubbleForLocalSave(base::Bind(&SaveCardCallback)); 77 controller()->ShowBubbleForLocalSave(base::Bind(&SaveCardCallback));
109 } 78 }
110 79
111 void ShowUploadBubble() { 80 void ShowUploadBubble() {
112 SetLegalMessage( 81 SetLegalMessage(
113 "{" 82 "{"
114 " \"line\" : [ {" 83 " \"line\" : [ {"
115 " \"template\": \"This is the entire message.\"" 84 " \"template\": \"This is the entire message.\""
116 " } ]" 85 " } ]"
(...skipping 30 matching lines...) Expand all
147 116
148 private: 117 private:
149 scoped_ptr<TestSaveCardBubbleView> save_card_bubble_view_; 118 scoped_ptr<TestSaveCardBubbleView> save_card_bubble_view_;
150 }; 119 };
151 120
152 static void SaveCardCallback() {} 121 static void SaveCardCallback() {}
153 122
154 DISALLOW_COPY_AND_ASSIGN(SaveCardBubbleControllerImplTest); 123 DISALLOW_COPY_AND_ASSIGN(SaveCardBubbleControllerImplTest);
155 }; 124 };
156 125
157 TEST_F(SaveCardBubbleControllerImplTest, LegalMessage_NoParameters) {
158 SetLegalMessage(
159 "{"
160 " \"line\" : [ {"
161 " \"template\": \"This is the entire message.\""
162 " } ]"
163 "}");
164
165 LegalMessageLine expected_line;
166 expected_line.text = base::ASCIIToUTF16("This is the entire message.");
167 LegalMessageLines expected = {expected_line};
168 EXPECT_TRUE(
169 CompareLegalMessages(expected, controller()->GetLegalMessageLines()));
170 }
171
172 TEST_F(SaveCardBubbleControllerImplTest, LegalMessage_SingleParameter) {
173 SetLegalMessage(
174 "{"
175 " \"line\" : [ {"
176 " \"template\": \"Panda {0}.\","
177 " \"template_parameter\": [ {"
178 " \"display_text\": \"bears are fuzzy\","
179 " \"url\": \"http://www.example.com\""
180 " } ]"
181 " } ]"
182 "}");
183
184 LegalMessageLine expected_line;
185 expected_line.text = base::ASCIIToUTF16("Panda bears are fuzzy.");
186 expected_line.links = {
187 {{6, 21}, GURL("http://www.example.com")},
188 };
189 LegalMessageLines expected = {expected_line};
190 EXPECT_TRUE(
191 CompareLegalMessages(expected, controller()->GetLegalMessageLines()));
192 }
193
194 TEST_F(SaveCardBubbleControllerImplTest, LegalMessage_MissingUrl) {
195 SetLegalMessage(
196 "{"
197 " \"line\" : [ {"
198 " \"template\": \"Panda {0}.\","
199 " \"template_parameter\": [ {"
200 " \"display_text\": \"bear\""
201 " } ]"
202 " } ]"
203 "}");
204 // Legal message is invalid so GetLegalMessageLines() should return no lines.
205 EXPECT_TRUE(CompareLegalMessages(LegalMessageLines(),
206 controller()->GetLegalMessageLines()));
207 }
208
209 TEST_F(SaveCardBubbleControllerImplTest, LegalMessage_MissingDisplayText) {
210 SetLegalMessage(
211 "{"
212 " \"line\" : [ {"
213 " \"template\": \"Panda {0}.\","
214 " \"template_parameter\": [ {"
215 " \"url\": \"http://www.example.com\""
216 " } ]"
217 " } ]"
218 "}");
219 // Legal message is invalid so GetLegalMessageLines() should return no lines.
220 EXPECT_TRUE(CompareLegalMessages(LegalMessageLines(),
221 controller()->GetLegalMessageLines()));
222 }
223
224 TEST_F(SaveCardBubbleControllerImplTest, LegalMessage_EscapeCharacters) {
225 SetLegalMessage(
226 "{"
227 " \"line\" : [ {"
228 " \"template\": \"Panda '{'{0}'}' '{1}' don't $1.\","
229 " \"template_parameter\": [ {"
230 " \"display_text\": \"bears\","
231 " \"url\": \"http://www.example.com\""
232 " } ]"
233 " } ]"
234 "}");
235
236 LegalMessageLine expected_line;
237 expected_line.text = base::ASCIIToUTF16("Panda {bears} {1} don't $1.");
238 expected_line.links = {
239 {{7, 12}, GURL("http://www.example.com")},
240 };
241 LegalMessageLines expected = {expected_line};
242 EXPECT_TRUE(
243 CompareLegalMessages(expected, controller()->GetLegalMessageLines()));
244 }
245
246 TEST_F(SaveCardBubbleControllerImplTest, LegalMessage_ConsecutiveDollarSigns) {
247 SetLegalMessage(
248 "{"
249 " \"line\" : [ {"
250 " \"template\": \"$$\""
251 " } ]"
252 "}");
253
254 // Consecutive dollar signs do not expand correctly (see comment in
255 // ReplaceTemplatePlaceholders() in save_card_bubble_controller_impl.cc).
256 // If this is fixed and this test starts to fail, please update the
257 // "Caveats" section of the SaveCardBubbleControllerImpl::SetLegalMessage()
258 // header file comment.
259 LegalMessageLine expected_line;
260 expected_line.text = base::ASCIIToUTF16("$$$");
261
262 LegalMessageLines expected = {expected_line};
263 EXPECT_TRUE(
264 CompareLegalMessages(expected, controller()->GetLegalMessageLines()));
265 }
266
267 TEST_F(SaveCardBubbleControllerImplTest, LegalMessage_DollarAndParenthesis) {
268 // "${" does not expand correctly (see comment in
269 // ReplaceTemplatePlaceholders() in save_card_bubble_controller_impl.cc).
270 // If this is fixed and this test starts to fail, please update the
271 // "Caveats" section of the SaveCardBubbleControllerImpl::SetLegalMessage()
272 // header file comment.
273 SetLegalMessage(
274 "{"
275 " \"line\" : [ {"
276 " \"template\": \"${0}\","
277 " \"template_parameter\": [ {"
278 " \"display_text\": \"bears\","
279 " \"url\": \"http://www.example.com\""
280 " } ]"
281 " } ]"
282 "}");
283 // Legal message is invalid so GetLegalMessageLines() should return no lines.
284 EXPECT_TRUE(CompareLegalMessages(LegalMessageLines(),
285 controller()->GetLegalMessageLines()));
286 }
287
288 TEST_F(SaveCardBubbleControllerImplTest, LegalMessage_MultipleParameters) {
289 SetLegalMessage(
290 "{"
291 " \"line\" : [ {"
292 " \"template\": \"Panda {0} like {2} eat {1}.\","
293 " \"template_parameter\": [ {"
294 " \"display_text\": \"bears\","
295 " \"url\": \"http://www.example.com/0\""
296 " }, {"
297 " \"display_text\": \"bamboo\","
298 " \"url\": \"http://www.example.com/1\""
299 " }, {"
300 " \"display_text\": \"to\","
301 " \"url\": \"http://www.example.com/2\""
302 " } ]"
303 " } ]"
304 "}");
305
306 LegalMessageLine expected_line;
307 expected_line.text = base::ASCIIToUTF16("Panda bears like to eat bamboo.");
308 expected_line.links = {
309 {{6, 11}, GURL("http://www.example.com/0")},
310 {{24, 30}, GURL("http://www.example.com/1")},
311 {{17, 19}, GURL("http://www.example.com/2")},
312 };
313 LegalMessageLines expected = {expected_line};
314 EXPECT_TRUE(
315 CompareLegalMessages(expected, controller()->GetLegalMessageLines()));
316 }
317
318 TEST_F(SaveCardBubbleControllerImplTest, LegalMessage_MultipleLineElements) {
319 SetLegalMessage(
320 "{"
321 " \"line\" : [ {"
322 " \"template\": \"Panda {0}\","
323 " \"template_parameter\": [ {"
324 " \"display_text\": \"bears\","
325 " \"url\": \"http://www.example.com/line_0_param_0\""
326 " } ]"
327 " }, {"
328 " \"template\": \"like {1} eat {0}.\","
329 " \"template_parameter\": [ {"
330 " \"display_text\": \"bamboo\","
331 " \"url\": \"http://www.example.com/line_1_param_0\""
332 " }, {"
333 " \"display_text\": \"to\","
334 " \"url\": \"http://www.example.com/line_1_param_1\""
335 " } ]"
336 " }, {"
337 " \"template\": \"The {0}.\","
338 " \"template_parameter\": [ {"
339 " \"display_text\": \"end\","
340 " \"url\": \"http://www.example.com/line_2_param_0\""
341 " } ]"
342 " } ]"
343 "}");
344
345 // Line 0.
346 LegalMessageLine expected_line_0;
347 expected_line_0.text = base::ASCIIToUTF16("Panda bears");
348 expected_line_0.links = {
349 {{6, 11}, GURL("http://www.example.com/line_0_param_0")},
350 };
351
352 // Line 1.
353 LegalMessageLine expected_line_1;
354 expected_line_1.text = base::ASCIIToUTF16("like to eat bamboo.");
355 expected_line_1.links = {
356 {{12, 18}, GURL("http://www.example.com/line_1_param_0")},
357 {{5, 7}, GURL("http://www.example.com/line_1_param_1")},
358 };
359
360 // Line 2.
361 LegalMessageLine expected_line_2;
362 expected_line_2.text = base::ASCIIToUTF16("The end.");
363 expected_line_2.links = {
364 {{4, 7}, GURL("http://www.example.com/line_2_param_0")},
365 };
366
367 LegalMessageLines expected = {expected_line_0, expected_line_1,
368 expected_line_2};
369 EXPECT_TRUE(
370 CompareLegalMessages(expected, controller()->GetLegalMessageLines()));
371 }
372
373 TEST_F(SaveCardBubbleControllerImplTest, LegalMessage_EmbeddedNewlines) {
374 SetLegalMessage(
375 "{"
376 " \"line\" : [ {"
377 " \"template\": \"Panda {0}\nlike {2} eat {1}.\nThe {3}.\","
378 " \"template_parameter\": [ {"
379 " \"display_text\": \"bears\","
380 " \"url\": \"http://www.example.com/0\""
381 " }, {"
382 " \"display_text\": \"bamboo\","
383 " \"url\": \"http://www.example.com/1\""
384 " }, {"
385 " \"display_text\": \"to\","
386 " \"url\": \"http://www.example.com/2\""
387 " }, {"
388 " \"display_text\": \"end\","
389 " \"url\": \"http://www.example.com/3\""
390 " } ]"
391 " } ]"
392 "}");
393
394 LegalMessageLine expected_line;
395 expected_line.text =
396 base::ASCIIToUTF16("Panda bears\nlike to eat bamboo.\nThe end.");
397 expected_line.links = {
398 {{6, 11}, GURL("http://www.example.com/0")},
399 {{24, 30}, GURL("http://www.example.com/1")},
400 {{17, 19}, GURL("http://www.example.com/2")},
401 {{36, 39}, GURL("http://www.example.com/3")},
402 };
403 LegalMessageLines expected = {expected_line};
404 EXPECT_TRUE(
405 CompareLegalMessages(expected, controller()->GetLegalMessageLines()));
406 }
407
408 TEST_F(SaveCardBubbleControllerImplTest, LegalMessage_MaximumPlaceholders) {
409 SetLegalMessage(
410 "{"
411 " \"line\" : [ {"
412 " \"template\": \"a{0} b{1} c{2} d{3} e{4} f{5} g{6}\","
413 " \"template_parameter\": [ {"
414 " \"display_text\": \"A\","
415 " \"url\": \"http://www.example.com/0\""
416 " }, {"
417 " \"display_text\": \"B\","
418 " \"url\": \"http://www.example.com/1\""
419 " }, {"
420 " \"display_text\": \"C\","
421 " \"url\": \"http://www.example.com/2\""
422 " }, {"
423 " \"display_text\": \"D\","
424 " \"url\": \"http://www.example.com/3\""
425 " }, {"
426 " \"display_text\": \"E\","
427 " \"url\": \"http://www.example.com/4\""
428 " }, {"
429 " \"display_text\": \"F\","
430 " \"url\": \"http://www.example.com/5\""
431 " }, {"
432 " \"display_text\": \"G\","
433 " \"url\": \"http://www.example.com/6\""
434 " } ]"
435 " } ]"
436 "}");
437
438 LegalMessageLine expected_line;
439 expected_line.text = base::ASCIIToUTF16("aA bB cC dD eE fF gG");
440 expected_line.links = {
441 {{1, 2}, GURL("http://www.example.com/0")},
442 {{4, 5}, GURL("http://www.example.com/1")},
443 {{7, 8}, GURL("http://www.example.com/2")},
444 {{10, 11}, GURL("http://www.example.com/3")},
445 {{13, 14}, GURL("http://www.example.com/4")},
446 {{16, 17}, GURL("http://www.example.com/5")},
447 {{19, 20}, GURL("http://www.example.com/6")},
448 };
449 LegalMessageLines expected = {expected_line};
450 EXPECT_TRUE(
451 CompareLegalMessages(expected, controller()->GetLegalMessageLines()));
452 }
453
454 TEST_F(SaveCardBubbleControllerImplTest, Metrics_Local_FirstShow_ShowBubble) { 126 TEST_F(SaveCardBubbleControllerImplTest, Metrics_Local_FirstShow_ShowBubble) {
455 base::HistogramTester histogram_tester; 127 base::HistogramTester histogram_tester;
456 ShowLocalBubble(); 128 ShowLocalBubble();
457 129
458 EXPECT_THAT( 130 EXPECT_THAT(
459 histogram_tester.GetAllSamples( 131 histogram_tester.GetAllSamples(
460 "Autofill.SaveCreditCardPrompt.Local.FirstShow"), 132 "Autofill.SaveCreditCardPrompt.Local.FirstShow"),
461 ElementsAre(Bucket(AutofillMetrics::SAVE_CARD_PROMPT_SHOW_REQUESTED, 1), 133 ElementsAre(Bucket(AutofillMetrics::SAVE_CARD_PROMPT_SHOW_REQUESTED, 1),
462 Bucket(AutofillMetrics::SAVE_CARD_PROMPT_SHOWN, 1))); 134 Bucket(AutofillMetrics::SAVE_CARD_PROMPT_SHOWN, 1)));
463 } 135 }
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 EXPECT_THAT( 353 EXPECT_THAT(
682 histogram_tester.GetAllSamples( 354 histogram_tester.GetAllSamples(
683 "Autofill.SaveCreditCardPrompt.Upload.FirstShow"), 355 "Autofill.SaveCreditCardPrompt.Upload.FirstShow"),
684 ElementsAre( 356 ElementsAre(
685 Bucket(AutofillMetrics::SAVE_CARD_PROMPT_SHOW_REQUESTED, 1), 357 Bucket(AutofillMetrics::SAVE_CARD_PROMPT_SHOW_REQUESTED, 1),
686 Bucket(AutofillMetrics::SAVE_CARD_PROMPT_END_INVALID_LEGAL_MESSAGE, 358 Bucket(AutofillMetrics::SAVE_CARD_PROMPT_END_INVALID_LEGAL_MESSAGE,
687 1))); 359 1)));
688 } 360 }
689 361
690 } // namespace autofill 362 } // namespace autofill
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698