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 }