• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/profiles/profile_downloader.h"
6 
7 #include "base/strings/utf_string_conversions.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 
10 namespace {
11 
GetJSonData(const std::string & full_name,const std::string & given_name,const std::string & url,const std::string & locale)12 std::string GetJSonData(const std::string& full_name,
13                         const std::string& given_name,
14                         const std::string& url,
15                         const std::string& locale) {
16   std::stringstream stream;
17   bool started = false;
18 
19   stream << "{ ";
20   if (!full_name.empty()) {
21     stream << "\"name\": \"" << full_name << "\"";
22     started = true;
23   }
24   if (!given_name.empty()) {
25     stream << (started ? ", " : "") << "\"given_name\": \"" << given_name
26            << "\"";
27     started = true;
28   }
29   if (!url.empty()) {
30     stream << (started ? ", " : "") << "\"picture\": \"" << url << "\"";
31     started = true;
32   }
33 
34   if (!locale.empty())
35     stream << (started ? ", " : "") << "\"locale\": \"" << locale << "\"";
36 
37   stream << " }";
38   return stream.str();
39 }
40 
41 } // namespace
42 
43 class ProfileDownloaderTest : public testing::Test {
44  protected:
ProfileDownloaderTest()45   ProfileDownloaderTest() {
46   }
47 
~ProfileDownloaderTest()48   virtual ~ProfileDownloaderTest() {
49   }
50 
VerifyWithAccountData(const std::string & full_name,const std::string & given_name,const std::string & url,const std::string & expected_url,const std::string & locale,bool is_valid)51   void VerifyWithAccountData(const std::string& full_name,
52                              const std::string& given_name,
53                              const std::string& url,
54                              const std::string& expected_url,
55                              const std::string& locale,
56                              bool is_valid) {
57     base::string16 parsed_full_name;
58     base::string16 parsed_given_name;
59     std::string parsed_url;
60     std::string parsed_locale;
61     bool result = ProfileDownloader::ParseProfileJSON(
62         GetJSonData(full_name, given_name, url, locale),
63         &parsed_full_name,
64         &parsed_given_name,
65         &parsed_url,
66         32,
67         &parsed_locale);
68     EXPECT_EQ(is_valid, result);
69     std::string parsed_full_name_utf8 = base::UTF16ToUTF8(parsed_full_name);
70     std::string parsed_given_name_utf8 = base::UTF16ToUTF8(parsed_given_name);
71 
72     EXPECT_EQ(full_name, parsed_full_name_utf8);
73     EXPECT_EQ(given_name, parsed_given_name_utf8);
74     EXPECT_EQ(expected_url, parsed_url);
75     EXPECT_EQ(locale, parsed_locale);
76   }
77 };
78 
TEST_F(ProfileDownloaderTest,ParseData)79 TEST_F(ProfileDownloaderTest, ParseData) {
80   // URL without size specified.
81   VerifyWithAccountData(
82       "Pat Smith",
83       "Pat",
84       "https://example.com/--Abc/AAAAAAAAAAI/AAAAAAAAACQ/Efg/photo.jpg",
85       "https://example.com/--Abc/AAAAAAAAAAI/AAAAAAAAACQ/Efg/s32-c/photo.jpg",
86       "en-US",
87       true);
88 
89   // URL with size specified.
90   VerifyWithAccountData(
91       "Pat Smith",
92       "Pat",
93       "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/abc12/s64-c/1234567890.jpg",
94       "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/abc12/s32-c/1234567890.jpg",
95       "en-US",
96       true);
97 
98   // URL with unknown format.
99   VerifyWithAccountData("Pat Smith",
100                         "Pat",
101                         "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/",
102                         "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/",
103                         "en-US",
104                         true);
105 
106   // Try different locales. URL with size specified.
107   VerifyWithAccountData(
108       "Pat Smith",
109       "Pat",
110       "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/abc12/s64-c/1234567890.jpg",
111       "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/abc12/s32-c/1234567890.jpg",
112       "jp",
113       true);
114 
115   // URL with unknown format.
116   VerifyWithAccountData("Pat Smith",
117                         "Pat",
118                         "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/",
119                         "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/",
120                         "fr",
121                         true);
122 
123   // Data with only name.
124   VerifyWithAccountData(
125       "Pat Smith", "Pat", std::string(), std::string(), std::string(), true);
126 
127   // Data with only URL.
128   VerifyWithAccountData(
129       std::string(),
130       std::string(),
131       "https://example.com/--Abc/AAAAAAAAAAI/AAAAAAAAACQ/Efg/photo.jpg",
132       "https://example.com/--Abc/AAAAAAAAAAI/AAAAAAAAACQ/Efg/s32-c/photo.jpg",
133       std::string(),
134       true);
135 
136   // Data with only locale.
137   VerifyWithAccountData(
138       std::string(), std::string(), std::string(), std::string(), "fr", false);
139 
140   // Data without name or URL or locale.
141   VerifyWithAccountData(std::string(),
142                         std::string(),
143                         std::string(),
144                         std::string(),
145                         std::string(),
146                         false);
147 
148   // Data with an invalid URL.
149   VerifyWithAccountData(std::string(),
150                         std::string(),
151                         "invalid url",
152                         std::string(),
153                         std::string(),
154                         false);
155 }
156 
TEST_F(ProfileDownloaderTest,DefaultURL)157 TEST_F(ProfileDownloaderTest, DefaultURL) {
158   // Empty URL should be default photo
159   EXPECT_TRUE(ProfileDownloader::IsDefaultProfileImageURL(std::string()));
160   // Picasa default photo
161   EXPECT_TRUE(ProfileDownloader::IsDefaultProfileImageURL(
162       "https://example.com/-4/AAAAAAAAAAA/AAAAAAAAAAE/G/s64-c/photo.jpg"));
163   // Not default G+ photo
164   EXPECT_FALSE(ProfileDownloader::IsDefaultProfileImageURL(
165       "https://example.com/-4/AAAAAAAAAAI/AAAAAAAAAAA/G/photo.jpg"));
166   // Not default with 6 components
167   EXPECT_FALSE(ProfileDownloader::IsDefaultProfileImageURL(
168       "https://example.com/-4/AAAAAAAAAAI/AAAAAAAAACQ/Efg/photo.jpg"));
169   // Not default with 7 components
170   EXPECT_FALSE(ProfileDownloader::IsDefaultProfileImageURL(
171       "https://example.com/-4/AAAAAAAAAAI/AAAAAAAAACQ/Efg/s32-c/photo.jpg"));
172 }
173