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

Side by Side Diff: chrome/browser/search_engines/template_url_service.cc

Issue 7826003: Retroactively addressed sky@'s comments from CL http://codereview.chromium.org/7566036/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Initial upload Created 9 years, 3 months 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) 2011 The Chromium Authors. All rights reserved. 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 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/search_engines/template_url_service.h" 5 #include "chrome/browser/search_engines/template_url_service.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "base/environment.h" 9 #include "base/environment.h"
10 #include "base/i18n/case_conversion.h" 10 #include "base/i18n/case_conversion.h"
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 } 490 }
491 491
492 // initial_default_search_provider_ is only needed before we've finished 492 // initial_default_search_provider_ is only needed before we've finished
493 // loading. Now that we've loaded we can nuke it. 493 // loading. Now that we've loaded we can nuke it.
494 initial_default_search_provider_.reset(); 494 initial_default_search_provider_.reset();
495 is_default_search_managed_ = false; 495 is_default_search_managed_ = false;
496 496
497 std::vector<TemplateURL*> template_urls; 497 std::vector<TemplateURL*> template_urls;
498 const TemplateURL* default_search_provider = NULL; 498 const TemplateURL* default_search_provider = NULL;
499 int new_resource_keyword_version = 0; 499 int new_resource_keyword_version = 0;
500 GetSearchProvidersUsingKeywordResult(*result, 500 GetSearchProvidersUsingKeywordResult(*result,
SteveT 2011/09/01 14:21:54 sky 2011/08/17 23:22:29 This may end up modifying
501 service_.get(), 501 service_.get(),
502 GetPrefs(), 502 GetPrefs(),
503 &template_urls, 503 &template_urls,
504 &default_search_provider, 504 &default_search_provider,
505 &new_resource_keyword_version); 505 &new_resource_keyword_version);
506 506
507 bool database_specified_a_default = NULL != default_search_provider; 507 bool database_specified_a_default = NULL != default_search_provider;
508 508
509 // Check if default search provider is now managed. 509 // Check if default search provider is now managed.
510 scoped_ptr<TemplateURL> default_from_prefs; 510 scoped_ptr<TemplateURL> default_from_prefs;
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 const SyncChangeList& change_list) { 642 const SyncChangeList& change_list) {
643 if (!models_associated_) { 643 if (!models_associated_) {
644 SyncError error(FROM_HERE, "Models not yet associated.", 644 SyncError error(FROM_HERE, "Models not yet associated.",
645 syncable::SEARCH_ENGINES); 645 syncable::SEARCH_ENGINES);
646 return error; 646 return error;
647 } 647 }
648 648
649 AutoReset<bool> processing_changes(&processing_syncer_changes_, true); 649 AutoReset<bool> processing_changes(&processing_syncer_changes_, true);
650 650
651 SyncChangeList new_changes; 651 SyncChangeList new_changes;
652 SyncError error;
652 for (SyncChangeList::const_iterator iter = change_list.begin(); 653 for (SyncChangeList::const_iterator iter = change_list.begin();
653 iter != change_list.end(); ++iter) { 654 iter != change_list.end(); ++iter) {
654 DCHECK_EQ(syncable::SEARCH_ENGINES, iter->sync_data().GetDataType()); 655 DCHECK_EQ(syncable::SEARCH_ENGINES, iter->sync_data().GetDataType());
655 656
656 scoped_ptr<TemplateURL> turl( 657 scoped_ptr<TemplateURL> turl(
657 CreateTemplateURLFromSyncData(iter->sync_data())); 658 CreateTemplateURLFromSyncData(iter->sync_data()));
658 if (!turl.get()) { 659 if (!turl.get()) {
659 NOTREACHED() << "Failed to read search engine."; 660 NOTREACHED() << "Failed to read search engine.";
660 continue; 661 continue;
661 } 662 }
662 663
663 const TemplateURL* existing_turl = GetTemplateURLForGUID(turl->sync_guid()); 664 const TemplateURL* existing_turl = GetTemplateURLForGUID(turl->sync_guid());
664 const TemplateURL* existing_keyword_turl = 665 const TemplateURL* existing_keyword_turl =
665 GetTemplateURLForKeyword(turl->keyword()); 666 GetTemplateURLForKeyword(turl->keyword());
666 667
667 if (iter->change_type() == SyncChange::ACTION_DELETE && existing_turl) { 668 if (iter->change_type() == SyncChange::ACTION_DELETE && existing_turl) {
668 Remove(existing_turl); 669 Remove(existing_turl);
669 } else if (iter->change_type() == SyncChange::ACTION_ADD && 670 } else if (iter->change_type() == SyncChange::ACTION_ADD &&
670 !existing_turl) { 671 !existing_turl) {
671 if (existing_keyword_turl) 672 if (existing_keyword_turl)
672 ResolveSyncKeywordConflict(turl.get(), new_changes); 673 ResolveSyncKeywordConflict(turl.get(), &new_changes);
673 // Force the local ID to 0 so we can add it. 674 // Force the local ID to 0 so we can add it.
674 turl->set_id(0); 675 turl->set_id(0);
675 Add(turl.release()); 676 Add(turl.release());
676 } else if (iter->change_type() == SyncChange::ACTION_UPDATE && 677 } else if (iter->change_type() == SyncChange::ACTION_UPDATE &&
677 existing_turl) { 678 existing_turl) {
678 if (existing_keyword_turl) 679 if (existing_keyword_turl)
679 ResolveSyncKeywordConflict(turl.get(), new_changes); 680 ResolveSyncKeywordConflict(turl.get(), &new_changes);
680 ResetTemplateURL(existing_turl, turl->short_name(), turl->keyword(), 681 ResetTemplateURL(existing_turl, turl->short_name(), turl->keyword(),
681 turl->url() ? turl->url()->url() : std::string()); 682 turl->url() ? turl->url()->url() : std::string());
682 } else { 683 } else {
683 // Something really unexpected happened. Either we received an 684 // Something really unexpected happened. Either we received an
684 // ACTION_INVALID, or Sync is in a crazy state: 685 // ACTION_INVALID, or Sync is in a crazy state:
685 // . Trying to DELETE or UPDATE a non-existent search engine. 686 // . Trying to DELETE or UPDATE a non-existent search engine.
686 // . Trying to ADD a search engine that already exists. 687 // . Trying to ADD a search engine that already exists.
687 NOTREACHED() << "Unexpected sync change state."; 688 NOTREACHED() << "Unexpected sync change state.";
688 SyncError error(FROM_HERE, "ProcessSyncChanges failed on ChangeType " + 689 error = SyncError(FROM_HERE, "ProcessSyncChanges failed on ChangeType " +
689 SyncChange::ChangeTypeToString(iter->change_type()), 690 SyncChange::ChangeTypeToString(iter->change_type()),
690 syncable::SEARCH_ENGINES); 691 syncable::SEARCH_ENGINES);
691 return error;
SteveT 2011/09/01 14:21:54 sky 2011/08/17 23:22:29 Are you sure we want to re
692 } 692 }
693 } 693 }
694 694
695 SyncError sync_error = 695 // If something went wrong, we want to prematurely exit to avoid pushing
696 sync_processor_->ProcessSyncChanges(from_here, new_changes); 696 // inconsistent data to Sync. We return the last error we received.
697 if (error.IsSet())
698 return error;
697 699
698 return sync_error; 700 error = sync_processor_->ProcessSyncChanges(from_here, new_changes);
701
702 return error;
699 } 703 }
700 704
701 SyncError TemplateURLService::MergeDataAndStartSyncing( 705 SyncError TemplateURLService::MergeDataAndStartSyncing(
SteveT 2011/09/01 14:21:54 sky 2011/08/17 23:22:29 Is it guaranteed these met
702 syncable::ModelType type, 706 syncable::ModelType type,
703 const SyncDataList& initial_sync_data, 707 const SyncDataList& initial_sync_data,
704 SyncChangeProcessor* sync_processor) { 708 SyncChangeProcessor* sync_processor) {
709 DCHECK(loaded());
705 DCHECK_EQ(type, syncable::SEARCH_ENGINES); 710 DCHECK_EQ(type, syncable::SEARCH_ENGINES);
706 DCHECK(!sync_processor_); 711 DCHECK(!sync_processor_);
707 sync_processor_ = sync_processor; 712 sync_processor_ = sync_processor;
708 713
709 // We do a lot of calls to Add/Remove/ResetTemplateURL here, so ensure we 714 // We do a lot of calls to Add/Remove/ResetTemplateURL here, so ensure we
710 // don't step on our own toes. 715 // don't step on our own toes.
711 AutoReset<bool> processing_changes(&processing_syncer_changes_, true); 716 AutoReset<bool> processing_changes(&processing_syncer_changes_, true);
712 717
713 SyncChangeList new_changes; 718 SyncChangeList new_changes;
714 719
715 // Build maps of our sync GUIDs to SyncData. 720 // Build maps of our sync GUIDs to SyncData.
716 SyncDataMap local_data_map = CreateGUIDToSyncDataMap( 721 SyncDataMap local_data_map = CreateGUIDToSyncDataMap(
717 GetAllSyncData(syncable::SEARCH_ENGINES)); 722 GetAllSyncData(syncable::SEARCH_ENGINES));
718 SyncDataMap sync_data_map = CreateGUIDToSyncDataMap(initial_sync_data); 723 SyncDataMap sync_data_map = CreateGUIDToSyncDataMap(initial_sync_data);
719 724
720 for (SyncDataMap::const_iterator iter = sync_data_map.begin(); 725 for (SyncDataMap::const_iterator iter = sync_data_map.begin();
721 iter != sync_data_map.end(); ++iter) { 726 iter != sync_data_map.end(); ++iter) {
722 scoped_ptr<TemplateURL> sync_turl( 727 scoped_ptr<TemplateURL> sync_turl(
723 CreateTemplateURLFromSyncData(iter->second)); 728 CreateTemplateURLFromSyncData(iter->second));
724 DCHECK(sync_turl.get()); 729 DCHECK(sync_turl.get());
725 const TemplateURL* local_turl = GetTemplateURLForGUID(iter->first); 730 const TemplateURL* local_turl = GetTemplateURLForGUID(iter->first);
726 731
727 if (local_turl) { 732 if (local_turl) {
728 // This local search engine is already synced. If the timestamp differs 733 // This local search engine is already synced. If the timestamp differs
729 // from Sync, we need to update locally or to the cloud. Note that if the 734 // from Sync, we need to update locally or to the cloud. Note that if the
730 // timestamps are equal, we touch neither. 735 // timestamps are equal, we touch neither.
731 if (sync_turl->last_modified() > local_turl->last_modified()) { 736 if (sync_turl->last_modified() > local_turl->last_modified()) {
732 // TODO(stevet): For now we just reset the local TemplateURL with the 737 // We've received an update from Sync. We should replace all existing
733 // more important Sync data fields. We may want to transfer over 738 // values with the ones from sync except the local TemplateURLID. Note
734 // additional fields. 739 // that this means that the TemplateURL may have to be reparsed. This
735 ResetTemplateURL( 740 // also makes the local data's last_modified timestamp equal to Sync's,
736 local_turl, 741 // avoiding an Update on the next MergeData call.
737 sync_turl->short_name(), 742 sync_turl->set_id(local_turl->id());
738 sync_turl->keyword(), 743 UpdateNoNotify(local_turl, *sync_turl);
739 sync_turl->url() ? sync_turl->url()->url() : std::string()); 744 NotifyObservers();
SteveT 2011/09/01 14:21:54 sky 2011/08/17 23:22:29 I believe you'll also want
740 } else if (sync_turl->last_modified() < local_turl->last_modified()) { 745 } else if (sync_turl->last_modified() < local_turl->last_modified()) {
746 // Otherwise, we know we have newer data, so update Sync with our
747 // data fields.
741 new_changes.push_back(SyncChange(SyncChange::ACTION_UPDATE, 748 new_changes.push_back(SyncChange(SyncChange::ACTION_UPDATE,
742 local_data_map[local_turl->sync_guid()])); 749 local_data_map[local_turl->sync_guid()]));
743 } 750 }
744 local_data_map.erase(iter->first); 751 local_data_map.erase(iter->first);
745 } else { 752 } else {
746 // The search engine from the cloud has not been synced locally, but there 753 // The search engine from the cloud has not been synced locally, but there
747 // might be a local search engine that is a duplicate that needs to be 754 // might be a local search engine that is a duplicate that needs to be
748 // merged. 755 // merged.
749 const TemplateURL* dupe_turl = FindDuplicateOfSyncTemplateURL(*sync_turl); 756 const TemplateURL* dupe_turl = FindDuplicateOfSyncTemplateURL(*sync_turl);
750 if (dupe_turl) { 757 if (dupe_turl) {
751 // Merge duplicates and remove the processed local TURL from the map. 758 // Merge duplicates and remove the processed local TURL from the map.
752 TemplateURL* modifiable_dupe_turl = 759 TemplateURL* modifiable_dupe_turl =
753 const_cast<TemplateURL*>(dupe_turl); 760 const_cast<TemplateURL*>(dupe_turl);
754 std::string old_guid = dupe_turl->sync_guid(); 761 std::string old_guid = dupe_turl->sync_guid();
755 MergeSyncAndLocalURLDuplicates(sync_turl.release(), 762 MergeSyncAndLocalURLDuplicates(sync_turl.release(),
756 modifiable_dupe_turl, 763 modifiable_dupe_turl,
757 new_changes); 764 &new_changes);
758 local_data_map.erase(old_guid); 765 local_data_map.erase(old_guid);
759 } else { 766 } else {
760 // Keyword conflict is possible in this case. Resolve it first before 767 // Keyword conflict is possible in this case. Resolve it first before
761 // adding the new TemplateURL. Note that we don't remove the local TURL 768 // adding the new TemplateURL. Note that we don't remove the local TURL
762 // from local_data_map in this case as it may still need to be pushed to 769 // from local_data_map in this case as it may still need to be pushed to
763 // the cloud. 770 // the cloud.
764 ResolveSyncKeywordConflict(sync_turl.get(), new_changes); 771 ResolveSyncKeywordConflict(sync_turl.get(), &new_changes);
765 // Force the local ID to 0 so we can add it. 772 // Force the local ID to 0 so we can add it.
766 sync_turl->set_id(0); 773 sync_turl->set_id(0);
767 Add(sync_turl.release()); 774 Add(sync_turl.release());
768 } 775 }
769 } 776 }
770 } // for 777 } // for
771 778
772 // The remaining SyncData in local_data_map should be everything that needs to 779 // The remaining SyncData in local_data_map should be everything that needs to
773 // be pushed as ADDs to sync. 780 // be pushed as ADDs to sync.
774 for (SyncDataMap::const_iterator iter = local_data_map.begin(); 781 for (SyncDataMap::const_iterator iter = local_data_map.begin();
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 turl.suggestions_url()->url() : std::string()); 874 turl.suggestions_url()->url() : std::string());
868 se_specifics->set_prepopulate_id(turl.prepopulate_id()); 875 se_specifics->set_prepopulate_id(turl.prepopulate_id());
869 se_specifics->set_autogenerate_keyword(turl.autogenerate_keyword()); 876 se_specifics->set_autogenerate_keyword(turl.autogenerate_keyword());
870 se_specifics->set_created_by_policy(turl.created_by_policy()); 877 se_specifics->set_created_by_policy(turl.created_by_policy());
871 se_specifics->set_instant_url(turl.instant_url() ? 878 se_specifics->set_instant_url(turl.instant_url() ?
872 turl.instant_url()->url() : std::string()); 879 turl.instant_url()->url() : std::string());
873 se_specifics->set_last_modified(turl.last_modified().ToInternalValue()); 880 se_specifics->set_last_modified(turl.last_modified().ToInternalValue());
874 se_specifics->set_sync_guid(turl.sync_guid()); 881 se_specifics->set_sync_guid(turl.sync_guid());
875 return SyncData::CreateLocalData(se_specifics->sync_guid(), 882 return SyncData::CreateLocalData(se_specifics->sync_guid(),
876 se_specifics->keyword(), 883 se_specifics->keyword(),
877 specifics); 884 specifics);
SteveT 2011/09/01 14:21:54 sky 2011/08/17 23:22:29 Is there any protection to
878 } 885 }
879 886
880 // static 887 // static
881 TemplateURL* TemplateURLService::CreateTemplateURLFromSyncData( 888 TemplateURL* TemplateURLService::CreateTemplateURLFromSyncData(
882 const SyncData& sync_data) { 889 const SyncData& sync_data) {
883 sync_pb::SearchEngineSpecifics specifics = 890 sync_pb::SearchEngineSpecifics specifics =
884 sync_data.GetSpecifics().GetExtension(sync_pb::search_engine); 891 sync_data.GetSpecifics().GetExtension(sync_pb::search_engine);
885 TemplateURL* turl = new TemplateURL(); 892 TemplateURL* turl = new TemplateURL();
886 turl->set_short_name(UTF8ToUTF16(specifics.short_name())); 893 turl->set_short_name(UTF8ToUTF16(specifics.short_name()));
887 turl->set_keyword(UTF8ToUTF16(specifics.keyword())); 894 turl->set_keyword(UTF8ToUTF16(specifics.keyword()));
(...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after
1661 keyword_candidate = turl.keyword(); 1668 keyword_candidate = turl.keyword();
1662 do { 1669 do {
1663 keyword_candidate.append(UTF8ToUTF16("_")); 1670 keyword_candidate.append(UTF8ToUTF16("_"));
1664 } while (GetTemplateURLForKeyword(keyword_candidate)); 1671 } while (GetTemplateURLForKeyword(keyword_candidate));
1665 1672
1666 return keyword_candidate; 1673 return keyword_candidate;
1667 } 1674 }
1668 1675
1669 bool TemplateURLService::ResolveSyncKeywordConflict( 1676 bool TemplateURLService::ResolveSyncKeywordConflict(
1670 TemplateURL* sync_turl, 1677 TemplateURL* sync_turl,
1671 SyncChangeList& change_list) { 1678 SyncChangeList* change_list) {
1672 DCHECK(sync_turl); 1679 DCHECK(sync_turl);
1680 DCHECK(change_list);
1673 1681
1674 const TemplateURL* existing_turl = 1682 const TemplateURL* existing_turl =
1675 GetTemplateURLForKeyword(sync_turl->keyword()); 1683 GetTemplateURLForKeyword(sync_turl->keyword());
1676 if (!existing_turl) 1684 if (!existing_turl)
1677 return false; 1685 return false;
1678 1686
1679 string16 new_keyword;
SteveT 2011/09/01 14:21:54 sky 2011/08/17 23:22:29 nit: pull into if as you d
1680 if (existing_turl->last_modified() > sync_turl->last_modified()) { 1687 if (existing_turl->last_modified() > sync_turl->last_modified()) {
1681 new_keyword = UniquifyKeyword(*sync_turl); 1688 string16 new_keyword = UniquifyKeyword(*sync_turl);
1682 DCHECK(!GetTemplateURLForKeyword(new_keyword)); 1689 DCHECK(!GetTemplateURLForKeyword(new_keyword));
1683 sync_turl->set_keyword(new_keyword); 1690 sync_turl->set_keyword(new_keyword);
1684 // If we update the cloud TURL, we need to push an update back to sync 1691 // If we update the cloud TURL, we need to push an update back to sync
1685 // informing it that something has changed. 1692 // informing it that something has changed.
1686 SyncData sync_data = CreateSyncDataFromTemplateURL(*sync_turl); 1693 SyncData sync_data = CreateSyncDataFromTemplateURL(*sync_turl);
1687 change_list.push_back(SyncChange(SyncChange::ACTION_UPDATE, sync_data)); 1694 change_list->push_back(SyncChange(SyncChange::ACTION_UPDATE, sync_data));
1688 } else { 1695 } else {
1689 new_keyword = UniquifyKeyword(*existing_turl); 1696 string16 new_keyword = UniquifyKeyword(*existing_turl);
1690 ResetTemplateURL(existing_turl, existing_turl->short_name(), new_keyword, 1697 ResetTemplateURL(existing_turl, existing_turl->short_name(), new_keyword,
1691 existing_turl->url() ? existing_turl->url()->url() : std::string()); 1698 existing_turl->url() ? existing_turl->url()->url() : std::string());
1692 } 1699 }
1693 return true; 1700 return true;
1694 } 1701 }
1695 1702
1696 const TemplateURL* TemplateURLService::FindDuplicateOfSyncTemplateURL( 1703 const TemplateURL* TemplateURLService::FindDuplicateOfSyncTemplateURL(
1697 const TemplateURL& sync_turl) { 1704 const TemplateURL& sync_turl) {
1698 const TemplateURL* existing_turl = 1705 const TemplateURL* existing_turl =
1699 GetTemplateURLForKeyword(sync_turl.keyword()); 1706 GetTemplateURLForKeyword(sync_turl.keyword());
1700 if (!existing_turl) 1707 if (!existing_turl)
1701 return NULL; 1708 return NULL;
1702 1709
1703 if (existing_turl->url() && sync_turl.url() && 1710 if (existing_turl->url() && sync_turl.url() &&
1704 existing_turl->url()->url() == sync_turl.url()->url()) { 1711 existing_turl->url()->url() == sync_turl.url()->url()) {
1705 return existing_turl; 1712 return existing_turl;
1706 } 1713 }
1707 return NULL; 1714 return NULL;
1708 } 1715 }
1709 1716
1710 void TemplateURLService::MergeSyncAndLocalURLDuplicates( 1717 void TemplateURLService::MergeSyncAndLocalURLDuplicates(
1711 TemplateURL* sync_turl, 1718 TemplateURL* sync_turl,
1712 TemplateURL* local_turl, 1719 TemplateURL* local_turl,
1713 SyncChangeList& change_list) { 1720 SyncChangeList* change_list) {
1714 DCHECK(sync_turl); 1721 DCHECK(sync_turl);
1715 DCHECK(local_turl); 1722 DCHECK(local_turl);
1723 DCHECK(change_list);
1716 1724
1717 scoped_ptr<TemplateURL> scoped_sync_turl(sync_turl); 1725 scoped_ptr<TemplateURL> scoped_sync_turl(sync_turl);
1718 1726
1719 if (scoped_sync_turl->last_modified() > local_turl->last_modified()) { 1727 if (scoped_sync_turl->last_modified() > local_turl->last_modified()) {
1720 // Fully replace local_url with Sync's copy. Note that because use Add 1728 // Fully replace local_url with Sync's copy. Note that because use Add
1721 // rather than ResetTemplateURL, |sync_url| is added with a fresh 1729 // rather than ResetTemplateURL, |sync_url| is added with a fresh
1722 // TemplateURLID. We don't need to sync the new ID back to the server since 1730 // TemplateURLID. We don't need to sync the new ID back to the server since
1723 // it's only relevant locally. 1731 // it's only relevant locally.
1724 Remove(local_turl); 1732 Remove(local_turl);
1725 // Force the local ID to 0 so we can add it. 1733 // Force the local ID to 0 so we can add it.
1726 scoped_sync_turl->set_id(0); 1734 scoped_sync_turl->set_id(0);
1727 Add(scoped_sync_turl.release()); 1735 Add(scoped_sync_turl.release());
1728 } else { 1736 } else {
1729 // Change the local TURL's GUID to the server's GUID and push an update to 1737 // Change the local TURL's GUID to the server's GUID and push an update to
1730 // Sync. This ensures that the rest of local_url's fields are sync'd up to 1738 // Sync. This ensures that the rest of local_url's fields are sync'd up to
1731 // the server, and the next time local_url is synced, it is recognized by 1739 // the server, and the next time local_url is synced, it is recognized by
1732 // having the same GUID. 1740 // having the same GUID.
1733 ResetTemplateURLGUID(local_turl, sync_turl->sync_guid()); 1741 ResetTemplateURLGUID(local_turl, sync_turl->sync_guid());
1734 SyncData sync_data = CreateSyncDataFromTemplateURL(*local_turl); 1742 SyncData sync_data = CreateSyncDataFromTemplateURL(*local_turl);
1735 change_list.push_back(SyncChange(SyncChange::ACTION_UPDATE, sync_data)); 1743 change_list->push_back(SyncChange(SyncChange::ACTION_UPDATE, sync_data));
1736 } 1744 }
1737 } 1745 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698