| /**************************************************************************** |
| ** |
| ** Copyright (C) 2016 The Qt Company Ltd. |
| ** Contact: https://www.qt.io/licensing/ |
| ** |
| ** This file is part of the QtWebEngine module of the Qt Toolkit. |
| ** |
| ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ |
| ** Commercial License Usage |
| ** Licensees holding valid commercial Qt licenses may use this file in |
| ** accordance with the commercial license agreement provided with the |
| ** Software or, alternatively, in accordance with the terms contained in |
| ** a written agreement between you and The Qt Company. For licensing terms |
| ** and conditions see https://www.qt.io/terms-conditions. For further |
| ** information use the contact form at https://www.qt.io/contact-us. |
| ** |
| ** GNU General Public License Usage |
| ** Alternatively, this file may be used under the terms of the GNU |
| ** General Public License version 3 as published by the Free Software |
| ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT |
| ** included in the packaging of this file. Please review the following |
| ** information to ensure the GNU General Public License requirements will |
| ** be met: https://www.gnu.org/licenses/gpl-3.0.html. |
| ** |
| ** $QT_END_LICENSE$ |
| ** |
| ****************************************************************************/ |
| |
| import QtQuick 2.0 |
| import QtTest 1.0 |
| import QtWebEngine 1.2 |
| |
| TestWebEngineView { |
| id: webEngineView |
| width: 400 |
| height: 300 |
| |
| property var loadRequestArray: [] |
| |
| onLoadingChanged: { |
| loadRequestArray.push({ |
| "status": loadRequest.status, |
| "url": loadRequest.url, |
| "activeUrl": webEngineView.url |
| }); |
| } |
| |
| function clear() { |
| // Reset loadStatus for waitForLoadSucceded |
| webEngineView.loadStatus = null; |
| loadRequestArray = []; |
| } |
| |
| TestCase { |
| name: "WebEngineViewLoadUrl" |
| when: windowShown |
| |
| function init() { |
| webEngineView.clear(); |
| } |
| |
| function test_loadIgnoreEmptyUrl() { |
| var url = Qt.resolvedUrl("test1.html"); |
| webEngineView.url = url; |
| verify(webEngineView.waitForLoadSucceeded()); |
| compare(loadRequestArray[0].status, WebEngineView.LoadStartedStatus); |
| compare(loadRequestArray[1].status, WebEngineView.LoadSucceededStatus); |
| compare(loadRequestArray.length, 2); |
| compare(webEngineView.url, url); |
| webEngineView.clear(); |
| |
| var lastUrl = webEngineView.url; |
| webEngineView.url = ""; |
| wait(1000); |
| compare(loadRequestArray.length, 0); |
| compare(webEngineView.url, lastUrl); |
| webEngineView.clear(); |
| |
| var aboutBlank = "about:blank"; |
| webEngineView.url = aboutBlank; |
| verify(webEngineView.waitForLoadSucceeded()); |
| compare(loadRequestArray[0].status, WebEngineView.LoadStartedStatus); |
| compare(loadRequestArray[1].status, WebEngineView.LoadSucceededStatus); |
| compare(loadRequestArray.length, 2); |
| compare(webEngineView.url, aboutBlank); |
| webEngineView.clear(); |
| |
| // It shouldn't interrupt any ongoing load when an empty url is used. |
| var watchProgress = true; |
| var handleLoadProgress = function() { |
| if (webEngineView.loadProgress != 100) { |
| webEngineView.url = ""; |
| watchProgress = false; |
| } |
| } |
| webEngineView.loadProgressChanged.connect(handleLoadProgress); |
| webEngineView.url = url; |
| verify(webEngineView.waitForLoadSucceeded()); |
| compare(loadRequestArray[0].status, WebEngineView.LoadStartedStatus); |
| compare(loadRequestArray[1].status, WebEngineView.LoadSucceededStatus); |
| compare(loadRequestArray.length, 2); |
| verify(!watchProgress); |
| compare(webEngineView.url, url); |
| webEngineView.loadProgressChanged.disconnect(handleLoadProgress); |
| webEngineView.clear(); |
| } |
| |
| function test_urlProperty() { |
| WebEngine.settings.errorPageEnabled = false; |
| |
| var loadRequest = null; |
| |
| // Test succeeded load |
| var url = Qt.resolvedUrl("test1.html"); |
| webEngineView.url = url; |
| tryCompare(loadRequestArray, "length", 2); |
| |
| loadRequest = loadRequestArray[0]; |
| compare(loadRequest.status, WebEngineView.LoadStartedStatus); |
| compare(loadRequest.activeUrl, url); |
| loadRequest = loadRequestArray[1]; |
| compare(loadRequest.status, WebEngineView.LoadSucceededStatus); |
| compare(loadRequest.activeUrl, url); |
| webEngineView.clear(); |
| |
| // Test failed load |
| var bogusSite = "http://www.somesitethatdoesnotexist.abc/"; |
| webEngineView.url = bogusSite; |
| tryCompare(loadRequestArray, "length", 2, 12000); |
| |
| loadRequest = loadRequestArray[0]; |
| compare(loadRequest.status, WebEngineView.LoadStartedStatus); |
| compare(loadRequest.activeUrl, bogusSite); |
| loadRequest = loadRequestArray[1]; |
| compare(loadRequest.status, WebEngineView.LoadFailedStatus); |
| compare(loadRequest.activeUrl, url); |
| webEngineView.clear(); |
| |
| // Test page redirection |
| var redirectUrl = Qt.resolvedUrl("redirect.html"); |
| webEngineView.url = redirectUrl; |
| tryCompare(loadRequestArray, "length", 4); |
| |
| loadRequest = loadRequestArray[0]; |
| compare(loadRequest.status, WebEngineView.LoadStartedStatus); |
| compare(loadRequest.activeUrl, redirectUrl); |
| loadRequest = loadRequestArray[1]; |
| compare(loadRequest.status, WebEngineView.LoadSucceededStatus); |
| compare(loadRequest.activeUrl, redirectUrl); |
| loadRequest = loadRequestArray[2]; |
| compare(loadRequest.status, WebEngineView.LoadStartedStatus); |
| compare(loadRequest.activeUrl, redirectUrl); |
| loadRequest = loadRequestArray[3]; |
| compare(loadRequest.status, WebEngineView.LoadSucceededStatus); |
| compare(loadRequest.activeUrl, url); |
| webEngineView.clear(); |
| |
| // Test clicking on a hyperlink |
| var linkUrl = Qt.resolvedUrl("link.html"); |
| webEngineView.url = linkUrl; |
| tryCompare(loadRequestArray, "length", 2); |
| |
| loadRequest = loadRequestArray[0]; |
| compare(loadRequest.status, WebEngineView.LoadStartedStatus); |
| compare(loadRequest.activeUrl, linkUrl); |
| loadRequest = loadRequestArray[1]; |
| compare(loadRequest.status, WebEngineView.LoadSucceededStatus); |
| compare(loadRequest.activeUrl, linkUrl); |
| webEngineView.clear(); |
| |
| var lastUrl = webEngineView.url; |
| mouseClick(webEngineView, 10, 10, Qt.LeftButton, Qt.NoModifiers, 50); |
| tryCompare(loadRequestArray, "length", 2); |
| |
| loadRequest = loadRequestArray[0]; |
| compare(loadRequest.status, WebEngineView.LoadStartedStatus); |
| compare(loadRequest.url, url); |
| compare(loadRequest.activeUrl, lastUrl); |
| loadRequest = loadRequestArray[1]; |
| compare(loadRequest.status, WebEngineView.LoadSucceededStatus); |
| compare(loadRequest.url, url); |
| compare(loadRequest.activeUrl, url); |
| webEngineView.clear(); |
| } |
| |
| function test_loadDataUrl() { |
| WebEngine.settings.errorPageEnabled = false; |
| |
| var loadRequest = null; |
| |
| // Test load of a data URL |
| var dataUrl = "data:text/html,foo"; |
| webEngineView.url = dataUrl; |
| tryCompare(loadRequestArray, "length", 2); |
| |
| loadRequest = loadRequestArray[0]; |
| compare(loadRequest.status, WebEngineView.LoadStartedStatus); |
| compare(loadRequest.activeUrl, dataUrl); |
| loadRequest = loadRequestArray[1]; |
| compare(loadRequest.status, WebEngineView.LoadSucceededStatus); |
| compare(loadRequest.activeUrl, dataUrl); |
| webEngineView.clear(); |
| |
| // Test loadHtml after a failed load |
| var aboutBlank = "about:blank"; |
| webEngineView.url = aboutBlank; // Reset from previous test |
| tryCompare(loadRequestArray, "length", 2); |
| webEngineView.clear(); |
| |
| var bogusSite = "http://www.somesitethatdoesnotexist.abc/"; |
| var handleLoadFailed = function(loadRequest) { |
| if (loadRequest.status === WebEngineView.LoadFailedStatus) { |
| // loadHtml constructs data URL |
| webEngineView.loadHtml("load failed", bogusSite); |
| compare(loadRequest.url, bogusSite); |
| } |
| } |
| webEngineView.loadingChanged.connect(handleLoadFailed); |
| webEngineView.url = bogusSite |
| tryCompare(loadRequestArray, "length", 4, 30000); |
| webEngineView.loadingChanged.disconnect(handleLoadFailed); |
| |
| loadRequest = loadRequestArray[0]; |
| compare(loadRequest.status, WebEngineView.LoadStartedStatus); |
| compare(loadRequest.activeUrl, bogusSite); |
| loadRequest = loadRequestArray[1]; |
| compare(loadRequest.status, WebEngineView.LoadFailedStatus); |
| // Since the load did not succeed the active url is the |
| // URL of the previous successful load. |
| compare(loadRequest.activeUrl, aboutBlank); |
| loadRequest = loadRequestArray[2]; |
| compare(loadRequest.status, WebEngineView.LoadStartedStatus); |
| compare(loadRequest.activeUrl, "data:text/html;charset=UTF-8,load failed"); |
| compare(loadRequest.url, "data:text/html;charset=UTF-8,load failed") |
| loadRequest = loadRequestArray[3]; |
| compare(loadRequest.status, WebEngineView.LoadSucceededStatus); |
| compare(loadRequest.activeUrl, bogusSite); |
| compare(loadRequest.url, bogusSite) |
| webEngineView.clear(); |
| } |
| |
| function test_QTBUG_56661() { |
| var url = Qt.resolvedUrl("test1.html"); |
| |
| // Warm up phase |
| webEngineView.url = url; |
| verify(webEngineView.waitForLoadSucceeded()); |
| |
| // Load data URL |
| var dataUrl = "data:text/html,foo"; |
| webEngineView.url = dataUrl; |
| verify(webEngineView.waitForLoadSucceeded()); |
| |
| // WebEngine should not try to execute user scripts in the |
| // render frame of the warm up phase otherwise the renderer |
| // crashes. |
| webEngineView.url = url; |
| verify(webEngineView.waitForLoadSucceeded()); |
| } |
| |
| function test_stopStatus() { |
| var loadRequest = null; |
| var initialUrl = Qt.resolvedUrl("test1.html"); |
| var stoppedUrl = Qt.resolvedUrl("test2.html"); |
| |
| // Warm up phase |
| webEngineView.url = initialUrl; |
| verify(webEngineView.waitForLoadSucceeded()); |
| webEngineView.loadStatus = null; |
| loadRequestArray = []; |
| |
| // Stop load |
| var handleLoadStarted = function(loadRequest) { |
| if (loadRequest.status === WebEngineView.LoadStartedStatus) |
| webEngineView.stop(); |
| } |
| webEngineView.loadingChanged.connect(handleLoadStarted); |
| webEngineView.url = stoppedUrl; |
| tryCompare(loadRequestArray, "length", 2); |
| webEngineView.loadingChanged.disconnect(handleLoadStarted); |
| |
| loadRequest = loadRequestArray[0]; |
| compare(loadRequest.status, WebEngineView.LoadStartedStatus); |
| compare(loadRequest.url, stoppedUrl); |
| compare(loadRequest.activeUrl, stoppedUrl); |
| loadRequest = loadRequestArray[1]; |
| compare(loadRequest.status, WebEngineView.LoadStoppedStatus); |
| compare(loadRequest.url, stoppedUrl); |
| compare(loadRequest.activeUrl, initialUrl); |
| webEngineView.clear(); |
| } |
| |
| function test_loadStartedAfterInPageNavigation() { |
| webEngineView.url = Qt.resolvedUrl("test4.html"); |
| verify(webEngineView.waitForLoadSucceeded()); |
| compare(webEngineView.loadProgress, 100); |
| compare(loadRequestArray.length, 2); |
| compare(loadRequestArray[0].status, WebEngineView.LoadStartedStatus); |
| compare(loadRequestArray[1].status, WebEngineView.LoadSucceededStatus); |
| |
| // In-page navigation. |
| webEngineView.url = Qt.resolvedUrl("test4.html#content"); |
| // In-page navigation doesn't trigger load succeeded, wait for load progress instead. |
| tryCompare(webEngineView, "loadProgress", 100); |
| compare(loadRequestArray.length, 3); |
| compare(loadRequestArray[2].status, WebEngineView.LoadStartedStatus); |
| |
| // Load after in-page navigation. |
| webEngineView.url = Qt.resolvedUrl("test4.html"); |
| verify(webEngineView.waitForLoadSucceeded()); |
| compare(webEngineView.loadProgress, 100); |
| compare(loadRequestArray.length, 5); |
| compare(loadRequestArray[3].status, WebEngineView.LoadStartedStatus); |
| compare(loadRequestArray[4].status, WebEngineView.LoadSucceededStatus); |
| |
| webEngineView.clear(); |
| } |
| } |
| } |