Tue, 06 Jan 2015 21:39:09 +0100
Conditionally force memory storage according to privacy.thirdparty.isolate;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.
1 // IArchive.h
3 #ifndef __IARCHIVE_H
4 #define __IARCHIVE_H
6 #include "../IStream.h"
7 #include "../IProgress.h"
8 #include "../PropID.h"
10 // MIDL_INTERFACE("23170F69-40C1-278A-0000-000600xx0000")
11 #define ARCHIVE_INTERFACE_SUB(i, base, x) \
12 DEFINE_GUID(IID_ ## i, \
13 0x23170F69, 0x40C1, 0x278A, 0x00, 0x00, 0x00, 0x06, 0x00, x, 0x00, 0x00); \
14 struct i: public base
16 #define ARCHIVE_INTERFACE(i, x) ARCHIVE_INTERFACE_SUB(i, IUnknown, x)
18 namespace NFileTimeType
19 {
20 enum EEnum
21 {
22 kWindows,
23 kUnix,
24 kDOS
25 };
26 }
28 namespace NArchive
29 {
30 enum
31 {
32 kName = 0,
33 kClassID,
34 kExtension,
35 kAddExtension,
36 kUpdate,
37 kKeepName,
38 kStartSignature,
39 kFinishSignature,
40 kAssociate
41 };
43 namespace NExtract
44 {
45 namespace NAskMode
46 {
47 enum
48 {
49 kExtract = 0,
50 kTest,
51 kSkip,
52 };
53 }
54 namespace NOperationResult
55 {
56 enum
57 {
58 kOK = 0,
59 kUnSupportedMethod,
60 kDataError,
61 kCRCError,
62 };
63 }
64 }
65 namespace NUpdate
66 {
67 namespace NOperationResult
68 {
69 enum
70 {
71 kOK = 0,
72 kError,
73 };
74 }
75 }
76 }
78 ARCHIVE_INTERFACE(IArchiveOpenCallback, 0x10)
79 {
80 STDMETHOD(SetTotal)(const UInt64 *files, const UInt64 *bytes) PURE;
81 STDMETHOD(SetCompleted)(const UInt64 *files, const UInt64 *bytes) PURE;
82 };
85 ARCHIVE_INTERFACE_SUB(IArchiveExtractCallback, IProgress, 0x20)
86 {
87 STDMETHOD(GetStream)(UInt32 index, ISequentialOutStream **outStream,
88 Int32 askExtractMode) PURE;
89 // GetStream OUT: S_OK - OK, S_FALSE - skeep this file
90 STDMETHOD(PrepareOperation)(Int32 askExtractMode) PURE;
91 STDMETHOD(SetOperationResult)(Int32 resultEOperationResult) PURE;
92 };
95 ARCHIVE_INTERFACE(IArchiveOpenVolumeCallback, 0x30)
96 {
97 STDMETHOD(GetProperty)(PROPID propID, PROPVARIANT *value) PURE;
98 STDMETHOD(GetStream)(const wchar_t *name, IInStream **inStream) PURE;
99 };
102 ARCHIVE_INTERFACE(IInArchiveGetStream, 0x40)
103 {
104 STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **stream) PURE;
105 };
108 ARCHIVE_INTERFACE(IArchiveOpenSetSubArchiveName, 0x50)
109 {
110 STDMETHOD(SetSubArchiveName)(const wchar_t *name) PURE;
111 };
114 ARCHIVE_INTERFACE(IInArchive, 0x60)
115 {
116 STDMETHOD(Open)(IInStream *stream, const UInt64 *maxCheckStartPosition,
117 IArchiveOpenCallback *openArchiveCallback) PURE;
118 STDMETHOD(Close)() PURE;
119 STDMETHOD(GetNumberOfItems)(UInt32 *numItems) PURE;
120 STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE;
121 STDMETHOD(Extract)(const UInt32* indices, UInt32 numItems,
122 Int32 testMode, IArchiveExtractCallback *extractCallback) PURE;
123 // indices must be sorted
124 // numItems = 0xFFFFFFFF means all files
125 // testMode != 0 means "test files operation"
127 STDMETHOD(GetArchiveProperty)(PROPID propID, PROPVARIANT *value) PURE;
129 STDMETHOD(GetNumberOfProperties)(UInt32 *numProperties) PURE;
130 STDMETHOD(GetPropertyInfo)(UInt32 index,
131 BSTR *name, PROPID *propID, VARTYPE *varType) PURE;
133 STDMETHOD(GetNumberOfArchiveProperties)(UInt32 *numProperties) PURE;
134 STDMETHOD(GetArchivePropertyInfo)(UInt32 index,
135 BSTR *name, PROPID *propID, VARTYPE *varType) PURE;
136 };
139 ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback, IProgress, 0x80)
140 {
141 STDMETHOD(GetUpdateItemInfo)(UInt32 index,
142 Int32 *newData, // 1 - new data, 0 - old data
143 Int32 *newProperties, // 1 - new properties, 0 - old properties
144 UInt32 *indexInArchive // -1 if there is no in archive, or if doesn't matter
145 ) PURE;
146 STDMETHOD(GetProperty)(UInt32 index, PROPID propID, PROPVARIANT *value) PURE;
147 STDMETHOD(GetStream)(UInt32 index, ISequentialInStream **inStream) PURE;
148 STDMETHOD(SetOperationResult)(Int32 operationResult) PURE;
149 };
152 ARCHIVE_INTERFACE_SUB(IArchiveUpdateCallback2, IArchiveUpdateCallback, 0x82)
153 {
154 STDMETHOD(GetVolumeSize)(UInt32 index, UInt64 *size) PURE;
155 STDMETHOD(GetVolumeStream)(UInt32 index, ISequentialOutStream **volumeStream) PURE;
156 };
159 ARCHIVE_INTERFACE(IOutArchive, 0xA0)
160 {
161 STDMETHOD(UpdateItems)(ISequentialOutStream *outStream, UInt32 numItems,
162 IArchiveUpdateCallback *updateCallback) PURE;
163 STDMETHOD(GetFileTimeType)(UInt32 *type) PURE;
164 };
167 ARCHIVE_INTERFACE(ISetProperties, 0x03)
168 {
169 STDMETHOD(SetProperties)(const wchar_t **names, const PROPVARIANT *values, Int32 numProperties) PURE;
170 };
173 #endif