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/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/i18n/rtl.h" | 10 #include "base/i18n/rtl.h" |
11 #include "base/json/json_writer.h" | 11 #include "base/json/json_writer.h" |
12 #include "base/metrics/histogram.h" | 12 #include "base/metrics/histogram.h" |
13 #include "base/strings/utf_string_conversions.h" | 13 #include "base/strings/utf_string_conversions.h" |
14 #include "base/values.h" | 14 #include "base/values.h" |
15 #include "chrome/common/chrome_switches.h" | 15 #include "chrome/common/chrome_switches.h" |
16 #include "chrome/common/localized_error.h" | 16 #include "chrome/common/localized_error.h" |
17 #include "chrome/common/net/net_error_info.h" | 17 #include "chrome/common/net/net_error_info.h" |
18 #include "chrome/common/render_messages.h" | 18 #include "chrome/common/render_messages.h" |
19 #include "chrome/renderer/net/error_cache_load.h" | 19 #include "chrome/renderer/net/net_error_page_controller.h" |
20 #include "content/public/common/content_client.h" | 20 #include "content/public/common/content_client.h" |
21 #include "content/public/common/url_constants.h" | 21 #include "content/public/common/url_constants.h" |
22 #include "content/public/renderer/content_renderer_client.h" | 22 #include "content/public/renderer/content_renderer_client.h" |
23 #include "content/public/renderer/render_frame.h" | 23 #include "content/public/renderer/render_frame.h" |
24 #include "content/public/renderer/render_thread.h" | 24 #include "content/public/renderer/render_thread.h" |
25 #include "content/public/renderer/render_view.h" | 25 #include "content/public/renderer/render_view.h" |
26 #include "content/public/renderer/resource_fetcher.h" | 26 #include "content/public/renderer/resource_fetcher.h" |
27 #include "grit/renderer_resources.h" | 27 #include "grit/renderer_resources.h" |
28 #include "ipc/ipc_message.h" | 28 #include "ipc/ipc_message.h" |
29 #include "ipc/ipc_message_macros.h" | 29 #include "ipc/ipc_message_macros.h" |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
88 CommandLine* command_line = CommandLine::ForCurrentProcess(); | 88 CommandLine* command_line = CommandLine::ForCurrentProcess(); |
89 bool auto_reload_enabled = | 89 bool auto_reload_enabled = |
90 command_line->HasSwitch(switches::kEnableOfflineAutoReload); | 90 command_line->HasSwitch(switches::kEnableOfflineAutoReload); |
91 core_.set_auto_reload_enabled(auto_reload_enabled); | 91 core_.set_auto_reload_enabled(auto_reload_enabled); |
92 } | 92 } |
93 | 93 |
94 NetErrorHelper::~NetErrorHelper() { | 94 NetErrorHelper::~NetErrorHelper() { |
95 RenderThread::Get()->RemoveObserver(this); | 95 RenderThread::Get()->RemoveObserver(this); |
96 } | 96 } |
97 | 97 |
| 98 void NetErrorHelper::ReloadButtonPressed() { |
| 99 core_.ExecuteButtonPress(NetErrorHelperCore::RELOAD_BUTTON); |
| 100 } |
| 101 |
| 102 void NetErrorHelper::LoadStaleButtonPressed() { |
| 103 core_.ExecuteButtonPress(NetErrorHelperCore::LOAD_STALE_BUTTON); |
| 104 } |
| 105 |
| 106 void NetErrorHelper::MoreButtonPressed() { |
| 107 core_.ExecuteButtonPress(NetErrorHelperCore::MORE_BUTTON); |
| 108 } |
| 109 |
98 void NetErrorHelper::DidStartProvisionalLoad() { | 110 void NetErrorHelper::DidStartProvisionalLoad() { |
99 blink::WebFrame* frame = render_frame()->GetWebFrame(); | 111 blink::WebFrame* frame = render_frame()->GetWebFrame(); |
100 core_.OnStartLoad(GetFrameType(frame), GetLoadingPageType(frame)); | 112 core_.OnStartLoad(GetFrameType(frame), GetLoadingPageType(frame)); |
101 } | 113 } |
102 | 114 |
103 void NetErrorHelper::DidCommitProvisionalLoad(bool is_new_navigation) { | 115 void NetErrorHelper::DidCommitProvisionalLoad(bool is_new_navigation) { |
104 blink::WebFrame* frame = render_frame()->GetWebFrame(); | 116 blink::WebFrame* frame = render_frame()->GetWebFrame(); |
105 core_.OnCommitLoad(GetFrameType(frame)); | 117 core_.OnCommitLoad(GetFrameType(frame)); |
106 } | 118 } |
107 | 119 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 | 153 |
142 bool NetErrorHelper::ShouldSuppressErrorPage(blink::WebFrame* frame, | 154 bool NetErrorHelper::ShouldSuppressErrorPage(blink::WebFrame* frame, |
143 const GURL& url) { | 155 const GURL& url) { |
144 return core_.ShouldSuppressErrorPage(GetFrameType(frame), url); | 156 return core_.ShouldSuppressErrorPage(GetFrameType(frame), url); |
145 } | 157 } |
146 | 158 |
147 void NetErrorHelper::GenerateLocalizedErrorPage( | 159 void NetErrorHelper::GenerateLocalizedErrorPage( |
148 const blink::WebURLError& error, | 160 const blink::WebURLError& error, |
149 bool is_failed_post, | 161 bool is_failed_post, |
150 scoped_ptr<LocalizedError::ErrorPageParams> params, | 162 scoped_ptr<LocalizedError::ErrorPageParams> params, |
| 163 bool* reload_button_shown, |
| 164 bool* load_stale_button_shown, |
151 std::string* error_html) const { | 165 std::string* error_html) const { |
152 error_html->clear(); | 166 error_html->clear(); |
153 | 167 |
154 int resource_id = IDR_NET_ERROR_HTML; | 168 int resource_id = IDR_NET_ERROR_HTML; |
155 const base::StringPiece template_html( | 169 const base::StringPiece template_html( |
156 ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id)); | 170 ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id)); |
157 if (template_html.empty()) { | 171 if (template_html.empty()) { |
158 NOTREACHED() << "unable to load template."; | 172 NOTREACHED() << "unable to load template."; |
159 } else { | 173 } else { |
160 base::DictionaryValue error_strings; | 174 base::DictionaryValue error_strings; |
161 LocalizedError::GetStrings(error.reason, error.domain.utf8(), | 175 LocalizedError::GetStrings(error.reason, error.domain.utf8(), |
162 error.unreachableURL, is_failed_post, | 176 error.unreachableURL, is_failed_post, |
163 error.staleCopyInCache, | 177 error.staleCopyInCache && !is_failed_post, |
164 RenderThread::Get()->GetLocale(), | 178 RenderThread::Get()->GetLocale(), |
165 render_frame()->GetRenderView()-> | 179 render_frame()->GetRenderView()-> |
166 GetAcceptLanguages(), | 180 GetAcceptLanguages(), |
167 params.Pass(), &error_strings); | 181 params.Pass(), &error_strings); |
| 182 *reload_button_shown = error_strings.Get("reloadButton", NULL); |
| 183 *load_stale_button_shown = error_strings.Get("staleLoadButton", NULL); |
| 184 |
168 // "t" is the id of the template's root node. | 185 // "t" is the id of the template's root node. |
169 *error_html = webui::GetTemplatesHtml(template_html, &error_strings, "t"); | 186 *error_html = webui::GetTemplatesHtml(template_html, &error_strings, "t"); |
170 } | 187 } |
171 } | 188 } |
172 | 189 |
173 void NetErrorHelper::LoadErrorPageInMainFrame(const std::string& html, | 190 void NetErrorHelper::LoadErrorPageInMainFrame(const std::string& html, |
174 const GURL& failed_url) { | 191 const GURL& failed_url) { |
175 blink::WebView* web_view = render_frame()->GetRenderView()->GetWebView(); | 192 blink::WebView* web_view = render_frame()->GetRenderView()->GetWebView(); |
176 if (!web_view) | 193 if (!web_view) |
177 return; | 194 return; |
178 blink::WebFrame* frame = web_view->mainFrame(); | 195 blink::WebFrame* frame = web_view->mainFrame(); |
179 frame->loadHTMLString(html, GURL(kUnreachableWebDataURL), failed_url, true); | 196 frame->loadHTMLString(html, GURL(kUnreachableWebDataURL), failed_url, true); |
180 } | 197 } |
181 | 198 |
182 void NetErrorHelper::EnableStaleLoadBindings(const GURL& page_url) { | 199 void NetErrorHelper::EnablePageHelperFunctions() { |
183 ErrorCacheLoad::Install(render_frame(), page_url); | 200 NetErrorPageController::Install(render_frame()); |
184 } | 201 } |
185 | 202 |
186 void NetErrorHelper::UpdateErrorPage(const blink::WebURLError& error, | 203 void NetErrorHelper::UpdateErrorPage(const blink::WebURLError& error, |
187 bool is_failed_post) { | 204 bool is_failed_post) { |
188 base::DictionaryValue error_strings; | 205 base::DictionaryValue error_strings; |
189 LocalizedError::GetStrings(error.reason, | 206 LocalizedError::GetStrings(error.reason, |
190 error.domain.utf8(), | 207 error.domain.utf8(), |
191 error.unreachableURL, | 208 error.unreachableURL, |
192 is_failed_post, | 209 is_failed_post, |
193 error.staleCopyInCache, | 210 error.staleCopyInCache && !is_failed_post, |
194 RenderThread::Get()->GetLocale(), | 211 RenderThread::Get()->GetLocale(), |
195 render_frame()->GetRenderView()-> | 212 render_frame()->GetRenderView()-> |
196 GetAcceptLanguages(), | 213 GetAcceptLanguages(), |
197 scoped_ptr<LocalizedError::ErrorPageParams>(), | 214 scoped_ptr<LocalizedError::ErrorPageParams>(), |
198 &error_strings); | 215 &error_strings); |
199 | 216 |
200 std::string json; | 217 std::string json; |
201 JSONWriter::Write(&error_strings, &json); | 218 JSONWriter::Write(&error_strings, &json); |
202 | 219 |
203 std::string js = "if (window.updateForDnsProbe) " | 220 std::string js = "if (window.updateForDnsProbe) " |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 } | 253 } |
237 | 254 |
238 void NetErrorHelper::CancelFetchNavigationCorrections() { | 255 void NetErrorHelper::CancelFetchNavigationCorrections() { |
239 correction_fetcher_.reset(); | 256 correction_fetcher_.reset(); |
240 } | 257 } |
241 | 258 |
242 void NetErrorHelper::ReloadPage() { | 259 void NetErrorHelper::ReloadPage() { |
243 render_frame()->GetWebFrame()->reload(false); | 260 render_frame()->GetWebFrame()->reload(false); |
244 } | 261 } |
245 | 262 |
| 263 void NetErrorHelper::LoadPageFromCache(const GURL& page_url) { |
| 264 blink::WebFrame* web_frame = render_frame()->GetWebFrame(); |
| 265 DCHECK(!EqualsASCII(web_frame->dataSource()->request().httpMethod(), "POST")); |
| 266 |
| 267 blink::WebURLRequest request(page_url); |
| 268 request.setCachePolicy(blink::WebURLRequest::ReturnCacheDataDontLoad); |
| 269 |
| 270 web_frame->loadRequest(request); |
| 271 } |
| 272 |
246 void NetErrorHelper::OnNetErrorInfo(int status_num) { | 273 void NetErrorHelper::OnNetErrorInfo(int status_num) { |
247 DCHECK(status_num >= 0 && status_num < chrome_common_net::DNS_PROBE_MAX); | 274 DCHECK(status_num >= 0 && status_num < chrome_common_net::DNS_PROBE_MAX); |
248 | 275 |
249 DVLOG(1) << "Received status " << DnsProbeStatusToString(status_num); | 276 DVLOG(1) << "Received status " << DnsProbeStatusToString(status_num); |
250 | 277 |
251 core_.OnNetErrorInfo(static_cast<DnsProbeStatus>(status_num)); | 278 core_.OnNetErrorInfo(static_cast<DnsProbeStatus>(status_num)); |
252 } | 279 } |
253 | 280 |
254 void NetErrorHelper::OnSetNavigationCorrectionInfo( | 281 void NetErrorHelper::OnSetNavigationCorrectionInfo( |
255 const GURL& navigation_correction_url, | 282 const GURL& navigation_correction_url, |
(...skipping 15 matching lines...) Expand all Loading... |
271 if (!response.isNull() && response.httpStatusCode() == 200) { | 298 if (!response.isNull() && response.httpStatusCode() == 200) { |
272 core_.OnNavigationCorrectionsFetched( | 299 core_.OnNavigationCorrectionsFetched( |
273 data, render_frame()->GetRenderView()->GetAcceptLanguages(), | 300 data, render_frame()->GetRenderView()->GetAcceptLanguages(), |
274 LocaleIsRTL()); | 301 LocaleIsRTL()); |
275 } else { | 302 } else { |
276 core_.OnNavigationCorrectionsFetched( | 303 core_.OnNavigationCorrectionsFetched( |
277 "", render_frame()->GetRenderView()->GetAcceptLanguages(), | 304 "", render_frame()->GetRenderView()->GetAcceptLanguages(), |
278 LocaleIsRTL()); | 305 LocaleIsRTL()); |
279 } | 306 } |
280 } | 307 } |
OLD | NEW |