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 |