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 "nsContentUtils.h"
9 :
10 : USING_INDEXEDDB_NAMESPACE
11 :
12 1396 : NS_IMPL_CYCLE_COLLECTION_CLASS(IDBWrapperCache)
13 :
14 1256 : NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(IDBWrapperCache,
15 : nsDOMEventTargetHelper)
16 : // Don't need NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS because
17 : // nsDOMEventTargetHelper does it for us.
18 1256 : NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
19 :
20 791 : NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(IDBWrapperCache,
21 : nsDOMEventTargetHelper)
22 791 : if (tmp->mScriptOwner) {
23 791 : NS_DROP_JS_OBJECTS(tmp, IDBWrapperCache);
24 791 : tmp->mScriptOwner = nsnull;
25 : }
26 791 : NS_IMPL_CYCLE_COLLECTION_UNLINK_END
27 :
28 7266 : NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(IDBWrapperCache,
29 : nsDOMEventTargetHelper)
30 : // Don't need NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER because
31 : // nsDOMEventTargetHelper does it for us.
32 7266 : if (tmp->mScriptOwner) {
33 7266 : NS_IMPL_CYCLE_COLLECTION_TRACE_JS_CALLBACK(tmp->mScriptOwner,
34 : "mScriptOwner")
35 : }
36 7266 : NS_IMPL_CYCLE_COLLECTION_TRACE_END
37 :
38 123076 : NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(IDBWrapperCache)
39 123076 : NS_INTERFACE_MAP_END_INHERITING(nsDOMEventTargetHelper)
40 :
41 169857 : NS_IMPL_ADDREF_INHERITED(IDBWrapperCache, nsDOMEventTargetHelper)
42 169857 : NS_IMPL_RELEASE_INHERITED(IDBWrapperCache, nsDOMEventTargetHelper)
43 :
44 6876 : IDBWrapperCache::~IDBWrapperCache()
45 : {
46 3438 : if (mScriptOwner) {
47 2647 : NS_DROP_JS_OBJECTS(this, IDBWrapperCache);
48 : }
49 6876 : }
50 :
51 : bool
52 3438 : IDBWrapperCache::SetScriptOwner(JSObject* aScriptOwner)
53 : {
54 3438 : if (!aScriptOwner) {
55 0 : NS_ASSERTION(!mScriptOwner,
56 : "Don't null out existing owner, we need to call "
57 : "DropJSObjects!");
58 :
59 0 : return true;
60 : }
61 :
62 3438 : mScriptOwner = aScriptOwner;
63 :
64 3438 : nsISupports* thisSupports = NS_CYCLE_COLLECTION_UPCAST(this, IDBWrapperCache);
65 : nsXPCOMCycleCollectionParticipant* participant;
66 3438 : CallQueryInterface(this, &participant);
67 3438 : nsresult rv = nsContentUtils::HoldJSObjects(thisSupports, participant);
68 3438 : if (NS_FAILED(rv)) {
69 0 : NS_WARNING("nsContentUtils::HoldJSObjects failed.");
70 0 : mScriptOwner = nsnull;
71 0 : return false;
72 : }
73 :
74 3438 : return true;
75 4188 : }
|