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

Side by Side Diff: chrome/browser/ui/search_engines/edit_search_engine_controller.cc

Issue 10021008: Reland r131019: Move most TemplateURL data members to a new struct, TemplateURLData. This allows us… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/search_engines/edit_search_engine_controller.h" 5 #include "chrome/browser/ui/search_engines/edit_search_engine_controller.h"
6 6
7 #include "base/string_util.h" 7 #include "base/string_util.h"
8 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "chrome/browser/net/url_fixer_upper.h" 9 #include "chrome/browser/net/url_fixer_upper.h"
10 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/profiles/profile.h"
(...skipping 23 matching lines...) Expand all
34 bool EditSearchEngineController::IsURLValid( 34 bool EditSearchEngineController::IsURLValid(
35 const std::string& url_input) const { 35 const std::string& url_input) const {
36 std::string url = GetFixedUpURL(url_input); 36 std::string url = GetFixedUpURL(url_input);
37 if (url.empty()) 37 if (url.empty())
38 return false; 38 return false;
39 39
40 // Convert |url| to a TemplateURLRef so we can check its validity even if it 40 // Convert |url| to a TemplateURLRef so we can check its validity even if it
41 // contains replacement strings. We do this by constructing a dummy 41 // contains replacement strings. We do this by constructing a dummy
42 // TemplateURL owner because |template_url_| might be NULL and we can't call 42 // TemplateURL owner because |template_url_| might be NULL and we can't call
43 // TemplateURLRef::IsValid() when its owner is NULL. 43 // TemplateURLRef::IsValid() when its owner is NULL.
44 TemplateURL t_url; 44 TemplateURLData data;
45 t_url.SetURL(url); 45 data.SetURL(url);
46 TemplateURL t_url(data);
46 const TemplateURLRef& template_ref = t_url.url_ref(); 47 const TemplateURLRef& template_ref = t_url.url_ref();
47 if (!template_ref.IsValid()) 48 if (!template_ref.IsValid())
48 return false; 49 return false;
49 50
50 // If this is going to be the default search engine, it must support 51 // If this is going to be the default search engine, it must support
51 // replacement. 52 // replacement.
52 if (!template_ref.SupportsReplacement() && 53 if (!template_ref.SupportsReplacement() &&
53 (template_url_ == TemplateURLServiceFactory::GetForProfile(profile_)-> 54 (template_url_ == TemplateURLServiceFactory::GetForProfile(profile_)->
54 GetDefaultSearchProvider())) 55 GetDefaultSearchProvider()))
55 return false; 56 return false;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 // TODO(pamg): Really, we should modify the entry so this later one 91 // TODO(pamg): Really, we should modify the entry so this later one
91 // overwrites it. But we don't expect this case to be common. 92 // overwrites it. But we don't expect this case to be common.
92 CleanUpCancelledAdd(); 93 CleanUpCancelledAdd();
93 return; 94 return;
94 } 95 }
95 96
96 if (!edit_keyword_delegate_) { 97 if (!edit_keyword_delegate_) {
97 // Confiming an entry we got from JS. We have a template_url_, but it 98 // Confiming an entry we got from JS. We have a template_url_, but it
98 // hasn't yet been added to the model. 99 // hasn't yet been added to the model.
99 DCHECK(template_url_); 100 DCHECK(template_url_);
100 // const_cast is ugly, but this is the same thing the TemplateURLService
101 // does in a similar situation (updating an existing TemplateURL with
102 // data from a new one).
103 TemplateURL* modifiable_url = const_cast<TemplateURL*>(template_url_);
104 modifiable_url->set_short_name(title_input);
105 modifiable_url->set_keyword(keyword_input);
106 modifiable_url->SetURL(url_string);
107 // TemplateURLService takes ownership of template_url_. 101 // TemplateURLService takes ownership of template_url_.
108 template_url_service->Add(modifiable_url); 102 template_url_service->AddWithOverrides(template_url_, title_input,
103 keyword_input, url_string);
109 content::RecordAction(UserMetricsAction("KeywordEditor_AddKeywordJS")); 104 content::RecordAction(UserMetricsAction("KeywordEditor_AddKeywordJS"));
110 } else { 105 } else {
111 // Adding or modifying an entry via the Delegate. 106 // Adding or modifying an entry via the Delegate.
112 edit_keyword_delegate_->OnEditedKeyword(template_url_, title_input, 107 edit_keyword_delegate_->OnEditedKeyword(template_url_, title_input,
113 keyword_input, url_string); 108 keyword_input, url_string);
114 } 109 }
115 } 110 }
116 111
117 void EditSearchEngineController::CleanUpCancelledAdd() { 112 void EditSearchEngineController::CleanUpCancelledAdd() {
118 if (!edit_keyword_delegate_ && template_url_) { 113 if (!edit_keyword_delegate_ && template_url_) {
119 // When we have no Delegate, we know that the template_url_ hasn't yet been 114 // When we have no Delegate, we know that the template_url_ hasn't yet been
120 // added to the model, so we need to clean it up. 115 // added to the model, so we need to clean it up.
121 delete template_url_; 116 delete template_url_;
122 template_url_ = NULL; 117 template_url_ = NULL;
123 } 118 }
124 } 119 }
125 120
126 std::string EditSearchEngineController::GetFixedUpURL( 121 std::string EditSearchEngineController::GetFixedUpURL(
127 const std::string& url_input) const { 122 const std::string& url_input) const {
128 std::string url; 123 std::string url;
129 TrimWhitespace(TemplateURLRef::DisplayURLToURLRef(UTF8ToUTF16(url_input)), 124 TrimWhitespace(TemplateURLRef::DisplayURLToURLRef(UTF8ToUTF16(url_input)),
130 TRIM_ALL, &url); 125 TRIM_ALL, &url);
131 if (url.empty()) 126 if (url.empty())
132 return url; 127 return url;
133 128
134 // Parse the string as a URL to determine the scheme. If we need to, add the 129 // Parse the string as a URL to determine the scheme. If we need to, add the
135 // scheme. As the scheme may be expanded (as happens with {google:baseURL}) 130 // scheme. As the scheme may be expanded (as happens with {google:baseURL})
136 // we need to replace the search terms before testing for the scheme. 131 // we need to replace the search terms before testing for the scheme.
137 TemplateURL t_url; 132 TemplateURLData data;
138 t_url.SetURL(url); 133 data.SetURL(url);
134 TemplateURL t_url(data);
139 std::string expanded_url(t_url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("x"), 135 std::string expanded_url(t_url.url_ref().ReplaceSearchTerms(ASCIIToUTF16("x"),
140 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())); 136 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16()));
141 url_parse::Parsed parts; 137 url_parse::Parsed parts;
142 std::string scheme(URLFixerUpper::SegmentURL(expanded_url, &parts)); 138 std::string scheme(URLFixerUpper::SegmentURL(expanded_url, &parts));
143 if (!parts.scheme.is_valid()) 139 if (!parts.scheme.is_valid())
144 url.insert(0, scheme + "://"); 140 url.insert(0, scheme + "://");
145 141
146 return url; 142 return url;
147 } 143 }
148 144
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698