bug 700693 - OCSP stapling PSM changes r=bsmith
[gecko.git] / dom / indexedDB / IDBFileHandle.cpp
blob3f866441cb9df9526ac51d82e6c992d8d97bcbc1
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/. */
7 #include "IDBFileHandle.h"
9 #include "mozilla/dom/file/File.h"
10 #include "mozilla/dom/quota/FileStreams.h"
11 #include "nsDOMClassInfoID.h"
13 #include "IDBDatabase.h"
15 USING_INDEXEDDB_NAMESPACE
16 USING_QUOTA_NAMESPACE
18 namespace {
20 inline
21 already_AddRefed<nsIFile>
22 GetFileFor(FileInfo* aFileInfo)
25 FileManager* fileManager = aFileInfo->Manager();
26 nsCOMPtr<nsIFile> directory = fileManager->GetDirectory();
27 NS_ENSURE_TRUE(directory, nullptr);
29 nsCOMPtr<nsIFile> file = fileManager->GetFileForId(directory,
30 aFileInfo->Id());
31 NS_ENSURE_TRUE(file, nullptr);
33 return file.forget();
36 } // anonymous namespace
38 // static
39 already_AddRefed<IDBFileHandle>
40 IDBFileHandle::Create(IDBDatabase* aDatabase,
41 const nsAString& aName,
42 const nsAString& aType,
43 already_AddRefed<FileInfo> aFileInfo)
45 NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
47 nsRefPtr<FileInfo> fileInfo(aFileInfo);
48 NS_ASSERTION(fileInfo, "Null pointer!");
50 nsRefPtr<IDBFileHandle> newFile = new IDBFileHandle();
52 newFile->BindToOwner(aDatabase);
54 newFile->mFileStorage = aDatabase;
55 newFile->mName = aName;
56 newFile->mType = aType;
58 newFile->mFile = GetFileFor(fileInfo);
59 NS_ENSURE_TRUE(newFile->mFile, nullptr);
60 newFile->mFileName.AppendInt(fileInfo->Id());
62 fileInfo.swap(newFile->mFileInfo);
64 return newFile.forget();
67 already_AddRefed<nsISupports>
68 IDBFileHandle::CreateStream(nsIFile* aFile, bool aReadOnly)
70 nsCOMPtr<nsIOfflineStorage> storage = do_QueryInterface(mFileStorage);
71 NS_ASSERTION(storage, "This should always succeed!");
73 const nsACString& origin = storage->Origin();
75 nsCOMPtr<nsISupports> result;
77 if (aReadOnly) {
78 nsRefPtr<FileInputStream> stream = FileInputStream::Create(
79 origin, aFile, -1, -1, nsIFileInputStream::DEFER_OPEN);
80 result = NS_ISUPPORTS_CAST(nsIFileInputStream*, stream);
82 else {
83 nsRefPtr<FileStream> stream = FileStream::Create(
84 origin, aFile, -1, -1, nsIFileStream::DEFER_OPEN);
85 result = NS_ISUPPORTS_CAST(nsIFileStream*, stream);
87 NS_ENSURE_TRUE(result, nullptr);
89 return result.forget();
92 already_AddRefed<nsIDOMFile>
93 IDBFileHandle::CreateFileObject(mozilla::dom::file::LockedFile* aLockedFile,
94 uint32_t aFileSize)
96 nsCOMPtr<nsIDOMFile> file = new mozilla::dom::file::File(
97 mName, mType, aFileSize, mFile, aLockedFile, mFileInfo);
99 return file.forget();
102 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(IDBFileHandle)
103 NS_INTERFACE_MAP_ENTRY(nsIIDBFileHandle)
104 NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(IDBFileHandle)
105 NS_INTERFACE_MAP_END_INHERITING(FileHandle)
107 NS_IMPL_ADDREF_INHERITED(IDBFileHandle, FileHandle)
108 NS_IMPL_RELEASE_INHERITED(IDBFileHandle, FileHandle)
110 DOMCI_DATA(IDBFileHandle, IDBFileHandle)
112 NS_IMETHODIMP
113 IDBFileHandle::GetDatabase(nsIIDBDatabase** aDatabase)
115 NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
117 nsCOMPtr<nsIIDBDatabase> database = do_QueryInterface(mFileStorage);
118 NS_ASSERTION(database, "This should always succeed!");
120 database.forget(aDatabase);
121 return NS_OK;