diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp
index 1fdab6a52a8e22dbd4b2ce2c1bd9ff65c9b58c2a..64f7fb5beddf826e761e0b24566bd7a7306125c3 100644
--- a/src/webengine/api/qquickwebengineview.cpp
+++ b/src/webengine/api/qquickwebengineview.cpp
@@ -255,8 +255,8 @@ bool QQuickWebEngineViewPrivate::contextMenuRequested(const WebEngineContextMenu
         ui()->addMenuItem(item, QQuickWebEngineView::tr("Reload"), QStringLiteral("view-refresh"));
 
         item = new MenuItemHandler(menu);
-        QObject::connect(item, &MenuItemHandler::triggered, q, &QQuickWebEngineView::viewSource);
-        ui()->addMenuItem(item, QQuickWebEngineView::tr("View Page Source"), QStringLiteral("view-source"), q->canViewSource());
+        QObject::connect(item, &MenuItemHandler::triggered, [q] { q->triggerWebAction(QQuickWebEngineView::ViewSource); });
+        ui()->addMenuItem(item, QQuickWebEngineView::tr("View Page Source"), QStringLiteral("view-source"), adapter->canViewSource());
     } else {
         item = new MenuItemHandler(menu);
         QObject::connect(item, &MenuItemHandler::triggered, [q] { q->triggerWebAction(QQuickWebEngineView::Copy); });
@@ -1328,18 +1328,6 @@ void QQuickWebEngineView::replaceMisspelledWord(const QString &replacement)
     d->adapter->replaceMisspelling(replacement);
 }
 
-void QQuickWebEngineView::viewSource()
-{
-    Q_D(QQuickWebEngineView);
-    d->adapter->viewSource();
-}
-
-bool QQuickWebEngineView::canViewSource() const
-{
-    Q_D(const QQuickWebEngineView);
-    return d->adapter->canViewSource();
-}
-
 bool QQuickWebEngineView::isFullScreen() const
 {
     Q_D(const QQuickWebEngineView);
@@ -1689,6 +1677,9 @@ void QQuickWebEngineView::triggerWebAction(WebAction action)
     case SavePage:
         d->adapter->save();
         break;
+    case ViewSource:
+        d->adapter->viewSource();
+        break;
     default:
         Q_UNREACHABLE();
     }
diff --git a/src/webengine/api/qquickwebengineview_p.h b/src/webengine/api/qquickwebengineview_p.h
index 64894d88d09951ff7b0d99ac54e7468e9a78ecfa..16c4799b598188b70ed0bcb96ebbd12581df66e5 100644
--- a/src/webengine/api/qquickwebengineview_p.h
+++ b/src/webengine/api/qquickwebengineview_p.h
@@ -123,7 +123,6 @@ class Q_WEBENGINE_PRIVATE_EXPORT QQuickWebEngineView : public QQuickItem {
     Q_PROPERTY(bool audioMuted READ isAudioMuted WRITE setAudioMuted NOTIFY audioMutedChanged FINAL REVISION 3)
     Q_PROPERTY(bool recentlyAudible READ recentlyAudible NOTIFY recentlyAudibleChanged FINAL REVISION 3)
     Q_PROPERTY(uint webChannelWorld READ webChannelWorld WRITE setWebChannelWorld NOTIFY webChannelWorldChanged REVISION 3)
-    Q_PROPERTY(bool canViewSource READ canViewSource FINAL REVISION 4)
 
 #ifdef ENABLE_QML_TESTSUPPORT_API
     Q_PROPERTY(QQuickWebEngineTestSupport *testSupport READ testSupport WRITE setTestSupport FINAL)
@@ -150,7 +149,6 @@ public:
     void setBackgroundColor(const QColor &color);
     QSizeF contentsSize() const;
     QPointF scrollPosition() const;
-    bool canViewSource() const;
 
     // must match WebContentsAdapterClient::NavigationRequestAction
     enum NavigationRequestAction {
@@ -247,6 +245,7 @@ public:
         RequestClose,
         Unselect,
         SavePage,
+        ViewSource,
         WebActionCount
     };
     Q_ENUM(WebAction)
@@ -477,7 +476,6 @@ public Q_SLOTS:
     Q_REVISION(3) void printToPdf(const QString &filePath, PrintedPageSizeId pageSizeId = PrintedPageSizeId::A4, PrintedPageOrientation orientation = PrintedPageOrientation::Portrait);
     Q_REVISION(3) void printToPdf(const QJSValue &callback, PrintedPageSizeId pageSizeId = PrintedPageSizeId::A4, PrintedPageOrientation orientation = PrintedPageOrientation::Portrait);
     Q_REVISION(4) void replaceMisspelledWord(const QString &replacement);
-    Q_REVISION(4) void viewSource();
 
 private Q_SLOTS:
     void lazyInitialize();
diff --git a/src/webengine/doc/src/qtwebengine-features.qdoc b/src/webengine/doc/src/qtwebengine-features.qdoc
index 48f1536b4ec2d225dfd45fbb689e251ef2a30eb3..5ba3f23b8e606e0725f13d763010b3841d26e5dc 100644
--- a/src/webengine/doc/src/qtwebengine-features.qdoc
+++ b/src/webengine/doc/src/qtwebengine-features.qdoc
@@ -306,8 +306,7 @@
     Qt WebEngine supports viewing the HTML source of a web page.
 
     This feature can be used from custom menus or assigned to custom events.
-    For more information, see WebEngineView::viewSource, WebEngineView::canViewSource,
-    QWebEnginePage::viewSource, and QWebEnginePage::canViewSource.
+    For more information, see WebEngineView::WebAction, and QWebEnginePage::WebAction.
 
     This feature can be tested by opening a web page in \l{WebEngine Widgets
     Simple Browser Example}{Simple Browser} or \l{WebEngine Quick Nano Browser}
diff --git a/src/webengine/doc/src/webengineview.qdoc b/src/webengine/doc/src/webengineview.qdoc
index 82fd66989eeb4f85cbf98133dfb09d661b05bc7c..512f6dfda7dc46f9e70cdbf061f12f48cd305f3e 100644
--- a/src/webengine/doc/src/webengineview.qdoc
+++ b/src/webengine/doc/src/webengineview.qdoc
@@ -806,6 +806,8 @@
             Exit the fullscreen mode. (Added in Qt 5.6)
     \value  WebEngineView.SavePage
             Save the current web page to disk. (Added in Qt 5.7)
+    \value  WebEngineView.ViewSource
+            Show the source of the current page in a new tab. (Added in Qt 5.8)
 
     \omitvalue WebActionCount
 */
@@ -1144,23 +1146,6 @@
     delay}, from the moment the audio is paused.
 */
 
