15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_PARSER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_PARSER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Profile; 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TemplateURL; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// TemplateURLParser, as the name implies, handling reading of TemplateURLs 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// from OpenSearch description documents. 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TemplateURLParser { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class ParameterFilter { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Invoked for each parameter of the template URL while parsing. If this 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // methods returns false, the parameter is not included. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool KeepParameter(const std::string& key, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& value) = 0; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~ParameterFilter() {} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Decodes the chunk of data representing a TemplateURL, creates the 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TemplateURL, and returns it. The caller owns the returned object. 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |profile| should only be non-NULL if this function is called on the UI 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // thread. Returns NULL if data does not describe a valid TemplateURL, the 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // URLs referenced do not point to valid http/https resources, or for some 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // other reason we do not support the described TemplateURL. 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // |parameter_filter| can be used if you want to filter some parameters out of 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // the URL. For example, when importing from another browser, we remove any 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // parameter identifying that browser. If set to NULL, the URL is not 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // modified. 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static TemplateURL* Parse(Profile* profile, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool show_in_default_list, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* data, 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t length, 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParameterFilter* parameter_filter); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // No one should create one of these. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TemplateURLParser(); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(TemplateURLParser); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_BROWSER_SEARCH_ENGINES_TEMPLATE_URL_PARSER_H_ 54