1bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Copyright (c) 2010 The Chromium Authors. All rights reserved. 2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file. 4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#ifndef CHROME_BROWSER_SEARCH_ENGINES_SEARCH_HOST_TO_URLS_MAP_H_ 6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#define CHROME_BROWSER_SEARCH_ENGINES_SEARCH_HOST_TO_URLS_MAP_H_ 7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#pragma once 8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 9bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <map> 10bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <set> 11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <string> 12bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include <vector> 13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 14bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/basictypes.h" 15bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass SearchTermsData; 17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass TemplateURL; 18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 19bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Holds the host to template url mappings for the search providers. WARNING: 20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// This class does not own any TemplateURLs passed to it and it is up to the 21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// caller to ensure the right lifetime of them. 22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsenclass SearchHostToURLsMap { 23bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen public: 24bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen typedef std::set<const TemplateURL*> TemplateURLSet; 25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 26bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen SearchHostToURLsMap(); 27bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen ~SearchHostToURLsMap(); 28bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 29bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Initializes the map. 30bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void Init(const std::vector<const TemplateURL*>& template_urls, 31bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const SearchTermsData& search_terms_data); 32bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 33bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Adds a new TemplateURL to the map. Since |template_url| is owned 34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // externally, Remove or RemoveAll should be called if it becomes invalid. 35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void Add(const TemplateURL* template_url, 36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const SearchTermsData& search_terms_data); 37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Removes the TemplateURL from the lookup. 39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void Remove(const TemplateURL* template_url); 40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Updates information in an existing TemplateURL. Note: Using Remove and 42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // then Add separately would lead to race conditions in reading because the 43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // lock would be released inbetween the calls. 44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void Update(const TemplateURL* existing_turl, 45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const TemplateURL& new_values, 46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const SearchTermsData& search_terms_data); 47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Updates all search providers which have a google base url. 49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void UpdateGoogleBaseURLs(const SearchTermsData& search_terms_data); 50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Returns the first TemplateURL found with a URL using the specified |host|, 52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // or NULL if there are no such TemplateURLs 53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const TemplateURL* GetTemplateURLForHost(const std::string& host) const; 54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 55bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Return the TemplateURLSet for the given the |host| or NULL if there are 56bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // none. 57bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen const TemplateURLSet* GetURLsForHost(const std::string& host) const; 58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 59bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen private: 60bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen friend class SearchHostToURLsMapTest; 61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 62bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen typedef std::map<std::string, TemplateURLSet> HostToURLsMap; 63bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Removes the given template_url using only the pointer instead of the value. 65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // This is useful when the value may have changed before being updated in the 66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // map. (Specifically when the GoogleBaseURLValue changes.) 67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen void RemoveByPointer(const TemplateURL* template_url); 68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Maps from host to set of TemplateURLs whose search url host is host. 70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen HostToURLsMap host_to_urls_map_; 71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // The security origin for the default search provider. 73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen std::string default_search_origin_; 74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen // Has Init been called? 76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen bool initialized_; 77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen DISALLOW_COPY_AND_ASSIGN(SearchHostToURLsMap); 79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}; 80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen 81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#endif // CHROME_BROWSER_SEARCH_ENGINES_SEARCH_HOST_TO_URLS_MAP_H_ 82