Bug 1254484 - resolve relative presentation URL. r=smaug.
MozReview-Commit-ID: CF3WNGorwH1
This commit is contained in:
@@ -12,8 +12,11 @@
|
|||||||
#include "mozilla/dom/Promise.h"
|
#include "mozilla/dom/Promise.h"
|
||||||
#include "mozIThirdPartyUtil.h"
|
#include "mozIThirdPartyUtil.h"
|
||||||
#include "nsCycleCollectionParticipant.h"
|
#include "nsCycleCollectionParticipant.h"
|
||||||
|
#include "nsIDocument.h"
|
||||||
#include "nsIPresentationService.h"
|
#include "nsIPresentationService.h"
|
||||||
|
#include "nsIURI.h"
|
||||||
#include "nsIUUIDGenerator.h"
|
#include "nsIUUIDGenerator.h"
|
||||||
|
#include "nsNetUtil.h"
|
||||||
#include "nsSandboxFlags.h"
|
#include "nsSandboxFlags.h"
|
||||||
#include "nsServiceManagerUtils.h"
|
#include "nsServiceManagerUtils.h"
|
||||||
#include "PresentationAvailability.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_BEGIN_CYCLE_COLLECTION_INHERITED(PresentationRequest)
|
||||||
NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
|
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>
|
/* static */ already_AddRefed<PresentationRequest>
|
||||||
PresentationRequest::Constructor(const GlobalObject& aGlobal,
|
PresentationRequest::Constructor(const GlobalObject& aGlobal,
|
||||||
const nsAString& aUrl,
|
const nsAString& aUrl,
|
||||||
@@ -48,7 +76,18 @@ PresentationRequest::Constructor(const GlobalObject& aGlobal,
|
|||||||
return nullptr;
|
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();
|
return NS_WARN_IF(!request->Init()) ? nullptr : request.forget();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ function setup() {
|
|||||||
function testCreateRequest() {
|
function testCreateRequest() {
|
||||||
return new Promise(function(aResolve, aReject) {
|
return new Promise(function(aResolve, aReject) {
|
||||||
info('Sender: --- testCreateRequest ---');
|
info('Sender: --- testCreateRequest ---');
|
||||||
request = new PresentationRequest(receiverUrl);
|
request = new PresentationRequest("file_presentation_1ua_receiver.html");
|
||||||
request.getAvailability().then((aAvailability) => {
|
request.getAvailability().then((aAvailability) => {
|
||||||
aAvailability.onchange = function() {
|
aAvailability.onchange = function() {
|
||||||
aAvailability.onchange = null;
|
aAvailability.onchange = null;
|
||||||
@@ -132,6 +132,7 @@ function testStartConnection() {
|
|||||||
ok(connection, "Sender: Connection should be available.");
|
ok(connection, "Sender: Connection should be available.");
|
||||||
ok(connection.id, "Sender: Connection ID should be set.");
|
ok(connection.id, "Sender: Connection ID should be set.");
|
||||||
is(connection.state, "connecting", "The initial state should be connecting.");
|
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 = function() {
|
||||||
connection.onconnect = null;
|
connection.onconnect = null;
|
||||||
is(connection.state, "connected", "Connection should be connected.");
|
is(connection.state, "connected", "Connection should be connected.");
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ var connection;
|
|||||||
|
|
||||||
function testSetup() {
|
function testSetup() {
|
||||||
return new Promise(function(aResolve, aReject) {
|
return new Promise(function(aResolve, aReject) {
|
||||||
request = new PresentationRequest("http://example.com");
|
request = new PresentationRequest("http://example.com/");
|
||||||
|
|
||||||
request.getAvailability().then(
|
request.getAvailability().then(
|
||||||
function(aAvailability) {
|
function(aAvailability) {
|
||||||
@@ -184,7 +184,7 @@ function testReconnect() {
|
|||||||
|
|
||||||
gScript.addMessageListener('start-reconnect', function startReconnectHandler(url) {
|
gScript.addMessageListener('start-reconnect', function startReconnectHandler(url) {
|
||||||
gScript.removeMessageListener('start-reconnect', startReconnectHandler);
|
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);
|
gScript.sendAsyncMessage('trigger-reconnected-acked', url);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ function testSetup() {
|
|||||||
}
|
}
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
request = new PresentationRequest("http://example.com");
|
request = new PresentationRequest("http://example.com/");
|
||||||
|
|
||||||
request.getAvailability().then(
|
request.getAvailability().then(
|
||||||
function(aAvailability) {
|
function(aAvailability) {
|
||||||
@@ -301,7 +301,7 @@ function testReconnect() {
|
|||||||
info('--- testReconnect ---');
|
info('--- testReconnect ---');
|
||||||
gScript.addMessageListener('start-reconnect', function startReconnectHandler(url) {
|
gScript.addMessageListener('start-reconnect', function startReconnectHandler(url) {
|
||||||
gScript.removeMessageListener('start-reconnect', startReconnectHandler);
|
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);
|
gScript.sendAsyncMessage('trigger-reconnected-acked', url);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ var connection;
|
|||||||
|
|
||||||
function testSetup() {
|
function testSetup() {
|
||||||
return new Promise(function(aResolve, aReject) {
|
return new Promise(function(aResolve, aReject) {
|
||||||
request = new PresentationRequest("http://example.com");
|
request = new PresentationRequest("http://example.com/");
|
||||||
|
|
||||||
request.getAvailability().then(
|
request.getAvailability().then(
|
||||||
function(aAvailability) {
|
function(aAvailability) {
|
||||||
@@ -178,7 +178,7 @@ function testReconnect() {
|
|||||||
|
|
||||||
gScript.addMessageListener('start-reconnect', function startReconnectHandler(url) {
|
gScript.addMessageListener('start-reconnect', function startReconnectHandler(url) {
|
||||||
gScript.removeMessageListener('start-reconnect', startReconnectHandler);
|
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);
|
gScript.sendAsyncMessage('trigger-reconnected-acked', url);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user