Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/abort/AbortController.cpp
Line
Count
Source (jump to first uncovered line)
1
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
3
/* This Source Code Form is subject to the terms of the Mozilla Public
4
 * License, v. 2.0. If a copy of the MPL was not distributed with this
5
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6
7
#include "AbortController.h"
8
#include "AbortSignal.h"
9
#include "mozilla/dom/AbortControllerBinding.h"
10
#include "mozilla/dom/WorkerPrivate.h"
11
12
namespace mozilla {
13
namespace dom {
14
15
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(AbortController, mGlobal, mSignal)
16
17
NS_IMPL_CYCLE_COLLECTING_ADDREF(AbortController)
18
NS_IMPL_CYCLE_COLLECTING_RELEASE(AbortController)
19
20
0
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(AbortController)
21
0
  NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
22
0
  NS_INTERFACE_MAP_ENTRY(nsISupports)
23
0
NS_INTERFACE_MAP_END
24
25
/* static */ already_AddRefed<AbortController>
26
AbortController::Constructor(const GlobalObject& aGlobal, ErrorResult& aRv)
27
0
{
28
0
  nsCOMPtr<nsIGlobalObject> global = do_QueryInterface(aGlobal.GetAsSupports());
29
0
  if (!global) {
30
0
    aRv.Throw(NS_ERROR_FAILURE);
31
0
    return nullptr;
32
0
  }
33
0
34
0
  RefPtr<AbortController> abortController = new AbortController(global);
35
0
  return abortController.forget();
36
0
}
37
38
AbortController::AbortController(nsIGlobalObject* aGlobal)
39
  : mGlobal(aGlobal)
40
  , mAborted(false)
41
0
{}
42
43
JSObject*
44
AbortController::WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto)
45
0
{
46
0
  return AbortController_Binding::Wrap(aCx, this, aGivenProto);
47
0
}
48
49
nsIGlobalObject*
50
AbortController::GetParentObject() const
51
0
{
52
0
  return mGlobal;
53
0
}
54
55
AbortSignal*
56
AbortController::Signal()
57
0
{
58
0
  if (!mSignal) {
59
0
    mSignal = new AbortSignal(mGlobal, mAborted);
60
0
  }
61
0
62
0
  return mSignal;
63
0
}
64
65
void
66
AbortController::Abort()
67
0
{
68
0
  if (mAborted) {
69
0
    return;
70
0
  }
71
0
72
0
  mAborted = true;
73
0
74
0
  if (mSignal) {
75
0
    mSignal->Abort();
76
0
  }
77
0
}
78
79
} // dom namespace
80
} // mozilla namespace