Line data Source code
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 file,
5 : * You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #include "IDBWrapperCache.h"
8 :
9 : #include "mozilla/HoldDropJSObjects.h"
10 : #include "nsCOMPtr.h"
11 : #include "nsIScriptGlobalObject.h"
12 : #include "nsPIDOMWindow.h"
13 :
14 : namespace mozilla {
15 : namespace dom {
16 :
17 : NS_IMPL_CYCLE_COLLECTION_CLASS(IDBWrapperCache)
18 :
19 0 : NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(IDBWrapperCache,
20 : DOMEventTargetHelper)
21 0 : NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
22 :
23 0 : NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(IDBWrapperCache,
24 : DOMEventTargetHelper)
25 0 : if (tmp->mScriptOwner) {
26 0 : tmp->mScriptOwner = nullptr;
27 0 : mozilla::DropJSObjects(tmp);
28 : }
29 0 : NS_IMPL_CYCLE_COLLECTION_UNLINK_END
30 :
31 0 : NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(IDBWrapperCache,
32 : DOMEventTargetHelper)
33 : // Don't need NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER because
34 : // DOMEventTargetHelper does it for us.
35 0 : NS_IMPL_CYCLE_COLLECTION_TRACE_JS_MEMBER_CALLBACK(mScriptOwner)
36 0 : NS_IMPL_CYCLE_COLLECTION_TRACE_END
37 :
38 0 : NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(IDBWrapperCache)
39 0 : NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
40 :
41 0 : NS_IMPL_ADDREF_INHERITED(IDBWrapperCache, DOMEventTargetHelper)
42 0 : NS_IMPL_RELEASE_INHERITED(IDBWrapperCache, DOMEventTargetHelper)
43 :
44 0 : IDBWrapperCache::IDBWrapperCache(DOMEventTargetHelper* aOwner)
45 0 : : DOMEventTargetHelper(aOwner), mScriptOwner(nullptr)
46 0 : { }
47 :
48 0 : IDBWrapperCache::IDBWrapperCache(nsPIDOMWindowInner* aOwner)
49 0 : : DOMEventTargetHelper(aOwner), mScriptOwner(nullptr)
50 0 : { }
51 :
52 0 : IDBWrapperCache::~IDBWrapperCache()
53 : {
54 0 : mScriptOwner = nullptr;
55 0 : ReleaseWrapper(this);
56 0 : mozilla::DropJSObjects(this);
57 0 : }
58 :
59 : void
60 0 : IDBWrapperCache::SetScriptOwner(JSObject* aScriptOwner)
61 : {
62 0 : MOZ_ASSERT(aScriptOwner);
63 :
64 0 : mScriptOwner = aScriptOwner;
65 0 : mozilla::HoldJSObjects(this);
66 0 : }
67 :
68 : #ifdef DEBUG
69 : void
70 0 : IDBWrapperCache::AssertIsRooted() const
71 : {
72 0 : MOZ_ASSERT(IsJSHolder(const_cast<IDBWrapperCache*>(this)),
73 : "Why aren't we rooted?!");
74 0 : }
75 : #endif
76 :
77 : } // namespace dom
78 : } // namespace mozilla
|