-/*!
-    \qmlmethod void WebEngineView::viewSource()
-    \since QtWebEngine 1.4
-
-    Shows the source of the current page in a new tab.
-
-    \sa canViewSource
-*/
-
-/*!
-    \qmlproperty bool WebEngineView::canViewSource
-    \brief This property holds whether the source for the current page can be viewed.
-    \since QtWebEngine 1.4
-
-    \sa viewSource()
-*/
-
 /*!
     \qmlsignal WebEngineView::authenticationDialogRequested(AuthenticationDialogRequest request)
     \since QtWebEngine 1.4
diff --git a/src/webenginewidgets/api/qwebenginepage.cpp b/src/webenginewidgets/api/qwebenginepage.cpp
index 34784c50700324b357e8896fc34f80a5b0c19f5f..1004b3e924f83d83be6da437270c506ee5be2cc5 100644
--- a/src/webenginewidgets/api/qwebenginepage.cpp
+++ b/src/webenginewidgets/api/qwebenginepage.cpp
@@ -1889,31 +1889,6 @@ const QWebEngineContextMenuData &QWebEnginePage::contextMenuData() const
     return d->contextData;
 }
 
-/*!
-    \since 5.8
-
-    Shows the source of the current page in a new tab.
-
-    \sa canViewSource
-*/
-void QWebEnginePage::viewSource()
-{
-    triggerAction(QWebEnginePage::ViewSource);
-}
-
-/*!
-    \property QWebEnginePage::canViewSource
-    \brief whether the source for the current page can be viewed.
-    \since 5.8
-
-    \sa viewSource()
-*/
-bool QWebEnginePage::canViewSource() const
-{
-    Q_D(const QWebEnginePage);
-    return d->adapter->canViewSource();
-}
-
 QT_END_NAMESPACE
 
 #include "moc_qwebenginepage.cpp"
