| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "chrome/renderer/net/net_error_helper.h" | 5 #include "chrome/renderer/net/net_error_helper.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 using chrome_common_net::DnsProbeStatus; | 31 using chrome_common_net::DnsProbeStatus; |
| 32 using chrome_common_net::DnsProbeStatusIsFinished; | 32 using chrome_common_net::DnsProbeStatusIsFinished; |
| 33 using chrome_common_net::DnsProbeStatusToString; | 33 using chrome_common_net::DnsProbeStatusToString; |
| 34 using content::RenderThread; | 34 using content::RenderThread; |
| 35 using content::RenderView; | 35 using content::RenderView; |
| 36 using content::RenderViewObserver; | 36 using content::RenderViewObserver; |
| 37 using content::kUnreachableWebDataURL; | 37 using content::kUnreachableWebDataURL; |
| 38 | 38 |
| 39 namespace { | 39 namespace { |
| 40 | 40 |
| 41 bool IsLoadingErrorPage(WebKit::WebFrame* frame) { | 41 bool IsLoadingErrorPage(blink::WebFrame* frame) { |
| 42 GURL url = frame->provisionalDataSource()->request().url(); | 42 GURL url = frame->provisionalDataSource()->request().url(); |
| 43 if (!url.is_valid()) | 43 if (!url.is_valid()) |
| 44 return false; | 44 return false; |
| 45 return url.spec() == kUnreachableWebDataURL; | 45 return url.spec() == kUnreachableWebDataURL; |
| 46 } | 46 } |
| 47 | 47 |
| 48 bool IsMainFrame(const WebKit::WebFrame* frame) { | 48 bool IsMainFrame(const blink::WebFrame* frame) { |
| 49 return !frame->parent(); | 49 return !frame->parent(); |
| 50 } | 50 } |
| 51 | 51 |
| 52 // Returns whether |net_error| is a DNS-related error (and therefore whether | 52 // Returns whether |net_error| is a DNS-related error (and therefore whether |
| 53 // the tab helper should start a DNS probe after receiving it.) | 53 // the tab helper should start a DNS probe after receiving it.) |
| 54 bool IsDnsError(const WebKit::WebURLError& error) { | 54 bool IsDnsError(const blink::WebURLError& error) { |
| 55 return std::string(error.domain.utf8()) == net::kErrorDomain && | 55 return std::string(error.domain.utf8()) == net::kErrorDomain && |
| 56 (error.reason == net::ERR_NAME_NOT_RESOLVED || | 56 (error.reason == net::ERR_NAME_NOT_RESOLVED || |
| 57 error.reason == net::ERR_NAME_RESOLUTION_FAILED); | 57 error.reason == net::ERR_NAME_RESOLUTION_FAILED); |
| 58 } | 58 } |
| 59 | 59 |
| 60 } // namespace | 60 } // namespace |
| 61 | 61 |
| 62 NetErrorHelper::NetErrorHelper(RenderView* render_view) | 62 NetErrorHelper::NetErrorHelper(RenderView* render_view) |
| 63 : RenderViewObserver(render_view), | 63 : RenderViewObserver(render_view), |
| 64 last_probe_status_(chrome_common_net::DNS_PROBE_POSSIBLE), | 64 last_probe_status_(chrome_common_net::DNS_PROBE_POSSIBLE), |
| 65 last_start_was_error_page_(false), | 65 last_start_was_error_page_(false), |
| 66 last_fail_was_dns_error_(false), | 66 last_fail_was_dns_error_(false), |
| 67 forwarding_probe_results_(false), | 67 forwarding_probe_results_(false), |
| 68 is_failed_post_(false) { | 68 is_failed_post_(false) { |
| 69 } | 69 } |
| 70 | 70 |
| 71 NetErrorHelper::~NetErrorHelper() { | 71 NetErrorHelper::~NetErrorHelper() { |
| 72 } | 72 } |
| 73 | 73 |
| 74 void NetErrorHelper::DidStartProvisionalLoad(WebKit::WebFrame* frame) { | 74 void NetErrorHelper::DidStartProvisionalLoad(blink::WebFrame* frame) { |
| 75 OnStartLoad(IsMainFrame(frame), IsLoadingErrorPage(frame)); | 75 OnStartLoad(IsMainFrame(frame), IsLoadingErrorPage(frame)); |
| 76 } | 76 } |
| 77 | 77 |
| 78 void NetErrorHelper::DidFailProvisionalLoad(WebKit::WebFrame* frame, | 78 void NetErrorHelper::DidFailProvisionalLoad(blink::WebFrame* frame, |
| 79 const WebKit::WebURLError& error) { | 79 const blink::WebURLError& error) { |
| 80 const bool main_frame = IsMainFrame(frame); | 80 const bool main_frame = IsMainFrame(frame); |
| 81 const bool dns_error = IsDnsError(error); | 81 const bool dns_error = IsDnsError(error); |
| 82 | 82 |
| 83 OnFailLoad(main_frame, dns_error); | 83 OnFailLoad(main_frame, dns_error); |
| 84 | 84 |
| 85 if (main_frame && dns_error) { | 85 if (main_frame && dns_error) { |
| 86 last_error_ = error; | 86 last_error_ = error; |
| 87 | 87 |
| 88 WebKit::WebDataSource* data_source = frame->provisionalDataSource(); | 88 blink::WebDataSource* data_source = frame->provisionalDataSource(); |
| 89 const WebKit::WebURLRequest& failed_request = data_source->request(); | 89 const blink::WebURLRequest& failed_request = data_source->request(); |
| 90 is_failed_post_ = EqualsASCII(failed_request.httpMethod(), "POST"); | 90 is_failed_post_ = EqualsASCII(failed_request.httpMethod(), "POST"); |
| 91 } | 91 } |
| 92 } | 92 } |
| 93 | 93 |
| 94 void NetErrorHelper::DidCommitProvisionalLoad(WebKit::WebFrame* frame, | 94 void NetErrorHelper::DidCommitProvisionalLoad(blink::WebFrame* frame, |
| 95 bool is_new_navigation) { | 95 bool is_new_navigation) { |
| 96 OnCommitLoad(IsMainFrame(frame)); | 96 OnCommitLoad(IsMainFrame(frame)); |
| 97 } | 97 } |
| 98 | 98 |
| 99 void NetErrorHelper::DidFinishLoad(WebKit::WebFrame* frame) { | 99 void NetErrorHelper::DidFinishLoad(blink::WebFrame* frame) { |
| 100 OnFinishLoad(IsMainFrame(frame)); | 100 OnFinishLoad(IsMainFrame(frame)); |
| 101 } | 101 } |
| 102 | 102 |
| 103 void NetErrorHelper::OnStartLoad(bool is_main_frame, bool is_error_page) { | 103 void NetErrorHelper::OnStartLoad(bool is_main_frame, bool is_error_page) { |
| 104 DVLOG(1) << "OnStartLoad(is_main_frame=" << is_main_frame | 104 DVLOG(1) << "OnStartLoad(is_main_frame=" << is_main_frame |
| 105 << ", is_error_page=" << is_error_page << ")"; | 105 << ", is_error_page=" << is_error_page << ")"; |
| 106 if (!is_main_frame) | 106 if (!is_main_frame) |
| 107 return; | 107 return; |
| 108 | 108 |
| 109 last_start_was_error_page_ = is_error_page; | 109 last_start_was_error_page_ = is_error_page; |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 163 IPC_BEGIN_MESSAGE_MAP(NetErrorHelper, message) | 163 IPC_BEGIN_MESSAGE_MAP(NetErrorHelper, message) |
| 164 IPC_MESSAGE_HANDLER(ChromeViewMsg_NetErrorInfo, OnNetErrorInfo) | 164 IPC_MESSAGE_HANDLER(ChromeViewMsg_NetErrorInfo, OnNetErrorInfo) |
| 165 IPC_MESSAGE_UNHANDLED(handled = false) | 165 IPC_MESSAGE_UNHANDLED(handled = false) |
| 166 IPC_END_MESSAGE_MAP() | 166 IPC_END_MESSAGE_MAP() |
| 167 | 167 |
| 168 return handled; | 168 return handled; |
| 169 } | 169 } |
| 170 | 170 |
| 171 // static | 171 // static |
| 172 bool NetErrorHelper::GetErrorStringsForDnsProbe( | 172 bool NetErrorHelper::GetErrorStringsForDnsProbe( |
| 173 WebKit::WebFrame* frame, | 173 blink::WebFrame* frame, |
| 174 const WebKit::WebURLError& error, | 174 const blink::WebURLError& error, |
| 175 bool is_failed_post, | 175 bool is_failed_post, |
| 176 const std::string& locale, | 176 const std::string& locale, |
| 177 const std::string& accept_languages, | 177 const std::string& accept_languages, |
| 178 base::DictionaryValue* error_strings) { | 178 base::DictionaryValue* error_strings) { |
| 179 if (!IsMainFrame(frame)) | 179 if (!IsMainFrame(frame)) |
| 180 return false; | 180 return false; |
| 181 | 181 |
| 182 if (!IsDnsError(error)) | 182 if (!IsDnsError(error)) |
| 183 return false; | 183 return false; |
| 184 | 184 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 206 | 206 |
| 207 last_probe_status_ = status; | 207 last_probe_status_ = status; |
| 208 | 208 |
| 209 if (forwarding_probe_results_) | 209 if (forwarding_probe_results_) |
| 210 UpdateErrorPage(); | 210 UpdateErrorPage(); |
| 211 } | 211 } |
| 212 | 212 |
| 213 void NetErrorHelper::UpdateErrorPage() { | 213 void NetErrorHelper::UpdateErrorPage() { |
| 214 DCHECK(forwarding_probe_results_); | 214 DCHECK(forwarding_probe_results_); |
| 215 | 215 |
| 216 WebKit::WebURLError error = GetUpdatedError(); | 216 blink::WebURLError error = GetUpdatedError(); |
| 217 base::DictionaryValue error_strings; | 217 base::DictionaryValue error_strings; |
| 218 LocalizedError::GetStrings(error.reason, | 218 LocalizedError::GetStrings(error.reason, |
| 219 error.domain.utf8(), | 219 error.domain.utf8(), |
| 220 error.unreachableURL, | 220 error.unreachableURL, |
| 221 is_failed_post_, | 221 is_failed_post_, |
| 222 RenderThread::Get()->GetLocale(), | 222 RenderThread::Get()->GetLocale(), |
| 223 render_view()->GetAcceptLanguages(), | 223 render_view()->GetAcceptLanguages(), |
| 224 &error_strings); | 224 &error_strings); |
| 225 | 225 |
| 226 std::string json; | 226 std::string json; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 239 DVLOG(2) << "New strings: " << js; | 239 DVLOG(2) << "New strings: " << js; |
| 240 | 240 |
| 241 string16 frame_xpath; | 241 string16 frame_xpath; |
| 242 render_view()->EvaluateScript(frame_xpath, js16, 0, false); | 242 render_view()->EvaluateScript(frame_xpath, js16, 0, false); |
| 243 | 243 |
| 244 UMA_HISTOGRAM_ENUMERATION("DnsProbe.ErrorPageUpdateStatus", | 244 UMA_HISTOGRAM_ENUMERATION("DnsProbe.ErrorPageUpdateStatus", |
| 245 last_probe_status_, | 245 last_probe_status_, |
| 246 chrome_common_net::DNS_PROBE_MAX); | 246 chrome_common_net::DNS_PROBE_MAX); |
| 247 } | 247 } |
| 248 | 248 |
| 249 WebKit::WebURLError NetErrorHelper::GetUpdatedError() const { | 249 blink::WebURLError NetErrorHelper::GetUpdatedError() const { |
| 250 // If a probe didn't run or wasn't conclusive, restore the original error. | 250 // If a probe didn't run or wasn't conclusive, restore the original error. |
| 251 if (last_probe_status_ == chrome_common_net::DNS_PROBE_NOT_RUN || | 251 if (last_probe_status_ == chrome_common_net::DNS_PROBE_NOT_RUN || |
| 252 last_probe_status_ == | 252 last_probe_status_ == |
| 253 chrome_common_net::DNS_PROBE_FINISHED_INCONCLUSIVE) { | 253 chrome_common_net::DNS_PROBE_FINISHED_INCONCLUSIVE) { |
| 254 return last_error_; | 254 return last_error_; |
| 255 } | 255 } |
| 256 | 256 |
| 257 WebKit::WebURLError error; | 257 blink::WebURLError error; |
| 258 error.domain = WebKit::WebString::fromUTF8( | 258 error.domain = blink::WebString::fromUTF8( |
| 259 chrome_common_net::kDnsProbeErrorDomain); | 259 chrome_common_net::kDnsProbeErrorDomain); |
| 260 error.reason = last_probe_status_; | 260 error.reason = last_probe_status_; |
| 261 error.unreachableURL = last_error_.unreachableURL; | 261 error.unreachableURL = last_error_.unreachableURL; |
| 262 | 262 |
| 263 return error; | 263 return error; |
| 264 } | 264 } |
| OLD | NEW |