import changes from `dev' branch of rmottola/Arctic-Fox:

- Bug 1178508 ServiceWorker scripts should never be intercepted. r=baku (1dc29c560)
- Bug 1169044 - Patch 4 - Set referrer on intercepted request. r=jdm (e400d51bb)
- Bug 1169044 - Patch 5 - build fixes. a=bustage (ff54ccc97)
- Bug 1158319 Cache should throw SecurityError if the principal is incorrect. r=ehsan (28713b9cf)
- Bug 1160147 Improve Cache API WorkerFeature shutdown handling. r=baku (79ab46685)
- Bug 1160227 Improve Cache API warnings. r=ehsan (0adda61ee)
- Bug 1160138 P1 Update CacheStorage and Cache webidl to latest spec. r=ehsan (68025abcf)
- Bug 1160138 P2 Add a [ChromeConstructor] to CacheStorage to support devtools. r=ehsan (8d3ea55b8)
- Bug 1160138 P3 Test Cache chrome-only Constructor. r=ehsan (46d89d039)
- Bug 1173467 P1 Modify CacheStorage to reject with SecurityErr instead of throwing on creation. r=ehsan (db32dffbf)
- Bug 1140145 - Update web-platform-tests expected data to revision 9a2c04e06cb4e63b13b803722d345d085bf0debf, a=testonly (eb5c31e15)
- Bug 1142501 - Disable webvtt/rendering/cues-with-video/processing-model/basic.html on Linux due to extremely frequent timeouts. No review. (8c197e60a)
- Bug 1135107 - Enable pointer events for pointer events tests, a=testonly (03d19a853)
- partial bug 1135107 - Update web-platform-tests expected data, rs=Ms2ger (794895f17)
- Bug 1153521 - Update web-platform-tests expected data to revision 7311aa630534282885b9add15b1c30b2b59316dd, a=testonly (44a86bbb9)
- Bug 1162594 - create build_resources.json even if psutil fails; r=ahal (44a1d1780)
This commit is contained in:
2021-05-01 11:37:45 +08:00
parent c5b776d07a
commit cdb21a311f
551 changed files with 2733 additions and 4101 deletions
+58 -28
View File
@@ -229,7 +229,10 @@ already_AddRefed<Promise>
Cache::Match(const RequestOrUSVString& aRequest,
const CacheQueryOptions& aOptions, ErrorResult& aRv)
{
MOZ_ASSERT(mActor);
if (NS_WARN_IF(!mActor)) {
aRv.Throw(NS_ERROR_UNEXPECTED);
return nullptr;
}
nsRefPtr<InternalRequest> ir = ToInternalRequest(aRequest, IgnoreBody, aRv);
if (NS_WARN_IF(aRv.Failed())) {
@@ -253,7 +256,10 @@ already_AddRefed<Promise>
Cache::MatchAll(const Optional<RequestOrUSVString>& aRequest,
const CacheQueryOptions& aOptions, ErrorResult& aRv)
{
MOZ_ASSERT(mActor);
if (NS_WARN_IF(!mActor)) {
aRv.Throw(NS_ERROR_UNEXPECTED);
return nullptr;
}
CacheQueryParams params;
ToCacheQueryParams(params, aOptions);
@@ -280,6 +286,11 @@ already_AddRefed<Promise>
Cache::Add(JSContext* aContext, const RequestOrUSVString& aRequest,
ErrorResult& aRv)
{
if (NS_WARN_IF(!mActor)) {
aRv.Throw(NS_ERROR_UNEXPECTED);
return nullptr;
}
if (!IsValidPutRequestMethod(aRequest, aRv)) {
return nullptr;
}
@@ -290,13 +301,13 @@ Cache::Add(JSContext* aContext, const RequestOrUSVString& aRequest,
nsTArray<nsRefPtr<Request>> requestList(1);
nsRefPtr<Request> request = Request::Constructor(global, aRequest,
RequestInit(), aRv);
if (aRv.Failed()) {
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
nsAutoString url;
request->GetUrl(url);
if (!IsValidPutRequestURL(url, aRv)) {
if (NS_WARN_IF(!IsValidPutRequestURL(url, aRv))) {
return nullptr;
}
@@ -309,6 +320,11 @@ Cache::AddAll(JSContext* aContext,
const Sequence<OwningRequestOrUSVString>& aRequestList,
ErrorResult& aRv)
{
if (NS_WARN_IF(!mActor)) {
aRv.Throw(NS_ERROR_UNEXPECTED);
return nullptr;
}
GlobalObject global(aContext, mGlobal->GetGlobalJSObject());
MOZ_ASSERT(!global.Failed());
@@ -318,7 +334,8 @@ Cache::AddAll(JSContext* aContext,
if (aRequestList[i].IsRequest()) {
requestOrString.SetAsRequest() = aRequestList[i].GetAsRequest();
if (!IsValidPutRequestMethod(requestOrString.GetAsRequest(), aRv)) {
if (NS_WARN_IF(!IsValidPutRequestMethod(requestOrString.GetAsRequest(),
aRv))) {
return nullptr;
}
} else {
@@ -329,13 +346,13 @@ Cache::AddAll(JSContext* aContext,
nsRefPtr<Request> request = Request::Constructor(global, requestOrString,
RequestInit(), aRv);
if (aRv.Failed()) {
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
nsAutoString url;
request->GetUrl(url);
if (!IsValidPutRequestURL(url, aRv)) {
if (NS_WARN_IF(!IsValidPutRequestURL(url, aRv))) {
return nullptr;
}
@@ -349,14 +366,17 @@ already_AddRefed<Promise>
Cache::Put(const RequestOrUSVString& aRequest, Response& aResponse,
ErrorResult& aRv)
{
MOZ_ASSERT(mActor);
if (NS_WARN_IF(!mActor)) {
aRv.Throw(NS_ERROR_UNEXPECTED);
return nullptr;
}
if (!IsValidPutRequestMethod(aRequest, aRv)) {
if (NS_WARN_IF(!IsValidPutRequestMethod(aRequest, aRv))) {
return nullptr;
}
nsRefPtr<InternalRequest> ir = ToInternalRequest(aRequest, ReadBody, aRv);
if (aRv.Failed()) {
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
@@ -364,7 +384,7 @@ Cache::Put(const RequestOrUSVString& aRequest, Response& aResponse,
args.Add(ir, ReadBody, TypeErrorOnInvalidScheme,
aResponse, aRv);
if (aRv.Failed()) {
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
@@ -375,10 +395,13 @@ already_AddRefed<Promise>
Cache::Delete(const RequestOrUSVString& aRequest,
const CacheQueryOptions& aOptions, ErrorResult& aRv)
{
MOZ_ASSERT(mActor);
if (NS_WARN_IF(!mActor)) {
aRv.Throw(NS_ERROR_UNEXPECTED);
return nullptr;
}
nsRefPtr<InternalRequest> ir = ToInternalRequest(aRequest, IgnoreBody, aRv);
if (aRv.Failed()) {
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
@@ -388,7 +411,7 @@ Cache::Delete(const RequestOrUSVString& aRequest,
AutoChildOpArgs args(this, CacheDeleteArgs(CacheRequest(), params));
args.Add(ir, IgnoreBody, IgnoreInvalidScheme, aRv);
if (aRv.Failed()) {
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
@@ -399,7 +422,10 @@ already_AddRefed<Promise>
Cache::Keys(const Optional<RequestOrUSVString>& aRequest,
const CacheQueryOptions& aOptions, ErrorResult& aRv)
{
MOZ_ASSERT(mActor);
if (NS_WARN_IF(!mActor)) {
aRv.Throw(NS_ERROR_UNEXPECTED);
return nullptr;
}
CacheQueryParams params;
ToCacheQueryParams(params, aOptions);
@@ -409,12 +435,12 @@ Cache::Keys(const Optional<RequestOrUSVString>& aRequest,
if (aRequest.WasPassed()) {
nsRefPtr<InternalRequest> ir = ToInternalRequest(aRequest.Value(),
IgnoreBody, aRv);
if (aRv.Failed()) {
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
args.Add(ir, IgnoreBody, IgnoreInvalidScheme, aRv);
if (aRv.Failed()) {
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
}
@@ -493,9 +519,9 @@ Cache::~Cache()
{
NS_ASSERT_OWNINGTHREAD(Cache);
if (mActor) {
mActor->StartDestroy();
// DestroyInternal() is called synchronously by StartDestroy(). So we
// should have already cleared the mActor.
mActor->StartDestroyFromListener();
// DestroyInternal() is called synchronously by StartDestroyFromListener().
// So we should have already cleared the mActor.
MOZ_ASSERT(!mActor);
}
}
@@ -504,11 +530,11 @@ already_AddRefed<Promise>
Cache::ExecuteOp(AutoChildOpArgs& aOpArgs, ErrorResult& aRv)
{
nsRefPtr<Promise> promise = Promise::Create(mGlobal, aRv);
if (!promise) {
if (NS_WARN_IF(!promise)) {
return nullptr;
}
mActor->ExecuteOp(mGlobal, promise, aOpArgs.SendAsOpArgs());
mActor->ExecuteOp(mGlobal, promise, this, aOpArgs.SendAsOpArgs());
return promise.forget();
}
@@ -521,7 +547,7 @@ Cache::AddAll(const GlobalObject& aGlobal,
// If there is no work to do, then resolve immediately
if (aRequestList.IsEmpty()) {
nsRefPtr<Promise> promise = Promise::Create(mGlobal, aRv);
if (!promise) {
if (NS_WARN_IF(!promise)) {
return nullptr;
}
@@ -541,7 +567,7 @@ Cache::AddAll(const GlobalObject& aGlobal,
requestOrString.SetAsRequest() = aRequestList[i];
nsRefPtr<Promise> fetch = FetchRequest(mGlobal, requestOrString,
RequestInit(), aRv);
if (aRv.Failed()) {
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
@@ -549,7 +575,7 @@ Cache::AddAll(const GlobalObject& aGlobal,
}
nsRefPtr<Promise> promise = Promise::Create(mGlobal, aRv);
if (aRv.Failed()) {
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
@@ -557,7 +583,7 @@ Cache::AddAll(const GlobalObject& aGlobal,
Move(aRequestList), promise);
nsRefPtr<Promise> fetchPromise = Promise::All(aGlobal, fetchList, aRv);
if (aRv.Failed()) {
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
fetchPromise->AppendNativeHandler(handler);
@@ -570,15 +596,19 @@ Cache::PutAll(const nsTArray<nsRefPtr<Request>>& aRequestList,
const nsTArray<nsRefPtr<Response>>& aResponseList,
ErrorResult& aRv)
{
MOZ_ASSERT(mActor);
MOZ_ASSERT(aRequestList.Length() == aResponseList.Length());
if (NS_WARN_IF(!mActor)) {
aRv.Throw(NS_ERROR_UNEXPECTED);
return nullptr;
}
AutoChildOpArgs args(this, CachePutAllArgs());
for (uint32_t i = 0; i < aRequestList.Length(); ++i) {
nsRefPtr<InternalRequest> ir = aRequestList[i]->GetInternalRequest();
args.Add(ir, ReadBody, TypeErrorOnInvalidScheme, *aResponseList[i], aRv);
if (aRv.Failed()) {
if (NS_WARN_IF(aRv.Failed())) {
return nullptr;
}
}
+29 -12
View File
@@ -33,6 +33,7 @@ DeallocPCacheChild(PCacheChild* aActor)
CacheChild::CacheChild()
: mListener(nullptr)
, mNumChildActors(0)
, mDelayedDestroy(false)
{
MOZ_COUNT_CTOR(cache::CacheChild);
}
@@ -64,11 +65,11 @@ CacheChild::ClearListener()
void
CacheChild::ExecuteOp(nsIGlobalObject* aGlobal, Promise* aPromise,
const CacheOpArgs& aArgs)
nsISupports* aParent, const CacheOpArgs& aArgs)
{
mNumChildActors += 1;
MOZ_ALWAYS_TRUE(SendPCacheOpConstructor(
new CacheOpChild(GetFeature(), aGlobal, aPromise), aArgs));
new CacheOpChild(GetFeature(), aGlobal, aParent, aPromise), aArgs));
}
CachePushStreamChild*
@@ -81,9 +82,33 @@ CacheChild::CreatePushStream(nsIAsyncInputStream* aStream)
return static_cast<CachePushStreamChild*>(actor);
}
void
CacheChild::StartDestroyFromListener()
{
NS_ASSERT_OWNINGTHREAD(CacheChild);
// The listener should be held alive by any async operations, so if it
// is going away then there must not be any child actors. This in turn
// ensures that StartDestroy() will not trigger the delayed path.
MOZ_ASSERT(!mNumChildActors);
StartDestroy();
}
void
CacheChild::StartDestroy()
{
NS_ASSERT_OWNINGTHREAD(CacheChild);
// If we have outstanding child actors, then don't destroy ourself yet.
// The child actors should be short lived and we should allow them to complete
// if possible. NoteDeletedActor() will call back into this Shutdown()
// method when the last child actor is gone.
if (mNumChildActors) {
mDelayedDestroy = true;
return;
}
nsRefPtr<Cache> listener = mListener;
// StartDestroy() can get called from either Cache or the Feature.
@@ -98,14 +123,6 @@ CacheChild::StartDestroy()
// Cache listener should call ClearListener() in DestroyInternal()
MOZ_ASSERT(!mListener);
// If we have outstanding child actors, then don't destroy ourself yet.
// The child actors should be short lived and we should allow them to complete
// if possible. SendTeardown() will be called when the count drops to zero
// in NoteDeletedActor().
if (mNumChildActors) {
return;
}
// Start actor destruction from parent process
unused << SendTeardown();
}
@@ -158,8 +175,8 @@ void
CacheChild::NoteDeletedActor()
{
mNumChildActors -= 1;
if (!mNumChildActors && !mListener) {
unused << SendTeardown();
if (!mNumChildActors && mDelayedDestroy) {
StartDestroy();
}
}
+12 -9
View File
@@ -33,25 +33,27 @@ public:
void SetListener(Cache* aListener);
// Must be called by the associated Cache listener in its ActorDestroy()
// method. Also, Cache must Send__delete__() the actor in its destructor to
// trigger ActorDestroy() if it has not been called yet.
// Must be called by the associated Cache listener in its DestroyInternal()
// method. Also, Cache must call StartDestroyFromListener() on the actor in
// its destructor to trigger ActorDestroy() if it has not been called yet.
void ClearListener();
void
ExecuteOp(nsIGlobalObject* aGlobal, Promise* aPromise,
const CacheOpArgs& aArgs);
nsISupports* aParent, const CacheOpArgs& aArgs);
CachePushStreamChild*
CreatePushStream(nsIAsyncInputStream* aStream);
// ActorChild methods
// Synchronously call ActorDestroy on our Cache listener and then start the
// actor destruction asynchronously from the parent-side.
virtual void StartDestroy() override;
// Our parent Listener object has gone out of scope and is being destroyed.
void StartDestroyFromListener();
private:
// ActorChild methods
// Feature is trying to destroy due to worker shutdown.
virtual void StartDestroy() override;
// PCacheChild methods
virtual void
ActorDestroy(ActorDestroyReason aReason) override;
@@ -77,6 +79,7 @@ private:
// destroyed.
Cache* MOZ_NON_OWNING_REF mListener;
uint32_t mNumChildActors;
bool mDelayedDestroy;
NS_DECL_OWNINGTHREAD
};
+4 -2
View File
@@ -57,11 +57,13 @@ AddFeatureToStreamChild(const CacheRequest& aRequest, Feature* aFeature)
} // namespace
CacheOpChild::CacheOpChild(Feature* aFeature, nsIGlobalObject* aGlobal,
Promise* aPromise)
nsISupports* aParent, Promise* aPromise)
: mGlobal(aGlobal)
, mParent(aParent)
, mPromise(aPromise)
{
MOZ_ASSERT(mGlobal);
MOZ_ASSERT(mParent);
MOZ_ASSERT(mPromise);
MOZ_ASSERT_IF(!NS_IsMainThread(), aFeature);
@@ -95,7 +97,7 @@ CacheOpChild::Recv__delete__(const ErrorResult& aRv,
{
NS_ASSERT_OWNINGTHREAD(CacheOpChild);
if (aRv.Failed()) {
if (NS_WARN_IF(aRv.Failed())) {
MOZ_ASSERT(aResult.type() == CacheOpResult::Tvoid_t);
// TODO: Remove this const_cast (bug 1152078).
// It is safe for now since this ErrorResult is handed off to us by IPDL
+5 -1
View File
@@ -31,7 +31,8 @@ class CacheOpChild final : public PCacheOpChild
private:
// This class must be constructed by CacheChild or CacheStorageChild using
// their ExecuteOp() factory method.
CacheOpChild(Feature* aFeature, nsIGlobalObject* aGlobal, Promise* aPromise);
CacheOpChild(Feature* aFeature, nsIGlobalObject* aGlobal,
nsISupports* aParent, Promise* aPromise);
~CacheOpChild();
// PCacheOpChild methods
@@ -68,6 +69,9 @@ private:
HandleRequestList(const nsTArray<CacheRequest>& aRequestList);
nsCOMPtr<nsIGlobalObject> mGlobal;
// Hold the parent Cache or CacheStorage object alive until this async
// operation completes.
nsCOMPtr<nsISupports> mParent;
RefPtr<Promise> mPromise;
NS_DECL_OWNINGTHREAD
+1 -1
View File
@@ -164,7 +164,7 @@ CacheOpParent::OnOpComplete(ErrorResult&& aRv, const CacheOpResult& aResult,
// Never send an op-specific result if we have an error. Instead, send
// void_t() to ensure that we don't leak actors on the child side.
if (aRv.Failed()) {
if (NS_WARN_IF(aRv.Failed())) {
unused << Send__delete__(this, aRv, void_t());
aRv.SuppressException(); // We serialiazed it, as best we could.
return;
+3 -2
View File
@@ -118,8 +118,9 @@ CachePushStreamChild::Start()
void
CachePushStreamChild::StartDestroy()
{
// called if we are running on a Worker and the thread gets shutdown
OnEnd(NS_ERROR_ABORT);
// The worker has signaled its shutting down, but continue streaming. The
// Cache is now designed to hold the worker open until all async operations
// complete.
}
void
+65 -32
View File
@@ -70,6 +70,7 @@ CacheStorage::CreateOnMainThread(Namespace aNamespace, nsIGlobalObject* aGlobal,
MOZ_ASSERT(aPrincipal);
MOZ_ASSERT(NS_IsMainThread());
bool nullPrincipal;
nsresult rv = aPrincipal->GetIsNullPrincipal(&nullPrincipal);
if (NS_WARN_IF(NS_FAILED(rv))) {
@@ -79,8 +80,8 @@ CacheStorage::CreateOnMainThread(Namespace aNamespace, nsIGlobalObject* aGlobal,
if (nullPrincipal) {
NS_WARNING("CacheStorage not supported on null principal.");
aRv.Throw(NS_ERROR_FAILURE);
return nullptr;
nsRefPtr<CacheStorage> ref = new CacheStorage(NS_ERROR_DOM_SECURITY_ERR);
return ref.forget();
}
// An unknown appId means that this principal was created for the codebase
@@ -91,8 +92,8 @@ CacheStorage::CreateOnMainThread(Namespace aNamespace, nsIGlobalObject* aGlobal,
aPrincipal->GetUnknownAppId(&unknownAppId);
if (unknownAppId) {
NS_WARNING("CacheStorage not supported on principal with unknown appId.");
aRv.Throw(NS_ERROR_FAILURE);
return nullptr;
nsRefPtr<CacheStorage> ref = new CacheStorage(NS_ERROR_DOM_SECURITY_ERR);
return ref.forget();
}
PrincipalInfo principalInfo;
@@ -126,16 +127,16 @@ CacheStorage::CreateOnWorker(Namespace aNamespace, nsIGlobalObject* aGlobal,
const PrincipalInfo& principalInfo = aWorkerPrivate->GetPrincipalInfo();
if (principalInfo.type() == PrincipalInfo::TNullPrincipalInfo) {
NS_WARNING("CacheStorage not supported on null principal.");
aRv.Throw(NS_ERROR_FAILURE);
return nullptr;
nsRefPtr<CacheStorage> ref = new CacheStorage(NS_ERROR_DOM_SECURITY_ERR);
return ref.forget();
}
if (principalInfo.type() == PrincipalInfo::TContentPrincipalInfo &&
principalInfo.get_ContentPrincipalInfo().appId() ==
nsIScriptSecurityManager::UNKNOWN_APP_ID) {
NS_WARNING("CacheStorage not supported on principal with unknown appId.");
aRv.Throw(NS_ERROR_FAILURE);
return nullptr;
nsRefPtr<CacheStorage> ref = new CacheStorage(NS_ERROR_DOM_SECURITY_ERR);
return ref.forget();
}
nsRefPtr<CacheStorage> ref = new CacheStorage(aNamespace, aGlobal,
@@ -150,7 +151,7 @@ CacheStorage::CacheStorage(Namespace aNamespace, nsIGlobalObject* aGlobal,
, mPrincipalInfo(MakeUnique<PrincipalInfo>(aPrincipalInfo))
, mFeature(aFeature)
, mActor(nullptr)
, mFailedActor(false)
, mStatus(NS_OK)
{
MOZ_ASSERT(mGlobal);
@@ -166,19 +167,27 @@ CacheStorage::CacheStorage(Namespace aNamespace, nsIGlobalObject* aGlobal,
// wait for the async ActorCreated() callback.
MOZ_ASSERT(NS_IsMainThread());
bool ok = BackgroundChild::GetOrCreateForCurrentThread(this);
if (!ok) {
if (NS_WARN_IF(!ok)) {
ActorFailed();
}
}
CacheStorage::CacheStorage(nsresult aFailureResult)
: mNamespace(INVALID_NAMESPACE)
, mActor(nullptr)
, mStatus(aFailureResult)
{
MOZ_ASSERT(NS_FAILED(mStatus));
}
already_AddRefed<Promise>
CacheStorage::Match(const RequestOrUSVString& aRequest,
const CacheQueryOptions& aOptions, ErrorResult& aRv)
{
NS_ASSERT_OWNINGTHREAD(CacheStorage);
if (mFailedActor) {
aRv.Throw(NS_ERROR_UNEXPECTED);
if (NS_WARN_IF(NS_FAILED(mStatus))) {
aRv.Throw(mStatus);
return nullptr;
}
@@ -189,7 +198,7 @@ CacheStorage::Match(const RequestOrUSVString& aRequest,
}
nsRefPtr<Promise> promise = Promise::Create(mGlobal, aRv);
if (!promise) {
if (NS_WARN_IF(!promise)) {
return nullptr;
}
@@ -212,13 +221,13 @@ CacheStorage::Has(const nsAString& aKey, ErrorResult& aRv)
{
NS_ASSERT_OWNINGTHREAD(CacheStorage);
if (mFailedActor) {
aRv.Throw(NS_ERROR_UNEXPECTED);
if (NS_WARN_IF(NS_FAILED(mStatus))) {
aRv.Throw(mStatus);
return nullptr;
}
nsRefPtr<Promise> promise = Promise::Create(mGlobal, aRv);
if (!promise) {
if (NS_WARN_IF(!promise)) {
return nullptr;
}
@@ -237,13 +246,13 @@ CacheStorage::Open(const nsAString& aKey, ErrorResult& aRv)
{
NS_ASSERT_OWNINGTHREAD(CacheStorage);
if (mFailedActor) {
aRv.Throw(NS_ERROR_UNEXPECTED);
if (NS_WARN_IF(NS_FAILED(mStatus))) {
aRv.Throw(mStatus);
return nullptr;
}
nsRefPtr<Promise> promise = Promise::Create(mGlobal, aRv);
if (!promise) {
if (NS_WARN_IF(!promise)) {
return nullptr;
}
@@ -262,13 +271,13 @@ CacheStorage::Delete(const nsAString& aKey, ErrorResult& aRv)
{
NS_ASSERT_OWNINGTHREAD(CacheStorage);
if (mFailedActor) {
aRv.Throw(NS_ERROR_UNEXPECTED);
if (NS_WARN_IF(NS_FAILED(mStatus))) {
aRv.Throw(mStatus);
return nullptr;
}
nsRefPtr<Promise> promise = Promise::Create(mGlobal, aRv);
if (!promise) {
if (NS_WARN_IF(!promise)) {
return nullptr;
}
@@ -287,13 +296,13 @@ CacheStorage::Keys(ErrorResult& aRv)
{
NS_ASSERT_OWNINGTHREAD(CacheStorage);
if (mFailedActor) {
aRv.Throw(NS_ERROR_UNEXPECTED);
if (NS_WARN_IF(NS_FAILED(mStatus))) {
aRv.Throw(mStatus);
return nullptr;
}
nsRefPtr<Promise> promise = Promise::Create(mGlobal, aRv);
if (!promise) {
if (NS_WARN_IF(!promise)) {
return nullptr;
}
@@ -314,6 +323,30 @@ CacheStorage::PrefEnabled(JSContext* aCx, JSObject* aObj)
return Cache::PrefEnabled(aCx, aObj);
}
// static
already_AddRefed<CacheStorage>
CacheStorage::Constructor(const GlobalObject& aGlobal,
CacheStorageNamespace aNamespace,
nsIPrincipal* aPrincipal, ErrorResult& aRv)
{
if (NS_WARN_IF(!NS_IsMainThread())) {
aRv.Throw(NS_ERROR_FAILURE);
return nullptr;
}
// TODO: remove Namespace in favor of CacheStorageNamespace
static_assert(DEFAULT_NAMESPACE == (uint32_t)CacheStorageNamespace::Content,
"Default namespace should match webidl Content enum");
static_assert(CHROME_ONLY_NAMESPACE == (uint32_t)CacheStorageNamespace::Chrome,
"Chrome namespace should match webidl Chrome enum");
static_assert(NUMBER_OF_NAMESPACES == (uint32_t)CacheStorageNamespace::EndGuard_,
"Number of namespace should match webidl endguard enum");
Namespace ns = static_cast<Namespace>(aNamespace);
nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(aGlobal.GetAsSupports());
return CreateOnMainThread(ns, global, aPrincipal, aRv);
}
nsISupports*
CacheStorage::GetParentObject() const
{
@@ -362,9 +395,9 @@ void
CacheStorage::ActorFailed()
{
NS_ASSERT_OWNINGTHREAD(CacheStorage);
MOZ_ASSERT(!mFailedActor);
MOZ_ASSERT(!NS_FAILED(mStatus));
mFailedActor = true;
mStatus = NS_ERROR_UNEXPECTED;
mFeature = nullptr;
for (uint32_t i = 0; i < mPendingRequests.Length(); ++i) {
@@ -413,9 +446,9 @@ CacheStorage::~CacheStorage()
{
NS_ASSERT_OWNINGTHREAD(CacheStorage);
if (mActor) {
mActor->StartDestroy();
// DestroyInternal() is called synchronously by StartDestroy(). So we
// should have already cleared the mActor.
mActor->StartDestroyFromListener();
// DestroyInternal() is called synchronously by StartDestroyFromListener().
// So we should have already cleared the mActor.
MOZ_ASSERT(!mActor);
}
}
@@ -434,11 +467,11 @@ CacheStorage::MaybeRunPendingRequests()
if (entry->mRequest) {
args.Add(entry->mRequest, IgnoreBody, IgnoreInvalidScheme, rv);
}
if (rv.Failed()) {
if (NS_WARN_IF(rv.Failed())) {
entry->mPromise->MaybeReject(rv);
continue;
}
mActor->ExecuteOp(mGlobal, entry->mPromise, args.SendAsOpArgs());
mActor->ExecuteOp(mGlobal, entry->mPromise, this, args.SendAsOpArgs());
}
mPendingRequests.Clear();
}
+8 -2
View File
@@ -7,7 +7,6 @@
#ifndef mozilla_dom_cache_CacheStorage_h
#define mozilla_dom_cache_CacheStorage_h
#include "mozilla/dom/CacheBinding.h"
#include "mozilla/dom/cache/Types.h"
#include "mozilla/dom/cache/TypeUtils.h"
#include "nsAutoPtr.h"
@@ -29,6 +28,7 @@ namespace ipc {
namespace dom {
enum class CacheStorageNamespace : uint32_t;
class Promise;
namespace workers {
@@ -64,6 +64,11 @@ public:
already_AddRefed<Promise> Delete(const nsAString& aKey, ErrorResult& aRv);
already_AddRefed<Promise> Keys(ErrorResult& aRv);
// chrome-only webidl interface methods
static already_AddRefed<CacheStorage>
Constructor(const GlobalObject& aGlobal, CacheStorageNamespace aNamespace,
nsIPrincipal* aPrincipal, ErrorResult& aRv);
// binding methods
static bool PrefEnabled(JSContext* aCx, JSObject* aObj);
@@ -89,6 +94,7 @@ public:
private:
CacheStorage(Namespace aNamespace, nsIGlobalObject* aGlobal,
const mozilla::ipc::PrincipalInfo& aPrincipalInfo, Feature* aFeature);
explicit CacheStorage(nsresult aFailureResult);
~CacheStorage();
void MaybeRunPendingRequests();
@@ -104,7 +110,7 @@ private:
struct Entry;
nsTArray<nsAutoPtr<Entry>> mPendingRequests;
bool mFailedActor;
nsresult mStatus;
public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
+27 -12
View File
@@ -25,6 +25,7 @@ DeallocPCacheStorageChild(PCacheStorageChild* aActor)
CacheStorageChild::CacheStorageChild(CacheStorage* aListener, Feature* aFeature)
: mListener(aListener)
, mNumChildActors(0)
, mDelayedDestroy(false)
{
MOZ_COUNT_CTOR(cache::CacheStorageChild);
MOZ_ASSERT(mListener);
@@ -49,11 +50,24 @@ CacheStorageChild::ClearListener()
void
CacheStorageChild::ExecuteOp(nsIGlobalObject* aGlobal, Promise* aPromise,
const CacheOpArgs& aArgs)
nsISupports* aParent, const CacheOpArgs& aArgs)
{
mNumChildActors += 1;
unused << SendPCacheOpConstructor(
new CacheOpChild(GetFeature(), aGlobal, aPromise), aArgs);
new CacheOpChild(GetFeature(), aGlobal, aParent, aPromise), aArgs);
}
void
CacheStorageChild::StartDestroyFromListener()
{
NS_ASSERT_OWNINGTHREAD(CacheStorageChild);
// The listener should be held alive by any async operations, so if it
// is going away then there must not be any child actors. This in turn
// ensures that StartDestroy() will not trigger the delayed path.
MOZ_ASSERT(!mNumChildActors);
StartDestroy();
}
void
@@ -61,6 +75,15 @@ CacheStorageChild::StartDestroy()
{
NS_ASSERT_OWNINGTHREAD(CacheStorageChild);
// If we have outstanding child actors, then don't destroy ourself yet.
// The child actors should be short lived and we should allow them to complete
// if possible. NoteDeletedActor() will call back into this Shutdown()
// method when the last child actor is gone.
if (mNumChildActors) {
mDelayedDestroy = true;
return;
}
nsRefPtr<CacheStorage> listener = mListener;
// StartDestroy() can get called from either CacheStorage or the Feature.
@@ -75,14 +98,6 @@ CacheStorageChild::StartDestroy()
// CacheStorage listener should call ClearListener() in DestroyInternal()
MOZ_ASSERT(!mListener);
// If we have outstanding child actors, then don't destroy ourself yet.
// The child actors should be short lived and we should allow them to complete
// if possible. SendTeardown() will be called when the count drops to zero
// in NoteDeletedActor().
if (mNumChildActors) {
return;
}
// Start actor destruction from parent process
unused << SendTeardown();
}
@@ -121,8 +136,8 @@ CacheStorageChild::NoteDeletedActor()
{
MOZ_ASSERT(mNumChildActors);
mNumChildActors -= 1;
if (!mNumChildActors && !mListener) {
unused << SendTeardown();
if (!mNumChildActors && mDelayedDestroy) {
StartDestroy();
}
}
+12 -9
View File
@@ -33,22 +33,24 @@ public:
~CacheStorageChild();
// Must be called by the associated CacheStorage listener in its
// ActorDestroy() method. Also, CacheStorage must call SendDestroy() on the
// actor in its destructor to trigger ActorDestroy() if it has not been
// called yet.
// DestroyInternal() method. Also, CacheStorage must call
// SendDestroyFromListener() on the actor in its destructor to trigger
// ActorDestroy() if it has not been called yet.
void ClearListener();
void
ExecuteOp(nsIGlobalObject* aGlobal, Promise* aPromise,
const CacheOpArgs& aArgs);
nsISupports* aParent, const CacheOpArgs& aArgs);
// ActorChild methods
// Synchronously call ActorDestroy on our CacheStorage listener and then start
// the actor destruction asynchronously from the parent-side.
virtual void StartDestroy() override;
// Our parent Listener object has gone out of scope and is being destroyed.
void StartDestroyFromListener();
private:
// ActorChild methods
// Feature is trying to destroy due to worker shutdown.
virtual void StartDestroy() override;
// PCacheStorageChild methods
virtual void ActorDestroy(ActorDestroyReason aReason) override;
@@ -67,6 +69,7 @@ private:
// destroyed.
CacheStorage* MOZ_NON_OWNING_REF mListener;
uint32_t mNumChildActors;
bool mDelayedDestroy;
NS_DECL_OWNINGTHREAD
};
+1 -1
View File
@@ -100,7 +100,7 @@ CacheStorageParent::RecvPCacheOpConstructor(PCacheOpParent* aActor,
return true;
}
if (NS_FAILED(mVerifiedStatus)) {
if (NS_WARN_IF(NS_FAILED(mVerifiedStatus))) {
unused << CacheOpParent::Send__delete__(actor, ErrorResult(mVerifiedStatus),
void_t());
return true;
+2 -2
View File
@@ -13,7 +13,7 @@ namespace mozilla {
namespace dom {
namespace cache {
using mozilla::dom::workers::Running;
using mozilla::dom::workers::Canceling;
using mozilla::dom::workers::Status;
using mozilla::dom::workers::WorkerPrivate;
@@ -73,7 +73,7 @@ Feature::Notify(JSContext* aCx, Status aStatus)
{
NS_ASSERT_OWNINGTHREAD(Feature);
if (aStatus <= Running || mNotified) {
if (aStatus < Canceling || mNotified) {
return true;
}
+3 -3
View File
@@ -1755,7 +1755,7 @@ Manager::ExecuteCacheOp(Listener* aListener, CacheId aCacheId,
MOZ_ASSERT(aListener);
MOZ_ASSERT(aOpArgs.type() != CacheOpArgs::TCachePutAllArgs);
if (mState == Closing) {
if (NS_WARN_IF(mState == Closing)) {
aListener->OnOpComplete(ErrorResult(NS_ERROR_FAILURE), void_t());
return;
}
@@ -1799,7 +1799,7 @@ Manager::ExecuteStorageOp(Listener* aListener, Namespace aNamespace,
NS_ASSERT_OWNINGTHREAD(Manager);
MOZ_ASSERT(aListener);
if (mState == Closing) {
if (NS_WARN_IF(mState == Closing)) {
aListener->OnOpComplete(ErrorResult(NS_ERROR_FAILURE), void_t());
return;
}
@@ -1848,7 +1848,7 @@ Manager::ExecutePutAll(Listener* aListener, CacheId aCacheId,
NS_ASSERT_OWNINGTHREAD(Manager);
MOZ_ASSERT(aListener);
if (mState == Closing) {
if (NS_WARN_IF(mState == Closing)) {
aListener->OnOpComplete(ErrorResult(NS_ERROR_FAILURE), CachePutAllResult());
return;
}
+4
View File
@@ -94,3 +94,7 @@ FINAL_LIBRARY = 'xul'
MOCHITEST_MANIFESTS += [
'test/mochitest/mochitest.ini',
]
MOCHITEST_CHROME_MANIFESTS += [
'test/mochitest/chrome.ini',
]
+1
View File
@@ -0,0 +1 @@
[test_chrome_constructor.html]
+43
View File
@@ -0,0 +1,43 @@
<!-- Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/ -->
<!DOCTYPE HTML>
<html>
<head>
<title>Validate Interfaces Exposed to Workers</title>
<script type="text/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css" />
</head>
<body>
<script class="testbody" type="text/javascript">
var Cu = Components.utils;
Cu.import('resource://gre/modules/Services.jsm');
SimpleTest.waitForExplicitFinish();
// attach to a different origin's CacheStorage
var url = 'http://example.com/';
var uri = Services.io.newURI(url, null, null);
var principal = Services.scriptSecurityManager.getNoAppCodebasePrincipal(uri);
var storage = new CacheStorage('content', principal);
// verify we can use the other origin's CacheStorage as normal
var req = new Request('http://example.com/index.html');
var res = new Response('hello world');
var cache;
storage.open('foo').then(function(c) {
cache = c;
ok(cache, 'storage should create cache');
return cache.put(req, res.clone());
}).then(function() {
return cache.match(req);
}).then(function(foundResponse) {
return Promise.all([res.text(), foundResponse.text()]);
}).then(function(results) {
is(results[0], results[1], 'cache should contain response');
return storage.delete('foo');
}).then(function(deleted) {
ok(deleted, 'storage should delete cache');
SimpleTest.finish();
});
</script>
</body>
</html>
+16
View File
@@ -1,3 +1,19 @@
onfetch = function(e) {
if (e.request.url.indexOf("Referer") >= 0) {
// Silently rewrite the referrer so the referrer test passes since the
// document/worker isn't aware of this service worker.
var url = e.request.url.substring(0, e.request.url.indexOf('?'));
url += '?headers=' + ({ 'Referer': self.location.href }).toSource();
e.respondWith(fetch(url, {
method: e.request.method,
headers: e.request.headers,
body: e.request.body,
mode: e.request.mode,
credentials: e.request.credentials,
cache: e.request.cache,
}));
return;
}
e.respondWith(fetch(e.request));
};
+22 -22
View File
@@ -13,32 +13,32 @@
[Exposed=(Window,Worker),
Func="mozilla::dom::cache::Cache::PrefEnabled"]
interface Cache {
[Throws]
Promise<Response> match(RequestInfo request, optional CacheQueryOptions options);
[Throws]
Promise<sequence<Response>> matchAll(optional RequestInfo request, optional CacheQueryOptions options);
[Throws]
Promise<void> add(RequestInfo request);
[Throws]
Promise<void> addAll(sequence<RequestInfo> requests);
[Throws]
Promise<void> put(RequestInfo request, Response response);
[Throws]
Promise<boolean> delete(RequestInfo request, optional CacheQueryOptions options);
[Throws]
Promise<sequence<Request>> keys(optional RequestInfo request, optional CacheQueryOptions options);
[NewObject]
Promise<Response> match(RequestInfo request, optional CacheQueryOptions options);
[NewObject]
Promise<sequence<Response>> matchAll(optional RequestInfo request, optional CacheQueryOptions options);
[NewObject]
Promise<void> add(RequestInfo request);
[NewObject]
Promise<void> addAll(sequence<RequestInfo> requests);
[NewObject]
Promise<void> put(RequestInfo request, Response response);
[NewObject]
Promise<boolean> delete(RequestInfo request, optional CacheQueryOptions options);
[NewObject]
Promise<sequence<Request>> keys(optional RequestInfo request, optional CacheQueryOptions options);
};
dictionary CacheQueryOptions {
boolean ignoreSearch = false;
boolean ignoreMethod = false;
boolean ignoreVary = false;
DOMString cacheName;
boolean ignoreSearch = false;
boolean ignoreMethod = false;
boolean ignoreVary = false;
DOMString cacheName;
};
dictionary CacheBatchOperation {
DOMString type;
Request request;
Response response;
CacheQueryOptions options;
DOMString type;
Request request;
Response response;
CacheQueryOptions options;
};
+18 -10
View File
@@ -10,17 +10,25 @@
// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache-storage
interface Principal;
[Exposed=(Window,Worker),
ChromeConstructor(CacheStorageNamespace namespace, Principal principal),
Func="mozilla::dom::cache::CacheStorage::PrefEnabled"]
interface CacheStorage {
[Throws]
Promise<Response> match(RequestInfo request, optional CacheQueryOptions options);
[Throws]
Promise<boolean> has(DOMString cacheName);
[Throws]
Promise<Cache> open(DOMString cacheName);
[Throws]
Promise<boolean> delete(DOMString cacheName);
[Throws]
Promise<sequence<DOMString>> keys();
[NewObject]
Promise<Response> match(RequestInfo request, optional CacheQueryOptions options);
[NewObject]
Promise<boolean> has(DOMString cacheName);
[NewObject]
Promise<Cache> open(DOMString cacheName);
[NewObject]
Promise<boolean> delete(DOMString cacheName);
[NewObject]
Promise<sequence<DOMString>> keys();
};
// chrome-only, gecko specific extension
enum CacheStorageNamespace {
"content", "chrome"
};
+12 -1
View File
@@ -10,6 +10,7 @@
#include "nsIContentPolicy.h"
#include "nsIContentSecurityPolicy.h"
#include "nsIHttpChannel.h"
#include "nsIHttpChannelInternal.h"
#include "nsIInputStreamPump.h"
#include "nsIIOService.h"
#include "nsIProtocolHandler.h"
@@ -860,6 +861,16 @@ private:
return rv;
}
// If we are loading a script for a ServiceWorker then we must not
// try to intercept it. If the interception matches the current
// ServiceWorker's scope then we could deadlock the load.
if (mWorkerPrivate->IsServiceWorker()) {
nsCOMPtr<nsIHttpChannelInternal> internal = do_QueryInterface(channel);
if (internal) {
internal->ForceNoIntercept();
}
}
if (loadInfo.mCacheStatus != ScriptLoadInfo::ToBeCached) {
rv = channel->AsyncOpen(loader, indexSupports);
if (NS_WARN_IF(NS_FAILED(rv))) {
@@ -1097,7 +1108,7 @@ private:
mWorkerPrivate->SetBaseURI(finalURI);
}
nsIPrincipal* principal = mWorkerPrivate->GetPrincipal();
DebugOnly<nsIPrincipal*> principal = mWorkerPrivate->GetPrincipal();
MOZ_ASSERT(principal);
nsILoadGroup* loadGroup = mWorkerPrivate->GetLoadGroup();
MOZ_ASSERT(loadGroup);
+12
View File
@@ -3184,6 +3184,7 @@ class FetchEventRunnable : public WorkerRunnable
RequestCredentials mRequestCredentials;
nsContentPolicyType mContentPolicyType;
nsCOMPtr<nsIInputStream> mUploadStream;
nsCString mReferrer;
public:
FetchEventRunnable(WorkerPrivate* aWorkerPrivate,
nsMainThreadPtrHandle<nsIInterceptedChannel>& aChannel,
@@ -3200,6 +3201,7 @@ public:
// send credentials to same-origin websites unless explicitly forbidden.
, mRequestCredentials(RequestCredentials::Same_origin)
, mContentPolicyType(nsIContentPolicy::TYPE_INVALID)
, mReferrer(kFETCH_CLIENT_REFERRER_STR)
{
MOZ_ASSERT(aWorkerPrivate);
}
@@ -3239,6 +3241,15 @@ public:
mContentPolicyType = loadInfo->InternalContentPolicyType();
nsCOMPtr<nsIURI> referrerURI;
rv = NS_GetReferrerFromChannel(channel, getter_AddRefs(referrerURI));
// We can't bail on failure since certain non-http channels like JAR
// channels are intercepted but don't have referrers.
if (NS_SUCCEEDED(rv) && referrerURI) {
rv = referrerURI->GetSpec(mReferrer);
NS_ENSURE_SUCCESS(rv, rv);
}
nsCOMPtr<nsIHttpChannel> httpChannel = do_QueryInterface(channel);
if (httpChannel) {
rv = httpChannel->GetRequestMethod(mMethod);
@@ -3368,6 +3379,7 @@ private:
internalReq->SetCreatedByFetchEvent();
internalReq->SetBody(mUploadStream);
internalReq->SetReferrer(NS_ConvertUTF8toUTF16(mReferrer));
request->SetContentPolicyType(mContentPolicyType);
@@ -7,17 +7,47 @@ import sys
import time
import warnings
# psutil will raise NotImplementedError if the platform is not supported.
try:
import psutil
except Exception:
psutil = None
from collections import (
OrderedDict,
namedtuple,
)
class PsutilStub(object):
def __init__(self):
self.sswap = namedtuple('sswap', ['total', 'used', 'free', 'percent', 'sin',
'sout'])
self.sdiskio = namedtuple('sdiskio', ['read_count', 'write_count',
'read_bytes', 'write_bytes',
'read_time', 'write_time'])
self.pcputimes = namedtuple('pcputimes', ['user', 'system'])
self.svmem = namedtuple(
'svmem', ['total', 'available', 'percent', 'used', 'free',
'active', 'inactive', 'buffers', 'cached'])
def cpu_percent(self, a, b):
return [0]
def cpu_times(self, percpu):
if percpu:
return [self.pcputimes(0, 0)]
else:
return self.pcputimes(0, 0)
def disk_io_counters(self):
return self.sdiskio(0, 0, 0, 0, 0, 0)
def swap_memory(self):
return self.sswap(0, 0, 0, 0, 0, 0)
def virtual_memory(self):
return self.svmem(0, 0, 0, 0, 0, 0, 0, 0, 0)
# psutil will raise NotImplementedError if the platform is not supported.
try:
import psutil
except Exception:
try:
# The PsutilStub should get us time intervals, at least
psutil = PsutilStub()
except Exception:
psutil = None
from contextlib import contextmanager
def get_disk_io_counters():
@@ -1,5 +1,3 @@
[canvas_complexshapes_arcto_001.htm]
type: reftest
reftype: ==
refurl: /2dcontext/building-paths/canvas_complexshapes_arcto_001-ref.htm
expected: FAIL
@@ -1,10 +1,8 @@
[canvas_complexshapes_beziercurveto_001.htm]
type: reftest
reftype: ==
refurl: /2dcontext/building-paths/canvas_complexshapes_beziercurveto_001-ref.htm
expected:
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): PASS
FAIL
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
@@ -1,5 +1,3 @@
[canvas_compositing_globalcompositeoperation_001.htm]
type: reftest
reftype: ==
refurl: /2dcontext/compositing/canvas_compositing_globalcompositeoperation_001-ref.htm
expected: FAIL
@@ -7,9 +7,4 @@
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
@@ -7,9 +7,4 @@
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
@@ -7,9 +7,4 @@
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
@@ -2,10 +2,6 @@
type: testharness
[Canvas test: 2d.gradient.interpolate.overlap]
expected:
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
@@ -2,20 +2,6 @@
type: testharness
[Canvas test: 2d.gradient.radial.cone.behind]
expected:
if not debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
@@ -2,20 +2,6 @@
type: testharness
[Canvas test: 2d.gradient.radial.cone.beside]
expected:
if not debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
@@ -1,6 +0,0 @@
[2d.gradient.radial.cone.front.html]
type: testharness
[Canvas test: 2d.gradient.radial.cone.front]
expected:
if (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): FAIL
@@ -2,20 +2,6 @@
type: testharness
[Canvas test: 2d.gradient.radial.cone.shape2]
expected:
if not debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
@@ -1,6 +0,0 @@
[2d.gradient.radial.cone.top.html]
type: testharness
[Canvas test: 2d.gradient.radial.cone.top]
expected:
if (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): FAIL
@@ -2,20 +2,6 @@
type: testharness
[Canvas test: 2d.gradient.radial.equal]
expected:
if not debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
@@ -1,6 +0,0 @@
[2d.gradient.radial.inside2.html]
type: testharness
[Canvas test: 2d.gradient.radial.inside2]
expected:
if (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): FAIL
@@ -1,6 +0,0 @@
[2d.gradient.radial.inside3.html]
type: testharness
[Canvas test: 2d.gradient.radial.inside3]
expected:
if (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): FAIL
@@ -1,6 +0,0 @@
[2d.gradient.radial.outside1.html]
type: testharness
[Canvas test: 2d.gradient.radial.outside1]
expected:
if (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): FAIL
@@ -3,6 +3,5 @@
[Canvas test: 2d.gradient.radial.outside3]
expected:
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if (os == "mac"): FAIL
if os == "mac": FAIL
@@ -2,20 +2,6 @@
type: testharness
[Canvas test: 2d.gradient.radial.touch1]
expected:
if not debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
@@ -2,20 +2,6 @@
type: testharness
[Canvas test: 2d.gradient.radial.touch3]
expected:
if not debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
@@ -1,6 +0,0 @@
[2d.line.cap.closed.html]
type: testharness
[Line caps are not drawn at the corners of an unclosed rectangle]
expected:
if (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): FAIL
@@ -1,8 +0,0 @@
[2d.line.join.parallel.html]
type: testharness
[Line joins are drawn at 180-degree joins]
expected:
if (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): FAIL
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): FAIL
@@ -1,5 +1,3 @@
[canvas_linestyles_linecap_001.htm]
type: reftest
reftype: ==
refurl: /2dcontext/line-styles/canvas_linestyles_linecap_001-ref.htm
expected: FAIL
@@ -2,14 +2,8 @@
type: testharness
[arc() with lineWidth > 2*radius is drawn sensibly]
expected:
if not debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
@@ -2,7 +2,6 @@
type: testharness
[arc() from 0 to pi does not draw anything in the wrong half]
expected:
if (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
@@ -2,14 +2,8 @@
type: testharness
[arc() from 0 to -pi/2 does not draw anything in the wrong quadrant]
expected:
if not debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
@@ -3,6 +3,5 @@
[arcTo() curves in the right kind of shape]
expected:
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if (os == "mac"): FAIL
if os == "mac": FAIL
@@ -3,6 +3,5 @@
[arcTo() curves in the right kind of shape]
expected:
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if (os == "mac"): FAIL
if os == "mac": FAIL
@@ -2,20 +2,6 @@
type: testharness
[If there is no subpath, the first control point is added (and nothing is drawn up to it)]
expected:
if not debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
@@ -2,20 +2,6 @@
type: testharness
[If there is no subpath, the first control point is added]
expected:
if not debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
@@ -2,20 +2,6 @@
type: testharness
[Canvas test: 2d.path.rect.selfintersect]
expected:
if not debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
@@ -2,10 +2,6 @@
type: testharness
[Canvas test: 2d.path.rect.zero.3]
expected:
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
@@ -2,20 +2,6 @@
type: testharness
[Canvas test: 2d.path.rect.zero.6]
expected:
if not debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): PASS
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): PASS
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
@@ -2,7 +2,10 @@
type: testharness
[Zero-length line segments from arcTo and arc are removed before stroking]
expected:
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): FAIL
@@ -2,7 +2,10 @@
type: testharness
[Zero-length line segments from closed paths are removed before stroking]
expected:
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): FAIL
@@ -2,7 +2,10 @@
type: testharness
[Zero-length line segments from quadraticCurveTo and bezierCurveTo are removed before stroking]
expected:
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): FAIL
@@ -2,7 +2,10 @@
type: testharness
[Zero-length line segments from lineTo are removed before stroking]
expected:
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): FAIL
@@ -2,7 +2,10 @@
type: testharness
[Zero-length line segments from rect and strokeRect are removed before stroking]
expected:
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): PASS
FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "mac") and (version == "OS X 10.10.2") and (processor == "x86") and (bits == 32): FAIL
@@ -2,10 +2,6 @@
type: testharness
[Stroke line widths are scaled by the current transformation matrix]
expected:
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): FAIL
if not debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): FAIL
@@ -2,8 +2,6 @@
type: testharness
[Shadows are drawn if shadowBlur is set]
expected:
if (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if (os == "mac"): FAIL
if os == "mac": FAIL
@@ -2,7 +2,5 @@
type: testharness
[Shadows are drawn if shadowOffsetX is set]
expected:
if (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if (os == "mac"): FAIL
if os == "mac": FAIL
@@ -2,7 +2,5 @@
type: testharness
[Shadows are drawn if shadowOffsetY is set]
expected:
if (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): FAIL
if not debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): FAIL
if (os == "mac"): FAIL
if os == "mac": FAIL
@@ -1,5 +1,3 @@
[canvas_state_restore_001.htm]
type: reftest
reftype: ==
refurl: /2dcontext/the-canvas-state/canvas_state_restore_001-ref.htm
expected: FAIL
@@ -1,5 +1,3 @@
[canvas_transformations_scale_001.htm]
type: reftest
reftype: ==
refurl: /2dcontext/transformations/canvas_transformations_scale_001-ref.htm
expected: FAIL
@@ -1,5 +1,5 @@
[EventObject.after.dispatchEvent.html]
type: testharness
[Test Description: As the final step of the event dispatch, the implementation must reset the event object\'s default-action-prevention state. ]
[Test Description: As the final step of the event dispatch, the implementation must reset the event object's default-action-prevention state. ]
expected: FAIL
@@ -1,5 +1,5 @@
[EventObject.after.dispatchEvent.html]
type: testharness
[Test Description: As the final step of the event dispatch, the implementation must reset the event object\'s default-action-prevention state. ]
[Test Description: As the final step of the event dispatch, the implementation must reset the event object's default-action-prevention state. ]
expected: FAIL
@@ -1,5 +0,0 @@
[dispatchEvent.DISPATCH_REQUEST_ERR.html]
type: testharness
[Test Description: dispatchEvent() raises DISPATCH_REQUEST_ERR EventException if the Event object is already being dispatched.]
expected: FAIL
@@ -1,5 +0,0 @@
[dispatchEvent.NOT_SUPPORTED_ERR.html]
type: testharness
[Test Description: dispatchEvent - DOMException NOT_SUPPORTED_ERR raises if the Event object has not been created using DocumentEvent.createEvent().]
expected: FAIL
@@ -1,5 +0,0 @@
[dispatchEvent.UNSPECIFIED_EVENT_TYPE_ERR.html]
type: testharness
[Test Description: dispatchEvent - EventException UNSPECIFIED_EVENT_TYPE_ERR raises if the Event.type was not specified by initializing the event before dispatchEvent was called.]
expected: FAIL
@@ -3,7 +3,7 @@
[Blob interface object]
expected: FAIL
[no-argument Blob constructor without \'new\']
[no-argument Blob constructor without 'new']
expected: FAIL
[A plain object should be treated as a sequence for the blobParts argument.]
@@ -15,7 +15,7 @@
[The length getter should be invoked and any exceptions should be propagated.]
expected: FAIL
[A platform object that supports indexed properties should be treated as a sequence for the blobParts argument (overwritten \'length\'.)]
[A platform object that supports indexed properties should be treated as a sequence for the blobParts argument (overwritten 'length'.)]
expected: FAIL
[ToUint32 should be applied to the length and any exceptions should be propagated.]
@@ -42,7 +42,7 @@
[Passing a platform array object as the blobParts array should work (MessagePort[\]).]
expected: FAIL
[The \'endings\' property should be ignored.]
[The 'endings' property should be ignored.]
expected: FAIL
[Passing object "/regex/" (index 4) for options should use the defaults.]
@@ -51,7 +51,7 @@
[Passing object "/regex/" (index 4) for options should use the defaults (with newlines).]
expected: FAIL
[Newlines should not change when endings is \'native\'.]
[Newlines should not change when endings is 'native'.]
expected: FAIL
[Blob with type "A"]
@@ -60,22 +60,22 @@
[Blob with type "TEXT/HTML"]
expected: FAIL
[Blob with type "\xc3\xa5"]
[Blob with type "å"]
expected: FAIL
[Blob with type "\xf0\x90\x91\xbe"]
[Blob with type "𐑾"]
expected: FAIL
[Blob with type "\\timage/gif\\t"]
expected: FAIL
[Blob with type "image/gif;\x7f"]
[Blob with type "image/gif;"]
expected: FAIL
[Blob with type "\xc4\xb0mage/gif"]
[Blob with type "İmage/gif"]
expected: FAIL
[Blob with type "\xc4\xb1mage/gif"]
[Blob with type "ımage/gif"]
expected: FAIL
[Blob with type "image/gif\\0"]
@@ -1,6 +1,6 @@
[Blob-slice.html]
type: testharness
[Invalid contentType ("\xc3\xbf")]
[Invalid contentType ("ÿ")]
expected: FAIL
[Invalid contentType ("te(xt/plain")]
@@ -66,7 +66,7 @@
[Invalid contentType ("te\\x1fxt/plain")]
expected: FAIL
[Invalid contentType ("te\x7fxt/plain")]
[Invalid contentType ("text/plain")]
expected: FAIL
[Valid contentType ("TEXT/PLAIN")]
@@ -3,163 +3,20 @@
[URL interface: operation createFor(Blob)]
expected: FAIL
[Blob interface: operation close()]
expected: FAIL
[Blob interface: [object Blob\] must inherit property "close" with the proper type (3)]
expected: FAIL
[File interface object length]
expected: FAIL
[File interface: attribute lastModifiedDate]
expected: FAIL
[Stringification of [object Blob @ 0x99f5c4f0 (native @ 0x99fcc6a0)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x99f5c4f0 (native @ 0x99fcc6a0)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x7f7a0a9ac320 (native @ 0x7f7a0abfe7c0)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x7f7a0a9ac320 (native @ 0x7f7a0abfe7c0)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x12b21f560 (native @ 0x128d64c40)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x12b21f560 (native @ 0x128d64c40)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x1289ea740 (native @ 0x125765800)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x1289ea740 (native @ 0x125765800)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x123a75a60 (native @ 0x11d2b3700)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x123a75a60 (native @ 0x11d2b3700)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x139eadc0 (native @ 0x1391e3e0)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x139eadc0 (native @ 0x1391e3e0)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0xd397e20 (native @ 0xe560600)\]]
expected: FAIL
[Blob interface: [object Blob @ 0xd397e20 (native @ 0xe560600)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x14192400 (native @ 0x141ff7c0)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x14192400 (native @ 0x141ff7c0)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x9973a190 (native @ 0x985a2d80)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x9973a190 (native @ 0x985a2d80)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x7fd912b41040 (native @ 0x7fd91858bf40)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x7fd912b41040 (native @ 0x7fd91858bf40)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x122d33620 (native @ 0x12211ef40)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x122d33620 (native @ 0x12211ef40)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x1401c38c0 (native @ 0x141f18d00)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x1401c38c0 (native @ 0x141f18d00)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x135030260 (native @ 0x129fe72c0)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x135030260 (native @ 0x129fe72c0)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x123c94f0 (native @ 0xf8778c0)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x123c94f0 (native @ 0xf8778c0)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x190ec670 (native @ 0x12b8fce0)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x190ec670 (native @ 0x12b8fce0)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0xc4085e0 (native @ 0xc5012c0)\]]
expected: FAIL
[Blob interface: [object Blob @ 0xc4085e0 (native @ 0xc5012c0)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0xa046fd60 (native @ 0xa14d5700)\]]
expected: FAIL
[Blob interface: [object Blob @ 0xa046fd60 (native @ 0xa14d5700)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x7f72c92fe2c0 (native @ 0x7f72ced2a0c0)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x7f72c92fe2c0 (native @ 0x7f72ced2a0c0)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x11d70bee0 (native @ 0x120a3c440)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x11d70bee0 (native @ 0x120a3c440)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x12c0947c0 (native @ 0x12c4f6d40)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x12c0947c0 (native @ 0x12c4f6d40)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of [object Blob @ 0x125881260 (native @ 0x11603ca40)\]]
expected: FAIL
[Blob interface: [object Blob @ 0x125881260 (native @ 0x11603ca40)\] must inherit property "close" with the proper type (3)]
expected: FAIL
[Stringification of new Blob(["TEST"\])]
expected:
if debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): FAIL
[Blob interface: new Blob(["TEST"\]) must inherit property "close" with the proper type (3)]
expected: FAIL
[Blob interface: attribute isClosed]
expected: FAIL
[Blob interface: operation close()]
expected: FAIL
[Blob interface: new Blob(["TEST"\]) must inherit property "isClosed" with the proper type (2)]
expected: FAIL
[Blob interface: new Blob(["TEST"\]) must inherit property "close" with the proper type (4)]
expected: FAIL
[Stringification of new File(["myFileBits"\], "myFileName")]
expected:
if debug and (os == "mac") and (version == "OS X 10.9") and (processor == "x86_64") and (bits == 64): FAIL
[File interface object length]
expected: FAIL
[Blob interface: new File(["myFileBits"\], "myFileName") must inherit property "isClosed" with the proper type (2)]
expected: FAIL
@@ -176,7 +33,7 @@
[FileReaderSync interface: existence and properties of interface prototype object]
expected: FAIL
[FileReaderSync interface: existence and properties of interface prototype object\'s "constructor" property]
[FileReaderSync interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[FileReaderSync interface: operation readAsArrayBuffer(Blob)]
@@ -1,5 +1,5 @@
[url_createobjecturl_blob.html]
type: testharness
[Check if the Blob URI starts with \'blob\' using createFor()]
[Check if the Blob URI starts with 'blob' using createFor()]
expected: FAIL
@@ -1,10 +1,5 @@
[idbcursor_delete_index4.htm]
type: testharness
expected:
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): CRASH
[IDBCursor.delete() - index - throw InvalidStateError caused by object store been deleted]
expected: FAIL
@@ -1,9 +1,5 @@
[idbcursor_delete_index5.htm]
type: testharness
expected:
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): CRASH
[IDBCursor.delete() - index - throw InvalidStateError when the cursor is being iterated]
expected: FAIL
@@ -1,11 +1,5 @@
[idbcursor_delete_objectstore4.htm]
type: testharness
expected:
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): CRASH
[IDBCursor.delete() - object store - throw InvalidStateError caused by object store been deleted]
expected: FAIL
@@ -1,8 +1,5 @@
[idbcursor_delete_objectstore5.htm]
type: testharness
expected:
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): CRASH
[IDBCursor.delete() - object store - throw InvalidStateError when the cursor is being iterated]
expected: FAIL
@@ -1,11 +1,5 @@
[idbcursor_update_index4.htm]
type: testharness
expected:
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): CRASH
[IDBCursor.update() - index - attempt to modify a record when object store been deleted]
expected: FAIL
@@ -1,5 +0,0 @@
[idbcursor_update_index5.htm]
type: testharness
expected:
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): CRASH
@@ -1,11 +1,5 @@
[idbcursor_update_objectstore5.htm]
type: testharness
expected:
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): CRASH
[IDBCursor.update() - object store - attempt to modify a record when object store been deleted]
expected: FAIL
@@ -1,5 +0,0 @@
[idbcursor_update_objectstore6.htm]
type: testharness
expected:
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): TIMEOUT
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): CRASH
@@ -1,7 +0,0 @@
[idbfactory_open12.htm]
type: testharness
expected:
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): CRASH
@@ -1,6 +0,0 @@
[idbfactory_open2.htm]
type: testharness
expected:
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): CRASH
@@ -1,11 +1,5 @@
[idbindex_get6.htm]
type: testharness
expected:
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): CRASH
[IDBIndex.get() - throw InvalidStateError when the index is deleted]
expected: FAIL
@@ -1,5 +0,0 @@
[idbindex_get7.htm]
type: testharness
expected:
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): CRASH
@@ -1,11 +1,5 @@
[idbindex_getKey6.htm]
type: testharness
expected:
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): CRASH
[IDBIndex.getKey() - throw InvalidStateError when the index is deleted]
expected: FAIL
@@ -1,6 +0,0 @@
[idbindex_getKey7.htm]
type: testharness
expected:
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): CRASH
@@ -1,11 +1,5 @@
[idbindex_openCursor.htm]
type: testharness
expected:
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): CRASH
[IDBIndex.openCursor() - throw InvalidStateError when the index is deleted]
expected: FAIL
@@ -1,5 +0,0 @@
[idbindex_openCursor2.htm]
type: testharness
expected:
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): CRASH
@@ -1,11 +1,5 @@
[idbindex_openKeyCursor2.htm]
type: testharness
expected:
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): CRASH
[IDBIndex.openKeyCursor() - throw InvalidStateError when the index is deleted]
expected: FAIL
@@ -1,5 +0,0 @@
[idbindex_openKeyCursor3.htm]
type: testharness
expected:
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): CRASH
@@ -1,11 +1,5 @@
[idbobjectstore_deleted.htm]
type: testharness
expected:
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "linux") and (version == "Ubuntu 12.04") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "mac") and (version == "OS X 10.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "mac") and (version == "OS X 10.6.8") and (processor == "x86_64") and (bits == 64): CRASH
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86_64") and (bits == 64): CRASH
[Attempting to use deleted IDBObjectStore]
expected: FAIL
@@ -1,6 +0,0 @@
[idbobjectstore_get.htm]
type: testharness
expected:
if debug and (os == "win") and (version == "6.2.9200") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "win") and (version == "5.1.2600") and (processor == "x86") and (bits == 32): CRASH
if debug and (os == "win") and (version == "6.1.7601") and (processor == "x86") and (bits == 32): CRASH
@@ -12,7 +12,7 @@
[IDBCursorWithValue interface: existence and properties of interface prototype object]
expected: FAIL
[IDBCursorWithValue interface: existence and properties of interface prototype object\'s "constructor" property]
[IDBCursorWithValue interface: existence and properties of interface prototype object's "constructor" property]
expected: FAIL
[IDBCursorWithValue interface: attribute value]
@@ -1,5 +1,17 @@
[data-uri.htm]
type: testharness
[XHR method GET with charset text/plain]
expected: FAIL
[XHR method GET with charset text/plain (base64)]
expected: FAIL
[XHR method GET with charset text/html]
expected: FAIL
[XHR method GET with charset text/html;charset=UTF-8]
expected: FAIL
[XHR method GET with charset image/png]
expected: FAIL
@@ -18,15 +30,3 @@
[XHR method UNICORN with charset text/plain]
expected: FAIL
[XHR method GET with charset text/plain]
expected: FAIL
[XHR method GET with charset text/plain (base64)]
expected: FAIL
[XHR method GET with charset text/html]
expected: FAIL
[XHR method GET with charset text/html;charset=UTF-8]
expected: FAIL
@@ -1,5 +0,0 @@
[getresponseheader-chunked-trailer.htm]
type: testharness
[XMLHttpRequest: getResponseHeader() and HTTP trailer]
expected: FAIL
@@ -1,68 +1,5 @@
[interfaces.html]
type: testharness
[XMLHttpRequest interface: operation open(ByteString,DOMString,boolean,DOMString,DOMString)]
expected: FAIL
[XMLHttpRequest interface: calling open(ByteString,DOMString,boolean,DOMString,DOMString) on new XMLHttpRequest() with too few arguments must throw TypeError]
expected: FAIL
[XMLHttpRequest interface: new XMLHttpRequest() must inherit property "statusText" with the proper type (16)]
expected: FAIL
[FormData interface: operation delete(DOMString)]
expected: FAIL
[FormData interface: operation get(DOMString)]
expected: FAIL
[FormData interface: operation getAll(DOMString)]
expected: FAIL
[FormData interface: operation has(DOMString)]
expected: FAIL
[FormData interface: operation set(DOMString,Blob,DOMString)]
expected: FAIL
[FormData interface: operation set(DOMString,DOMString)]
expected: FAIL
[FormData interface: calling delete(DOMString) on new FormData() with too few arguments must throw TypeError]
expected: FAIL
[FormData interface: calling get(DOMString) on new FormData() with too few arguments must throw TypeError]
expected: FAIL
[FormData interface: calling getAll(DOMString) on new FormData() with too few arguments must throw TypeError]
expected: FAIL
[FormData interface: calling has(DOMString) on new FormData() with too few arguments must throw TypeError]
expected: FAIL
[FormData interface: calling set(DOMString,Blob,DOMString) on new FormData() with too few arguments must throw TypeError]
expected: FAIL
[FormData interface: calling set(DOMString,DOMString) on new FormData() with too few arguments must throw TypeError]
expected: FAIL
[FormData interface: calling delete(DOMString) on new FormData(form) with too few arguments must throw TypeError]
expected: FAIL
[FormData interface: calling get(DOMString) on new FormData(form) with too few arguments must throw TypeError]
expected: FAIL
[FormData interface: calling getAll(DOMString) on new FormData(form) with too few arguments must throw TypeError]
expected: FAIL
[FormData interface: calling has(DOMString) on new FormData(form) with too few arguments must throw TypeError]
expected: FAIL
[FormData interface: calling set(DOMString,Blob,DOMString) on new FormData(form) with too few arguments must throw TypeError]
expected: FAIL
[FormData interface: calling set(DOMString,DOMString) on new FormData(form) with too few arguments must throw TypeError]
expected: FAIL
[XMLHttpRequest interface: operation open(ByteString,USVString,boolean,USVString,USVString)]
expected: FAIL

Some files were not shown because too many files have changed in this diff Show More