| Index: chrome/browser/search_engines/template_url_parser.cc
|
| ===================================================================
|
| --- chrome/browser/search_engines/template_url_parser.cc (revision 130759)
|
| +++ chrome/browser/search_engines/template_url_parser.cc (working copy)
|
| @@ -145,7 +145,7 @@
|
| // This will be NULL if parsing failed or if the results were invalid for some
|
| // reason (e.g. the resulting URL was not HTTP[S], a name wasn't supplied,
|
| // etc.).
|
| - TemplateURL* GetTemplateURL(Profile* profile);
|
| + TemplateURL* GetTemplateURL(Profile* profile, bool show_in_default_list);
|
|
|
| private:
|
| // Key is UTF8 encoded.
|
| @@ -163,7 +163,9 @@
|
|
|
| static ElementNameToElementTypeMap* kElementNameToElementTypeMap;
|
|
|
| - scoped_ptr<TemplateURL> url_;
|
| + // Data that gets updated as we parse, and is converted to a TemplateURL by
|
| + // GetTemplateURL().
|
| + TemplateURLData data_;
|
|
|
| std::vector<ElementType> elements_;
|
| bool image_is_valid_for_favicon_;
|
| @@ -197,8 +199,7 @@
|
|
|
| TemplateURLParsingContext::TemplateURLParsingContext(
|
| TemplateURLParser::ParameterFilter* parameter_filter)
|
| - : url_(new TemplateURL()),
|
| - image_is_valid_for_favicon_(false),
|
| + : image_is_valid_for_favicon_(false),
|
| parameter_filter_(parameter_filter),
|
| method_(GET),
|
| suggestion_method_(GET),
|
| @@ -206,9 +207,9 @@
|
| derive_image_from_url_(false) {
|
| if (kElementNameToElementTypeMap == NULL)
|
| InitMapping();
|
| - // When combined with proscriptions elsewhere against updating url_->url_ to
|
| - // the empty string, this call ensures url_->url() will never be NULL.
|
| - url_->SetURL("x");
|
| + // When combined with proscriptions elsewhere against updating data_->url_ to
|
| + // the empty string, this call ensures data_->url() will never be NULL.
|
| + data_.SetURL("x");
|
| }
|
|
|
| // static
|
| @@ -249,7 +250,7 @@
|
| reinterpret_cast<TemplateURLParsingContext*>(ctx);
|
| switch (context->GetKnownType()) {
|
| case TemplateURLParsingContext::SHORT_NAME:
|
| - context->url_->short_name_ = context->string_;
|
| + context->data_.short_name = context->string_;
|
| break;
|
| case TemplateURLParsingContext::IMAGE: {
|
| GURL image_url(UTF16ToUTF8(context->string_));
|
| @@ -261,7 +262,7 @@
|
| } else if (context->image_is_valid_for_favicon_ && image_url.is_valid() &&
|
| (image_url.SchemeIs(chrome::kHttpScheme) ||
|
| image_url.SchemeIs(chrome::kHttpsScheme))) {
|
| - context->url_->set_favicon_url(image_url);
|
| + context->data_.favicon_url = image_url;
|
| }
|
| context->image_is_valid_for_favicon_ = false;
|
| break;
|
| @@ -269,7 +270,7 @@
|
| case TemplateURLParsingContext::INPUT_ENCODING: {
|
| std::string input_encoding = UTF16ToASCII(context->string_);
|
| if (IsValidEncodingString(input_encoding))
|
| - context->url_->input_encodings_.push_back(input_encoding);
|
| + context->data_.input_encodings.push_back(input_encoding);
|
| break;
|
| }
|
| case TemplateURLParsingContext::URL:
|
| @@ -290,30 +291,33 @@
|
| UTF8ToUTF16(std::string(reinterpret_cast<const char*>(ch), len));
|
| }
|
|
|
| -TemplateURL* TemplateURLParsingContext::GetTemplateURL(Profile* profile) {
|
| +TemplateURL* TemplateURLParsingContext::GetTemplateURL(
|
| + Profile* profile,
|
| + bool show_in_default_list) {
|
| // Basic legality checks.
|
| - if (url_->short_name_.empty() || !IsHTTPRef(url_->url()) ||
|
| - !IsHTTPRef(url_->suggestions_url()))
|
| + if (data_.short_name.empty() || !IsHTTPRef(data_.url()) ||
|
| + !IsHTTPRef(data_.suggestions_url))
|
| return NULL;
|
|
|
| // If the image was a data URL, use the favicon from the search URL instead.
|
| // (see TODO inEndElementImpl()).
|
| - GURL url(url_->url());
|
| - if (derive_image_from_url_ && url_->favicon_url().is_empty())
|
| - url_->set_favicon_url(TemplateURL::GenerateFaviconURL(url));
|
| + GURL url(data_.url());
|
| + if (derive_image_from_url_ && data_.favicon_url.is_empty())
|
| + data_.favicon_url = TemplateURL::GenerateFaviconURL(url);
|
|
|
| // TODO(jcampan): http://b/issue?id=1196285 we do not support search engines
|
| // that use POST yet.
|
| if (method_ == TemplateURLParsingContext::POST)
|
| return NULL;
|
| if (suggestion_method_ == TemplateURLParsingContext::POST)
|
| - url_->SetSuggestionsURL(std::string());
|
| + data_.suggestions_url.clear();
|
|
|
| // Give this a keyword to facilitate tab-to-search.
|
| string16 keyword(TemplateURLService::GenerateKeyword(url, false));
|
| DCHECK(!keyword.empty());
|
| - url_->set_keyword(keyword);
|
| - return url_.release();
|
| + data_.SetKeyword(keyword);
|
| + data_.show_in_default_list = show_in_default_list;
|
| + return new TemplateURL(data_);
|
| }
|
|
|
| // static
|
| @@ -353,12 +357,12 @@
|
| }
|
|
|
| if (is_html_url && !template_url.empty()) {
|
| - url_->SetURL(template_url);
|
| + data_.SetURL(template_url);
|
| is_suggest_url_ = false;
|
| if (is_post)
|
| method_ = POST;
|
| } else if (is_suggest_url) {
|
| - url_->SetSuggestionsURL(template_url);
|
| + data_.suggestions_url = template_url;
|
| is_suggest_url_ = true;
|
| if (is_post)
|
| suggestion_method_ = POST;
|
| @@ -413,7 +417,7 @@
|
| if (!parameter_filter_ && extra_params_.empty())
|
| return;
|
|
|
| - GURL url(is_suggest_url_ ? url_->suggestions_url() : url_->url());
|
| + GURL url(is_suggest_url_ ? data_.suggestions_url : data_.url());
|
| if (url.is_empty())
|
| return;
|
|
|
| @@ -451,9 +455,9 @@
|
| repl.SetQueryStr(new_query);
|
| url = url.ReplaceComponents(repl);
|
| if (is_suggest_url_)
|
| - url_->SetSuggestionsURL(url.spec());
|
| + data_.suggestions_url = url.spec();
|
| else if (url.is_valid())
|
| - url_->SetURL(url.spec());
|
| + data_.SetURL(url.spec());
|
| }
|
| }
|
|
|
| @@ -472,6 +476,7 @@
|
| // static
|
| TemplateURL* TemplateURLParser::Parse(
|
| Profile* profile,
|
| + bool show_in_default_list,
|
| const char* data,
|
| size_t length,
|
| TemplateURLParser::ParameterFilter* param_filter) {
|
| @@ -489,5 +494,5 @@
|
| xmlSAXUserParseMemory(&sax_handler, &context, data, static_cast<int>(length));
|
| xmlSubstituteEntitiesDefault(last_sub_entities_value);
|
|
|
| - return context.GetTemplateURL(profile);
|
| + return context.GetTemplateURL(profile, show_in_default_list);
|
| }
|
|
|