diff --git a/src/networkaccessmanager.cpp b/src/networkaccessmanager.cpp index 8c154686..a57a7ff1 100644 --- a/src/networkaccessmanager.cpp +++ b/src/networkaccessmanager.cpp @@ -90,10 +90,11 @@ void JsNetworkRequest::abort() } -void JsNetworkRequest::changeUrl(const QString& url) +void JsNetworkRequest::changeUrl(const QString& address) { if (m_networkRequest) { - m_networkRequest->setUrl(QUrl(url)); + QUrl url = QUrl::fromEncoded(QByteArray(address.toAscii())); + m_networkRequest->setUrl(url); } } diff --git a/test/webpage-spec.js b/test/webpage-spec.js index ccb986d8..7ebf5213 100644 --- a/test/webpage-spec.js +++ b/test/webpage-spec.js @@ -1151,6 +1151,41 @@ describe("WebPage object", function() { }); }); + + it("should change a url request with an encoded query string", function() { + var page = new require('webpage').create(); + + var server = require('webserver').create(); + server.listen(12345, function(request, response) { + // echo received request headers in response body + response.write(JSON.stringify(request.headers)); + response.close(); + }); + + var url = "http://localhost:12345/cdn-cgi/pe/bag?r%5B%5D=http%3A%2F%2Fwww.example.org%2Fcdn-cgi%2Fnexp%2Fabv%3D927102467%2Fapps%2Fabetterbrowser.js"; + + var handled = false; + runs(function() { + expect(handled).toEqual(false); + + page.onResourceRequested = function(requestData, request) { + request.changeUrl(requestData.url); + }; + + page.onResourceReceived = function(data) { + if (data['stage'] === 'end') { + expect(data.url).toEqual(url); + } + }; + + page.open(url, function (status) { + expect(status == 'success').toEqual(true); + handled = true; + }); + }); + }); + + it('should able to abort a network request', function() { var page = require('webpage').create(); var url = 'http://phantomjs.org';