summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndras Becsi <andras.becsi@digia.com>2014-10-10 18:29:27 +0200
committerAndras Becsi <andras.becsi@digia.com>2014-10-14 12:06:10 +0200
commitf1e16024b7d608e5d4dc2144d2c97eca73c951ef (patch)
treeb9ded287ec69b49a3eede526628481a9af5d6f47
parent38e68ab97b6de2f66bd367785d71831d9a154687 (diff)
Add setting ErrorPageEnabled
This is required so that embedders can implement custom error pages, and is also needed for tests, where error-page loading has side-effects on subsequent page loads. Change-Id: I5ae276a58864a2fa9d7b608bea3340b482a92f4e Reviewed-by: Peter Varga <pvarga@inf.u-szeged.hu>
m---------src/3rdparty0
-rw-r--r--src/core/renderer/content_renderer_client_qt.cpp7
-rw-r--r--src/core/renderer/content_renderer_client_qt.h2
-rw-r--r--src/core/web_engine_settings.cpp2
-rw-r--r--src/core/web_engine_settings.h1
-rw-r--r--src/webengine/api/qquickwebenginesettings.cpp15
-rw-r--r--src/webengine/api/qquickwebenginesettings_p.h4
-rw-r--r--src/webenginewidgets/api/qwebenginesettings.cpp2
-rw-r--r--src/webenginewidgets/api/qwebenginesettings.h3
-rw-r--r--src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc1
-rw-r--r--tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp10
11 files changed, 43 insertions, 4 deletions
diff --git a/src/3rdparty b/src/3rdparty
-Subproject 1c64c9878f36c83b18c2e81aafe6eedc2a67488
+Subproject ec43e18d084a44ed6bb4378f05f5523606316c5
diff --git a/src/core/renderer/content_renderer_client_qt.cpp b/src/core/renderer/content_renderer_client_qt.cpp
index 6d4315b64..451aaac4b 100644
--- a/src/core/renderer/content_renderer_client_qt.cpp
+++ b/src/core/renderer/content_renderer_client_qt.cpp
@@ -39,6 +39,7 @@
#include "base/strings/utf_string_conversions.h"
#include "chrome/common/localized_error.h"
#include "components/visitedlink/renderer/visitedlink_slave.h"
+#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_thread.h"
#include "content/public/renderer/render_view.h"
#include "net/base/net_errors.h"
@@ -46,6 +47,7 @@
#include "third_party/WebKit/public/platform/WebURLRequest.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/base/webui/jstemplate_builder.h"
+#include "webkit/common/webpreferences.h"
#include "renderer/qt_render_view_observer.h"
@@ -84,6 +86,11 @@ bool ContentRendererClientQt::HasErrorPage(int httpStatusCode, std::string *erro
return true;
}
+bool ContentRendererClientQt::ShouldSuppressErrorPage(content::RenderFrame *frame, const GURL &)
+{
+ return !(frame->GetWebkitPreferences().enable_error_page);
+}
+
// To tap into the chromium localized strings. Ripped from the chrome layer (highly simplified).
void ContentRendererClientQt::GetNavigationErrorStrings(content::RenderView* render_view, blink::WebFrame *frame, const blink::WebURLRequest &failed_request, const blink::WebURLError &error, std::string *error_html, base::string16 *error_description)
{
diff --git a/src/core/renderer/content_renderer_client_qt.h b/src/core/renderer/content_renderer_client_qt.h
index 386495e20..505262fc8 100644
--- a/src/core/renderer/content_renderer_client_qt.h
+++ b/src/core/renderer/content_renderer_client_qt.h
@@ -50,7 +50,7 @@ public:
virtual void RenderThreadStarted() Q_DECL_OVERRIDE;
virtual void RenderViewCreated(content::RenderView *render_view) Q_DECL_OVERRIDE;
- virtual bool ShouldSuppressErrorPage(content::RenderFrame *, const GURL &) Q_DECL_OVERRIDE { return false; }
+ virtual bool ShouldSuppressErrorPage(content::RenderFrame *, const GURL &) Q_DECL_OVERRIDE;
virtual bool HasErrorPage(int httpStatusCode, std::string *errorDomain) Q_DECL_OVERRIDE;
virtual void GetNavigationErrorStrings(content::RenderView* render_view, blink::WebFrame* frame, const blink::WebURLRequest& failed_request
, const blink::WebURLError& error, std::string* error_html, base::string16* error_description) Q_DECL_OVERRIDE;
diff --git a/src/core/web_engine_settings.cpp b/src/core/web_engine_settings.cpp
index 03f746f41..9b070d3b2 100644
--- a/src/core/web_engine_settings.cpp
+++ b/src/core/web_engine_settings.cpp
@@ -213,6 +213,7 @@ void WebEngineSettings::initDefaults()
m_attributes.insert(LocalContentCanAccessFileUrls, true);
m_attributes.insert(HyperlinkAuditingEnabled, false);
m_attributes.insert(ScrollAnimatorEnabled, false);
+ m_attributes.insert(ErrorPageEnabled, true);
// Default fonts
QFont defaultFont;
@@ -276,6 +277,7 @@ void WebEngineSettings::applySettingsToWebPreferences(WebPreferences *prefs)
prefs->allow_file_access_from_file_urls = testAttribute(LocalContentCanAccessFileUrls);
prefs->hyperlink_auditing_enabled = testAttribute(HyperlinkAuditingEnabled);
prefs->enable_scroll_animator = testAttribute(ScrollAnimatorEnabled);
+ prefs->enable_error_page = testAttribute(ErrorPageEnabled);
// Fonts settings.
prefs->standard_font_family_map[webkit_glue::kCommonScript] = toString16(fontFamily(StandardFont));
diff --git a/src/core/web_engine_settings.h b/src/core/web_engine_settings.h
index b8d661fcc..c098f8ef4 100644
--- a/src/core/web_engine_settings.h
+++ b/src/core/web_engine_settings.h
@@ -74,6 +74,7 @@ public:
LocalContentCanAccessFileUrls,
HyperlinkAuditingEnabled,
ScrollAnimatorEnabled,
+ ErrorPageEnabled,
};
// Must match the values from the public API in qwebenginesettings.h.
diff --git a/src/webengine/api/qquickwebenginesettings.cpp b/src/webengine/api/qquickwebenginesettings.cpp
index aa6290aa8..7f36bad5e 100644
--- a/src/webengine/api/qquickwebenginesettings.cpp
+++ b/src/webengine/api/qquickwebenginesettings.cpp
@@ -140,6 +140,12 @@ bool QQuickWebEngineSettings::hyperlinkAuditingEnabled() const
return d->coreSettings->testAttribute(WebEngineSettings::HyperlinkAuditingEnabled);
}
+bool QQuickWebEngineSettings::errorPageEnabled() const
+{
+ Q_D(const QQuickWebEngineSettings);
+ return d->coreSettings->testAttribute(WebEngineSettings::ErrorPageEnabled);
+}
+
QString QQuickWebEngineSettings::defaultTextEncoding() const
{
Q_D(const QQuickWebEngineSettings);
@@ -239,6 +245,15 @@ void QQuickWebEngineSettings::setHyperlinkAuditingEnabled(bool on)
Q_EMIT hyperlinkAuditingEnabledChanged(on);
}
+void QQuickWebEngineSettings::setErrorPageEnabled(bool on)
+{
+ Q_D(QQuickWebEngineSettings);
+ bool wasOn = d->coreSettings->testAttribute(WebEngineSettings::ErrorPageEnabled);
+ d->coreSettings->setAttribute(WebEngineSettings::ErrorPageEnabled, on);
+ if (wasOn ^ on)
+ Q_EMIT errorPageEnabledChanged(on);
+}
+
void QQuickWebEngineSettings::setDefaultTextEncoding(QString encoding)
{
Q_D(QQuickWebEngineSettings);
diff --git a/src/webengine/api/qquickwebenginesettings_p.h b/src/webengine/api/qquickwebenginesettings_p.h
index 0fa44ef44..4a7c2f834 100644
--- a/src/webengine/api/qquickwebenginesettings_p.h
+++ b/src/webengine/api/qquickwebenginesettings_p.h
@@ -57,6 +57,7 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineSettings : public QObject {
Q_PROPERTY(bool spatialNavigationEnabled READ spatialNavigationEnabled WRITE setSpatialNavigationEnabled NOTIFY spatialNavigationEnabledChanged)
Q_PROPERTY(bool localContentCanAccessFileUrls READ localContentCanAccessFileUrls WRITE setLocalContentCanAccessFileUrls NOTIFY localContentCanAccessFileUrlsChanged)
Q_PROPERTY(bool hyperlinkAuditingEnabled READ hyperlinkAuditingEnabled WRITE setHyperlinkAuditingEnabled NOTIFY hyperlinkAuditingEnabledChanged)
+ Q_PROPERTY(bool errorPageEnabled READ errorPageEnabled WRITE setErrorPageEnabled NOTIFY errorPageEnabledChanged)
Q_PROPERTY(QString defaultTextEncoding READ defaultTextEncoding WRITE setDefaultTextEncoding NOTIFY defaultTextEncodingChanged)
public:
@@ -74,6 +75,7 @@ public:
bool spatialNavigationEnabled() const;
bool localContentCanAccessFileUrls() const;
bool hyperlinkAuditingEnabled() const;
+ bool errorPageEnabled() const;
QString defaultTextEncoding() const;
void setAutoLoadImages(bool on);
@@ -86,6 +88,7 @@ public:
void setSpatialNavigationEnabled(bool on);
void setLocalContentCanAccessFileUrls(bool on);
void setHyperlinkAuditingEnabled(bool on);
+ void setErrorPageEnabled(bool on);
void setDefaultTextEncoding(QString encoding);
signals:
@@ -99,6 +102,7 @@ signals:
void spatialNavigationEnabledChanged(bool on);
void localContentCanAccessFileUrlsChanged(bool on);
void hyperlinkAuditingEnabledChanged(bool on);
+ void errorPageEnabledChanged(bool on);
void defaultTextEncodingChanged(QString encoding);
private:
diff --git a/src/webenginewidgets/api/qwebenginesettings.cpp b/src/webenginewidgets/api/qwebenginesettings.cpp
index 9ade311fc..729a09f56 100644
--- a/src/webenginewidgets/api/qwebenginesettings.cpp
+++ b/src/webenginewidgets/api/qwebenginesettings.cpp
@@ -67,6 +67,8 @@ static WebEngineSettings::Attribute toWebEngineAttribute(QWebEngineSettings::Web
return WebEngineSettings::HyperlinkAuditingEnabled;
case QWebEngineSettings::ScrollAnimatorEnabled:
return WebEngineSettings::ScrollAnimatorEnabled;
+ case QWebEngineSettings::ErrorPageEnabled:
+ return WebEngineSettings::ErrorPageEnabled;
default:
return WebEngineSettings::UnsupportedInCoreSettings;
}
diff --git a/src/webenginewidgets/api/qwebenginesettings.h b/src/webenginewidgets/api/qwebenginesettings.h
index 68c0a6031..d9f57a935 100644
--- a/src/webenginewidgets/api/qwebenginesettings.h
+++ b/src/webenginewidgets/api/qwebenginesettings.h
@@ -54,7 +54,8 @@ public:
SpatialNavigationEnabled,
LocalContentCanAccessFileUrls,
HyperlinkAuditingEnabled,
- ScrollAnimatorEnabled
+ ScrollAnimatorEnabled,
+ ErrorPageEnabled
};
enum FontSize {
diff --git a/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc b/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc
index 3c420b805..ca9f0ca95 100644
--- a/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc
+++ b/src/webenginewidgets/doc/src/qwebenginesettings_lgpl.qdoc
@@ -115,6 +115,7 @@
about security origins and local vs. remote content see QWebEngineSecurityOrigin.
\value HyperlinkAuditingEnabled This setting enables support for the ping attribute for hyperlinks. It is disabled by default.
\value ScrollAnimatorEnabled This setting enables animated scrolling. It is disabled by default.
+ \value ErrorPageEnabled This setting enables built-in error pages of Chromium. It is enabled by default.
*/
/*!
diff --git a/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp b/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp
index 4b18f8e7a..218a8b579 100644
--- a/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp
+++ b/tests/auto/widgets/qwebengineframe/tst_qwebengineframe.cpp
@@ -32,6 +32,7 @@
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QTextCodec>
+#include <QWebEngineSettings>
#ifndef QT_NO_OPENSSL
#include <qsslerror.h>
#endif
@@ -124,6 +125,7 @@ void tst_QWebEngineFrame::init()
{
m_view = new QWebEngineView();
m_page = m_view->page();
+ m_page->settings()->setAttribute(QWebEngineSettings::ErrorPageEnabled, false);
}
void tst_QWebEngineFrame::cleanup()
@@ -347,7 +349,7 @@ void tst_QWebEngineFrame::requestedUrl()
void tst_QWebEngineFrame::requestedUrlAfterSetAndLoadFailures()
{
QWebEnginePage page;
-
+ page.settings()->setAttribute(QWebEngineSettings::ErrorPageEnabled, false);
QSignalSpy spy(&page, SIGNAL(loadFinished(bool)));
const QUrl first("http://abcdef.abcdef/");
@@ -365,7 +367,6 @@ void tst_QWebEngineFrame::requestedUrlAfterSetAndLoadFailures()
::waitForSignal(&page, SIGNAL(loadFinished(bool)));
QCOMPARE(spy.count(), 2);
QCOMPARE(page.url(), first);
- QEXPECT_FAIL("", "Slight change: The requestedUrl() function catches the error page's entry here thus it results the error page's requested url.", Continue);
QCOMPARE(page.requestedUrl(), second);
QVERIFY(!spy.at(1).first().toBool());
}
@@ -1369,14 +1370,18 @@ void tst_QWebEngineFrame::setUrlHistory()
QTRY_COMPARE(spy.count(), expectedLoadFinishedCount);
QCOMPARE(m_page->url(), aboutBlank);
QCOMPARE(m_page->requestedUrl(), QUrl());
+ QEXPECT_FAIL("", "Slight change: load(QUrl()) currently loads about:blank and nothing prevents it from being added to the history.", Continue);
QCOMPARE(collectHistoryUrls(m_page->history()), QStringList());
url = QUrl("http://non.existent/");
m_page->setUrl(url);
expectedLoadFinishedCount++;
QTRY_COMPARE(spy.count(), expectedLoadFinishedCount);
+ QEXPECT_FAIL("", "Needs to be investigated", Continue);
QCOMPARE(m_page->url(), url);
+ QEXPECT_FAIL("", "Needs to be investigated", Continue);
QCOMPARE(m_page->requestedUrl(), url);
+ QEXPECT_FAIL("", "Slight change: load(QUrl()) currently loads about:blank and nothing prevents it from being added to the history.", Continue);
QCOMPARE(collectHistoryUrls(m_page->history()), QStringList());
url = QUrl("qrc:/test1.html");
@@ -1385,6 +1390,7 @@ void tst_QWebEngineFrame::setUrlHistory()
QTRY_COMPARE(spy.count(), expectedLoadFinishedCount);
QCOMPARE(m_page->url(), url);
QCOMPARE(m_page->requestedUrl(), url);
+ QEXPECT_FAIL("", "Slight change: load(QUrl()) currently loads about:blank and nothing prevents it from being added to the history.", Continue);
QCOMPARE(collectHistoryUrls(m_page->history()), QStringList() << QStringLiteral("qrc:/test1.html"));
m_page->setUrl(QUrl());