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