Coverage Report

Created: 2018-09-25 14:53

/src/mozilla-central/dom/simpledb/SDBRequest.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 "SDBRequest.h"
8
9
#include "nsISDBCallbacks.h"
10
#include "nsThreadUtils.h"
11
#include "SDBConnection.h"
12
13
namespace mozilla {
14
namespace dom {
15
16
SDBRequest::SDBRequest(SDBConnection* aConnection)
17
  : mConnection(aConnection)
18
  , mResultCode(NS_OK)
19
  , mHaveResultOrErrorCode(false)
20
0
{
21
0
  AssertIsOnOwningThread();
22
0
  MOZ_ASSERT(aConnection);
23
0
}
24
25
SDBRequest::~SDBRequest()
26
0
{
27
0
  AssertIsOnOwningThread();
28
0
}
29
30
void
31
SDBRequest::SetResult(nsIVariant* aResult)
32
0
{
33
0
  AssertIsOnOwningThread();
34
0
  MOZ_ASSERT(aResult);
35
0
  MOZ_ASSERT(mConnection);
36
0
  MOZ_ASSERT(!mHaveResultOrErrorCode);
37
0
38
0
  mResult = aResult;
39
0
  mHaveResultOrErrorCode = true;
40
0
41
0
  FireCallback();
42
0
}
43
44
void
45
SDBRequest::SetError(nsresult aRv)
46
0
{
47
0
  AssertIsOnOwningThread();
48
0
  MOZ_ASSERT(mConnection);
49
0
  MOZ_ASSERT(mResultCode == NS_OK);
50
0
  MOZ_ASSERT(!mHaveResultOrErrorCode);
51
0
52
0
  mResultCode = aRv;
53
0
  mHaveResultOrErrorCode = true;
54
0
55
0
  FireCallback();
56
0
}
57
58
void
59
SDBRequest::FireCallback()
60
0
{
61
0
  AssertIsOnOwningThread();
62
0
63
0
  if (mCallback) {
64
0
    nsCOMPtr<nsISDBCallback> callback;
65
0
    callback.swap(mCallback);
66
0
67
0
    MOZ_ALWAYS_SUCCEEDS(NS_DispatchToCurrentThread(
68
0
      NewRunnableMethod<RefPtr<SDBRequest>>(
69
0
        "nsISDBCallback::OnComplete",
70
0
        callback,
71
0
        &nsISDBCallback::OnComplete,
72
0
        this)));
73
0
  }
74
0
}
75
76
NS_IMPL_CYCLE_COLLECTING_ADDREF(SDBRequest)
77
NS_IMPL_CYCLE_COLLECTING_RELEASE(SDBRequest)
78
79
0
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(SDBRequest)
80
0
  NS_INTERFACE_MAP_ENTRY(nsISupports)
81
0
  NS_INTERFACE_MAP_ENTRY(nsISDBRequest)
82
0
NS_INTERFACE_MAP_END
83
84
NS_IMPL_CYCLE_COLLECTION(SDBRequest, mCallback, mResult)
85
86
NS_IMETHODIMP
87
SDBRequest::GetResult(nsIVariant** aResult)
88
0
{
89
0
  AssertIsOnOwningThread();
90
0
  MOZ_ASSERT(aResult);
91
0
92
0
  if (!mHaveResultOrErrorCode) {
93
0
    return NS_ERROR_NOT_AVAILABLE;
94
0
  }
95
0
96
0
  NS_IF_ADDREF(*aResult = mResult);
97
0
  return NS_OK;
98
0
}
99
100
NS_IMETHODIMP
101
SDBRequest::GetResultCode(nsresult* aResultCode)
102
0
{
103
0
  AssertIsOnOwningThread();
104
0
  MOZ_ASSERT(aResultCode);
105
0
106
0
  if (!mHaveResultOrErrorCode) {
107
0
    return NS_ERROR_NOT_AVAILABLE;
108
0
  }
109
0
110
0
  *aResultCode = mResultCode;
111
0
  return NS_OK;
112
0
}
113
114
NS_IMETHODIMP
115
SDBRequest::GetCallback(nsISDBCallback** aCallback)
116
0
{
117
0
  AssertIsOnOwningThread();
118
0
  MOZ_ASSERT(aCallback);
119
0
120
0
  NS_IF_ADDREF(*aCallback = mCallback);
121
0
  return NS_OK;
122
0
}
123
124
NS_IMETHODIMP
125
SDBRequest::SetCallback(nsISDBCallback* aCallback)
126
0
{
127
0
  AssertIsOnOwningThread();
128
0
129
0
  mCallback = aCallback;
130
0
  return NS_OK;
131
0
}
132
133
} // namespace dom
134
} // namespace mozilla