OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/chromeos/gdata/gdata_contacts_service.h" | 5 #include "chrome/browser/chromeos/gdata/gdata_contacts_service.h" |
6 | 6 |
7 #include <cstring> | 7 #include <cstring> |
8 #include <string> | 8 #include <string> |
9 #include <map> | 9 #include <map> |
10 #include <utility> | 10 #include <utility> |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 } | 173 } |
174 | 174 |
175 // Gets the photo URL from a contact's dictionary (within the "entry" list). | 175 // Gets the photo URL from a contact's dictionary (within the "entry" list). |
176 // Returns an empty string if no photo was found. | 176 // Returns an empty string if no photo was found. |
177 std::string GetPhotoUrl(const DictionaryValue& dict) { | 177 std::string GetPhotoUrl(const DictionaryValue& dict) { |
178 const ListValue* link_list = NULL; | 178 const ListValue* link_list = NULL; |
179 if (!dict.GetList(kLinkField, &link_list)) | 179 if (!dict.GetList(kLinkField, &link_list)) |
180 return std::string(); | 180 return std::string(); |
181 | 181 |
182 for (size_t i = 0; i < link_list->GetSize(); ++i) { | 182 for (size_t i = 0; i < link_list->GetSize(); ++i) { |
183 DictionaryValue* link_dict = NULL; | 183 const DictionaryValue* link_dict = NULL; |
184 if (!link_list->GetDictionary(i, &link_dict)) | 184 if (!link_list->GetDictionary(i, &link_dict)) |
185 continue; | 185 continue; |
186 | 186 |
187 std::string rel; | 187 std::string rel; |
188 if (!link_dict->GetString(kLinkRelField, &rel)) | 188 if (!link_dict->GetString(kLinkRelField, &rel)) |
189 continue; | 189 continue; |
190 if (rel != kLinkRelPhotoValue) | 190 if (rel != kLinkRelPhotoValue) |
191 continue; | 191 continue; |
192 | 192 |
193 // From https://goo.gl/7T6Od: "If a contact does not have a photo, then the | 193 // From https://goo.gl/7T6Od: "If a contact does not have a photo, then the |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
230 dict.GetString(kFullNameField, contact->mutable_full_name()); | 230 dict.GetString(kFullNameField, contact->mutable_full_name()); |
231 dict.GetString(kGivenNameField, contact->mutable_given_name()); | 231 dict.GetString(kGivenNameField, contact->mutable_given_name()); |
232 dict.GetString(kAdditionalNameField, contact->mutable_additional_name()); | 232 dict.GetString(kAdditionalNameField, contact->mutable_additional_name()); |
233 dict.GetString(kFamilyNameField, contact->mutable_family_name()); | 233 dict.GetString(kFamilyNameField, contact->mutable_family_name()); |
234 dict.GetString(kNamePrefixField, contact->mutable_name_prefix()); | 234 dict.GetString(kNamePrefixField, contact->mutable_name_prefix()); |
235 dict.GetString(kNameSuffixField, contact->mutable_name_suffix()); | 235 dict.GetString(kNameSuffixField, contact->mutable_name_suffix()); |
236 | 236 |
237 const ListValue* email_list = NULL; | 237 const ListValue* email_list = NULL; |
238 if (dict.GetList(kEmailField, &email_list)) { | 238 if (dict.GetList(kEmailField, &email_list)) { |
239 for (size_t i = 0; i < email_list->GetSize(); ++i) { | 239 for (size_t i = 0; i < email_list->GetSize(); ++i) { |
240 DictionaryValue* email_dict = NULL; | 240 const DictionaryValue* email_dict = NULL; |
241 if (!email_list->GetDictionary(i, &email_dict)) | 241 if (!email_list->GetDictionary(i, &email_dict)) |
242 return false; | 242 return false; |
243 | 243 |
244 contacts::Contact_EmailAddress* email = contact->add_email_addresses(); | 244 contacts::Contact_EmailAddress* email = contact->add_email_addresses(); |
245 if (!email_dict->GetString(kEmailAddressField, email->mutable_address())) | 245 if (!email_dict->GetString(kEmailAddressField, email->mutable_address())) |
246 return false; | 246 return false; |
247 email->set_primary(IsAddressPrimary(*email_dict)); | 247 email->set_primary(IsAddressPrimary(*email_dict)); |
248 InitAddressType(*email_dict, email->mutable_type()); | 248 InitAddressType(*email_dict, email->mutable_type()); |
249 } | 249 } |
250 } | 250 } |
251 | 251 |
252 const ListValue* phone_list = NULL; | 252 const ListValue* phone_list = NULL; |
253 if (dict.GetList(kPhoneField, &phone_list)) { | 253 if (dict.GetList(kPhoneField, &phone_list)) { |
254 for (size_t i = 0; i < phone_list->GetSize(); ++i) { | 254 for (size_t i = 0; i < phone_list->GetSize(); ++i) { |
255 DictionaryValue* phone_dict = NULL; | 255 const DictionaryValue* phone_dict = NULL; |
256 if (!phone_list->GetDictionary(i, &phone_dict)) | 256 if (!phone_list->GetDictionary(i, &phone_dict)) |
257 return false; | 257 return false; |
258 | 258 |
259 contacts::Contact_PhoneNumber* phone = contact->add_phone_numbers(); | 259 contacts::Contact_PhoneNumber* phone = contact->add_phone_numbers(); |
260 if (!phone_dict->GetString(kPhoneNumberField, phone->mutable_number())) | 260 if (!phone_dict->GetString(kPhoneNumberField, phone->mutable_number())) |
261 return false; | 261 return false; |
262 phone->set_primary(IsAddressPrimary(*phone_dict)); | 262 phone->set_primary(IsAddressPrimary(*phone_dict)); |
263 InitAddressType(*phone_dict, phone->mutable_type()); | 263 InitAddressType(*phone_dict, phone->mutable_type()); |
264 } | 264 } |
265 } | 265 } |
266 | 266 |
267 const ListValue* address_list = NULL; | 267 const ListValue* address_list = NULL; |
268 if (dict.GetList(kPostalAddressField, &address_list)) { | 268 if (dict.GetList(kPostalAddressField, &address_list)) { |
269 for (size_t i = 0; i < address_list->GetSize(); ++i) { | 269 for (size_t i = 0; i < address_list->GetSize(); ++i) { |
270 DictionaryValue* address_dict = NULL; | 270 const DictionaryValue* address_dict = NULL; |
271 if (!address_list->GetDictionary(i, &address_dict)) | 271 if (!address_list->GetDictionary(i, &address_dict)) |
272 return false; | 272 return false; |
273 | 273 |
274 contacts::Contact_PostalAddress* address = | 274 contacts::Contact_PostalAddress* address = |
275 contact->add_postal_addresses(); | 275 contact->add_postal_addresses(); |
276 if (!address_dict->GetString(kPostalAddressFormattedField, | 276 if (!address_dict->GetString(kPostalAddressFormattedField, |
277 address->mutable_address())) { | 277 address->mutable_address())) { |
278 return false; | 278 return false; |
279 } | 279 } |
280 address->set_primary(IsAddressPrimary(*address_dict)); | 280 address->set_primary(IsAddressPrimary(*address_dict)); |
281 InitAddressType(*address_dict, address->mutable_type()); | 281 InitAddressType(*address_dict, address->mutable_type()); |
282 } | 282 } |
283 } | 283 } |
284 | 284 |
285 const ListValue* im_list = NULL; | 285 const ListValue* im_list = NULL; |
286 if (dict.GetList(kInstantMessagingField, &im_list)) { | 286 if (dict.GetList(kInstantMessagingField, &im_list)) { |
287 for (size_t i = 0; i < im_list->GetSize(); ++i) { | 287 for (size_t i = 0; i < im_list->GetSize(); ++i) { |
288 DictionaryValue* im_dict = NULL; | 288 const DictionaryValue* im_dict = NULL; |
289 if (!im_list->GetDictionary(i, &im_dict)) | 289 if (!im_list->GetDictionary(i, &im_dict)) |
290 return false; | 290 return false; |
291 | 291 |
292 contacts::Contact_InstantMessagingAddress* im = | 292 contacts::Contact_InstantMessagingAddress* im = |
293 contact->add_instant_messaging_addresses(); | 293 contact->add_instant_messaging_addresses(); |
294 if (!im_dict->GetString(kInstantMessagingAddressField, | 294 if (!im_dict->GetString(kInstantMessagingAddressField, |
295 im->mutable_address())) { | 295 im->mutable_address())) { |
296 return false; | 296 return false; |
297 } | 297 } |
298 im->set_primary(IsAddressPrimary(*im_dict)); | 298 im->set_primary(IsAddressPrimary(*im_dict)); |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
397 LOG(WARNING) << "Feed dictionary missing"; | 397 LOG(WARNING) << "Feed dictionary missing"; |
398 return false; | 398 return false; |
399 } | 399 } |
400 | 400 |
401 // Check the category field to confirm that this is actually a contact feed. | 401 // Check the category field to confirm that this is actually a contact feed. |
402 const ListValue* category_list = NULL; | 402 const ListValue* category_list = NULL; |
403 if (!feed_dict->GetList(kCategoryField, &category_list)) { | 403 if (!feed_dict->GetList(kCategoryField, &category_list)) { |
404 LOG(WARNING) << "Category list missing"; | 404 LOG(WARNING) << "Category list missing"; |
405 return false; | 405 return false; |
406 } | 406 } |
407 DictionaryValue* category_dict = NULL; | 407 const DictionaryValue* category_dict = NULL; |
408 if (!category_list->GetSize() == 1 || | 408 if (!category_list->GetSize() == 1 || |
409 !category_list->GetDictionary(0, &category_dict)) { | 409 !category_list->GetDictionary(0, &category_dict)) { |
410 LOG(WARNING) << "Unable to get dictionary from category list of size " | 410 LOG(WARNING) << "Unable to get dictionary from category list of size " |
411 << category_list->GetSize(); | 411 << category_list->GetSize(); |
412 return false; | 412 return false; |
413 } | 413 } |
414 std::string category_scheme, category_term; | 414 std::string category_scheme, category_term; |
415 if (!category_dict->GetString(kCategorySchemeField, &category_scheme) || | 415 if (!category_dict->GetString(kCategorySchemeField, &category_scheme) || |
416 !category_dict->GetString(kCategoryTermField, &category_term) || | 416 !category_dict->GetString(kCategoryTermField, &category_term) || |
417 category_scheme != kCategorySchemeValue || | 417 category_scheme != kCategorySchemeValue || |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
604 | 604 |
605 void GDataContactsService::OnRequestComplete(DownloadContactsRequest* request) { | 605 void GDataContactsService::OnRequestComplete(DownloadContactsRequest* request) { |
606 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 606 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
607 DCHECK(request); | 607 DCHECK(request); |
608 VLOG(1) << "Download request " << request << " complete"; | 608 VLOG(1) << "Download request " << request << " complete"; |
609 requests_.erase(request); | 609 requests_.erase(request); |
610 delete request; | 610 delete request; |
611 } | 611 } |
612 | 612 |
613 } // namespace contacts | 613 } // namespace contacts |
OLD | NEW |