1 /*
2  * Copyright (c) 2024 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 #include "web_cookie_manager.h"
17 #include "nweb_cookie_manager.h"
18 #include "nweb_helper.h"
19 #include "web_errors.h"
20 #include "cj_lambda.h"
21 #include "webview_log.h"
22 
23 namespace OHOS {
24 namespace NWeb {
25 const int DEFAULT_VALUE = -1;
CjGetCookie(const std::string &url, bool incognitoMode, int32_t& errCode)26 std::string WebCookieManager::CjGetCookie(const std::string &url, bool incognitoMode, int32_t& errCode)
27 {
28     std::string cookieContent = "";
29     std::shared_ptr<NWebCookieManager> cookieManager = NWebHelper::Instance().GetCookieManager();
30     bool isValid = true;
31     if (cookieManager != nullptr) {
32         cookieContent = cookieManager->ReturnCookie(url, isValid, incognitoMode);
33     }
34     if (cookieContent == "" && !isValid) {
35         errCode = NWebError::INVALID_URL;
36         return "";
37     }
38     errCode = NWebError::NO_ERROR;
39     return cookieContent;
40 }
41 
CjSetCookie(const std::string& url, const std::string& value, bool incognitoMode)42 int32_t WebCookieManager::CjSetCookie(const std::string& url, const std::string& value, bool incognitoMode)
43 {
44     int isSet = DEFAULT_VALUE;
45     std::shared_ptr<NWebCookieManager> cookieManager = NWebHelper::Instance().GetCookieManager();
46     if (cookieManager != nullptr) {
47         isSet = cookieManager->SetCookie(url, value, incognitoMode);
48     }
49     return isSet;
50 }
51 
CjPutAcceptCookieEnabled(bool accept)52 void WebCookieManager::CjPutAcceptCookieEnabled(bool accept)
53 {
54     std::shared_ptr<NWebCookieManager> cookieManager = NWebHelper::Instance().GetCookieManager();
55     if (cookieManager != nullptr) {
56         cookieManager->PutAcceptCookieEnabled(accept);
57     }
58 }
59 
CjIsCookieAllowed()60 bool WebCookieManager::CjIsCookieAllowed()
61 {
62     bool accept = true;
63     std::shared_ptr<NWebCookieManager> cookieManager = NWebHelper::Instance().GetCookieManager();
64     if (cookieManager != nullptr) {
65         accept = cookieManager->IsAcceptCookieAllowed();
66     }
67     return accept;
68 }
69 
CjPutAcceptThirdPartyCookieEnabled(bool accept)70 void WebCookieManager::CjPutAcceptThirdPartyCookieEnabled(bool accept)
71 {
72     std::shared_ptr<NWebCookieManager> cookieManager = NWebHelper::Instance().GetCookieManager();
73     if (cookieManager != nullptr) {
74         cookieManager->PutAcceptThirdPartyCookieEnabled(accept);
75     }
76 }
77 
CjIsThirdPartyCookieAllowed()78 bool WebCookieManager::CjIsThirdPartyCookieAllowed()
79 {
80     bool accept = true;
81     std::shared_ptr<NWebCookieManager> cookieManager = NWebHelper::Instance().GetCookieManager();
82     if (cookieManager != nullptr) {
83         accept = cookieManager->IsThirdPartyCookieAllowed();
84     }
85     return accept;
86 }
87 
CjExistCookie(bool incognitoMode)88 bool WebCookieManager::CjExistCookie(bool incognitoMode)
89 {
90     bool exist = true;
91     std::shared_ptr<NWebCookieManager> cookieManager = NWebHelper::Instance().GetCookieManager();
92     if (cookieManager != nullptr) {
93         exist = cookieManager->ExistCookies(incognitoMode);
94     }
95     return exist;
96 }
97 
CjDeleteEntireCookie(bool incognitoMode)98 void WebCookieManager::CjDeleteEntireCookie(bool incognitoMode)
99 {
100     std::shared_ptr<NWebCookieManager> cookieManager = NWebHelper::Instance().GetCookieManager();
101     if (cookieManager != nullptr) {
102         cookieManager->DeleteCookieEntirely(nullptr, incognitoMode);
103     }
104 }
105 
CjDeleteSessionCookie()106 void WebCookieManager::CjDeleteSessionCookie()
107 {
108     std::shared_ptr<NWebCookieManager> cookieManager = NWebHelper::Instance().GetCookieManager();
109     if (cookieManager != nullptr) {
110         cookieManager->DeleteSessionCookies(nullptr);
111     }
112 }
113 
CjSaveCookie(void (*callbackRef)(void))114 void WebCookieManager::CjSaveCookie(void (*callbackRef)(void))
115 {
116     std::shared_ptr<OHOS::NWeb::NWebCookieManager> cookieManager =
117         OHOS::NWeb::NWebHelper::Instance().GetCookieManager();
118     if (cookieManager == nullptr) {
119         return;
120     } else {
121         auto callbackImpl = std::make_shared<OHOS::NWeb::NWebSaveCookieCallbackImpl>(CJLambda::Create(callbackRef));
122         cookieManager->Store(callbackImpl);
123     }
124 }
125 
OnReceiveValue(bool result)126 void NWebSaveCookieCallbackImpl::OnReceiveValue(bool result)
127 {
128     WEBVIEWLOGD("save cookie received result, result = %{public}d", result);
129     callback_();
130 }
131 }
132 }