Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(255)

Side by Side Diff: chrome/renderer/net/net_error_helper.cc

Issue 207553008: Surface button for loading stale cache copy on net error page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Incorporated comments. Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698