File: IndexedDatabase.h

package info (click to toggle)
wine-gecko-2.21 2.21%2Bdfsg2-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 646,272 kB
  • ctags: 630,086
  • sloc: cpp: 2,895,786; ansic: 1,502,970; python: 156,675; asm: 115,373; java: 111,421; sh: 63,309; xml: 62,872; makefile: 58,685; perl: 19,182; objc: 3,461; yacc: 2,051; lex: 979; pascal: 929; exp: 449; php: 244; lisp: 228; awk: 211; sed: 26; csh: 21; ada: 16; ruby: 3
file content (218 lines) | stat: -rw-r--r-- 5,402 bytes parent folder | download
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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
/* -*- 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_indexeddatabase_h__
#define mozilla_dom_indexeddb_indexeddatabase_h__

#include "nsIProgrammingLanguage.h"

#include "mozilla/Attributes.h"
#include "jsapi.h"
#include "nsAutoPtr.h"
#include "nsCOMPtr.h"
#include "nsDebug.h"
#include "nsError.h"
#include "nsStringGlue.h"
#include "nsTArray.h"

#define BEGIN_INDEXEDDB_NAMESPACE \
  namespace mozilla { namespace dom { namespace indexedDB {

#define END_INDEXEDDB_NAMESPACE \
  } /* namespace indexedDB */ } /* namepsace dom */ } /* namespace mozilla */

#define USING_INDEXEDDB_NAMESPACE \
  using namespace mozilla::dom::indexedDB;

class nsIDOMBlob;
class nsIInputStream;

BEGIN_INDEXEDDB_NAMESPACE

class FileInfo;
class IDBDatabase;
class IDBTransaction;

enum FactoryPrivilege {
  Content,
  Chrome
};

template <class T>
void SwapData(T& aData1, T& aData2)
{
  T temp = aData2;
  aData2 = aData1;
  aData1 = temp;
}

struct StructuredCloneFile
{
  bool operator==(const StructuredCloneFile& aOther) const
  {
    return this->mFile == aOther.mFile &&
           this->mFileInfo == aOther.mFileInfo &&
           this->mInputStream == aOther.mInputStream;
  }

  nsCOMPtr<nsIDOMBlob> mFile;
  nsRefPtr<FileInfo> mFileInfo;
  nsCOMPtr<nsIInputStream> mInputStream;
};

struct SerializedStructuredCloneReadInfo;

struct StructuredCloneReadInfo
{
  // In IndexedDatabaseInlines.h
  inline StructuredCloneReadInfo();

  void Swap(StructuredCloneReadInfo& aCloneReadInfo)
  {
    mCloneBuffer.swap(aCloneReadInfo.mCloneBuffer);
    mFiles.SwapElements(aCloneReadInfo.mFiles);
    SwapData(mDatabase, aCloneReadInfo.mDatabase);
  }

  // In IndexedDatabaseInlines.h
  inline bool
  SetFromSerialized(const SerializedStructuredCloneReadInfo& aOther);

  JSAutoStructuredCloneBuffer mCloneBuffer;
  nsTArray<StructuredCloneFile> mFiles;
  IDBDatabase* mDatabase;
};

struct SerializedStructuredCloneReadInfo
{
  SerializedStructuredCloneReadInfo()
  : data(nullptr), dataLength(0)
  { }

  bool
  operator==(const SerializedStructuredCloneReadInfo& aOther) const
  {
    return this->data == aOther.data &&
           this->dataLength == aOther.dataLength;
  }

  SerializedStructuredCloneReadInfo&
  operator=(const StructuredCloneReadInfo& aOther)
  {
    data = aOther.mCloneBuffer.data();
    dataLength = aOther.mCloneBuffer.nbytes();
    return *this;
  }

  // Make sure to update ipc/SerializationHelpers.h when changing members here!
  uint64_t* data;
  size_t dataLength;
};

struct SerializedStructuredCloneWriteInfo;

struct StructuredCloneWriteInfo
{
  // In IndexedDatabaseInlines.h
  inline StructuredCloneWriteInfo();

  void Swap(StructuredCloneWriteInfo& aCloneWriteInfo)
  {
    mCloneBuffer.swap(aCloneWriteInfo.mCloneBuffer);
    mFiles.SwapElements(aCloneWriteInfo.mFiles);
    SwapData(mTransaction, aCloneWriteInfo.mTransaction);
    SwapData(mOffsetToKeyProp, aCloneWriteInfo.mOffsetToKeyProp);
  }

  bool operator==(const StructuredCloneWriteInfo& aOther) const
  {
    return this->mCloneBuffer.nbytes() == aOther.mCloneBuffer.nbytes() &&
           this->mCloneBuffer.data() == aOther.mCloneBuffer.data() &&
           this->mFiles == aOther.mFiles &&
           this->mTransaction == aOther.mTransaction &&
           this->mOffsetToKeyProp == aOther.mOffsetToKeyProp;
  }

  // In IndexedDatabaseInlines.h
  inline bool
  SetFromSerialized(const SerializedStructuredCloneWriteInfo& aOther);

  JSAutoStructuredCloneBuffer mCloneBuffer;
  nsTArray<StructuredCloneFile> mFiles;
  IDBTransaction* mTransaction;
  uint64_t mOffsetToKeyProp;
};

struct SerializedStructuredCloneWriteInfo
{
  SerializedStructuredCloneWriteInfo()
  : data(nullptr), dataLength(0), offsetToKeyProp(0)
  { }

  bool
  operator==(const SerializedStructuredCloneWriteInfo& aOther) const
  {
    return this->data == aOther.data &&
           this->dataLength == aOther.dataLength &&
           this->offsetToKeyProp == aOther.offsetToKeyProp;
  }

  SerializedStructuredCloneWriteInfo&
  operator=(const StructuredCloneWriteInfo& aOther)
  {
    data = aOther.mCloneBuffer.data();
    dataLength = aOther.mCloneBuffer.nbytes();
    offsetToKeyProp = aOther.mOffsetToKeyProp;
    return *this;
  }

  // Make sure to update ipc/SerializationHelpers.h when changing members here!
  uint64_t* data;
  size_t dataLength;
  uint64_t offsetToKeyProp;
};

class OriginOrPatternString : public nsCString
{
public:
  static OriginOrPatternString
  FromOrigin(const nsACString& aOrigin)
  {
    return OriginOrPatternString(aOrigin, true);
  }

  static OriginOrPatternString
  FromPattern(const nsACString& aPattern)
  {
    return OriginOrPatternString(aPattern, false);
  }

  bool
  IsOrigin() const
  {
    return mIsOrigin;
  }

  bool
  IsPattern() const
  {
    return !mIsOrigin;
  }

private:
  OriginOrPatternString(const nsACString& aOriginOrPattern, bool aIsOrigin)
  : nsCString(aOriginOrPattern), mIsOrigin(aIsOrigin)
  { }

  bool
  operator==(const OriginOrPatternString& aOther) MOZ_DELETE;

  bool mIsOrigin;
};

END_INDEXEDDB_NAMESPACE

#endif // mozilla_dom_indexeddb_indexeddatabase_h__