зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1254484 - resolve relative presentation URL. r=smaug.
MozReview-Commit-ID: CF3WNGorwH1
This commit is contained in:
Родитель
51818f44f0
Коммит
2abb975dbb
|
@ -12,8 +12,11 @@
|
|||
#include "mozilla/dom/Promise.h"
|
||||
#include "mozIThirdPartyUtil.h"
|
||||
#include "nsCycleCollectionParticipant.h"
|
||||
#include "nsIDocument.h"
|
||||
#include "nsIPresentationService.h"
|
||||
#include "nsIURI.h"
|
||||
#include "nsIUUIDGenerator.h"
|
||||
#include "nsNetUtil.h"
|
||||
#include "nsSandboxFlags.h"
|
||||
#include "nsServiceManagerUtils.h"
|
||||
#include "PresentationAvailability.h"
|
||||
|
@ -31,6 +34,31 @@ NS_IMPL_RELEASE_INHERITED(PresentationRequest, DOMEventTargetHelper)
|
|||
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(PresentationRequest)
|
||||
NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
|
||||
|
||||
static nsresult
|
||||
GetAbsoluteURL(const nsAString& aUrl,
|
||||
nsIURI* aBaseUri,
|
||||
nsIDocument* aDocument,
|
||||
nsAString& aAbsoluteUrl)
|
||||
{
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
nsresult rv = NS_NewURI(getter_AddRefs(uri),
|
||||
aUrl,
|
||||
aDocument ? aDocument->GetDocumentCharacterSet().get()
|
||||
: nullptr,
|
||||
aBaseUri);
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsAutoCString spec;
|
||||
uri->GetSpec(spec);
|
||||
|
||||
aAbsoluteUrl = NS_ConvertUTF8toUTF16(spec);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/* static */ already_AddRefed<PresentationRequest>
|
||||
PresentationRequest::Constructor(const GlobalObject& aGlobal,
|
||||
const nsAString& aUrl,
|
||||
|
@ -48,7 +76,18 @@ PresentationRequest::Constructor(const GlobalObject& aGlobal,
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
RefPtr<PresentationRequest> request = new PresentationRequest(window, aUrl);
|
||||
// Resolve relative URL to absolute URL
|
||||
nsCOMPtr<nsIURI> baseUri = window->GetDocBaseURI();
|
||||
|
||||
nsAutoString absoluteUrl;
|
||||
nsresult rv = GetAbsoluteURL(aUrl, baseUri, window->GetExtantDoc(), absoluteUrl);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
aRv.Throw(NS_ERROR_UNEXPECTED);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RefPtr<PresentationRequest> request =
|
||||
new PresentationRequest(window, absoluteUrl);
|
||||
return NS_WARN_IF(!request->Init()) ? nullptr : request.forget();
|
||||
}
|
||||
|
||||
|
|
|
@ -108,7 +108,7 @@ function setup() {
|
|||
function testCreateRequest() {
|
||||
return new Promise(function(aResolve, aReject) {
|
||||
info('Sender: --- testCreateRequest ---');
|
||||
request = new PresentationRequest(receiverUrl);
|
||||
request = new PresentationRequest("file_presentation_1ua_receiver.html");
|
||||
request.getAvailability().then((aAvailability) => {
|
||||
aAvailability.onchange = function() {
|
||||
aAvailability.onchange = null;
|
||||
|
@ -132,6 +132,7 @@ function testStartConnection() {
|
|||
ok(connection, "Sender: Connection should be available.");
|
||||
ok(connection.id, "Sender: Connection ID should be set.");
|
||||
is(connection.state, "connecting", "The initial state should be connecting.");
|
||||
is(connection.url, receiverUrl, "request URL should be expanded to absolute URL");
|
||||
connection.onconnect = function() {
|
||||
connection.onconnect = null;
|
||||
is(connection.state, "connected", "Connection should be connected.");
|
||||
|
|
|
@ -22,7 +22,7 @@ var connection;
|
|||
|
||||
function testSetup() {
|
||||
return new Promise(function(aResolve, aReject) {
|
||||
request = new PresentationRequest("http://example.com");
|
||||
request = new PresentationRequest("http://example.com/");
|
||||
|
||||
request.getAvailability().then(
|
||||
function(aAvailability) {
|
||||
|
@ -184,7 +184,7 @@ function testReconnect() {
|
|||
|
||||
gScript.addMessageListener('start-reconnect', function startReconnectHandler(url) {
|
||||
gScript.removeMessageListener('start-reconnect', startReconnectHandler);
|
||||
is(url, "http://example.com", "URLs should be the same.")
|
||||
is(url, "http://example.com/", "URLs should be the same.")
|
||||
gScript.sendAsyncMessage('trigger-reconnected-acked', url);
|
||||
});
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ function testSetup() {
|
|||
}
|
||||
}, false);
|
||||
|
||||
request = new PresentationRequest("http://example.com");
|
||||
request = new PresentationRequest("http://example.com/");
|
||||
|
||||
request.getAvailability().then(
|
||||
function(aAvailability) {
|
||||
|
@ -301,7 +301,7 @@ function testReconnect() {
|
|||
info('--- testReconnect ---');
|
||||
gScript.addMessageListener('start-reconnect', function startReconnectHandler(url) {
|
||||
gScript.removeMessageListener('start-reconnect', startReconnectHandler);
|
||||
is(url, "http://example.com", "URLs should be the same.");
|
||||
is(url, "http://example.com/", "URLs should be the same.");
|
||||
gScript.sendAsyncMessage('trigger-reconnected-acked', url);
|
||||
});
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@ var connection;
|
|||
|
||||
function testSetup() {
|
||||
return new Promise(function(aResolve, aReject) {
|
||||
request = new PresentationRequest("http://example.com");
|
||||
request = new PresentationRequest("http://example.com/");
|
||||
|
||||
request.getAvailability().then(
|
||||
function(aAvailability) {
|
||||
|
@ -178,7 +178,7 @@ function testReconnect() {
|
|||
|
||||
gScript.addMessageListener('start-reconnect', function startReconnectHandler(url) {
|
||||
gScript.removeMessageListener('start-reconnect', startReconnectHandler);
|
||||
is(url, "http://example.com", "URLs should be the same.")
|
||||
is(url, "http://example.com/", "URLs should be the same.")
|
||||
gScript.sendAsyncMessage('trigger-reconnected-acked', url);
|
||||
});
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче