Wed, 31 Dec 2014 06:55:50 +0100
Added tag UPSTREAM_283F7C6 for changeset ca08bd8f51b2
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=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 file,
5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "IDBWrapperCache.h"
8 #include "nsCycleCollector.h"
10 USING_INDEXEDDB_NAMESPACE
12 NS_IMPL_CYCLE_COLLECTION_CLASS(IDBWrapperCache)
14 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(IDBWrapperCache,
15 DOMEventTargetHelper)
16 // Don't need NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS because
17 // DOMEventTargetHelper does it for us.
18 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
20 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(IDBWrapperCache,
21 DOMEventTargetHelper)
22 if (tmp->mScriptOwner) {
23 tmp->mScriptOwner = nullptr;
24 mozilla::DropJSObjects(tmp);
25 }
26 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
28 NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(IDBWrapperCache,
29 DOMEventTargetHelper)
30 // Don't need NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER because
31 // DOMEventTargetHelper does it for us.
32 NS_IMPL_CYCLE_COLLECTION_TRACE_JS_MEMBER_CALLBACK(mScriptOwner)
33 NS_IMPL_CYCLE_COLLECTION_TRACE_END
35 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(IDBWrapperCache)
36 NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
38 NS_IMPL_ADDREF_INHERITED(IDBWrapperCache, DOMEventTargetHelper)
39 NS_IMPL_RELEASE_INHERITED(IDBWrapperCache, DOMEventTargetHelper)
41 IDBWrapperCache::~IDBWrapperCache()
42 {
43 mScriptOwner = nullptr;
44 ReleaseWrapper(this);
45 mozilla::DropJSObjects(this);
46 }
48 void
49 IDBWrapperCache::SetScriptOwner(JSObject* aScriptOwner)
50 {
51 NS_ASSERTION(aScriptOwner, "This should never be null!");
53 mScriptOwner = aScriptOwner;
54 mozilla::HoldJSObjects(this);
55 }
57 #ifdef DEBUG
58 void
59 IDBWrapperCache::AssertIsRooted() const
60 {
61 MOZ_ASSERT(cyclecollector::IsJSHolder(const_cast<IDBWrapperCache*>(this)),
62 "Why aren't we rooted?!");
63 }
64 #endif