From 89a5d75bc55a934d53f140f4abd1caac50d88fb6 Mon Sep 17 00:00:00 2001 From: cpeng1101 Date: Wed, 13 Aug 2025 17:13:36 +0800 Subject: [PATCH 1/2] OnRefreshAccessedHistory Signed-off-by: cpeng1101 --- .../bridge/declarative_frontend/jsview/js_web.cpp | 1 + .../core/components/web/resource/web_client_impl.cpp | 10 ++++++++++ .../core/components/web/resource/web_client_impl.h | 2 ++ .../core/components/web/resource/web_delegate.cpp | 6 +++--- .../core/components/web/resource/web_delegate.h | 2 +- frameworks/core/components/web/web_event.h | 11 +++++++++-- test/unittest/core/pattern/web/mock_web_delegate.cpp | 2 +- 7 files changed, 27 insertions(+), 7 deletions(-) diff --git a/frameworks/bridge/declarative_frontend/jsview/js_web.cpp b/frameworks/bridge/declarative_frontend/jsview/js_web.cpp index cbfc5963d66..16342e203b9 100644 --- a/frameworks/bridge/declarative_frontend/jsview/js_web.cpp +++ b/frameworks/bridge/declarative_frontend/jsview/js_web.cpp @@ -4206,6 +4206,7 @@ JSRef RefreshAccessedHistoryEventToJSValue(const RefreshAccessedHistoryEv JSRef obj = JSRef::New(); obj->SetProperty("url", eventInfo.GetVisitedUrl()); obj->SetProperty("isRefreshed", eventInfo.IsRefreshed()); + obj->SetProperty("isMainFrame", eventInfo.IsMainFrame()); return JSRef::Cast(obj); } diff --git a/frameworks/core/components/web/resource/web_client_impl.cpp b/frameworks/core/components/web/resource/web_client_impl.cpp index 2f5789692a9..6d534e5fb37 100644 --- a/frameworks/core/components/web/resource/web_client_impl.cpp +++ b/frameworks/core/components/web/resource/web_client_impl.cpp @@ -1527,4 +1527,14 @@ void WebClientImpl::OnPdfLoadEvent(int32_t result, const std::string& url) ContainerScope scope(delegate->GetInstanceId()); delegate->OnPdfLoadEvent(result, url); } + +void WebClientImpl::OnRefreshAccessedHistoryV2(const std::string& url, bool isReload, bool isMainFrame) +{ + auto delegate = webDelegate_.Upgrade(); + if (!delegate) { + return; + } + ContainerScope scope(delegate->GetInstanceId()); + delegate->OnRefreshAccessedHistory(url, isReload, isMainFrame); +} } // namespace OHOS::Ace diff --git a/frameworks/core/components/web/resource/web_client_impl.h b/frameworks/core/components/web/resource/web_client_impl.h index f2068515404..5586f16a336 100644 --- a/frameworks/core/components/web/resource/web_client_impl.h +++ b/frameworks/core/components/web/resource/web_client_impl.h @@ -331,6 +331,8 @@ public: void OnPdfScrollAtBottom(const std::string& url) override; void OnPdfLoadEvent(int32_t result, const std::string& url) override; + + void OnRefreshAccessedHistoryV2(const std::string& url, bool isReload, bool isMainFrame) override; private: std::weak_ptr webviewWeak_; WeakPtr webDelegate_; diff --git a/frameworks/core/components/web/resource/web_delegate.cpp b/frameworks/core/components/web/resource/web_delegate.cpp index 02b56299901..c35cd10d7a8 100644 --- a/frameworks/core/components/web/resource/web_delegate.cpp +++ b/frameworks/core/components/web/resource/web_delegate.cpp @@ -5881,16 +5881,16 @@ void WebDelegate::OnRenderExited(OHOS::NWeb::RenderExitReason reason) TaskExecutor::TaskType::JS, "ArkUIWebRenderExited"); } -void WebDelegate::OnRefreshAccessedHistory(const std::string& url, bool isRefreshed) +void WebDelegate::OnRefreshAccessedHistory(const std::string& url, bool isRefreshed, bool isMainFrame) { CHECK_NULL_VOID(taskExecutor_); taskExecutor_->PostTask( - [weak = WeakClaim(this), url, isRefreshed]() { + [weak = WeakClaim(this), url, isRefreshed, isMainFrame]() { auto delegate = weak.Upgrade(); CHECK_NULL_VOID(delegate); auto onRefreshAccessedHistoryV2 = delegate->onRefreshAccessedHistoryV2_; if (onRefreshAccessedHistoryV2) { - onRefreshAccessedHistoryV2(std::make_shared(url, isRefreshed)); + onRefreshAccessedHistoryV2(std::make_shared(url, isRefreshed, isMainFrame)); } }, TaskExecutor::TaskType::JS, "ArkUIWebRefreshAccessedHistory"); diff --git a/frameworks/core/components/web/resource/web_delegate.h b/frameworks/core/components/web/resource/web_delegate.h index c2b497394dc..e3780e4eac3 100644 --- a/frameworks/core/components/web/resource/web_delegate.h +++ b/frameworks/core/components/web/resource/web_delegate.h @@ -1031,7 +1031,7 @@ public: bool OnConsoleLog(std::shared_ptr message); void OnRouterPush(const std::string& param); void OnRenderExited(OHOS::NWeb::RenderExitReason reason); - void OnRefreshAccessedHistory(const std::string& url, bool isRefreshed); + void OnRefreshAccessedHistory(const std::string& url, bool isRefreshed, bool isMainFrame = false); bool OnFileSelectorShow(const std::shared_ptr& info); bool OnContextMenuShow(const std::shared_ptr& info); void OnContextMenuHide(const std::string& info); diff --git a/frameworks/core/components/web/web_event.h b/frameworks/core/components/web/web_event.h index 72c6e11c829..b194bd10fde 100644 --- a/frameworks/core/components/web/web_event.h +++ b/frameworks/core/components/web/web_event.h @@ -1370,8 +1370,9 @@ class ACE_EXPORT RefreshAccessedHistoryEvent : public BaseEventInfo { DECLARE_RELATIONSHIP_OF_CLASSES(RefreshAccessedHistoryEvent, BaseEventInfo); public: - RefreshAccessedHistoryEvent(const std::string& url, bool isRefreshed) - : BaseEventInfo("RefreshAccessedHistoryEvent"), url_(url), isRefreshed_(isRefreshed) + RefreshAccessedHistoryEvent(const std::string& url, bool isRefreshed, bool isMainFrame) + : BaseEventInfo("RefreshAccessedHistoryEvent"), + url_(url), isRefreshed_(isRefreshed), isMainFrame_(isMainFrame) {} ~RefreshAccessedHistoryEvent() = default; @@ -1386,9 +1387,15 @@ public: return isRefreshed_; } + bool IsMainFrame() const + { + return isMainFrame_; + } + private: std::string url_; bool isRefreshed_; + bool isMainFrame_; }; class ACE_EXPORT FileSelectorEvent : public BaseEventInfo { diff --git a/test/unittest/core/pattern/web/mock_web_delegate.cpp b/test/unittest/core/pattern/web/mock_web_delegate.cpp index 64477740b4a..020759deff5 100644 --- a/test/unittest/core/pattern/web/mock_web_delegate.cpp +++ b/test/unittest/core/pattern/web/mock_web_delegate.cpp @@ -845,7 +845,7 @@ std::string WebDelegate::OnOverrideErrorPage( void WebDelegate::OnTooltip(const std::string& tooltip) {} void WebDelegate::OnRequestFocus() {} void WebDelegate::OnRenderExited(OHOS::NWeb::RenderExitReason reason) {} -void WebDelegate::OnRefreshAccessedHistory(const std::string& url, bool isRefreshed) {} +void WebDelegate::OnRefreshAccessedHistory(const std::string& url, bool isRefreshed, bool isMainFrame) {} void WebDelegate::OnPageError(const std::string& param) {} void WebDelegate::OnMessage(const std::string& param) {} void WebDelegate::OnRouterPush(const std::string& param) {} -- Gitee From 24a0fd018280e03593b8585fe91b025dfc793b4b Mon Sep 17 00:00:00 2001 From: cpeng Date: Fri, 15 Aug 2025 08:10:42 +0000 Subject: [PATCH 2/2] update frameworks/core/components/web/resource/web_delegate.cpp. Signed-off-by: cpeng --- frameworks/core/components/web/resource/web_delegate.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/frameworks/core/components/web/resource/web_delegate.cpp b/frameworks/core/components/web/resource/web_delegate.cpp index c35cd10d7a8..20a4a66adfc 100644 --- a/frameworks/core/components/web/resource/web_delegate.cpp +++ b/frameworks/core/components/web/resource/web_delegate.cpp @@ -5890,7 +5890,8 @@ void WebDelegate::OnRefreshAccessedHistory(const std::string& url, bool isRefres CHECK_NULL_VOID(delegate); auto onRefreshAccessedHistoryV2 = delegate->onRefreshAccessedHistoryV2_; if (onRefreshAccessedHistoryV2) { - onRefreshAccessedHistoryV2(std::make_shared(url, isRefreshed, isMainFrame)); + onRefreshAccessedHistoryV2(std::make_shared( + url, isRefreshed, isMainFrame)); } }, TaskExecutor::TaskType::JS, "ArkUIWebRefreshAccessedHistory"); -- Gitee