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_storage.h"
17 #include "web_errors.h"
18 #include "nweb_helper.h"
19 #include "nweb_web_storage.h"
20
21 using namespace OHOS::Webview;
22
23 namespace OHOS {
24 namespace NWeb {
25 constexpr int32_t INTERFACE_ERROR = -1;
26 constexpr int32_t INTERFACE_OK = 0;
27
CJdeleteOrigin(const std::string & origin)28 int32_t WebStorage::CJdeleteOrigin(const std::string &origin)
29 {
30 int32_t errCode = NWebError::NO_ERROR;
31 std::shared_ptr<OHOS::NWeb::NWebWebStorage> web_storage = OHOS::NWeb::NWebHelper::Instance().GetWebStorage();
32 if (web_storage) {
33 if (web_storage->DeleteOrigin(origin) == NWebError::INVALID_ORIGIN) {
34 errCode = NWebError::INVALID_ORIGIN;
35 }
36 } else {
37 errCode = NWebError::NWEB_ERROR;
38 }
39 return errCode;
40 }
41
CJdeleteAllData(bool incognito)42 void WebStorage::CJdeleteAllData(bool incognito)
43 {
44 std::shared_ptr<OHOS::NWeb::NWebWebStorage> web_storage = OHOS::NWeb::NWebHelper::Instance().GetWebStorage();
45 if (web_storage) {
46 web_storage->DeleteAllData(incognito);
47 }
48 }
49
CjGetOriginUsageOrQuota(const std::string & origin,int32_t * errCode,bool isQuata)50 int64_t WebStorage::CjGetOriginUsageOrQuota(const std::string &origin, int32_t *errCode, bool isQuata)
51 {
52 std::shared_ptr<OHOS::NWeb::NWebWebStorage> web_storage = OHOS::NWeb::NWebHelper::Instance().GetWebStorage();
53 if (!web_storage) {
54 *errCode = INTERFACE_ERROR;
55 return 0;
56 }
57 if (isQuata) {
58 auto ret = static_cast<int64_t>(web_storage->GetOriginQuota(origin));
59 if (ret == INTERFACE_ERROR) {
60 *errCode = INTERFACE_ERROR;
61 } else if (ret == NWebError::INVALID_ORIGIN) {
62 *errCode = NWebError::INVALID_ORIGIN;
63 } else {
64 *errCode = INTERFACE_OK;
65 }
66 return ret;
67 } else {
68 auto ret = static_cast<int64_t>(web_storage->GetOriginUsage(origin));
69 if (ret == INTERFACE_ERROR) {
70 *errCode = INTERFACE_ERROR;
71 } else if (ret == NWebError::INVALID_ORIGIN) {
72 *errCode = NWebError::INVALID_ORIGIN;
73 } else {
74 *errCode = INTERFACE_OK;
75 }
76 return ret;
77 }
78 }
79
CjGetOrigins(int32_t * errCode)80 CArrWebStorageOrigin WebStorage::CjGetOrigins(int32_t *errCode)
81 {
82 auto ret = CArrWebStorageOrigin { .cWebStorageOrigin = nullptr, .size = 0 };
83 std::shared_ptr<OHOS::NWeb::NWebWebStorage> web_storage = OHOS::NWeb::NWebHelper::Instance().GetWebStorage();
84 if (!web_storage) {
85 *errCode = INTERFACE_ERROR;
86 return ret;
87 }
88 std::vector<std::shared_ptr<NWebWebStorageOrigin>> origins = web_storage->GetOrigins();
89 if (origins.empty()) {
90 *errCode = NWebError::NO_WEBSTORAGE_ORIGIN;
91 return ret;
92 }
93 CWebStorageOrigin* head = static_cast<CWebStorageOrigin*>(malloc(sizeof(CWebStorageOrigin) * origins.size()));
94 if (head == nullptr) {
95 *errCode = NWebError::NEW_OOM;
96 return ret;
97 }
98 int32_t i = 0;
99 for (auto origin : origins) {
100 Webview::CWebStorageOrigin ffiOrigin;
101 ffiOrigin.origin = MallocCString(origin->GetOrigin());
102 ffiOrigin.quota = static_cast<uint32_t>(origin->GetQuota());
103 ffiOrigin.usage = static_cast<uint32_t>(origin->GetUsage());
104 head[i] = ffiOrigin;
105 i++;
106 }
107 ret.cWebStorageOrigin = head;
108 ret.size = static_cast<int64_t>(origins.size());
109 return ret;
110 }
111 }
112 }