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_UI_SEARCH_ENGINES_EDIT_SEARCH_ENGINE_CONTROLLER_H_ 6 #define CHROME_BROWSER_UI_SEARCH_ENGINES_EDIT_SEARCH_ENGINE_CONTROLLER_H_ 7 8 #include <string> 9 10 #include "base/strings/string16.h" 11 #include "ui/gfx/native_widget_types.h" 12 13 class Profile; 14 class TemplateURL; 15 16 class EditSearchEngineControllerDelegate { 17 public: 18 // Invoked from the EditSearchEngineController when the user accepts the 19 // edits. NOTE: |template_url| is the value supplied to 20 // EditSearchEngineController's constructor, and may be NULL. A NULL value 21 // indicates a new TemplateURL should be created rather than modifying an 22 // existing TemplateURL. 23 virtual void OnEditedKeyword(TemplateURL* template_url, 24 const base::string16& title, 25 const base::string16& keyword, 26 const std::string& url) = 0; 27 28 protected: 29 virtual ~EditSearchEngineControllerDelegate() {} 30 }; 31 32 // EditSearchEngineController provides the core platform independent logic 33 // for the Edit Search Engine dialog. 34 class EditSearchEngineController { 35 public: 36 // The |template_url| and/or |edit_keyword_delegate| may be NULL. 37 EditSearchEngineController( 38 TemplateURL* template_url, 39 EditSearchEngineControllerDelegate* edit_keyword_delegate, 40 Profile* profile); 41 ~EditSearchEngineController() {} 42 43 // Returns true if the value of |title_input| is a valid search engine name. 44 bool IsTitleValid(const base::string16& title_input) const; 45 46 // Returns true if the value of |url_input| represents a valid search engine 47 // URL. The URL is valid if it contains no search terms and is a valid 48 // url, or if it contains a search term and replacing that search term with a 49 // character results in a valid url. 50 bool IsURLValid(const std::string& url_input) const; 51 52 // Returns true if the value of |keyword_input| represents a valid keyword. 53 // The keyword is valid if it is non-empty and does not conflict with an 54 // existing entry. NOTE: this is just the keyword, not the title and url. 55 bool IsKeywordValid(const base::string16& keyword_input) const; 56 57 // Completes the add or edit of a search engine. 58 void AcceptAddOrEdit(const base::string16& title_input, 59 const base::string16& keyword_input, 60 const std::string& url_input); 61 62 // Deletes an unused TemplateURL, if its add was cancelled and it's not 63 // already owned by the TemplateURLService. 64 void CleanUpCancelledAdd(); 65 66 // Accessors. 67 const TemplateURL* template_url() const { return template_url_; } 68 Profile* profile() const { return profile_; } 69 70 private: 71 // Fixes up and returns the URL the user has input. The returned URL is 72 // suitable for use by TemplateURL. 73 std::string GetFixedUpURL(const std::string& url_input) const; 74 75 // The TemplateURL we're displaying information for. It may be NULL. If we 76 // have a keyword_editor_view, we assume that this TemplateURL is already in 77 // the TemplateURLService; if not, we assume it isn't. 78 TemplateURL* template_url_; 79 80 // We may have been created by this, in which case we will call back to it on 81 // success to add/modify the entry. May be NULL. 82 EditSearchEngineControllerDelegate* edit_keyword_delegate_; 83 84 // Profile whose TemplateURLService we're modifying. 85 Profile* profile_; 86 87 DISALLOW_COPY_AND_ASSIGN(EditSearchEngineController); 88 }; 89 90 #endif // CHROME_BROWSER_UI_SEARCH_ENGINES_EDIT_SEARCH_ENGINE_CONTROLLER_H_ 91