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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_SEARCH_ENGINES_UTIL_H_ 6 #define CHROME_BROWSER_SEARCH_ENGINES_UTIL_H_ 7 8 // This file contains utility functions for search engine functionality. 9 #include <set> 10 #include <string> 11 #include <vector> 12 13 #include "base/memory/scoped_ptr.h" 14 #include "base/strings/string16.h" 15 #include "chrome/browser/search_engines/template_url_service.h" 16 17 class Profile; 18 class TemplateURL; 19 class WDTypedResult; 20 class WebDataService; 21 22 // Returns the short name of the default search engine, or the empty string if 23 // none is set. |profile| may be NULL. 24 string16 GetDefaultSearchEngineName(Profile* profile); 25 26 // Returns a GURL that searches for |terms| using the default search engine of 27 // |profile|. 28 GURL GetDefaultSearchURLForSearchTerms(Profile* profile, const string16& terms); 29 30 // Modifies |prepopulated_url| so that it contains user-modified fields from 31 // |original_turl|. Both URLs must have the same prepopulate_id. 32 void MergeIntoPrepopulatedEngineData(TemplateURLData* prepopulated_url, 33 const TemplateURL* original_turl); 34 35 // Processes the results of WebDataService::GetKeywords, combining it with 36 // prepopulated search providers to result in: 37 // * a set of template_urls (search providers). The caller owns the 38 // TemplateURL* returned in template_urls. 39 // * the default search provider (and if *default_search_provider is not NULL, 40 // it is contained in template_urls). 41 // * whether there is a new resource keyword version (and the value). 42 // |*new_resource_keyword_version| is set to 0 if no new value. Otherwise, 43 // it is the new value. 44 // Only pass in a non-NULL value for service if the WebDataService should be 45 // updated. If |removed_keyword_guids| is not NULL, any TemplateURLs removed 46 // from the keyword table in the WebDataService will have their Sync GUIDs 47 // added to it. 48 void GetSearchProvidersUsingKeywordResult( 49 const WDTypedResult& result, 50 WebDataService* service, 51 Profile* profile, 52 TemplateURLService::TemplateURLVector* template_urls, 53 TemplateURL** default_search_provider, 54 int* new_resource_keyword_version, 55 std::set<std::string>* removed_keyword_guids); 56 57 // Like GetSearchProvidersUsingKeywordResult(), but allows the caller to pass in 58 // engines in |template_urls| instead of getting them via processing a web data 59 // service request. 60 // |resource_keyword_version| should contain the version number of the current 61 // keyword data, i.e. the version number of the most recent prepopulate data 62 // that has been merged into the current keyword data. On exit, this will be 63 // set as in GetSearchProvidersUsingKeywordResult(). 64 void GetSearchProvidersUsingLoadedEngines( 65 WebDataService* service, 66 Profile* profile, 67 TemplateURLService::TemplateURLVector* template_urls, 68 TemplateURL** default_search_provider, 69 int* resource_keyword_version, 70 std::set<std::string>* removed_keyword_guids); 71 72 // Due to a bug, the |input_encodings| field of TemplateURLData could have 73 // contained duplicate entries. This removes those entries and returns whether 74 // any were found. 75 bool DeDupeEncodings(std::vector<std::string>* encodings); 76 77 // Removes (and deletes) TemplateURLs from |template_urls| and |service| if they 78 // have duplicate prepopulate ids. If |removed_keyword_guids| is not NULL, the 79 // Sync GUID of each item removed from the DB will be added to it. This is a 80 // helper used by GetSearchProvidersUsingKeywordResult(), but is declared here 81 // so it's accessible by unittests. 82 void RemoveDuplicatePrepopulateIDs( 83 WebDataService* service, 84 const ScopedVector<TemplateURL>& prepopulated_urls, 85 TemplateURL* default_search_provider, 86 TemplateURLService::TemplateURLVector* template_urls, 87 std::set<std::string>* removed_keyword_guids); 88 89 #endif // CHROME_BROWSER_SEARCH_ENGINES_UTIL_H_ 90