summaryrefslogtreecommitdiffstats
path: root/src/core/renderer/content_renderer_client_qt.cpp
diff options
context:
space:
mode:
authorPierre Rossi <pierre.rossi@digia.com>2014-06-17 16:15:35 +0200
committerPierre Rossi <pierre.rossi@gmail.com>2014-08-04 17:22:42 +0200
commit7d90b44187cfa8f93df6a6341da41cf8192d18ad (patch)
tree47384a6837549df6c80759ae270bbd8651477bde /src/core/renderer/content_renderer_client_qt.cpp
parent35d66ce48248f07759cbe2a17437198e8e1948ed (diff)
Expose better error information in loadRequest.
Use the chromium localized error strings for that purpose, otherwise the error description is always empty. While we're at it, let's tap into the chromium error pages, which should hopefully make sense for most errors, and add some static asserts to check that the qt quick enum and the core one are in sync. Change-Id: Icf8fa7c3bf4a674c60a10950422135fb6930447a Reviewed-by: Andras Becsi <andras.becsi@digia.com>
Diffstat (limited to 'src/core/renderer/content_renderer_client_qt.cpp')
-rw-r--r--src/core/renderer/content_renderer_client_qt.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp
index 0b497a004..ecb469a9d 100644
--- a/src/core/renderer/content_renderer_client_qt.cpp
+++ b/src/core/renderer/content_renderer_client_qt.cpp
@@ -41,10 +41,55 @@
#include "renderer/content_renderer_client_qt.h"
+#include "base/strings/utf_string_conversions.h"
+#include "chrome/common/localized_error.h"
+#include "content/public/renderer/render_thread.h"
+#include "net/base/net_errors.h"
+#include "third_party/WebKit/public/platform/WebURLError.h"
+#include "third_party/WebKit/public/platform/WebURLRequest.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/base/webui/jstemplate_builder.h"
+
#include "renderer/qt_render_view_observer.h"
+#include "grit/renderer_resources.h"
+
+static const char kHttpErrorDomain[] = "http";
+
void ContentRendererClientQt::RenderViewCreated(content::RenderView* render_view)
{
// RenderViewObserver destroys itself with its RenderView.
new QtRenderViewObserver(render_view);
}
+
+// To tap into the chromium localized strings. Ripped from the chrome layer (highly simplified).
+void ContentRendererClientQt::GetNavigationErrorStrings(blink::WebFrame *frame, const blink::WebURLRequest &failed_request, const blink::WebURLError &error, const std::string &accept_languages, std::string *error_html, base::string16 *error_description)
+{
+ Q_UNUSED(frame)
+
+ const bool isPost = EqualsASCII(failed_request.httpMethod(), "POST");
+
+ if (error_html) {
+ // Use a local error page.
+ int resource_id;
+ base::DictionaryValue error_strings;
+
+ const std::string locale = content::RenderThread::Get()->GetLocale();
+ // TODO(elproxy): We could potentially get better diagnostics here by first calling NetErrorHelper::GetErrorStringsForDnsProbe
+ LocalizedError::GetStrings(error.reason, error.domain.utf8(),
+ error.unreachableURL, isPost, locale,
+ accept_languages, &error_strings);
+ resource_id = IDR_NET_ERROR_HTML;
+
+
+ const base::StringPiece template_html(ui::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 = webui::GetTemplatesHtml(template_html, &error_strings, "t");
+ }
+
+ if (error_description) {
+ *error_description = LocalizedError::GetErrorDetails(error, isPost);
+ }
+}