| Index: chrome/renderer/chrome_content_renderer_client.cc
|
| diff --git a/chrome/renderer/chrome_content_renderer_client.cc b/chrome/renderer/chrome_content_renderer_client.cc
|
| index 561574d781d6709e42d5e24451694bd928dd13df..0c1057428fb6be9a19ffb25fdda7bfcce236b0fc 100644
|
| --- a/chrome/renderer/chrome_content_renderer_client.cc
|
| +++ b/chrome/renderer/chrome_content_renderer_client.cc
|
| @@ -533,47 +533,56 @@ bool ChromeContentRendererClient::HasErrorPage(int http_status_code,
|
| return true;
|
| }
|
|
|
| -std::string ChromeContentRendererClient::GetNavigationErrorHtml(
|
| - const WebURLRequest& failed_request,
|
| - const WebURLError& error) {
|
| - GURL failed_url = error.unreachableURL;
|
| - std::string html;
|
| +void ChromeContentRendererClient::GetNavigationErrorStrings(
|
| + const WebKit::WebURLRequest& failed_request,
|
| + const WebKit::WebURLError& error,
|
| + std::string* error_html,
|
| + string16* error_description) {
|
| + const GURL failed_url = error.unreachableURL;
|
| const Extension* extension = NULL;
|
| + const bool is_repost =
|
| + error.reason == net::ERR_CACHE_MISS &&
|
| + error.domain == WebString::fromUTF8(net::kErrorDomain) &&
|
| + EqualsASCII(failed_request.httpMethod(), "POST");
|
|
|
| - // Use a local error page.
|
| - int resource_id;
|
| - DictionaryValue error_strings;
|
| if (failed_url.is_valid() && !failed_url.SchemeIs(chrome::kExtensionScheme))
|
| extension = extension_dispatcher_->extensions()->GetByURL(failed_url);
|
| - if (extension) {
|
| - LocalizedError::GetAppErrorStrings(error, failed_url, extension,
|
| - &error_strings);
|
|
|
| - // TODO(erikkay): Should we use a different template for different
|
| - // error messages?
|
| - resource_id = IDR_ERROR_APP_HTML;
|
| - } else {
|
| - if (error.domain == WebString::fromUTF8(net::kErrorDomain) &&
|
| - error.reason == net::ERR_CACHE_MISS &&
|
| - EqualsASCII(failed_request.httpMethod(), "POST")) {
|
| - LocalizedError::GetFormRepostStrings(failed_url, &error_strings);
|
| + if (error_html) {
|
| + // Use a local error page.
|
| + int resource_id;
|
| + DictionaryValue error_strings;
|
| + if (extension) {
|
| + LocalizedError::GetAppErrorStrings(error, failed_url, extension,
|
| + &error_strings);
|
| +
|
| + // TODO(erikkay): Should we use a different template for different
|
| + // error messages?
|
| + resource_id = IDR_ERROR_APP_HTML;
|
| } else {
|
| - LocalizedError::GetStrings(error, &error_strings);
|
| + if (is_repost) {
|
| + LocalizedError::GetFormRepostStrings(failed_url, &error_strings);
|
| + } else {
|
| + LocalizedError::GetStrings(error, &error_strings);
|
| + }
|
| + resource_id = IDR_NET_ERROR_HTML;
|
| }
|
| - resource_id = IDR_NET_ERROR_HTML;
|
| - }
|
|
|
| - const base::StringPiece template_html(
|
| - ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id));
|
| - if (template_html.empty()) {
|
| - NOTREACHED() << "unable to load template. ID: " << resource_id;
|
| - } else {
|
| - // "t" is the id of the templates root node.
|
| - html = jstemplate_builder::GetTemplatesHtml(
|
| - template_html, &error_strings, "t");
|
| + const base::StringPiece template_html(
|
| + ResourceBundle::GetSharedInstance().GetRawDataResource(resource_id));
|
| + if (template_html.empty()) {
|
| + NOTREACHED() << "unable to load template. ID: " << resource_id;
|
| + } else {
|
| + // "t" is the id of the templates root node.
|
| + *error_html = jstemplate_builder::GetTemplatesHtml(
|
| + template_html, &error_strings, "t");
|
| + }
|
| }
|
|
|
| - return html;
|
| + if (error_description) {
|
| + if (!extension && !is_repost)
|
| + *error_description = LocalizedError::GetErrorDetails(error);
|
| + }
|
| }
|
|
|
| bool ChromeContentRendererClient::RunIdleHandlerWhenWidgetsHidden() {
|
|
|