15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_downloader.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
122f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)std::string GetJSonData(const std::string& full_name,
132f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)                        const std::string& given_name,
142f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)                        const std::string& url,
152f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)                        const std::string& locale) {
162f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  std::stringstream stream;
172f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  bool started = false;
1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
192f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  stream << "{ ";
202f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  if (!full_name.empty()) {
212f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    stream << "\"name\": \"" << full_name << "\"";
222f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    started = true;
232f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  }
242f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  if (!given_name.empty()) {
252f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    stream << (started ? ", " : "") << "\"given_name\": \"" << given_name
262f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)           << "\"";
272f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    started = true;
282f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  }
292f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  if (!url.empty()) {
302f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    stream << (started ? ", " : "") << "\"picture\": \"" << url << "\"";
312f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    started = true;
322f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  }
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
345c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  if (!locale.empty())
352f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)    stream << (started ? ", " : "") << "\"locale\": \"" << locale << "\"";
362f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)
372f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  stream << " }";
382f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)  return stream.str();
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ProfileDownloaderTest : public testing::Test {
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileDownloaderTest() {
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~ProfileDownloaderTest() {
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  void VerifyWithAccountData(const std::string& full_name,
5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                             const std::string& given_name,
5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                             const std::string& url,
5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                             const std::string& expected_url,
5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                             const std::string& locale,
5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                             bool is_valid) {
57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::string16 parsed_full_name;
58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    base::string16 parsed_given_name;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string parsed_url;
6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    std::string parsed_locale;
6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    bool result = ProfileDownloader::ParseProfileJSON(
622f22f038970e0d1927c41b04bbf5589bd12c5316Torne (Richard Coles)        GetJSonData(full_name, given_name, url, locale),
63d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        &parsed_full_name,
64d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        &parsed_given_name,
65d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)        &parsed_url,
6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        32,
6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)        &parsed_locale);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(is_valid, result);
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    std::string parsed_full_name_utf8 = base::UTF16ToUTF8(parsed_full_name);
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    std::string parsed_given_name_utf8 = base::UTF16ToUTF8(parsed_given_name);
71d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
72d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    EXPECT_EQ(full_name, parsed_full_name_utf8);
73d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)    EXPECT_EQ(given_name, parsed_given_name_utf8);
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    EXPECT_EQ(expected_url, parsed_url);
7568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    EXPECT_EQ(locale, parsed_locale);
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileDownloaderTest, ParseData) {
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // URL without size specified.
8168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  VerifyWithAccountData(
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "Pat Smith",
83d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "Pat",
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https://example.com/--Abc/AAAAAAAAAAI/AAAAAAAAACQ/Efg/photo.jpg",
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https://example.com/--Abc/AAAAAAAAAAI/AAAAAAAAACQ/Efg/s32-c/photo.jpg",
8668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "en-US",
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      true);
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // URL with size specified.
9068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  VerifyWithAccountData(
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "Pat Smith",
92d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "Pat",
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/abc12/s64-c/1234567890.jpg",
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/abc12/s32-c/1234567890.jpg",
9568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "en-US",
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      true);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // URL with unknown format.
9968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  VerifyWithAccountData("Pat Smith",
10068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        "Pat",
10168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/",
10268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/",
10368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        "en-US",
10468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        true);
10568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
10668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Try different locales. URL with size specified.
10768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  VerifyWithAccountData(
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "Pat Smith",
109d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      "Pat",
11068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/abc12/s64-c/1234567890.jpg",
11168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/abc12/s32-c/1234567890.jpg",
11268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "jp",
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      true);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // URL with unknown format.
11668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  VerifyWithAccountData("Pat Smith",
11768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        "Pat",
11868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/",
11968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        "http://lh0.ggpht.com/-abcd1aBCDEf/AAAA/AAA_A/",
12068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        "fr",
12168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        true);
12268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Data with only name.
12468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  VerifyWithAccountData(
12568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      "Pat Smith", "Pat", std::string(), std::string(), std::string(), true);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Data with only URL.
12868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  VerifyWithAccountData(
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      std::string(),
130d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)      std::string(),
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https://example.com/--Abc/AAAAAAAAAAI/AAAAAAAAACQ/Efg/photo.jpg",
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https://example.com/--Abc/AAAAAAAAAAI/AAAAAAAAACQ/Efg/s32-c/photo.jpg",
13368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      std::string(),
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      true);
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Data with only locale.
13768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  VerifyWithAccountData(
13868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      std::string(), std::string(), std::string(), std::string(), "fr", false);
13968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
14068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  // Data without name or URL or locale.
14168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  VerifyWithAccountData(std::string(),
14268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        std::string(),
14368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        std::string(),
14468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        std::string(),
14568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        std::string(),
14668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        false);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Data with an invalid URL.
14968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  VerifyWithAccountData(std::string(),
15068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        std::string(),
15168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        "invalid url",
15268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        std::string(),
15368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        std::string(),
15468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)                        false);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(ProfileDownloaderTest, DefaultURL) {
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Empty URL should be default photo
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(ProfileDownloader::IsDefaultProfileImageURL(std::string()));
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Picasa default photo
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(ProfileDownloader::IsDefaultProfileImageURL(
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https://example.com/-4/AAAAAAAAAAA/AAAAAAAAAAE/G/s64-c/photo.jpg"));
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Not default G+ photo
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(ProfileDownloader::IsDefaultProfileImageURL(
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https://example.com/-4/AAAAAAAAAAI/AAAAAAAAAAA/G/photo.jpg"));
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Not default with 6 components
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(ProfileDownloader::IsDefaultProfileImageURL(
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https://example.com/-4/AAAAAAAAAAI/AAAAAAAAACQ/Efg/photo.jpg"));
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Not default with 7 components
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(ProfileDownloader::IsDefaultProfileImageURL(
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "https://example.com/-4/AAAAAAAAAAI/AAAAAAAAACQ/Efg/s32-c/photo.jpg"));
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
173