Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(354)

Unified Diff: chrome/browser/search_engines/template_url.h

Issue 10908226: Introduces a search term extraction mechanism working for arbitrary search providers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/search_engines/template_url.h
diff --git a/chrome/browser/search_engines/template_url.h b/chrome/browser/search_engines/template_url.h
index 4241f529d46fc025ec40df4b17eca3fd4d4a5bc7..3c8cd60e3155d1efbe5ce75c5cf2b5345b591c1d 100644
--- a/chrome/browser/search_engines/template_url.h
+++ b/chrome/browser/search_engines/template_url.h
@@ -12,6 +12,7 @@
#include "base/time.h"
#include "chrome/browser/search_engines/template_url_id.h"
#include "googleurl/src/gurl.h"
+#include "googleurl/src/url_parse.h"
class Profile;
class SearchTermsData;
@@ -40,11 +41,13 @@ class TemplateURLRef {
};
// Which kind of URL within our owner we are. This allows us to get at the
- // correct string field.
+ // correct string field. Use |INDEXED| to indicate that the numerical |index_|
+ // should be used instead.
enum Type {
SEARCH,
SUGGEST,
INSTANT,
+ INDEXED
};
// This struct encapsulates arguments passed to
@@ -70,6 +73,7 @@ class TemplateURLRef {
};
TemplateURLRef(TemplateURL* owner, Type type);
+ TemplateURLRef(TemplateURL* owner, size_t index_in_owner);
~TemplateURLRef();
// Returns the raw URL. None of the parameters will have been replaced.
@@ -128,6 +132,10 @@ class TemplateURLRef {
// {google:baseURL} or {google:baseSuggestURL}.
bool HasGoogleBaseURLs() const;
+ // Extract keywords from the provided |url| using the template URL referred
+ // to. In case of failure, an empty string is returned.
+ string16 ExtractSearchTermsFromURL(const GURL& url) const;
+
private:
friend class TemplateURL;
FRIEND_TEST_ALL_PREFIXES(TemplateURLTest, SetPrepopulatedAndParse);
@@ -206,12 +214,20 @@ class TemplateURLRef {
void ParseHostAndSearchTermKey(
const SearchTermsData& search_terms_data) const;
+ // Extract query key and host given a list of parameters coming from the URL
+ // query or ref.
+ void FindSearchTermsKey(const std::string& params) const;
+
// The TemplateURL that contains us. This should outlive us.
TemplateURL* const owner_;
// What kind of URL we are.
const Type type_;
+ // If |type_| is |INDEXED|, this |index_| is used instead to refer to a URL
+ // within our owner.
+ const size_t index_in_owner_;
+
// Whether the URL has been parsed.
mutable bool parsed_;
@@ -229,11 +245,12 @@ class TemplateURLRef {
// into the string, and may be empty.
mutable Replacements replacements_;
- // Host, path and key of the search term. These are only set if the url
- // contains one search term.
+ // Host, path, key and location of the search term. These are only set if the
+ // url contains one search term.
mutable std::string host_;
mutable std::string path_;
mutable std::string search_term_key_;
+ mutable url_parse::Parsed::ComponentType search_term_key_location_;
// Whether the contained URL is a pre-populated URL.
bool prepopulated_;
@@ -265,6 +282,18 @@ struct TemplateURLData {
void SetURL(const std::string& url);
const std::string& url() const { return url_; }
+ // Alternate URL patterns that can be used to match search terms.
+ // The URLs must not contain commas.
+ const std::vector<std::string>& alternate_urls() const {
+ return alternate_urls_;
+ }
+
+ // Returns a serialized version of |alternate_urls| as a comma separated list.
+ std::string SerializeAlternateURLs() const;
+
+ // Deserialize a comma separated list of URLs into |alternate_urls|.
+ void DeserializeAndSetAlternateURLs(const std::string& alternate_urls);
+
// Optional additional raw URLs.
std::string suggestions_url;
std::string instant_url;
@@ -326,10 +355,18 @@ struct TemplateURLData {
std::string sync_guid;
private:
+ FRIEND_TEST_ALL_PREFIXES(TemplateURLTest, SerializeAlternateURLs);
+
// Private so we can enforce using the setters and thus enforce that these
// fields are never empty.
string16 keyword_;
std::string url_;
+
+ // A list of URL patterns that can be used, in addition to |url_| and
+ // |instant_url|, to extract search terms from a URL. Enforce use of a setter
+ // since |alternate_urls| cannot contain commas as they are serialized as a
+ // comma-separated list.
+ std::vector<std::string> alternate_urls_;
};
@@ -422,6 +459,21 @@ class TemplateURL {
std::string GetExtensionId() const;
bool IsExtensionKeyword() const;
+ // Returns the total number of URL comprised in this template, including
+ // search, instant and alternate URLs.
+ size_t URLCount() const;
+
+ // Obtain the URL given an |index|. Alternate URLS start at index 0, followed
+ // by instant and then the regular search URL. This allows us to prioritize
+ // some pattern, so if a search term is present both in the query and the ref,
+ // we can prioritize the ref one. The |index| must be less than URLCount().
+ const std::string& GetURL(size_t index) const;
+
+ // Use the various URL comprised in this template to match the provided |url|
+ // and extract keywords from it. If successful the search terms are rerturned.
+ // In case of failure, an empty string is returned.
+ string16 ExtractSearchTermsFromURL(const GURL& url);
+
private:
friend class TemplateURLService;

Powered by Google App Engine
This is Rietveld 408576698