diff --git a/src/webenginewidgets/api/qwebenginepage.h b/src/webenginewidgets/api/qwebenginepage.h
index d283f6aef7083f2298e304bf0552998446e786a9..e85f9b30ec57bdfedbb8a633f89d54d3119987ae 100644
--- a/src/webenginewidgets/api/qwebenginepage.h
+++ b/src/webenginewidgets/api/qwebenginepage.h
@@ -84,7 +84,6 @@ class QWEBENGINEWIDGETS_EXPORT QWebEnginePage : public QObject {
     Q_PROPERTY(QPointF scrollPosition READ scrollPosition NOTIFY scrollPositionChanged)
     Q_PROPERTY(bool audioMuted READ isAudioMuted WRITE setAudioMuted NOTIFY audioMutedChanged)
     Q_PROPERTY(bool recentlyAudible READ recentlyAudible NOTIFY recentlyAudibleChanged)
-    Q_PROPERTY(bool canViewSource READ canViewSource)
 
 public:
     enum WebAction {
@@ -292,8 +291,6 @@ public:
 #endif // QT_NO_PRINTER
 
     const QWebEngineContextMenuData &contextMenuData() const;
-    void viewSource();
-    bool canViewSource() const;
 
 Q_SIGNALS:
     void loadStarted();
diff --git a/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc b/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc
index 560d4a2e4cf4eeb93d7e6d57806aa8eb9b17e401..58abc9fa187f71e9024be0dc249bc17606e4e748 100644
--- a/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc
+++ b/src/webenginewidgets/doc/src/qwebenginepage_lgpl.qdoc
@@ -156,7 +156,7 @@
     \value Unselect Clear the current selection. (Added in Qt 5.7)
     \value SavePage Save the current page to disk. MHTML is the default format that is used to store
            the web page on disk. (Added in Qt 5.7)
-    \value ViewSource Shows the source of the current page in a new tab. (Added in Qt 5.8)
+    \value ViewSource Show the source of the current page in a new tab. (Added in Qt 5.8)
 
     \omitvalue WebActionCount
 
diff --git a/tests/auto/quick/qmltests/data/tst_viewSource.qml b/tests/auto/quick/qmltests/data/tst_viewSource.qml
index 746bfcfb30f7f76bd17958cd850bf1028fc57e02..79b097b80f27c2619a6c002e16b052c9a902e25f 100644
--- a/tests/auto/quick/qmltests/data/tst_viewSource.qml
+++ b/tests/auto/quick/qmltests/data/tst_viewSource.qml
@@ -75,10 +75,11 @@ TestWebEngineView {
             webEngineView.url = Qt.resolvedUrl("test1.html");
             verify(webEngineView.waitForLoadSucceeded());
             compare(webEngineView.title, "Test page 1");
-            verify(webEngineView.canViewSource, true);
+            // FIXME(pvarga): Reintroduce this check in the fix for QTBUG-56117
+            //verify(webEngineView.canViewSource, true);
 
             titleChangedSpy.clear();
-            webEngineView.viewSource();
+            webEngineView.triggerWebAction(WebEngineView.ViewSource);
             tryCompare(newViewRequestedSpy, "count", 1);
             verify(webEngineView.waitForLoadSucceeded());
             // The first titleChanged signal is emitted by adoptWebContents()
@@ -86,7 +87,8 @@ TestWebEngineView {
 
             compare(viewRequest.destination, WebEngineView.NewViewInTab);
             verify(viewRequest.userInitiated);
-            verify(!webEngineView.canViewSource);
+            // FIXME(pvarga): Reintroduce this check in the fix for QTBUG-56117
+            //verify(!webEngineView.canViewSource);
 
             compare(webEngineView.title, "test1.html");
             compare(webEngineView.url, "view-source:" + Qt.resolvedUrl("test1.html"));
@@ -120,7 +122,8 @@ TestWebEngineView {
 
             compare(webEngineView.url, row.url);
             compare(webEngineView.title, row.title);
-            verify(!webEngineView.canViewSource);
+            // FIXME(pvarga): Reintroduce this check in the fix for QTBUG-56117
+            //verify(!webEngineView.canViewSource);
         }
     }
 }
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
index 4c3a47bed4aaa021bebd5e27f7c9c1d2f18b0824..f7c0914bc36270a62d6a3bf80ce113ee0e735bc9 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
@@ -4982,15 +4982,15 @@ void tst_QWebEnginePage::viewSource()
     page.load(url);
     QTRY_COMPARE(loadFinishedSpy.count(), 1);
     QCOMPARE(page.title(), QStringLiteral("Test page 1"));
-    QVERIFY(page.canViewSource());
+    QVERIFY(page.action(QWebEnginePage::ViewSource)->isEnabled());
 
-    page.viewSource();
+    page.triggerAction(QWebEnginePage::ViewSource);
     QTRY_COMPARE(windowCreatedSpy.count(), 1);
     QCOMPARE(page.createdWindows.size(), 1);
 
     QTRY_COMPARE(page.createdWindows[0]->url().toString(), QStringLiteral("view-source:%1").arg(url.toString()));
     QTRY_COMPARE(page.createdWindows[0]->title(), QStringLiteral("view-source:%1").arg(url.toString()));
-    QVERIFY(!page.createdWindows[0]->canViewSource());
+    QVERIFY(!page.createdWindows[0]->action(QWebEnginePage::ViewSource)->isEnabled());
 }
 
 void tst_QWebEnginePage::viewSourceURL_data()
@@ -5035,7 +5035,7 @@ void tst_QWebEnginePage::viewSourceURL()
     QCOMPARE(arguments.at(0).toBool(), loadSucceed);
     QCOMPARE(page->url(), url);
     QCOMPARE(page->title(), title);
-    QVERIFY(!page->canViewSource());
+    QVERIFY(!page->action(QWebEnginePage::ViewSource)->isEnabled());
 
     delete page;
 }