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

Side by Side Diff: chrome/browser/chromeos/contacts/gdata_contacts_service.cc

Issue 106433007: Update some uses of Value in chrome/browser to use the base:: namespace. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix Created 7 years 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 | Annotate | Revision Log
OLDNEW
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/contacts/gdata_contacts_service.h" 5 #include "chrome/browser/chromeos/contacts/gdata_contacts_service.h"
6 6
7 #include <cstring> 7 #include <cstring>
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 // Returns a string containing a pretty-printed JSON representation of |value|. 149 // Returns a string containing a pretty-printed JSON representation of |value|.
150 std::string PrettyPrintValue(const base::Value& value) { 150 std::string PrettyPrintValue(const base::Value& value) {
151 std::string out; 151 std::string out;
152 base::JSONWriter::WriteWithOptions( 152 base::JSONWriter::WriteWithOptions(
153 &value, base::JSONWriter::OPTIONS_PRETTY_PRINT, &out); 153 &value, base::JSONWriter::OPTIONS_PRETTY_PRINT, &out);
154 return out; 154 return out;
155 } 155 }
156 156
157 // Assigns the value at |path| within |dict| to |out|, returning false if the 157 // Assigns the value at |path| within |dict| to |out|, returning false if the
158 // path wasn't present. Unicode byte order marks are removed from the string. 158 // path wasn't present. Unicode byte order marks are removed from the string.
159 bool GetCleanedString(const DictionaryValue& dict, 159 bool GetCleanedString(const base::DictionaryValue& dict,
160 const std::string& path, 160 const std::string& path,
161 std::string* out) { 161 std::string* out) {
162 if (!dict.GetString(path, out)) 162 if (!dict.GetString(path, out))
163 return false; 163 return false;
164 164
165 // The Unicode byte order mark, U+FEFF, is useless in UTF-8 strings (which are 165 // The Unicode byte order mark, U+FEFF, is useless in UTF-8 strings (which are
166 // interpreted one byte at a time). 166 // interpreted one byte at a time).
167 ReplaceSubstringsAfterOffset(out, 0, "\xEF\xBB\xBF", ""); 167 ReplaceSubstringsAfterOffset(out, 0, "\xEF\xBB\xBF", "");
168 return true; 168 return true;
169 } 169 }
170 170
171 // Returns whether an address is primary, given a dictionary representing a 171 // Returns whether an address is primary, given a dictionary representing a
172 // single address. 172 // single address.
173 bool IsAddressPrimary(const DictionaryValue& address_dict) { 173 bool IsAddressPrimary(const base::DictionaryValue& address_dict) {
174 std::string primary; 174 std::string primary;
175 address_dict.GetString(kAddressPrimaryField, &primary); 175 address_dict.GetString(kAddressPrimaryField, &primary);
176 return primary == kAddressPrimaryTrueValue; 176 return primary == kAddressPrimaryTrueValue;
177 } 177 }
178 178
179 // Initializes an AddressType message given a dictionary representing a single 179 // Initializes an AddressType message given a dictionary representing a single
180 // address. 180 // address.
181 void InitAddressType(const DictionaryValue& address_dict, 181 void InitAddressType(const base::DictionaryValue& address_dict,
182 Contact_AddressType* type) { 182 Contact_AddressType* type) {
183 DCHECK(type); 183 DCHECK(type);
184 type->Clear(); 184 type->Clear();
185 185
186 std::string rel; 186 std::string rel;
187 address_dict.GetString(kAddressRelField, &rel); 187 address_dict.GetString(kAddressRelField, &rel);
188 if (rel == kAddressRelHomeValue) 188 if (rel == kAddressRelHomeValue)
189 type->set_relation(Contact_AddressType_Relation_HOME); 189 type->set_relation(Contact_AddressType_Relation_HOME);
190 else if (rel == kAddressRelWorkValue) 190 else if (rel == kAddressRelWorkValue)
191 type->set_relation(Contact_AddressType_Relation_WORK); 191 type->set_relation(Contact_AddressType_Relation_WORK);
192 else if (rel == kAddressRelMobileValue) 192 else if (rel == kAddressRelMobileValue)
193 type->set_relation(Contact_AddressType_Relation_MOBILE); 193 type->set_relation(Contact_AddressType_Relation_MOBILE);
194 else 194 else
195 type->set_relation(Contact_AddressType_Relation_OTHER); 195 type->set_relation(Contact_AddressType_Relation_OTHER);
196 196
197 GetCleanedString(address_dict, kAddressLabelField, type->mutable_label()); 197 GetCleanedString(address_dict, kAddressLabelField, type->mutable_label());
198 } 198 }
199 199
200 // Maps the protocol from a dictionary representing a contact's IM address to a 200 // Maps the protocol from a dictionary representing a contact's IM address to a
201 // contacts::Contact_InstantMessagingAddress_Protocol value. 201 // contacts::Contact_InstantMessagingAddress_Protocol value.
202 contacts::Contact_InstantMessagingAddress_Protocol 202 contacts::Contact_InstantMessagingAddress_Protocol
203 GetInstantMessagingProtocol(const DictionaryValue& im_dict) { 203 GetInstantMessagingProtocol(const base::DictionaryValue& im_dict) {
204 std::string protocol; 204 std::string protocol;
205 im_dict.GetString(kInstantMessagingProtocolField, &protocol); 205 im_dict.GetString(kInstantMessagingProtocolField, &protocol);
206 if (protocol == kInstantMessagingProtocolAimValue) 206 if (protocol == kInstantMessagingProtocolAimValue)
207 return contacts::Contact_InstantMessagingAddress_Protocol_AIM; 207 return contacts::Contact_InstantMessagingAddress_Protocol_AIM;
208 else if (protocol == kInstantMessagingProtocolMsnValue) 208 else if (protocol == kInstantMessagingProtocolMsnValue)
209 return contacts::Contact_InstantMessagingAddress_Protocol_MSN; 209 return contacts::Contact_InstantMessagingAddress_Protocol_MSN;
210 else if (protocol == kInstantMessagingProtocolYahooValue) 210 else if (protocol == kInstantMessagingProtocolYahooValue)
211 return contacts::Contact_InstantMessagingAddress_Protocol_YAHOO; 211 return contacts::Contact_InstantMessagingAddress_Protocol_YAHOO;
212 else if (protocol == kInstantMessagingProtocolSkypeValue) 212 else if (protocol == kInstantMessagingProtocolSkypeValue)
213 return contacts::Contact_InstantMessagingAddress_Protocol_SKYPE; 213 return contacts::Contact_InstantMessagingAddress_Protocol_SKYPE;
214 else if (protocol == kInstantMessagingProtocolQqValue) 214 else if (protocol == kInstantMessagingProtocolQqValue)
215 return contacts::Contact_InstantMessagingAddress_Protocol_QQ; 215 return contacts::Contact_InstantMessagingAddress_Protocol_QQ;
216 else if (protocol == kInstantMessagingProtocolGoogleTalkValue) 216 else if (protocol == kInstantMessagingProtocolGoogleTalkValue)
217 return contacts::Contact_InstantMessagingAddress_Protocol_GOOGLE_TALK; 217 return contacts::Contact_InstantMessagingAddress_Protocol_GOOGLE_TALK;
218 else if (protocol == kInstantMessagingProtocolIcqValue) 218 else if (protocol == kInstantMessagingProtocolIcqValue)
219 return contacts::Contact_InstantMessagingAddress_Protocol_ICQ; 219 return contacts::Contact_InstantMessagingAddress_Protocol_ICQ;
220 else if (protocol == kInstantMessagingProtocolJabberValue) 220 else if (protocol == kInstantMessagingProtocolJabberValue)
221 return contacts::Contact_InstantMessagingAddress_Protocol_JABBER; 221 return contacts::Contact_InstantMessagingAddress_Protocol_JABBER;
222 else 222 else
223 return contacts::Contact_InstantMessagingAddress_Protocol_OTHER; 223 return contacts::Contact_InstantMessagingAddress_Protocol_OTHER;
224 } 224 }
225 225
226 // Gets the photo URL from a contact's dictionary (within the "entry" list). 226 // Gets the photo URL from a contact's dictionary (within the "entry" list).
227 // Returns an empty string if no photo was found. 227 // Returns an empty string if no photo was found.
228 std::string GetPhotoUrl(const DictionaryValue& dict) { 228 std::string GetPhotoUrl(const base::DictionaryValue& dict) {
229 const ListValue* link_list = NULL; 229 const base::ListValue* link_list = NULL;
230 if (!dict.GetList(kLinkField, &link_list)) 230 if (!dict.GetList(kLinkField, &link_list))
231 return std::string(); 231 return std::string();
232 232
233 for (size_t i = 0; i < link_list->GetSize(); ++i) { 233 for (size_t i = 0; i < link_list->GetSize(); ++i) {
234 const DictionaryValue* link_dict = NULL; 234 const base::DictionaryValue* link_dict = NULL;
235 if (!link_list->GetDictionary(i, &link_dict)) 235 if (!link_list->GetDictionary(i, &link_dict))
236 continue; 236 continue;
237 237
238 std::string rel; 238 std::string rel;
239 if (!link_dict->GetString(kLinkRelField, &rel)) 239 if (!link_dict->GetString(kLinkRelField, &rel))
240 continue; 240 continue;
241 if (rel != kLinkRelPhotoValue) 241 if (rel != kLinkRelPhotoValue)
242 continue; 242 continue;
243 243
244 // From https://goo.gl/7T6Od: "If a contact does not have a photo, then the 244 // From https://goo.gl/7T6Od: "If a contact does not have a photo, then the
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 return true; 279 return true;
280 280
281 GetCleanedString(dict, kFullNameField, contact->mutable_full_name()); 281 GetCleanedString(dict, kFullNameField, contact->mutable_full_name());
282 GetCleanedString(dict, kGivenNameField, contact->mutable_given_name()); 282 GetCleanedString(dict, kGivenNameField, contact->mutable_given_name());
283 GetCleanedString( 283 GetCleanedString(
284 dict, kAdditionalNameField, contact->mutable_additional_name()); 284 dict, kAdditionalNameField, contact->mutable_additional_name());
285 GetCleanedString(dict, kFamilyNameField, contact->mutable_family_name()); 285 GetCleanedString(dict, kFamilyNameField, contact->mutable_family_name());
286 GetCleanedString(dict, kNamePrefixField, contact->mutable_name_prefix()); 286 GetCleanedString(dict, kNamePrefixField, contact->mutable_name_prefix());
287 GetCleanedString(dict, kNameSuffixField, contact->mutable_name_suffix()); 287 GetCleanedString(dict, kNameSuffixField, contact->mutable_name_suffix());
288 288
289 const ListValue* email_list = NULL; 289 const base::ListValue* email_list = NULL;
290 if (dict.GetList(kEmailField, &email_list)) { 290 if (dict.GetList(kEmailField, &email_list)) {
291 for (size_t i = 0; i < email_list->GetSize(); ++i) { 291 for (size_t i = 0; i < email_list->GetSize(); ++i) {
292 const DictionaryValue* email_dict = NULL; 292 const base::DictionaryValue* email_dict = NULL;
293 if (!email_list->GetDictionary(i, &email_dict)) 293 if (!email_list->GetDictionary(i, &email_dict))
294 return false; 294 return false;
295 295
296 contacts::Contact_EmailAddress* email = contact->add_email_addresses(); 296 contacts::Contact_EmailAddress* email = contact->add_email_addresses();
297 if (!GetCleanedString(*email_dict, 297 if (!GetCleanedString(*email_dict,
298 kEmailAddressField, 298 kEmailAddressField,
299 email->mutable_address())) { 299 email->mutable_address())) {
300 return false; 300 return false;
301 } 301 }
302 email->set_primary(IsAddressPrimary(*email_dict)); 302 email->set_primary(IsAddressPrimary(*email_dict));
303 InitAddressType(*email_dict, email->mutable_type()); 303 InitAddressType(*email_dict, email->mutable_type());
304 } 304 }
305 } 305 }
306 306
307 const ListValue* phone_list = NULL; 307 const base::ListValue* phone_list = NULL;
308 if (dict.GetList(kPhoneField, &phone_list)) { 308 if (dict.GetList(kPhoneField, &phone_list)) {
309 for (size_t i = 0; i < phone_list->GetSize(); ++i) { 309 for (size_t i = 0; i < phone_list->GetSize(); ++i) {
310 const DictionaryValue* phone_dict = NULL; 310 const base::DictionaryValue* phone_dict = NULL;
311 if (!phone_list->GetDictionary(i, &phone_dict)) 311 if (!phone_list->GetDictionary(i, &phone_dict))
312 return false; 312 return false;
313 313
314 contacts::Contact_PhoneNumber* phone = contact->add_phone_numbers(); 314 contacts::Contact_PhoneNumber* phone = contact->add_phone_numbers();
315 if (!GetCleanedString(*phone_dict, 315 if (!GetCleanedString(*phone_dict,
316 kPhoneNumberField, 316 kPhoneNumberField,
317 phone->mutable_number())) { 317 phone->mutable_number())) {
318 return false; 318 return false;
319 } 319 }
320 phone->set_primary(IsAddressPrimary(*phone_dict)); 320 phone->set_primary(IsAddressPrimary(*phone_dict));
321 InitAddressType(*phone_dict, phone->mutable_type()); 321 InitAddressType(*phone_dict, phone->mutable_type());
322 } 322 }
323 } 323 }
324 324
325 const ListValue* address_list = NULL; 325 const base::ListValue* address_list = NULL;
326 if (dict.GetList(kPostalAddressField, &address_list)) { 326 if (dict.GetList(kPostalAddressField, &address_list)) {
327 for (size_t i = 0; i < address_list->GetSize(); ++i) { 327 for (size_t i = 0; i < address_list->GetSize(); ++i) {
328 const DictionaryValue* address_dict = NULL; 328 const base::DictionaryValue* address_dict = NULL;
329 if (!address_list->GetDictionary(i, &address_dict)) 329 if (!address_list->GetDictionary(i, &address_dict))
330 return false; 330 return false;
331 331
332 contacts::Contact_PostalAddress* address = 332 contacts::Contact_PostalAddress* address =
333 contact->add_postal_addresses(); 333 contact->add_postal_addresses();
334 if (!GetCleanedString(*address_dict, 334 if (!GetCleanedString(*address_dict,
335 kPostalAddressFormattedField, 335 kPostalAddressFormattedField,
336 address->mutable_address())) { 336 address->mutable_address())) {
337 return false; 337 return false;
338 } 338 }
339 address->set_primary(IsAddressPrimary(*address_dict)); 339 address->set_primary(IsAddressPrimary(*address_dict));
340 InitAddressType(*address_dict, address->mutable_type()); 340 InitAddressType(*address_dict, address->mutable_type());
341 } 341 }
342 } 342 }
343 343
344 const ListValue* im_list = NULL; 344 const base::ListValue* im_list = NULL;
345 if (dict.GetList(kInstantMessagingField, &im_list)) { 345 if (dict.GetList(kInstantMessagingField, &im_list)) {
346 for (size_t i = 0; i < im_list->GetSize(); ++i) { 346 for (size_t i = 0; i < im_list->GetSize(); ++i) {
347 const DictionaryValue* im_dict = NULL; 347 const base::DictionaryValue* im_dict = NULL;
348 if (!im_list->GetDictionary(i, &im_dict)) 348 if (!im_list->GetDictionary(i, &im_dict))
349 return false; 349 return false;
350 350
351 contacts::Contact_InstantMessagingAddress* im = 351 contacts::Contact_InstantMessagingAddress* im =
352 contact->add_instant_messaging_addresses(); 352 contact->add_instant_messaging_addresses();
353 if (!GetCleanedString(*im_dict, 353 if (!GetCleanedString(*im_dict,
354 kInstantMessagingAddressField, 354 kInstantMessagingAddressField,
355 im->mutable_address())) { 355 im->mutable_address())) {
356 return false; 356 return false;
357 } 357 }
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
617 photo_download_timer_.Start( 617 photo_download_timer_.Start(
618 FROM_HERE, service_->photo_download_timer_interval_, 618 FROM_HERE, service_->photo_download_timer_interval_,
619 this, &DownloadContactsRequest::StartPhotoDownloads); 619 this, &DownloadContactsRequest::StartPhotoDownloads);
620 CheckCompletion(); 620 CheckCompletion();
621 } 621 }
622 622
623 // Processes the raw contacts feed from |feed_data| and fills |contacts_|. 623 // Processes the raw contacts feed from |feed_data| and fills |contacts_|.
624 // Returns true on success. 624 // Returns true on success.
625 bool ProcessContactsFeedData(const base::Value& feed_data) { 625 bool ProcessContactsFeedData(const base::Value& feed_data) {
626 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 626 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
627 const DictionaryValue* toplevel_dict = NULL; 627 const base::DictionaryValue* toplevel_dict = NULL;
628 if (!feed_data.GetAsDictionary(&toplevel_dict)) { 628 if (!feed_data.GetAsDictionary(&toplevel_dict)) {
629 LOG(WARNING) << "Top-level object is not a dictionary"; 629 LOG(WARNING) << "Top-level object is not a dictionary";
630 return false; 630 return false;
631 } 631 }
632 632
633 const DictionaryValue* feed_dict = NULL; 633 const base::DictionaryValue* feed_dict = NULL;
634 if (!toplevel_dict->GetDictionary(kFeedField, &feed_dict)) { 634 if (!toplevel_dict->GetDictionary(kFeedField, &feed_dict)) {
635 LOG(WARNING) << "Feed dictionary missing"; 635 LOG(WARNING) << "Feed dictionary missing";
636 return false; 636 return false;
637 } 637 }
638 638
639 // Check the category field to confirm that this is actually a contact feed. 639 // Check the category field to confirm that this is actually a contact feed.
640 const ListValue* category_list = NULL; 640 const base::ListValue* category_list = NULL;
641 if (!feed_dict->GetList(kCategoryField, &category_list)) { 641 if (!feed_dict->GetList(kCategoryField, &category_list)) {
642 LOG(WARNING) << "Category list missing"; 642 LOG(WARNING) << "Category list missing";
643 return false; 643 return false;
644 } 644 }
645 const DictionaryValue* category_dict = NULL; 645 const base::DictionaryValue* category_dict = NULL;
646 if (category_list->GetSize() != 1 || 646 if (category_list->GetSize() != 1 ||
647 !category_list->GetDictionary(0, &category_dict)) { 647 !category_list->GetDictionary(0, &category_dict)) {
648 LOG(WARNING) << "Unable to get dictionary from category list of size " 648 LOG(WARNING) << "Unable to get dictionary from category list of size "
649 << category_list->GetSize(); 649 << category_list->GetSize();
650 return false; 650 return false;
651 } 651 }
652 std::string category_scheme, category_term; 652 std::string category_scheme, category_term;
653 if (!category_dict->GetString(kCategorySchemeField, &category_scheme) || 653 if (!category_dict->GetString(kCategorySchemeField, &category_scheme) ||
654 !category_dict->GetString(kCategoryTermField, &category_term) || 654 !category_dict->GetString(kCategoryTermField, &category_term) ||
655 category_scheme != kCategorySchemeValue || 655 category_scheme != kCategorySchemeValue ||
656 category_term != kCategoryTermValue) { 656 category_term != kCategoryTermValue) {
657 LOG(WARNING) << "Unexpected category (scheme was \"" << category_scheme 657 LOG(WARNING) << "Unexpected category (scheme was \"" << category_scheme
658 << "\", term was \"" << category_term << "\")"; 658 << "\", term was \"" << category_term << "\")";
659 return false; 659 return false;
660 } 660 }
661 661
662 // A missing entry list means no entries (maybe we're doing an incremental 662 // A missing entry list means no entries (maybe we're doing an incremental
663 // update and nothing has changed). 663 // update and nothing has changed).
664 const ListValue* entry_list = NULL; 664 const base::ListValue* entry_list = NULL;
665 if (!feed_dict->GetList(kEntryField, &entry_list)) 665 if (!feed_dict->GetList(kEntryField, &entry_list))
666 return true; 666 return true;
667 667
668 contacts_needing_photo_downloads_.reserve(entry_list->GetSize()); 668 contacts_needing_photo_downloads_.reserve(entry_list->GetSize());
669 669
670 for (ListValue::const_iterator entry_it = entry_list->begin(); 670 for (base::ListValue::const_iterator entry_it = entry_list->begin();
671 entry_it != entry_list->end(); ++entry_it) { 671 entry_it != entry_list->end(); ++entry_it) {
672 const size_t index = (entry_it - entry_list->begin()); 672 const size_t index = (entry_it - entry_list->begin());
673 const DictionaryValue* contact_dict = NULL; 673 const base::DictionaryValue* contact_dict = NULL;
674 if (!(*entry_it)->GetAsDictionary(&contact_dict)) { 674 if (!(*entry_it)->GetAsDictionary(&contact_dict)) {
675 LOG(WARNING) << "Entry " << index << " isn't a dictionary"; 675 LOG(WARNING) << "Entry " << index << " isn't a dictionary";
676 return false; 676 return false;
677 } 677 }
678 678
679 scoped_ptr<contacts::Contact> contact(new contacts::Contact); 679 scoped_ptr<contacts::Contact> contact(new contacts::Contact);
680 if (!FillContactFromDictionary(*contact_dict, contact.get())) { 680 if (!FillContactFromDictionary(*contact_dict, contact.get())) {
681 LOG(WARNING) << "Unable to fill entry " << index; 681 LOG(WARNING) << "Unable to fill entry " << index;
682 return false; 682 return false;
683 } 683 }
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 885 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
886 DCHECK(request); 886 DCHECK(request);
887 VLOG(1) << "Download request " << request << " complete"; 887 VLOG(1) << "Download request " << request << " complete";
888 if (!request->my_contacts_group_id().empty()) 888 if (!request->my_contacts_group_id().empty())
889 cached_my_contacts_group_id_ = request->my_contacts_group_id(); 889 cached_my_contacts_group_id_ = request->my_contacts_group_id();
890 requests_.erase(request); 890 requests_.erase(request);
891 delete request; 891 delete request;
892 } 892 }
893 893
894 } // namespace contacts 894 } // namespace contacts
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/bluetooth/bluetooth_pairing_dialog.h ('k') | chrome/browser/chromeos/customization_document.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698