diff --git a/libcef/browser/browser_contents_delegate.cc b/libcef/browser/browser_contents_delegate.cc index 020f35099..0200b51c1 100644 --- a/libcef/browser/browser_contents_delegate.cc +++ b/libcef/browser/browser_contents_delegate.cc @@ -515,6 +515,20 @@ void CefBrowserContentsDelegate::DidFailLoad( OnLoadEnd(frame, validated_url, error_code); } +void CefBrowserContentsDelegate::DidFinishLoad( + content::RenderFrameHost* render_frame_host, + const GURL& validated_url) { + auto frame = browser_info_->GetFrameForHost(render_frame_host); + frame->RefreshAttributes(); + + int http_status_code = 0; + if (auto response_headers = render_frame_host->GetLastResponseHeaders()) { + http_status_code = response_headers->response_code(); + } + + OnLoadEnd(frame, validated_url, http_status_code); +} + void CefBrowserContentsDelegate::TitleWasSet(content::NavigationEntry* entry) { // |entry| may be NULL if a popup is created via window.open and never // navigated. @@ -577,17 +591,6 @@ void CefBrowserContentsDelegate::Observe( } } -void CefBrowserContentsDelegate::OnLoadEnd(CefRefPtr frame, - const GURL& url, - int http_status_code) { - if (auto c = client()) { - if (auto handler = c->GetLoadHandler()) { - auto navigation_lock = browser_info_->CreateNavigationLock(); - handler->OnLoadEnd(browser(), frame, http_status_code); - } - } -} - bool CefBrowserContentsDelegate::OnSetFocus(cef_focus_source_t source) { // SetFocus() might be called while inside the OnSetFocus() callback. If // so, don't re-enter the callback. @@ -649,6 +652,17 @@ void CefBrowserContentsDelegate::OnLoadStart( } } +void CefBrowserContentsDelegate::OnLoadEnd(CefRefPtr frame, + const GURL& url, + int http_status_code) { + if (auto c = client()) { + if (auto handler = c->GetLoadHandler()) { + auto navigation_lock = browser_info_->CreateNavigationLock(); + handler->OnLoadEnd(browser(), frame, http_status_code); + } + } +} + void CefBrowserContentsDelegate::OnLoadError(CefRefPtr frame, const GURL& url, int error_code) { diff --git a/libcef/browser/browser_contents_delegate.h b/libcef/browser/browser_contents_delegate.h index b8d428dee..ddf50159f 100644 --- a/libcef/browser/browser_contents_delegate.h +++ b/libcef/browser/browser_contents_delegate.h @@ -134,6 +134,8 @@ class CefBrowserContentsDelegate : public content::WebContentsDelegate, void DidFailLoad(content::RenderFrameHost* render_frame_host, const GURL& validated_url, int error_code) override; + void DidFinishLoad(content::RenderFrameHost* render_frame_host, + const GURL& validated_url) override; void TitleWasSet(content::NavigationEntry* entry) override; void DidUpdateFaviconURL( content::RenderFrameHost* render_frame_host, @@ -159,9 +161,6 @@ class CefBrowserContentsDelegate : public content::WebContentsDelegate, // Helpers for executing client callbacks. // TODO(cef): Make this private if/when possible. - void OnLoadEnd(CefRefPtr frame, - const GURL& url, - int http_status_code); bool OnSetFocus(cef_focus_source_t source); private: @@ -173,6 +172,9 @@ class CefBrowserContentsDelegate : public content::WebContentsDelegate, void OnAddressChange(const GURL& url); void OnLoadStart(CefRefPtr frame, ui::PageTransition transition_type); + void OnLoadEnd(CefRefPtr frame, + const GURL& url, + int http_status_code); void OnLoadError(CefRefPtr frame, const GURL& url, int error_code); void OnTitleChange(const std::u16string& title); void OnFullscreenModeChange(bool fullscreen); diff --git a/libcef/browser/browser_frame.cc b/libcef/browser/browser_frame.cc index 7121e3005..70ba04c04 100644 --- a/libcef/browser/browser_frame.cc +++ b/libcef/browser/browser_frame.cc @@ -62,13 +62,6 @@ void CefBrowserFrame::FrameAttached( } } -void CefBrowserFrame::DidFinishFrameLoad(const GURL& validated_url, - int http_status_code) { - if (auto host = GetFrameHost()) { - host->DidFinishFrameLoad(validated_url, http_status_code); - } -} - void CefBrowserFrame::UpdateDraggableRegions( absl::optional> regions) { if (auto host = GetFrameHost()) { diff --git a/libcef/browser/browser_frame.h b/libcef/browser/browser_frame.h index a89796f8f..734211216 100644 --- a/libcef/browser/browser_frame.h +++ b/libcef/browser/browser_frame.h @@ -40,8 +40,6 @@ class CefBrowserFrame base::ReadOnlySharedMemoryRegion region) override; void FrameAttached(mojo::PendingRemote render_frame, bool reattached) override; - void DidFinishFrameLoad(const GURL& validated_url, - int32_t http_status_code) override; void UpdateDraggableRegions( absl::optional> regions) override; diff --git a/libcef/browser/browser_host_base.cc b/libcef/browser/browser_host_base.cc index 6c7e8df08..e0a2c1b60 100644 --- a/libcef/browser/browser_host_base.cc +++ b/libcef/browser/browser_host_base.cc @@ -848,14 +848,6 @@ bool CefBrowserHostBase::Navigate(const content::OpenURLParams& params) { return false; } -void CefBrowserHostBase::OnDidFinishLoad(CefRefPtr frame, - const GURL& validated_url, - int http_status_code) { - frame->RefreshAttributes(); - - contents_delegate_->OnLoadEnd(frame, validated_url, http_status_code); -} - void CefBrowserHostBase::ViewText(const std::string& text) { if (!CEF_CURRENTLY_ON_UIT()) { CEF_POST_TASK(CEF_UIT, diff --git a/libcef/browser/browser_host_base.h b/libcef/browser/browser_host_base.h index 3a9d29fac..fd5de196e 100644 --- a/libcef/browser/browser_host_base.h +++ b/libcef/browser/browser_host_base.h @@ -247,9 +247,6 @@ class CefBrowserHostBase : public CefBrowserHost, // Methods called from CefFrameHostImpl. void LoadMainFrameURL(const content::OpenURLParams& params); - void OnDidFinishLoad(CefRefPtr frame, - const GURL& validated_url, - int http_status_code); virtual void OnSetFocus(cef_focus_source_t source) = 0; void ViewText(const std::string& text); diff --git a/libcef/browser/frame_host_impl.cc b/libcef/browser/frame_host_impl.cc index da28e5948..df3b83ced 100644 --- a/libcef/browser/frame_host_impl.cc +++ b/libcef/browser/frame_host_impl.cc @@ -647,13 +647,6 @@ void CefFrameHostImpl::FrameAttached( CefRefPtr(this), reattached)); } -void CefFrameHostImpl::DidFinishFrameLoad(const GURL& validated_url, - int http_status_code) { - auto browser = GetBrowserHostBase(); - if (browser) - browser->OnDidFinishLoad(this, validated_url, http_status_code); -} - void CefFrameHostImpl::UpdateDraggableRegions( absl::optional> regions) { auto browser = GetBrowserHostBase(); diff --git a/libcef/browser/frame_host_impl.h b/libcef/browser/frame_host_impl.h index 386860165..8e6bba98a 100644 --- a/libcef/browser/frame_host_impl.h +++ b/libcef/browser/frame_host_impl.h @@ -136,8 +136,6 @@ class CefFrameHostImpl : public CefFrame, public cef::mojom::BrowserFrame { base::ReadOnlySharedMemoryRegion region) override; void FrameAttached(mojo::PendingRemote render_frame, bool reattached) override; - void DidFinishFrameLoad(const GURL& validated_url, - int32_t http_status_code) override; void UpdateDraggableRegions( absl::optional> regions) override; diff --git a/libcef/common/mojom/cef.mojom b/libcef/common/mojom/cef.mojom index 844f74e96..499aa33d4 100644 --- a/libcef/common/mojom/cef.mojom +++ b/libcef/common/mojom/cef.mojom @@ -93,9 +93,6 @@ interface BrowserFrame { FrameAttached(pending_remote render_frame, bool reattached); - // The render frame has finished loading. - DidFinishFrameLoad(url.mojom.Url validated_url, int32 http_status_code); - // Draggable regions have updated. UpdateDraggableRegions(array? regions); }; diff --git a/libcef/renderer/frame_impl.cc b/libcef/renderer/frame_impl.cc index e398b604b..bfa1a880e 100644 --- a/libcef/renderer/frame_impl.cc +++ b/libcef/renderer/frame_impl.cc @@ -364,15 +364,6 @@ void CefFrameImpl::OnDidFinishLoad() { blink::WebDocumentLoader* dl = frame_->GetDocumentLoader(); const int http_status_code = dl->GetWebResponse().HttpStatusCode(); - SendToBrowserFrame(__FUNCTION__, - base::BindOnce( - [](const GURL& url, int http_status_code, - const BrowserFrameType& browser_frame) { - browser_frame->DidFinishFrameLoad(url, - http_status_code); - }, - dl->GetUrl(), http_status_code)); - CefRefPtr app = CefAppManager::Get()->GetApplication(); if (app) { CefRefPtr handler = app->GetRenderProcessHandler(); diff --git a/tests/ceftests/pdf_viewer_unittest.cc b/tests/ceftests/pdf_viewer_unittest.cc index 486bb0957..0a6b77bff 100644 --- a/tests/ceftests/pdf_viewer_unittest.cc +++ b/tests/ceftests/pdf_viewer_unittest.cc @@ -92,6 +92,9 @@ class PdfViewerTestHandler : public TestHandler, public CefContextMenuHandler { int httpStatusCode) override { bool is_pdf1 = false; const std::string& url = frame->GetURL(); + if (url == "about:blank") + return; + if (url == kPdfHtmlUrl) { if (!got_on_load_end_html_) got_on_load_end_html_.yes(); @@ -107,7 +110,7 @@ class PdfViewerTestHandler : public TestHandler, public CefContextMenuHandler { NOTREACHED(); } } else { - NOTREACHED(); + NOTREACHED() << "url=" << url; } if (is_pdf1) { diff --git a/tests/ceftests/resource_request_handler_unittest.cc b/tests/ceftests/resource_request_handler_unittest.cc index 8535c5cd5..92d276a13 100644 --- a/tests/ceftests/resource_request_handler_unittest.cc +++ b/tests/ceftests/resource_request_handler_unittest.cc @@ -842,10 +842,15 @@ class BasicResponseTest : public TestHandler { EXPECT_EQ(browser_id_, browser->GetIdentifier()); EXPECT_TRUE(frame->IsMain()); - if (unhandled_) - EXPECT_EQ(httpStatusCode, 0); - else + if (unhandled_) { + if (IsRedirect()) { + EXPECT_EQ(httpStatusCode, 307); + } else { + EXPECT_EQ(httpStatusCode, 0); + } + } else { EXPECT_EQ(httpStatusCode, 200); + } on_load_end_ct_++;