10826e83eSopenharmony_ci/*
20826e83eSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
30826e83eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
40826e83eSopenharmony_ci * you may not use this file except in compliance with the License.
50826e83eSopenharmony_ci * You may obtain a copy of the License at
60826e83eSopenharmony_ci *
70826e83eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
80826e83eSopenharmony_ci *
90826e83eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
100826e83eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
110826e83eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
120826e83eSopenharmony_ci * See the License for the specific language governing permissions and
130826e83eSopenharmony_ci * limitations under the License.
140826e83eSopenharmony_ci */
150826e83eSopenharmony_ci
160826e83eSopenharmony_ci#ifndef NWEB_HELPER_H
170826e83eSopenharmony_ci#define NWEB_HELPER_H
180826e83eSopenharmony_ci
190826e83eSopenharmony_ci#include <iosfwd>
200826e83eSopenharmony_ci#include <memory>
210826e83eSopenharmony_ci#include <string>
220826e83eSopenharmony_ci#include <vector>
230826e83eSopenharmony_ci
240826e83eSopenharmony_ci#include "nweb.h"
250826e83eSopenharmony_ci#include "nweb_cookie_manager.h"
260826e83eSopenharmony_ci#include "nweb_data_base.h"
270826e83eSopenharmony_ci#include "nweb_engine.h"
280826e83eSopenharmony_ci#include "nweb_export.h"
290826e83eSopenharmony_ci#include "nweb_web_storage.h"
300826e83eSopenharmony_ci
310826e83eSopenharmony_cinamespace OHOS::NWeb {
320826e83eSopenharmony_cistruct FrameRateSetting {
330826e83eSopenharmony_ci    int32_t min_ { 0 };
340826e83eSopenharmony_ci    int32_t max_ { 0 };
350826e83eSopenharmony_ci    int32_t preferredFrameRate_ { 0 };
360826e83eSopenharmony_ci};
370826e83eSopenharmony_ci
380826e83eSopenharmony_ciclass OHOS_NWEB_EXPORT NWebHelper {
390826e83eSopenharmony_cipublic:
400826e83eSopenharmony_ci    static NWebHelper& Instance();
410826e83eSopenharmony_ci    ~NWebHelper() = default;
420826e83eSopenharmony_ci    bool Init(bool from_ark = true);
430826e83eSopenharmony_ci    bool InitAndRun(bool from_ark = true);
440826e83eSopenharmony_ci    bool LoadWebEngine(bool fromArk, bool runFlag);
450826e83eSopenharmony_ci    void* LoadFuncSymbol(const char* funcName);
460826e83eSopenharmony_ci    static void TryPreReadLib(bool isFirstTimeStartUpWeb, const std::string& bundlePath);
470826e83eSopenharmony_ci
480826e83eSopenharmony_ci    std::shared_ptr<NWeb> CreateNWeb(std::shared_ptr<NWebCreateInfo> create_info);
490826e83eSopenharmony_ci    std::shared_ptr<NWebCookieManager> GetCookieManager();
500826e83eSopenharmony_ci    std::shared_ptr<NWebDataBase> GetDataBase();
510826e83eSopenharmony_ci    std::shared_ptr<NWebWebStorage> GetWebStorage();
520826e83eSopenharmony_ci    std::shared_ptr<NWeb> GetNWeb(int32_t nweb_id);
530826e83eSopenharmony_ci    void SetBundlePath(const std::string& path);
540826e83eSopenharmony_ci    void SetHttpDns(std::shared_ptr<NWebDOHConfig> config);
550826e83eSopenharmony_ci    void SetWebTag(int32_t nwebId, const char* webTag);
560826e83eSopenharmony_ci    void PrepareForPageLoad(std::string url, bool preconnectable, int32_t numSockets);
570826e83eSopenharmony_ci    bool LoadNWebSDK();
580826e83eSopenharmony_ci    void SetConnectionTimeout(const int32_t& timeout);
590826e83eSopenharmony_ci    void SetCustomSchemeCmdLine(const std::string& cmd)
600826e83eSopenharmony_ci    {
610826e83eSopenharmony_ci        customSchemeCmdLine_ = cmd;
620826e83eSopenharmony_ci    }
630826e83eSopenharmony_ci    void PauseAllTimers();
640826e83eSopenharmony_ci    void ResumeAllTimers();
650826e83eSopenharmony_ci
660826e83eSopenharmony_ci    void AddIntelligentTrackingPreventionBypassingList(const std::vector<std::string>& hosts);
670826e83eSopenharmony_ci    void RemoveIntelligentTrackingPreventionBypassingList(const std::vector<std::string>& hosts);
680826e83eSopenharmony_ci    void ClearIntelligentTrackingPreventionBypassingList();
690826e83eSopenharmony_ci
700826e83eSopenharmony_ci    void PrefetchResource(const std::shared_ptr<NWebEnginePrefetchArgs>& pre_args,
710826e83eSopenharmony_ci        const std::map<std::string, std::string>& additional_http_headers, const std::string& cache_key,
720826e83eSopenharmony_ci        const uint32_t& cache_valid_time);
730826e83eSopenharmony_ci
740826e83eSopenharmony_ci    std::string GetDefaultUserAgent();
750826e83eSopenharmony_ci
760826e83eSopenharmony_ci    void ClearPrefetchedResource(const std::vector<std::string>& cache_key_list);
770826e83eSopenharmony_ci
780826e83eSopenharmony_ci    void SetRenderProcessMode(RenderProcessMode mode);
790826e83eSopenharmony_ci    RenderProcessMode GetRenderProcessMode();
800826e83eSopenharmony_ci
810826e83eSopenharmony_ci    void SetHostIP(const std::string& hostName, const std::string& address, int32_t aliveTime);
820826e83eSopenharmony_ci    void ClearHostIP(const std::string& hostName);
830826e83eSopenharmony_ci
840826e83eSopenharmony_ci    void WarmupServiceWorker(const std::string& url);
850826e83eSopenharmony_ci
860826e83eSopenharmony_ci    void EnableWholeWebPageDrawing();
870826e83eSopenharmony_ci    std::shared_ptr<NWebAdsBlockManager> GetAdsBlockManager();
880826e83eSopenharmony_ci
890826e83eSopenharmony_ci    void EnableBackForwardCache(bool enableNativeEmbed, bool enableMediaTakeOver);
900826e83eSopenharmony_ci
910826e83eSopenharmony_ci    void TrimMemoryByPressureLevel(int32_t memoryLevel);
920826e83eSopenharmony_ci
930826e83eSopenharmony_ciprivate:
940826e83eSopenharmony_ci    NWebHelper() = default;
950826e83eSopenharmony_ci    bool GetWebEngine(bool fromArk);
960826e83eSopenharmony_ci    bool InitWebEngine();
970826e83eSopenharmony_ci
980826e83eSopenharmony_ciprivate:
990826e83eSopenharmony_ci    int coreApiLevel_ = 0;
1000826e83eSopenharmony_ci    std::string bundlePath_;
1010826e83eSopenharmony_ci    std::string customSchemeCmdLine_;
1020826e83eSopenharmony_ci    std::shared_ptr<NWebEngine> nwebEngine_ = nullptr;
1030826e83eSopenharmony_ci    std::vector<std::string> backForwardCacheCmdLine_;
1040826e83eSopenharmony_ci};
1050826e83eSopenharmony_ci} // namespace OHOS::NWeb
1060826e83eSopenharmony_ci
1070826e83eSopenharmony_ci#endif // NWEB_HELPER_H
108