1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef NWEB_COOKIE_MANAGER_H
17 #define NWEB_COOKIE_MANAGER_H
18 
19 #include <memory>
20 #include <string>
21 
22 #include "nweb_export.h"
23 #include "nweb_value_callback.h"
24 
25 namespace OHOS::NWeb {
26 
27 class OHOS_NWEB_EXPORT NWebCookieManager {
28 public:
29     NWebCookieManager() = default;
30 
31     virtual ~NWebCookieManager() = default;
32 
33     /**
34      * @brief Get whether the instance can send and accept cookies.
35      *
36      * @return true if the instance send and accept cookies.
37      */
38     virtual bool IsAcceptCookieAllowed() = 0;
39 
40     /**
41      * @brief Sets whether the instance should send and accept cookies.
42      * By default this is set to be true and the nweb accepts cookies.
43      *
44      * @param accept whether the instance should send and accept cookies.
45      */
46     virtual void PutAcceptCookieEnabled(bool accept) = 0;
47 
48     /**
49      * @brief Get whether the instance allows setting cookies of third parties
50      *
51      * @return true if the instance allows the setting of third-party cookies.
52      */
53     virtual bool IsThirdPartyCookieAllowed() = 0;
54 
55     /**
56      * @brief Set whether the instance allows setting cookies of third parties.
57      * By default, this value is set to be false. Nweb does not allow the setting of third-party cookies.
58      *
59      * @param accept whether the instance allows the setting of third-party cookies.
60      */
61     virtual void PutAcceptThirdPartyCookieEnabled(bool accept) = 0;
62 
63     /**
64      * @brief Get whether instances can send and accept cookies for file scheme URLs.
65      *
66      * @return true if instances send and accept cookies for file scheme URLs.
67      */
68     virtual bool IsFileURLSchemeCookiesAllowed() = 0;
69 
70     /**
71      * @brief Sets whether the instance should send and accept cookies for file scheme URLs.
72      *
73      * @param allow whether the instance should send and accept cookies for file scheme URLs.
74      */
75     virtual void PutAcceptFileURLSchemeCookiesEnabled(bool allow) = 0;
76 
77     /**
78      * @brief Gets all the cookies for the given URL.
79      *
80      * @param url the URL for which the cookies are requested.
81      * @param callback a callback which is executed when the cookies have been gotten.
82      */
83     virtual void ReturnCookie(const std::string& url, std::shared_ptr<NWebStringValueCallback> callback) = 0;
84 
85     /**
86      * @brief Gets all the cookies for the given URL. This is sync method
87      *
88      * @param url the URL for which the cookies are requested.
89      * @param value the cookie as a string, using the format of the 'Set-Cookie' HTTP response header.
90      * @param incognito_mode true if web is in the incognito mode, false otherwise.
91      * @return the cookie value for given URL.
92      */
93     virtual std::string ReturnCookie(const std::string& url, bool& is_valid, bool incognito_mode) = 0;
94 
95     /**
96      * @brief Sets a single cookie (key-value pair) for the given URL.
97      *
98      * @param url the URL for which the cookie is to be set.
99      * @param value the cookie as a string, using the format of the 'Set-Cookie' HTTP response header.
100      * @param callback a callback to be executed when the cookie has been set.
101      */
102     virtual void SetCookie(
103         const std::string& url, const std::string& value, std::shared_ptr<NWebBoolValueCallback> callback) = 0;
104 
105     /**
106      * @brief Sets a single cookie (key-value pair) for the given URL sync.
107      *
108      * @param url the URL for which the cookie is to be set.
109      * @param value the cookie as a string, using the format of the 'Set-Cookie' HTTP response header.
110      * @param incognito_mode true if web is in the incognito mode, false otherwise.
111      * @return 0 if set cookie success else return error id.
112      */
113     virtual int SetCookie(const std::string& url, const std::string& value, bool incognito_mode) = 0;
114 
115     /**
116      * @brief Gets whether there are stored cookies.
117      *
118      * @param callback a callback to be executed when the cookie has checked.
119      */
120     virtual void ExistCookies(std::shared_ptr<NWebBoolValueCallback> callback) = 0;
121 
122     /**
123      * @brief Gets whether there are stored cookies.
124      *
125      * @param incognito_mode true if web is in the incognito mode, false otherwise.
126      * @return true if there are stored cookies else false.
127      */
128     virtual bool ExistCookies(bool incognito_mode) = 0;
129 
130     /**
131      * @brief Ensures all cookies currently accessible through the ReturnCookie API are written to
132      * persistent storage.
133      *
134      * @param callback a callback to be executed when cookies has Stored.
135      */
136     virtual void Store(std::shared_ptr<NWebBoolValueCallback> callback) = 0;
137 
138     /**
139      * @brief Ensures all cookies currently accessible through the ReturnCookie API are written to
140      * persistent storage.
141      *
142      * @param true if store cookie success else return false.
143      */
144     virtual bool Store() = 0;
145 
146     /**
147      * @brief Removes all session cookies, which are cookies without an expiration date.
148      *
149      * @param callback a callback to be executed when all session cookies has removed.
150      */
151     virtual void DeleteSessionCookies(std::shared_ptr<NWebBoolValueCallback> callback) = 0;
152 
153     /**
154      * @brief Removes all cookies.
155      *
156      * @param callback a callback to be executed when all cookies has removed.
157      * @param incognito_mode true if web is in the incognito mode, false otherwise.
158      */
159     virtual void DeleteCookieEntirely(std::shared_ptr<NWebBoolValueCallback> callback, bool incognito_mode) = 0;
160 
161     /**
162      * @brief Configs a single cookie (key-value pair) for the given URL.
163      *
164      * @param url the URL for which the cookie is to be set.
165      * @param value the cookie as a string, using the format of the 'Set-Cookie' HTTP response header.
166      * @param callback a callback to be executed when the cookie has been set.
167      */
168     virtual void ConfigCookie(
169         const std::string& url, const std::string& value, std::shared_ptr<NWebLongValueCallback> callback) = 0;
170 
171     /**
172      * @brief Gets all the cookies for the given URL. This is sync method
173      *
174      * @param url URL to which the cookie to be obtained belongs. A complete URL is recommended.
175      * @param incognito True indicates that the memory cookies of the webview in privacy mode are obtained,
176      *                  and false indicates that cookies in non-privacy mode are obtained.
177      * @param includeHttpOnly If true HTTP-only cookies will also be included in the cookieValue.
178      * @param cookieValue Get the cookie value corresponding to the URL.
179      * @return the cookie value for given URL.
180      */
ReturnCookieWithHttpOnly( const std::string& url, bool& is_valid, bool incognito_mode, bool includeHttpOnly)181     virtual std::string ReturnCookieWithHttpOnly(
182         const std::string& url, bool& is_valid, bool incognito_mode, bool includeHttpOnly) { return ""; }
183 
184     /**
185      * @brief Sets a single cookie (key-value pair) for the given URL sync.
186      *
187      * @param url Specifies the URL to which the cookie belongs. A complete URL is recommended.
188      * @param cookieValue The value of the cookie to be set.
189      * @param incognito True indicates that cookies of the corresponding URL are set in privacy mode,
190      *                  and false indicates that cookies of the corresponding URL are set in non-privacy mode.
191      * @param includeHttpOnly If true, HTTP-only cookies can also be overwritten.
192      * @return 0 if set cookie success else return error id.
193      */
SetCookieWithHttpOnly( const std::string& url, const std::string& value, bool incognito_mode, bool includeHttpOnly)194     virtual int SetCookieWithHttpOnly(
195         const std::string& url, const std::string& value, bool incognito_mode, bool includeHttpOnly) { return 0; }
196 
197     /**
198      * @brief Gets all the cookies for the given URL async.
199      *
200      * @param url the URL for which the cookies are requested.
201      * @param incognitoMode true if web is in the incognito mode, false otherwise.
202      * @param callback a callback which is executed when the cookies have been gotten.
203      */
204     virtual void GetCookieAsync(
205         const std::string& url, bool incognitoMode, std::shared_ptr<NWebStringValueCallback> callback) = 0;
206 
207     /**
208      * @brief Sets a single cookie (key-value pair) for the given URL sync.
209      *
210      * @param url the URL for which the cookie is to be set.
211      * @param value the cookie as a string, using the format of the 'Set-Cookie' HTTP response header.
212      * @param incognitoMode true if web is in the incognito mode, false otherwise.
213      * @param includeHttpOnly If true, HTTP-only cookies can also be overwritten.
214      * @return 0 if set cookie success else return error id.
215      */
216     virtual int SetCookieSync(
217         const std::string& url, const std::string& value, bool incognitoMode, bool includeHttpOnly) = 0;
218 
219     /**
220      * @brief Sets a single cookie (key-value pair) for the given URL async.
221      *
222      * @param url the URL for which the cookie is to be set.
223      * @param value the cookie as a string, using the format of the 'Set-Cookie' HTTP response header.
224      * @param incognitoMode true if web is in the incognito mode, false otherwise.
225      * @param includeHttpOnly If true, HTTP-only cookies can also be overwritten.
226      * @param callback a callback to be executed when the cookie has been set.
227      */
228     virtual void SetCookieAsync(const std::string& url, const std::string& value, bool incognitoMode,
229         bool includeHttpOnly, std::shared_ptr<NWebLongValueCallback> callback) = 0;
230 };
231 
232 } // namespace OHOS::NWeb
233 
234 #endif // NWebCookieManager
235