Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
2 /*
3 * Copyright 2011 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
10 #ifndef SkIStream_DEFINED
11 #define SkIStream_DEFINED
13 #define WIN32_LEAN_AND_MEAN
14 #include <windows.h>
15 #include <ole2.h>
17 class SkStream;
18 class SkWStream;
20 /**
21 * A bare IStream implementation which properly reference counts
22 * but returns E_NOTIMPL for all ISequentialStream and IStream methods.
23 */
24 class SkBaseIStream : public IStream {
25 private:
26 LONG _refcount;
28 protected:
29 explicit SkBaseIStream();
30 virtual ~SkBaseIStream();
32 public:
33 virtual HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid
34 , void ** ppvObject);
35 virtual ULONG STDMETHODCALLTYPE AddRef(void);
36 virtual ULONG STDMETHODCALLTYPE Release(void);
38 // ISequentialStream Interface
39 public:
40 virtual HRESULT STDMETHODCALLTYPE Read(void* pv, ULONG cb, ULONG* pcbRead);
42 virtual HRESULT STDMETHODCALLTYPE Write(void const* pv
43 , ULONG cb
44 , ULONG* pcbWritten);
46 // IStream Interface
47 public:
48 virtual HRESULT STDMETHODCALLTYPE SetSize(ULARGE_INTEGER);
50 virtual HRESULT STDMETHODCALLTYPE CopyTo(IStream*
51 , ULARGE_INTEGER
52 , ULARGE_INTEGER*
53 , ULARGE_INTEGER*);
55 virtual HRESULT STDMETHODCALLTYPE Commit(DWORD);
57 virtual HRESULT STDMETHODCALLTYPE Revert(void);
59 virtual HRESULT STDMETHODCALLTYPE LockRegion(ULARGE_INTEGER
60 , ULARGE_INTEGER
61 , DWORD);
63 virtual HRESULT STDMETHODCALLTYPE UnlockRegion(ULARGE_INTEGER
64 , ULARGE_INTEGER
65 , DWORD);
67 virtual HRESULT STDMETHODCALLTYPE Clone(IStream **);
69 virtual HRESULT STDMETHODCALLTYPE Seek(LARGE_INTEGER liDistanceToMove
70 , DWORD dwOrigin
71 , ULARGE_INTEGER* lpNewFilePointer);
73 virtual HRESULT STDMETHODCALLTYPE Stat(STATSTG* pStatstg
74 , DWORD grfStatFlag);
75 };
77 /**
78 * A minimal read-only IStream implementation which wraps an SkIStream.
79 */
80 class SkIStream : public SkBaseIStream {
81 private:
82 SkStream *fSkStream;
83 bool fUnrefOnRelease;
84 ULARGE_INTEGER fLocation;
86 SkIStream(SkStream* stream, bool unrefOnRelease);
87 virtual ~SkIStream();
89 public:
90 HRESULT static CreateFromSkStream(SkStream* stream
91 , bool unrefOnRelease
92 , IStream ** ppStream);
94 virtual HRESULT STDMETHODCALLTYPE Read(void* pv, ULONG cb, ULONG* pcbRead);
96 virtual HRESULT STDMETHODCALLTYPE Write(void const* pv
97 , ULONG cb
98 , ULONG* pcbWritten);
100 virtual HRESULT STDMETHODCALLTYPE Seek(LARGE_INTEGER liDistanceToMove
101 , DWORD dwOrigin
102 , ULARGE_INTEGER* lpNewFilePointer);
104 virtual HRESULT STDMETHODCALLTYPE Stat(STATSTG* pStatstg
105 , DWORD grfStatFlag);
106 };
108 /**
109 * A minimal write-only IStream implementation which wraps an SkWIStream.
110 */
111 class SkWIStream : public SkBaseIStream {
112 private:
113 SkWStream *fSkWStream;
115 SkWIStream(SkWStream* stream);
116 virtual ~SkWIStream();
118 public:
119 HRESULT static CreateFromSkWStream(SkWStream* stream, IStream ** ppStream);
121 virtual HRESULT STDMETHODCALLTYPE Write(void const* pv
122 , ULONG cb
123 , ULONG* pcbWritten);
125 virtual HRESULT STDMETHODCALLTYPE Commit(DWORD);
127 virtual HRESULT STDMETHODCALLTYPE Stat(STATSTG* pStatstg
128 , DWORD grfStatFlag);
129 };
131 #endif