OLD | NEW |
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 "chrome/browser/profiles/profile.h" | 7 #include "chrome/browser/profiles/profile.h" |
8 #include "chrome/browser/search_engines/template_url_fetcher.h" | 8 #include "chrome/browser/search_engines/template_url_fetcher.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/search_engine_tab_helper_delegate.h" | 11 #include "chrome/browser/ui/search_engines/search_engine_tab_helper_delegate.h" |
12 #include "chrome/common/render_messages.h" | 12 #include "chrome/common/render_messages.h" |
13 #include "chrome/common/url_constants.h" | 13 #include "chrome/common/url_constants.h" |
14 #include "components/search_engines/template_url.h" | 14 #include "components/search_engines/template_url.h" |
15 #include "components/search_engines/template_url_service.h" | 15 #include "components/search_engines/template_url_service.h" |
16 #include "content/public/browser/favicon_status.h" | 16 #include "content/public/browser/favicon_status.h" |
17 #include "content/public/browser/navigation_controller.h" | 17 #include "content/public/browser/navigation_controller.h" |
18 #include "content/public/browser/navigation_entry.h" | 18 #include "content/public/browser/navigation_entry.h" |
| 19 #include "content/public/browser/render_frame_host.h" |
| 20 #include "content/public/browser/render_process_host.h" |
19 #include "content/public/browser/web_contents.h" | 21 #include "content/public/browser/web_contents.h" |
20 #include "content/public/common/frame_navigate_params.h" | 22 #include "content/public/common/frame_navigate_params.h" |
| 23 #include "content/public/common/url_fetcher.h" |
21 | 24 |
22 using content::NavigationController; | 25 using content::NavigationController; |
23 using content::NavigationEntry; | 26 using content::NavigationEntry; |
24 using content::WebContents; | 27 using content::WebContents; |
25 | 28 |
26 DEFINE_WEB_CONTENTS_USER_DATA_KEY(SearchEngineTabHelper); | 29 DEFINE_WEB_CONTENTS_USER_DATA_KEY(SearchEngineTabHelper); |
27 | 30 |
28 namespace { | 31 namespace { |
29 | 32 |
30 // Returns true if the entry's transition type is FORM_SUBMIT. | 33 // Returns true if the entry's transition type is FORM_SUBMIT. |
(...skipping 23 matching lines...) Expand all Loading... |
54 // | 57 // |
55 // If we relax the path constraint, we need to be sure to sanitize the path | 58 // If we relax the path constraint, we need to be sure to sanitize the path |
56 // elements and update AutocompletePopup to look for keywords using the path. | 59 // elements and update AutocompletePopup to look for keywords using the path. |
57 // See http://b/issue?id=863583. | 60 // See http://b/issue?id=863583. |
58 if (!url.SchemeIs(url::kHttpScheme) || (url.path().length() > 1)) | 61 if (!url.SchemeIs(url::kHttpScheme) || (url.path().length() > 1)) |
59 return base::string16(); | 62 return base::string16(); |
60 | 63 |
61 return TemplateURL::GenerateKeyword(url); | 64 return TemplateURL::GenerateKeyword(url); |
62 } | 65 } |
63 | 66 |
| 67 void AssociateURLFetcherWithWebContents(content::WebContents* web_contents, |
| 68 net::URLFetcher* url_fetcher) { |
| 69 content::AssociateURLFetcherWithRenderFrame( |
| 70 url_fetcher, |
| 71 web_contents->GetURL(), |
| 72 web_contents->GetRenderProcessHost()->GetID(), |
| 73 web_contents->GetMainFrame()->GetRoutingID()); |
| 74 } |
| 75 |
64 } // namespace | 76 } // namespace |
65 | 77 |
66 SearchEngineTabHelper::~SearchEngineTabHelper() { | 78 SearchEngineTabHelper::~SearchEngineTabHelper() { |
67 } | 79 } |
68 | 80 |
69 void SearchEngineTabHelper::DidNavigateMainFrame( | 81 void SearchEngineTabHelper::DidNavigateMainFrame( |
70 const content::LoadCommittedDetails& /*details*/, | 82 const content::LoadCommittedDetails& /*details*/, |
71 const content::FrameNavigateParams& params) { | 83 const content::FrameNavigateParams& params) { |
72 GenerateKeywordIfNecessary(params); | 84 GenerateKeywordIfNecessary(params); |
73 } | 85 } |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 base::string16 keyword; | 139 base::string16 keyword; |
128 if (provider_type == TemplateURLFetcher::AUTODETECTED_PROVIDER) { | 140 if (provider_type == TemplateURLFetcher::AUTODETECTED_PROVIDER) { |
129 keyword = GenerateKeywordFromNavigationEntry(entry); | 141 keyword = GenerateKeywordFromNavigationEntry(entry); |
130 if (keyword.empty()) | 142 if (keyword.empty()) |
131 return; | 143 return; |
132 } | 144 } |
133 | 145 |
134 // Download the OpenSearch description document. If this is successful, a | 146 // Download the OpenSearch description document. If this is successful, a |
135 // new keyword will be created when done. | 147 // new keyword will be created when done. |
136 TemplateURLFetcherFactory::GetForProfile(profile)->ScheduleDownload( | 148 TemplateURLFetcherFactory::GetForProfile(profile)->ScheduleDownload( |
137 keyword, osdd_url, entry->GetFavicon().url, web_contents(), | 149 keyword, osdd_url, entry->GetFavicon().url, |
| 150 base::Bind(&AssociateURLFetcherWithWebContents, web_contents()), |
138 base::Bind(&SearchEngineTabHelper::OnDownloadedOSDD, | 151 base::Bind(&SearchEngineTabHelper::OnDownloadedOSDD, |
139 weak_ptr_factory_.GetWeakPtr()), | 152 weak_ptr_factory_.GetWeakPtr()), |
140 provider_type); | 153 provider_type); |
141 } | 154 } |
142 | 155 |
143 void SearchEngineTabHelper::OnDownloadedOSDD( | 156 void SearchEngineTabHelper::OnDownloadedOSDD( |
144 scoped_ptr<TemplateURL> template_url) { | 157 scoped_ptr<TemplateURL> template_url) { |
145 Profile* profile = | 158 Profile* profile = |
146 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); | 159 Profile::FromBrowserContext(web_contents()->GetBrowserContext()); |
147 delegate_->ConfirmAddSearchProvider(template_url.release(), profile); | 160 delegate_->ConfirmAddSearchProvider(template_url.release(), profile); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 // the favicon url wasn't obtained before the load started. This assumes the | 219 // the favicon url wasn't obtained before the load started. This assumes the |
207 // latter. | 220 // latter. |
208 // TODO(sky): Need a way to set the favicon that doesn't involve generating | 221 // TODO(sky): Need a way to set the favicon that doesn't involve generating |
209 // its url. | 222 // its url. |
210 data.favicon_url = current_favicon.is_valid() ? | 223 data.favicon_url = current_favicon.is_valid() ? |
211 current_favicon : TemplateURL::GenerateFaviconURL(params.referrer.url); | 224 current_favicon : TemplateURL::GenerateFaviconURL(params.referrer.url); |
212 data.safe_for_autoreplace = true; | 225 data.safe_for_autoreplace = true; |
213 data.input_encodings.push_back(params.searchable_form_encoding); | 226 data.input_encodings.push_back(params.searchable_form_encoding); |
214 url_service->Add(new TemplateURL(data)); | 227 url_service->Add(new TemplateURL(data)); |
215 } | 228 } |
OLD | NEW |