|
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/. */ |
|
6 |
|
7 #include "IDBWrapperCache.h" |
|
8 #include "nsCycleCollector.h" |
|
9 |
|
10 USING_INDEXEDDB_NAMESPACE |
|
11 |
|
12 NS_IMPL_CYCLE_COLLECTION_CLASS(IDBWrapperCache) |
|
13 |
|
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 |
|
19 |
|
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 |
|
27 |
|
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 |
|
34 |
|
35 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(IDBWrapperCache) |
|
36 NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper) |
|
37 |
|
38 NS_IMPL_ADDREF_INHERITED(IDBWrapperCache, DOMEventTargetHelper) |
|
39 NS_IMPL_RELEASE_INHERITED(IDBWrapperCache, DOMEventTargetHelper) |
|
40 |
|
41 IDBWrapperCache::~IDBWrapperCache() |
|
42 { |
|
43 mScriptOwner = nullptr; |
|
44 ReleaseWrapper(this); |
|
45 mozilla::DropJSObjects(this); |
|
46 } |
|
47 |
|
48 void |
|
49 IDBWrapperCache::SetScriptOwner(JSObject* aScriptOwner) |
|
50 { |
|
51 NS_ASSERTION(aScriptOwner, "This should never be null!"); |
|
52 |
|
53 mScriptOwner = aScriptOwner; |
|
54 mozilla::HoldJSObjects(this); |
|
55 } |
|
56 |
|
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 |