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

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

Issue 229763005: Store default search provider data in dictionary pref. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: put constants in a namespace Created 6 years, 8 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) 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/search_engines/template_url_service.h" 5 #include "chrome/browser/search_engines/template_url_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 15 matching lines...) Expand all
26 #include "chrome/browser/extensions/extension_service.h" 26 #include "chrome/browser/extensions/extension_service.h"
27 #include "chrome/browser/google/google_url_tracker.h" 27 #include "chrome/browser/google/google_url_tracker.h"
28 #include "chrome/browser/history/history_notifications.h" 28 #include "chrome/browser/history/history_notifications.h"
29 #include "chrome/browser/history/history_service.h" 29 #include "chrome/browser/history/history_service.h"
30 #include "chrome/browser/history/history_service_factory.h" 30 #include "chrome/browser/history/history_service_factory.h"
31 #include "chrome/browser/profiles/profile.h" 31 #include "chrome/browser/profiles/profile.h"
32 #include "chrome/browser/rlz/rlz.h" 32 #include "chrome/browser/rlz/rlz.h"
33 #include "chrome/browser/search_engines/search_host_to_urls_map.h" 33 #include "chrome/browser/search_engines/search_host_to_urls_map.h"
34 #include "chrome/browser/search_engines/search_terms_data.h" 34 #include "chrome/browser/search_engines/search_terms_data.h"
35 #include "chrome/browser/search_engines/template_url.h" 35 #include "chrome/browser/search_engines/template_url.h"
36 #include "chrome/browser/search_engines/template_url_keys.h"
36 #include "chrome/browser/search_engines/template_url_prepopulate_data.h" 37 #include "chrome/browser/search_engines/template_url_prepopulate_data.h"
37 #include "chrome/browser/search_engines/template_url_service_observer.h" 38 #include "chrome/browser/search_engines/template_url_service_observer.h"
38 #include "chrome/browser/search_engines/util.h" 39 #include "chrome/browser/search_engines/util.h"
39 #include "chrome/browser/webdata/web_data_service.h" 40 #include "chrome/browser/webdata/web_data_service.h"
40 #include "chrome/common/chrome_switches.h" 41 #include "chrome/common/chrome_switches.h"
41 #include "chrome/common/env_vars.h" 42 #include "chrome/common/env_vars.h"
42 #include "chrome/common/extensions/api/omnibox/omnibox_handler.h" 43 #include "chrome/common/extensions/api/omnibox/omnibox_handler.h"
43 #include "chrome/common/net/url_fixer_upper.h" 44 #include "chrome/common/net/url_fixer_upper.h"
44 #include "chrome/common/pref_names.h" 45 #include "chrome/common/pref_names.h"
45 #include "chrome/common/url_constants.h" 46 #include "chrome/common/url_constants.h"
46 #include "content/public/browser/notification_service.h" 47 #include "content/public/browser/notification_service.h"
47 #include "extensions/common/constants.h" 48 #include "extensions/common/constants.h"
48 #include "net/base/net_util.h" 49 #include "net/base/net_util.h"
49 #include "sync/api/sync_change.h" 50 #include "sync/api/sync_change.h"
50 #include "sync/api/sync_error_factory.h" 51 #include "sync/api/sync_error_factory.h"
51 #include "sync/protocol/search_engine_specifics.pb.h" 52 #include "sync/protocol/search_engine_specifics.pb.h"
52 #include "sync/protocol/sync.pb.h" 53 #include "sync/protocol/sync.pb.h"
53 #include "ui/base/l10n/l10n_util.h" 54 #include "ui/base/l10n/l10n_util.h"
54 55
55 typedef SearchHostToURLsMap::TemplateURLSet TemplateURLSet; 56 typedef SearchHostToURLsMap::TemplateURLSet TemplateURLSet;
56 typedef TemplateURLService::SyncDataMap SyncDataMap; 57 typedef TemplateURLService::SyncDataMap SyncDataMap;
57 58
58 namespace { 59 namespace {
59
erikwright (departed) 2014/04/22 15:47:24 nit: restore blank line.
Cait (Slow) 2014/04/22 19:54:13 Done.
60 bool TemplateURLsHaveSamePrefs(const TemplateURL* url1, 60 bool TemplateURLsHaveSamePrefs(const TemplateURL* url1,
61 const TemplateURL* url2) { 61 const TemplateURL* url2) {
62 if (url1 == url2) 62 if (url1 == url2)
63 return true; 63 return true;
64 return (url1 != NULL) && (url2 != NULL) && 64 return (url1 != NULL) && (url2 != NULL) &&
65 (url1->short_name() == url2->short_name()) && 65 (url1->short_name() == url2->short_name()) &&
66 url1->HasSameKeywordAs(*url2) && 66 url1->HasSameKeywordAs(*url2) &&
67 (url1->url() == url2->url()) && 67 (url1->url() == url2->url()) &&
68 (url1->suggestions_url() == url2->suggestions_url()) && 68 (url1->suggestions_url() == url2->suggestions_url()) &&
69 (url1->instant_url() == url2->instant_url()) && 69 (url1->instant_url() == url2->instant_url()) &&
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after
669 return !is_default_search_managed() && 669 return !is_default_search_managed() &&
670 !IsExtensionControlledDefaultSearch() && 670 !IsExtensionControlledDefaultSearch() &&
671 (url != GetDefaultSearchProvider()) && 671 (url != GetDefaultSearchProvider()) &&
672 url->url_ref().SupportsReplacement() && 672 url->url_ref().SupportsReplacement() &&
673 (url->GetType() == TemplateURL::NORMAL); 673 (url->GetType() == TemplateURL::NORMAL);
674 } 674 }
675 675
676 void TemplateURLService::SetUserSelectedDefaultSearchProvider( 676 void TemplateURLService::SetUserSelectedDefaultSearchProvider(
677 TemplateURL* url) { 677 TemplateURL* url) {
678 SetDefaultSearchProvider(url); 678 SetDefaultSearchProvider(url);
679 WriteDataToPrefsDictionary(url);
679 } 680 }
680 681
681 TemplateURL* TemplateURLService::GetDefaultSearchProvider() { 682 TemplateURL* TemplateURLService::GetDefaultSearchProvider() {
682 if (loaded_ && !load_failed_) 683 if (loaded_ && !load_failed_)
683 return default_search_provider_; 684 return default_search_provider_;
684 // We're not loaded, rely on the default search provider stored in prefs. 685 // We're not loaded, rely on the default search provider stored in prefs.
685 return initial_default_search_provider_.get(); 686 return initial_default_search_provider_.get();
686 } 687 }
687 688
688 bool TemplateURLService::IsSearchResultsPageFromDefaultSearchProvider( 689 bool TemplateURLService::IsSearchResultsPageFromDefaultSearchProvider(
(...skipping 2056 matching lines...) Expand 10 before | Expand all | Expand 10 after
2745 new_dse = *i; 2746 new_dse = *i;
2746 break; 2747 break;
2747 } 2748 }
2748 } 2749 }
2749 } 2750 }
2750 } 2751 }
2751 if (!new_dse) 2752 if (!new_dse)
2752 new_dse = FindNewDefaultSearchProvider(); 2753 new_dse = FindNewDefaultSearchProvider();
2753 SetDefaultSearchProviderNoNotify(new_dse); 2754 SetDefaultSearchProviderNoNotify(new_dse);
2754 } 2755 }
2756
2757 bool TemplateURLService::ReadDataFromPrefsDictionary(TemplateURL** url) {
2758 PrefService* prefs = GetPrefs();
2759 if (!prefs)
2760 return false;
2761
2762 const base::DictionaryValue* url_dict =
2763 prefs->GetDictionary(prefs::kDefaultSearchProviderData);
2764 if (!url_dict)
2765 return false;
2766
2767 TemplateURLData data;
2768 std::string search_url;
2769 base::string16 keyword;
2770
2771 url_dict->GetString(default_search::kKeyword, &keyword);
2772 url_dict->GetString(default_search::kURL, &search_url);
2773
2774 DCHECK(!keyword.empty());
2775 DCHECK(!search_url.empty());
2776
2777 data.SetKeyword(keyword);
2778 data.SetURL(search_url);
2779
2780 std::string id;
2781 url_dict->GetString(default_search::kID, &id);
2782 base::StringToInt64(id, &data.id);
2783 url_dict->GetString(default_search::kShortName, &data.short_name);
2784 url_dict->GetInteger(default_search::kPrepopulateID, &data.prepopulate_id);
2785 url_dict->GetString(default_search::kSyncGUID, &data.sync_guid);
2786
2787 url_dict->GetString(default_search::kSuggestionsURL, &data.suggestions_url);
2788 url_dict->GetString(default_search::kInstantURL, &data.instant_url);
2789 url_dict->GetString(default_search::kImageURL, &data.image_url);
2790 url_dict->GetString(default_search::kNewTabURL, &data.new_tab_url);
2791
2792 std::string favicon_url;
2793 std::string originating_url;
2794 url_dict->GetString(default_search::kFaviconURL, &favicon_url);
2795 url_dict->GetString(default_search::kOriginatingURL, &originating_url);
2796 data.favicon_url = GURL(favicon_url);
2797 data.originating_url = GURL(originating_url);
2798
2799 url_dict->GetString(default_search::kSearchURLPostParams,
2800 &data.search_url_post_params);
2801 url_dict->GetString(default_search::kSuggestionsURLPostParams,
2802 &data.suggestions_url_post_params);
2803 url_dict->GetString(default_search::kInstantURLPostParams,
2804 &data.instant_url_post_params);
2805 url_dict->GetString(default_search::kImageURLPostParams,
2806 &data.image_url_post_params);
2807
2808 url_dict->GetBoolean(default_search::kSafeForAutoReplace,
2809 &data.safe_for_autoreplace);
2810
2811 double date_created = 0.0;
2812 double last_modified = 0.0;
2813 url_dict->GetDouble(default_search::kDateCreated, &date_created);
2814 url_dict->GetDouble(default_search::kLastModified, &last_modified);
2815 data.date_created = base::Time::FromInternalValue(date_created);
2816 data.last_modified = base::Time::FromInternalValue(last_modified);
2817
2818 url_dict->GetInteger(default_search::kUsageCount, &data.usage_count);
2819
2820 const base::ListValue* alternate_urls = new base::ListValue;
2821 url_dict->GetList(default_search::kAlternateURLs, &alternate_urls);
2822 data.alternate_urls.clear();
2823 for (size_t i = 0; i < alternate_urls->GetSize(); ++i) {
2824 std::string alternate_url;
2825 if (alternate_urls->GetString(i, &alternate_url))
2826 data.alternate_urls.push_back(alternate_url);
2827 }
2828
2829 const base::ListValue* encodings = new base::ListValue;
2830 url_dict->GetList(default_search::kInputEncodings, &encodings);
2831 data.input_encodings.clear();
2832 for (size_t i = 0; i < encodings->GetSize(); ++i) {
2833 std::string encoding;
2834 if (encodings->GetString(i, &encoding))
2835 data.input_encodings.push_back(encoding);
2836 }
2837
2838 url_dict->GetString(default_search::kSearchTermsReplacementKey,
2839 &data.search_terms_replacement_key);
2840
2841 url_dict->GetBoolean(default_search::kCreatedByPolicy,
2842 &data.created_by_policy);
2843
2844 data.show_in_default_list = true;
2845
2846 *url = new TemplateURL(profile_, data);
2847
2848 return true;
2849 }
2850
2851 void TemplateURLService::WriteDataToPrefsDictionary(const TemplateURL* url) {
2852 PrefService* prefs = GetPrefs();
2853 if (!prefs)
2854 return;
2855
2856 base::DictionaryValue* url_dict = new base::DictionaryValue;
2857 url_dict->SetString(default_search::kID, base::Int64ToString(url->id()));
gab 2014/04/17 00:37:54 Can you push this latest update to argon18? I can'
2858 url_dict->SetString(default_search::kShortName, url->short_name());
2859 url_dict->SetString(default_search::kKeyword, url->keyword());
2860 url_dict->SetInteger(default_search::kPrepopulateID, url->prepopulate_id());
2861 url_dict->SetString(default_search::kSyncGUID, url->sync_guid());
2862
2863 url_dict->SetString(default_search::kURL, url->url());
2864 url_dict->SetString(default_search::kSuggestionsURL, url->suggestions_url());
2865 url_dict->SetString(default_search::kInstantURL, url->instant_url());
2866 url_dict->SetString(default_search::kImageURL, url->image_url());
2867 url_dict->SetString(default_search::kNewTabURL, url->new_tab_url());
2868 url_dict->SetString(default_search::kFaviconURL, url->favicon_url().spec());
2869 url_dict->SetString(default_search::kOriginatingURL,
2870 url->originating_url().spec());
2871
2872 url_dict->SetString(default_search::kSearchURLPostParams,
2873 url->search_url_post_params());
2874 url_dict->SetString(default_search::kSuggestionsURLPostParams,
2875 url->suggestions_url_post_params());
2876 url_dict->SetString(default_search::kInstantURLPostParams,
2877 url->instant_url_post_params());
2878 url_dict->SetString(default_search::kImageURLPostParams,
2879 url->image_url_post_params());
2880
2881 url_dict->SetBoolean(default_search::kSafeForAutoReplace,
2882 url->safe_for_autoreplace());
2883
2884 url_dict->SetDouble(default_search::kDateCreated,
2885 url->date_created().ToInternalValue());
2886 url_dict->SetDouble(default_search::kLastModified,
2887 url->last_modified().ToInternalValue());
2888 url_dict->SetInteger(default_search::kUsageCount,
2889 url->usage_count());
2890
2891 base::ListValue alternate_urls;
2892 for (size_t i = 0; i < url->alternate_urls().size(); ++i)
2893 alternate_urls.AppendString(url->alternate_urls()[i]);
2894 url_dict->Set(default_search::kAlternateURLs, &alternate_urls);
erikwright (departed) 2014/04/22 15:47:24 Doesn't Set() take ownership of alternate_urls?
Cait (Slow) 2014/04/22 19:54:13 Done.
2895
2896 base::ListValue encodings;
2897 for (size_t i = 0; i < url->input_encodings().size(); ++i)
2898 encodings.AppendString(url->input_encodings()[i]);
2899 url_dict->Set(default_search::kInputEncodings, &encodings);
2900
2901 url_dict->SetString(default_search::kSearchTermsReplacementKey,
2902 url->search_terms_replacement_key());
2903
2904 url_dict->SetBoolean(default_search::kCreatedByPolicy,
2905 url->created_by_policy());
2906
2907 prefs->Set(prefs::kDefaultSearchProviderData, *url_dict);
2908 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698