forked from mozilla/gecko-dev
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathIDBFactory.h
152 lines (120 loc) · 4.18 KB
/
IDBFactory.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_dom_indexeddb_idbfactory_h__
#define mozilla_dom_indexeddb_idbfactory_h__
#include "mozilla/dom/indexedDB/IndexedDatabase.h"
#include "mozIStorageConnection.h"
#include "nsIIDBFactory.h"
#include "nsCycleCollectionParticipant.h"
class nsIAtom;
class nsPIDOMWindow;
namespace mozilla {
namespace dom {
class ContentParent;
}
}
BEGIN_INDEXEDDB_NAMESPACE
struct DatabaseInfo;
class IDBDatabase;
class IDBOpenDBRequest;
class IndexedDBChild;
class IndexedDBParent;
struct ObjectStoreInfo;
class IDBFactory MOZ_FINAL : public nsIIDBFactory
{
typedef mozilla::dom::ContentParent ContentParent;
typedef nsTArray<nsRefPtr<ObjectStoreInfo> > ObjectStoreInfoArray;
public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(IDBFactory)
NS_DECL_NSIIDBFACTORY
// Called when using IndexedDB from a window in a different process.
static nsresult Create(nsPIDOMWindow* aWindow,
const nsACString& aASCIIOrigin,
ContentParent* aContentParent,
IDBFactory** aFactory);
// Called when using IndexedDB from a window in the current process.
static nsresult Create(nsPIDOMWindow* aWindow,
ContentParent* aContentParent,
nsIIDBFactory** aFactory)
{
nsRefPtr<IDBFactory> factory;
nsresult rv =
Create(aWindow, EmptyCString(), aContentParent, getter_AddRefs(factory));
NS_ENSURE_SUCCESS(rv, rv);
factory.forget(aFactory);
return NS_OK;
}
// Called when using IndexedDB from a JS component or a JSM in the current
// process.
static nsresult Create(JSContext* aCx,
JSObject* aOwningObject,
ContentParent* aContentParent,
IDBFactory** aFactory);
// Called when using IndexedDB from a JS component or a JSM in a different
// process.
static nsresult Create(ContentParent* aContentParent,
IDBFactory** aFactory);
static already_AddRefed<mozIStorageConnection>
GetConnection(const nsAString& aDatabaseFilePath);
static nsresult
LoadDatabaseInformation(mozIStorageConnection* aConnection,
nsIAtom* aDatabaseId,
uint64_t* aVersion,
ObjectStoreInfoArray& aObjectStores);
static nsresult
SetDatabaseMetadata(DatabaseInfo* aDatabaseInfo,
uint64_t aVersion,
ObjectStoreInfoArray& aObjectStores);
nsresult
OpenCommon(const nsAString& aName,
int64_t aVersion,
const nsACString& aASCIIOrigin,
bool aDeleting,
JSContext* aCallingCx,
IDBOpenDBRequest** _retval);
nsresult
OpenCommon(const nsAString& aName,
int64_t aVersion,
bool aDeleting,
JSContext* aCallingCx,
IDBOpenDBRequest** _retval)
{
return OpenCommon(aName, aVersion, mASCIIOrigin, aDeleting, aCallingCx,
_retval);
}
void
SetActor(IndexedDBChild* aActorChild)
{
NS_ASSERTION(!aActorChild || !mActorChild, "Shouldn't have more than one!");
mActorChild = aActorChild;
}
void
SetActor(IndexedDBParent* aActorParent)
{
NS_ASSERTION(!aActorParent || !mActorParent, "Shouldn't have more than one!");
mActorParent = aActorParent;
}
const nsCString&
GetASCIIOrigin() const
{
return mASCIIOrigin;
}
private:
IDBFactory();
~IDBFactory();
nsCString mASCIIOrigin;
// If this factory lives on a window then mWindow must be non-null. Otherwise
// mOwningObject must be non-null.
nsCOMPtr<nsPIDOMWindow> mWindow;
JSObject* mOwningObject;
IndexedDBChild* mActorChild;
IndexedDBParent* mActorParent;
mozilla::dom::ContentParent* mContentParent;
bool mRootedOwningObject;
};
END_INDEXEDDB_NAMESPACE
#endif // mozilla_dom_indexeddb_idbfactory_h__