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

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

Issue 1951153002: Remove AddSearchProvider (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: obsolescence date Created 4 years, 7 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
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/search_engine_tab_helper.h" 5 #include "chrome/browser/ui/search_engines/search_engine_tab_helper.h"
6 6
7 #include "base/metrics/histogram_macros.h" 7 #include "base/metrics/histogram_macros.h"
8 #include "chrome/browser/profiles/profile.h" 8 #include "chrome/browser/profiles/profile.h"
9 #include "chrome/browser/search_engines/template_url_fetcher_factory.h" 9 #include "chrome/browser/search_engines/template_url_fetcher_factory.h"
10 #include "chrome/browser/search_engines/template_url_service_factory.h" 10 #include "chrome/browser/search_engines/template_url_service_factory.h"
11 #include "chrome/browser/ui/search_engines/edit_search_engine_controller.h" 11 #include "chrome/browser/ui/search_engines/edit_search_engine_controller.h"
12 #include "chrome/browser/ui/search_engines/search_engine_tab_helper_delegate.h"
13 #include "chrome/common/render_messages.h" 12 #include "chrome/common/render_messages.h"
14 #include "chrome/common/url_constants.h" 13 #include "chrome/common/url_constants.h"
15 #include "components/search_engines/template_url.h" 14 #include "components/search_engines/template_url.h"
16 #include "components/search_engines/template_url_fetcher.h" 15 #include "components/search_engines/template_url_fetcher.h"
17 #include "components/search_engines/template_url_service.h" 16 #include "components/search_engines/template_url_service.h"
18 #include "content/public/browser/favicon_status.h" 17 #include "content/public/browser/favicon_status.h"
19 #include "content/public/browser/navigation_controller.h" 18 #include "content/public/browser/navigation_controller.h"
20 #include "content/public/browser/navigation_entry.h" 19 #include "content/public/browser/navigation_entry.h"
21 #include "content/public/browser/render_frame_host.h" 20 #include "content/public/browser/render_frame_host.h"
22 #include "content/public/browser/render_process_host.h" 21 #include "content/public/browser/render_process_host.h"
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 return handled; 98 return handled;
100 } 99 }
101 100
102 bool SearchEngineTabHelper::OnMessageReceived( 101 bool SearchEngineTabHelper::OnMessageReceived(
103 const IPC::Message& message, 102 const IPC::Message& message,
104 content::RenderFrameHost* render_frame_host) { 103 content::RenderFrameHost* render_frame_host) {
105 return OnMessageReceived(message); 104 return OnMessageReceived(message);
106 } 105 }
107 106
108 SearchEngineTabHelper::SearchEngineTabHelper(WebContents* web_contents) 107 SearchEngineTabHelper::SearchEngineTabHelper(WebContents* web_contents)
109 : content::WebContentsObserver(web_contents), 108 : content::WebContentsObserver(web_contents) {
110 delegate_(nullptr),
111 weak_ptr_factory_(this) {
112 DCHECK(web_contents); 109 DCHECK(web_contents);
113 } 110 }
114 111
115 void SearchEngineTabHelper::OnPageHasOSDD( 112 void SearchEngineTabHelper::OnPageHasOSDD(
116 const GURL& page_url, 113 const GURL& page_url,
117 const GURL& osdd_url, 114 const GURL& osdd_url) {
118 const search_provider::OSDDType& msg_provider_type) {
119 // Checks to see if we should generate a keyword based on the OSDD, and if 115 // Checks to see if we should generate a keyword based on the OSDD, and if
120 // necessary uses TemplateURLFetcher to download the OSDD and create a 116 // necessary uses TemplateURLFetcher to download the OSDD and create a
121 // keyword. 117 // keyword.
122 118
123 TemplateURLFetcher::ProviderType provider_type =
124 (msg_provider_type == search_provider::AUTODETECTED_PROVIDER)
125 ? TemplateURLFetcher::AUTODETECTED_PROVIDER
126 : TemplateURLFetcher::EXPLICIT_PROVIDER;
127
128 if (provider_type == TemplateURLFetcher::EXPLICIT_PROVIDER) {
129 UMA_HISTOGRAM_ENUMERATION(
130 "Search.AddSearchProvider2",
131 EditSearchEngineController::ADD_SEARCH_PROVIDER_CALLED,
132 EditSearchEngineController::NUM_EDIT_SEARCH_ENGINE_ACTIONS);
133 }
134
135 // Make sure that the page is the current page and other basic checks. 119 // Make sure that the page is the current page and other basic checks.
136 // When |page_url| has file: scheme, this method doesn't work because of 120 // When |page_url| has file: scheme, this method doesn't work because of
137 // http://b/issue?id=863583. For that reason, this doesn't check and allow 121 // http://b/issue?id=863583. For that reason, this doesn't check and allow
138 // urls referring to osdd urls with same schemes. 122 // urls referring to osdd urls with same schemes.
139 if (!osdd_url.is_valid() || !osdd_url.SchemeIsHTTPOrHTTPS()) 123 if (!osdd_url.is_valid() || !osdd_url.SchemeIsHTTPOrHTTPS())
140 return; 124 return;
141 125
142 Profile* profile = 126 Profile* profile =
143 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 127 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
144 if (page_url != web_contents()->GetLastCommittedURL() || 128 if (page_url != web_contents()->GetLastCommittedURL() ||
145 !TemplateURLFetcherFactory::GetForProfile(profile) || 129 !TemplateURLFetcherFactory::GetForProfile(profile) ||
146 profile->IsOffTheRecord()) 130 profile->IsOffTheRecord())
147 return; 131 return;
148 132
149 // If the current page is a form submit, find the last page that was not a 133 // If the current page is a form submit, find the last page that was not a
150 // form submit and use its url to generate the keyword from. 134 // form submit and use its url to generate the keyword from.
151 const NavigationController& controller = web_contents()->GetController(); 135 const NavigationController& controller = web_contents()->GetController();
152 const NavigationEntry* entry = controller.GetLastCommittedEntry(); 136 const NavigationEntry* entry = controller.GetLastCommittedEntry();
153 for (int index = controller.GetLastCommittedEntryIndex(); 137 for (int index = controller.GetLastCommittedEntryIndex();
154 (index > 0) && IsFormSubmit(entry); 138 (index > 0) && IsFormSubmit(entry);
155 entry = controller.GetEntryAtIndex(index)) 139 entry = controller.GetEntryAtIndex(index))
156 --index; 140 --index;
157 if (!entry || IsFormSubmit(entry)) 141 if (!entry || IsFormSubmit(entry))
158 return; 142 return;
159 143
160 // Autogenerate a keyword for the autodetected case; in the other cases we'll 144 // Autogenerate a keyword for the autodetected case; in the other cases we'll
161 // generate a keyword later after fetching the OSDD. 145 // generate a keyword later after fetching the OSDD.
162 base::string16 keyword; 146 base::string16 keyword = GenerateKeywordFromNavigationEntry(entry);
163 if (provider_type == TemplateURLFetcher::AUTODETECTED_PROVIDER) { 147 if (keyword.empty())
164 keyword = GenerateKeywordFromNavigationEntry(entry); 148 return;
165 if (keyword.empty())
166 return;
167 }
168 149
169 // Download the OpenSearch description document. If this is successful, a 150 // Download the OpenSearch description document. If this is successful, a
170 // new keyword will be created when done. 151 // new keyword will be created when done.
171 TemplateURLFetcherFactory::GetForProfile(profile)->ScheduleDownload( 152 TemplateURLFetcherFactory::GetForProfile(profile)->ScheduleDownload(
172 keyword, osdd_url, entry->GetFavicon().url, 153 keyword, osdd_url, entry->GetFavicon().url,
173 base::Bind(&AssociateURLFetcherWithWebContents, web_contents()), 154 base::Bind(&AssociateURLFetcherWithWebContents, web_contents()));
174 base::Bind(&SearchEngineTabHelper::OnDownloadedOSDD,
175 weak_ptr_factory_.GetWeakPtr()),
176 provider_type);
177 }
178
179 void SearchEngineTabHelper::OnDownloadedOSDD(
180 std::unique_ptr<TemplateURL> template_url) {
181 Profile* profile =
182 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
183 delegate_->ConfirmAddSearchProvider(template_url.release(), profile);
184 } 155 }
185 156
186 void SearchEngineTabHelper::GenerateKeywordIfNecessary( 157 void SearchEngineTabHelper::GenerateKeywordIfNecessary(
187 const content::FrameNavigateParams& params) { 158 const content::FrameNavigateParams& params) {
188 if (!params.searchable_form_url.is_valid()) 159 if (!params.searchable_form_url.is_valid())
189 return; 160 return;
190 161
191 Profile* profile = 162 Profile* profile =
192 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); 163 Profile::FromBrowserContext(web_contents()->GetBrowserContext());
193 if (profile->IsOffTheRecord()) 164 if (profile->IsOffTheRecord())
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 // the favicon url wasn't obtained before the load started. This assumes the 213 // the favicon url wasn't obtained before the load started. This assumes the
243 // latter. 214 // latter.
244 // TODO(sky): Need a way to set the favicon that doesn't involve generating 215 // TODO(sky): Need a way to set the favicon that doesn't involve generating
245 // its url. 216 // its url.
246 data.favicon_url = current_favicon.is_valid() ? 217 data.favicon_url = current_favicon.is_valid() ?
247 current_favicon : TemplateURL::GenerateFaviconURL(params.referrer.url); 218 current_favicon : TemplateURL::GenerateFaviconURL(params.referrer.url);
248 data.safe_for_autoreplace = true; 219 data.safe_for_autoreplace = true;
249 data.input_encodings.push_back(params.searchable_form_encoding); 220 data.input_encodings.push_back(params.searchable_form_encoding);
250 url_service->Add(new TemplateURL(data)); 221 url_service->Add(new TemplateURL(data));
251 } 222 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698