OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "components/error_page/renderer/net_error_helper_core.h" | 5 #include "components/error_page/renderer/net_error_helper_core.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <set> | 8 #include <set> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 params->SetString("clickType", correction.click_type); | 253 params->SetString("clickType", correction.click_type); |
254 params->SetString("clickData", correction.click_data); | 254 params->SetString("clickData", correction.click_data); |
255 | 255 |
256 params->SetString("eventId", response.event_id); | 256 params->SetString("eventId", response.event_id); |
257 params->SetString("fingerprint", response.fingerprint); | 257 params->SetString("fingerprint", response.fingerprint); |
258 | 258 |
259 return CreateRequestBody("linkdoctor.fixurl.clicktracking", error_param, | 259 return CreateRequestBody("linkdoctor.fixurl.clicktracking", error_param, |
260 correction_params, std::move(params)); | 260 correction_params, std::move(params)); |
261 } | 261 } |
262 | 262 |
263 base::string16 FormatURLForDisplay(const GURL& url, bool is_rtl, | 263 base::string16 FormatURLForDisplay(const GURL& url, bool is_rtl) { |
264 const std::string accept_languages) { | |
265 // Translate punycode into UTF8, unescape UTF8 URLs. | 264 // Translate punycode into UTF8, unescape UTF8 URLs. |
266 base::string16 url_for_display(url_formatter::FormatUrl( | 265 base::string16 url_for_display(url_formatter::FormatUrl( |
267 url, accept_languages, url_formatter::kFormatUrlOmitNothing, | 266 url, url_formatter::kFormatUrlOmitNothing, |
268 net::UnescapeRule::NORMAL, nullptr, nullptr, nullptr)); | 267 net::UnescapeRule::NORMAL, nullptr, nullptr, nullptr)); |
269 // URLs are always LTR. | 268 // URLs are always LTR. |
270 if (is_rtl) | 269 if (is_rtl) |
271 base::i18n::WrapStringWithLTRFormatting(&url_for_display); | 270 base::i18n::WrapStringWithLTRFormatting(&url_for_display); |
272 return url_for_display; | 271 return url_for_display; |
273 } | 272 } |
274 | 273 |
275 scoped_ptr<NavigationCorrectionResponse> ParseNavigationCorrectionResponse( | 274 scoped_ptr<NavigationCorrectionResponse> ParseNavigationCorrectionResponse( |
276 const std::string raw_response) { | 275 const std::string raw_response) { |
277 // TODO(mmenke): Open source related protocol buffers and use them directly. | 276 // TODO(mmenke): Open source related protocol buffers and use them directly. |
278 scoped_ptr<base::Value> parsed = base::JSONReader::Read(raw_response); | 277 scoped_ptr<base::Value> parsed = base::JSONReader::Read(raw_response); |
279 scoped_ptr<NavigationCorrectionResponse> response( | 278 scoped_ptr<NavigationCorrectionResponse> response( |
280 new NavigationCorrectionResponse()); | 279 new NavigationCorrectionResponse()); |
281 base::JSONValueConverter<NavigationCorrectionResponse> converter; | 280 base::JSONValueConverter<NavigationCorrectionResponse> converter; |
282 if (!parsed || !converter.Convert(*parsed, response.get())) | 281 if (!parsed || !converter.Convert(*parsed, response.get())) |
283 response.reset(); | 282 response.reset(); |
284 return response; | 283 return response; |
285 } | 284 } |
286 | 285 |
287 void LogCorrectionTypeShown(int type_id) { | 286 void LogCorrectionTypeShown(int type_id) { |
288 UMA_HISTOGRAM_ENUMERATION( | 287 UMA_HISTOGRAM_ENUMERATION( |
289 "Net.ErrorPageCounts.NavigationCorrectionLinksShown", type_id, | 288 "Net.ErrorPageCounts.NavigationCorrectionLinksShown", type_id, |
290 kWebSearchQueryUMAId + 1); | 289 kWebSearchQueryUMAId + 1); |
291 } | 290 } |
292 | 291 |
293 scoped_ptr<ErrorPageParams> CreateErrorPageParams( | 292 scoped_ptr<ErrorPageParams> CreateErrorPageParams( |
294 const NavigationCorrectionResponse& response, | 293 const NavigationCorrectionResponse& response, |
295 const blink::WebURLError& error, | 294 const blink::WebURLError& error, |
296 const NetErrorHelperCore::NavigationCorrectionParams& correction_params, | 295 const NetErrorHelperCore::NavigationCorrectionParams& correction_params, |
297 const std::string& accept_languages, | |
298 bool is_rtl) { | 296 bool is_rtl) { |
299 // Version of URL for display in suggestions. It has to be sanitized first | 297 // Version of URL for display in suggestions. It has to be sanitized first |
300 // because any received suggestions will be relative to the sanitized URL. | 298 // because any received suggestions will be relative to the sanitized URL. |
301 base::string16 original_url_for_display = | 299 base::string16 original_url_for_display = |
302 FormatURLForDisplay(SanitizeURL(GURL(error.unreachableURL)), is_rtl, | 300 FormatURLForDisplay(SanitizeURL(GURL(error.unreachableURL)), is_rtl); |
303 accept_languages); | |
304 | 301 |
305 scoped_ptr<ErrorPageParams> params(new ErrorPageParams()); | 302 scoped_ptr<ErrorPageParams> params(new ErrorPageParams()); |
306 params->override_suggestions.reset(new base::ListValue()); | 303 params->override_suggestions.reset(new base::ListValue()); |
307 scoped_ptr<base::ListValue> parsed_corrections(new base::ListValue()); | 304 scoped_ptr<base::ListValue> parsed_corrections(new base::ListValue()); |
308 for (ScopedVector<NavigationCorrection>::const_iterator it = | 305 for (ScopedVector<NavigationCorrection>::const_iterator it = |
309 response.corrections.begin(); | 306 response.corrections.begin(); |
310 it != response.corrections.end(); ++it) { | 307 it != response.corrections.end(); ++it) { |
311 // Doesn't seem like a good idea to show these. | 308 // Doesn't seem like a good idea to show these. |
312 if ((*it)->is_porn || (*it)->is_soft_porn) | 309 if ((*it)->is_porn || (*it)->is_soft_porn) |
313 continue; | 310 continue; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
347 kCorrectionResourceTable[correction_index].correction_type) { | 344 kCorrectionResourceTable[correction_index].correction_type) { |
348 continue; | 345 continue; |
349 } | 346 } |
350 base::DictionaryValue* suggest = new base::DictionaryValue(); | 347 base::DictionaryValue* suggest = new base::DictionaryValue(); |
351 suggest->SetString("summary", | 348 suggest->SetString("summary", |
352 l10n_util::GetStringUTF16( | 349 l10n_util::GetStringUTF16( |
353 kCorrectionResourceTable[correction_index].resource_id)); | 350 kCorrectionResourceTable[correction_index].resource_id)); |
354 suggest->SetString("urlCorrection", (*it)->url_correction); | 351 suggest->SetString("urlCorrection", (*it)->url_correction); |
355 suggest->SetString( | 352 suggest->SetString( |
356 "urlCorrectionForDisplay", | 353 "urlCorrectionForDisplay", |
357 FormatURLForDisplay(GURL((*it)->url_correction), is_rtl, | 354 FormatURLForDisplay(GURL((*it)->url_correction), is_rtl)); |
358 accept_languages)); | |
359 suggest->SetString("originalUrlForDisplay", original_url_for_display); | 355 suggest->SetString("originalUrlForDisplay", original_url_for_display); |
360 suggest->SetInteger("trackingId", tracking_id); | 356 suggest->SetInteger("trackingId", tracking_id); |
361 suggest->SetInteger("type", static_cast<int>(correction_index)); | 357 suggest->SetInteger("type", static_cast<int>(correction_index)); |
362 | 358 |
363 params->override_suggestions->Append(suggest); | 359 params->override_suggestions->Append(suggest); |
364 LogCorrectionTypeShown(static_cast<int>(correction_index)); | 360 LogCorrectionTypeShown(static_cast<int>(correction_index)); |
365 break; | 361 break; |
366 } | 362 } |
367 } | 363 } |
368 | 364 |
(...skipping 444 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
813 // by a DNS error update. | 809 // by a DNS error update. |
814 delegate_->UpdateErrorPage( | 810 delegate_->UpdateErrorPage( |
815 GetUpdatedError(committed_error_page_info_->error), | 811 GetUpdatedError(committed_error_page_info_->error), |
816 committed_error_page_info_->was_failed_post, | 812 committed_error_page_info_->was_failed_post, |
817 can_show_network_diagnostics_dialog_, | 813 can_show_network_diagnostics_dialog_, |
818 HasOfflinePages()); | 814 HasOfflinePages()); |
819 } | 815 } |
820 | 816 |
821 void NetErrorHelperCore::OnNavigationCorrectionsFetched( | 817 void NetErrorHelperCore::OnNavigationCorrectionsFetched( |
822 const std::string& corrections, | 818 const std::string& corrections, |
823 const std::string& accept_languages, | |
824 bool is_rtl) { | 819 bool is_rtl) { |
825 // Loading suggestions only starts when a blank error page finishes loading, | 820 // Loading suggestions only starts when a blank error page finishes loading, |
826 // and is cancelled with a new load. | 821 // and is cancelled with a new load. |
827 DCHECK(!pending_error_page_info_); | 822 DCHECK(!pending_error_page_info_); |
828 DCHECK(committed_error_page_info_->is_finished_loading); | 823 DCHECK(committed_error_page_info_->is_finished_loading); |
829 DCHECK(committed_error_page_info_->needs_load_navigation_corrections); | 824 DCHECK(committed_error_page_info_->needs_load_navigation_corrections); |
830 DCHECK(committed_error_page_info_->navigation_correction_params); | 825 DCHECK(committed_error_page_info_->navigation_correction_params); |
831 | 826 |
832 pending_error_page_info_.reset(new ErrorPageInfo( | 827 pending_error_page_info_.reset(new ErrorPageInfo( |
833 committed_error_page_info_->error, | 828 committed_error_page_info_->error, |
834 committed_error_page_info_->was_failed_post, | 829 committed_error_page_info_->was_failed_post, |
835 committed_error_page_info_->was_ignoring_cache)); | 830 committed_error_page_info_->was_ignoring_cache)); |
836 pending_error_page_info_->navigation_correction_response = | 831 pending_error_page_info_->navigation_correction_response = |
837 ParseNavigationCorrectionResponse(corrections); | 832 ParseNavigationCorrectionResponse(corrections); |
838 | 833 |
839 std::string error_html; | 834 std::string error_html; |
840 scoped_ptr<ErrorPageParams> params; | 835 scoped_ptr<ErrorPageParams> params; |
841 if (pending_error_page_info_->navigation_correction_response) { | 836 if (pending_error_page_info_->navigation_correction_response) { |
842 // Copy navigation correction parameters used for the request, so tracking | 837 // Copy navigation correction parameters used for the request, so tracking |
843 // requests can still be sent if the configuration changes. | 838 // requests can still be sent if the configuration changes. |
844 pending_error_page_info_->navigation_correction_params.reset( | 839 pending_error_page_info_->navigation_correction_params.reset( |
845 new NavigationCorrectionParams( | 840 new NavigationCorrectionParams( |
846 *committed_error_page_info_->navigation_correction_params)); | 841 *committed_error_page_info_->navigation_correction_params)); |
847 params = CreateErrorPageParams( | 842 params = CreateErrorPageParams( |
848 *pending_error_page_info_->navigation_correction_response, | 843 *pending_error_page_info_->navigation_correction_response, |
849 pending_error_page_info_->error, | 844 pending_error_page_info_->error, |
850 *pending_error_page_info_->navigation_correction_params, | 845 *pending_error_page_info_->navigation_correction_params, is_rtl); |
851 accept_languages, is_rtl); | |
852 delegate_->GenerateLocalizedErrorPage( | 846 delegate_->GenerateLocalizedErrorPage( |
853 pending_error_page_info_->error, | 847 pending_error_page_info_->error, |
854 pending_error_page_info_->was_failed_post, | 848 pending_error_page_info_->was_failed_post, |
855 can_show_network_diagnostics_dialog_, HasOfflinePages(), | 849 can_show_network_diagnostics_dialog_, HasOfflinePages(), |
856 std::move(params), &pending_error_page_info_->reload_button_in_page, | 850 std::move(params), &pending_error_page_info_->reload_button_in_page, |
857 &pending_error_page_info_->show_saved_copy_button_in_page, | 851 &pending_error_page_info_->show_saved_copy_button_in_page, |
858 &pending_error_page_info_->show_cached_copy_button_in_page, | 852 &pending_error_page_info_->show_cached_copy_button_in_page, |
859 &pending_error_page_info_->show_offline_pages_button_in_page, | 853 &pending_error_page_info_->show_offline_pages_button_in_page, |
860 &error_html); | 854 &error_html); |
861 } else { | 855 } else { |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1071 | 1065 |
1072 bool NetErrorHelperCore::HasOfflinePages() const { | 1066 bool NetErrorHelperCore::HasOfflinePages() const { |
1073 #if defined(OS_ANDROID) | 1067 #if defined(OS_ANDROID) |
1074 return has_offline_pages_; | 1068 return has_offline_pages_; |
1075 #else | 1069 #else |
1076 return false; | 1070 return false; |
1077 #endif // defined(OS_ANDROID) | 1071 #endif // defined(OS_ANDROID) |
1078 } | 1072 } |
1079 | 1073 |
1080 } // namespace error_page | 1074 } // namespace error_page |
OLD | NEW |