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