summaryrefslogtreecommitdiffstats
path: root/src/core/renderer/web_engine_page_render_frame.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/renderer/web_engine_page_render_frame.cpp')
-rw-r--r--src/core/renderer/web_engine_page_render_frame.cpp36
1 files changed, 31 insertions, 5 deletions
diff --git a/src/core/renderer/web_engine_page_render_frame.cpp b/src/core/renderer/web_engine_page_render_frame.cpp
index e230e7fa3..ad5aa4b93 100644
--- a/src/core/renderer/web_engine_page_render_frame.cpp
+++ b/src/core/renderer/web_engine_page_render_frame.cpp
@@ -53,7 +53,7 @@
namespace QtWebEngineCore {
WebEnginePageRenderFrame::WebEnginePageRenderFrame(content::RenderFrame *render_frame)
- : content::RenderFrameObserver(render_frame), m_binding(this)
+ : content::RenderFrameObserver(render_frame), m_binding(this), m_needsLayout(false)
{
render_frame->GetAssociatedInterfaceRegistry()->AddInterface(
base::BindRepeating(&WebEnginePageRenderFrame::BindReceiver, base::Unretained(this)));
@@ -68,16 +68,21 @@ void WebEnginePageRenderFrame::BindReceiver(
void WebEnginePageRenderFrame::FetchDocumentMarkup(uint64_t requestId,
FetchDocumentMarkupCallback callback)
{
- blink::WebString markup = blink::WebFrameContentDumper::DumpAsMarkup(
- render_frame()->GetWebFrame()) ;
+ blink::WebLocalFrame *frame = render_frame()->GetWebFrame();
+ blink::WebString markup;
+ if (!m_needsLayout)
+ markup = blink::WebFrameContentDumper::DumpAsMarkup(frame);
std::move(callback).Run(requestId, markup.Utf8());
}
void WebEnginePageRenderFrame::FetchDocumentInnerText(uint64_t requestId,
FetchDocumentInnerTextCallback callback)
{
- blink::WebString text = blink::WebFrameContentDumper::DumpFrameTreeAsText(
- render_frame()->GetWebFrame(), std::numeric_limits<std::size_t>::max());
+ blink::WebLocalFrame *frame = render_frame()->GetWebFrame();
+ blink::WebString text;
+ if (!m_needsLayout)
+ text = blink::WebFrameContentDumper::DumpFrameTreeAsText(
+ frame, std::numeric_limits<std::size_t>::max());
std::move(callback).Run(requestId, text.Utf8());
}
@@ -91,4 +96,25 @@ void WebEnginePageRenderFrame::OnDestruct()
delete this;
}
+void WebEnginePageRenderFrame::DidMeaningfulLayout(blink::WebMeaningfulLayout layout_type)
+{
+ switch (layout_type) {
+ case blink::WebMeaningfulLayout::kFinishedParsing:
+ case blink::WebMeaningfulLayout::kFinishedLoading:
+ m_needsLayout = false;
+ break;
+ default:
+ break;
+ }
+}
+
+void WebEnginePageRenderFrame::WasShown()
+{
+ m_needsLayout = true;
+}
+
+void WebEnginePageRenderFrame::WasHidden()
+{
+ m_needsLayout = false;
+}
}