Bug 1450754 [wpt PR 10272] - Fix customElements.upgrade() tests for <template>, a...
[gecko.git] / storage / mozStorageBindingParamsArray.cpp
blobfb7c9f14a2de6cb40df4ba37928312557ecf437a
1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
2 * vim: sw=2 ts=2 et lcs=trail\:.,tab\:>~ :
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/. */
7 #include "mozStorageBindingParamsArray.h"
8 #include "mozStorageBindingParams.h"
9 #include "StorageBaseStatementInternal.h"
11 namespace mozilla {
12 namespace storage {
14 ////////////////////////////////////////////////////////////////////////////////
15 //// BindingParamsArray
17 BindingParamsArray::BindingParamsArray(
18 StorageBaseStatementInternal *aOwningStatement
20 : mOwningStatement(aOwningStatement)
21 , mLocked(false)
25 void
26 BindingParamsArray::lock()
28 NS_ASSERTION(mLocked == false, "Array has already been locked!");
29 mLocked = true;
31 // We also no longer need to hold a reference to our statement since it owns
32 // us.
33 mOwningStatement = nullptr;
36 const StorageBaseStatementInternal *
37 BindingParamsArray::getOwner() const
39 return mOwningStatement;
42 NS_IMPL_ISUPPORTS(
43 BindingParamsArray,
44 mozIStorageBindingParamsArray
47 ///////////////////////////////////////////////////////////////////////////////
48 //// mozIStorageBindingParamsArray
50 NS_IMETHODIMP
51 BindingParamsArray::NewBindingParams(mozIStorageBindingParams **_params)
53 NS_ENSURE_FALSE(mLocked, NS_ERROR_UNEXPECTED);
55 nsCOMPtr<mozIStorageBindingParams> params(
56 mOwningStatement->newBindingParams(this));
57 NS_ENSURE_TRUE(params, NS_ERROR_UNEXPECTED);
59 params.forget(_params);
60 return NS_OK;
63 NS_IMETHODIMP
64 BindingParamsArray::AddParams(mozIStorageBindingParams *aParameters)
66 NS_ENSURE_FALSE(mLocked, NS_ERROR_UNEXPECTED);
68 BindingParams *params = static_cast<BindingParams *>(aParameters);
70 // Check to make sure that this set of parameters was created with us.
71 if (params->getOwner() != this)
72 return NS_ERROR_UNEXPECTED;
74 NS_ENSURE_TRUE(mArray.AppendElement(params), NS_ERROR_OUT_OF_MEMORY);
76 // Lock the parameters only after we've successfully added them.
77 params->lock();
79 return NS_OK;
82 NS_IMETHODIMP
83 BindingParamsArray::GetLength(uint32_t *_length)
85 *_length = length();
86 return NS_OK;
89 } // namespace storage
90 } // namespace mozilla