Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2724)

Unified Diff: chrome/renderer/chrome_render_view_observer.cc

Issue 1308113002: Make content text retrieval in ChromeRenderViewObserver never force layout. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated to match upstream changes. Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/chrome_render_view_observer.cc
diff --git a/chrome/renderer/chrome_render_view_observer.cc b/chrome/renderer/chrome_render_view_observer.cc
index f221836df0072563c80fbeb8e36bec974ccc2820..a7302c3daa2f7ae085cf971e68598242ca965e67 100644
--- a/chrome/renderer/chrome_render_view_observer.cc
+++ b/chrome/renderer/chrome_render_view_observer.cc
@@ -80,16 +80,9 @@ using blink::WebView;
using blink::WebVector;
using blink::WebWindowFeatures;
-// Delay in milliseconds that we'll wait before capturing the page contents
-// and thumbnail.
+// Delay in milliseconds that we'll wait before capturing the page contents.
static const int kDelayForCaptureMs = 500;
-// Typically, we capture the page data once the page is loaded.
-// Sometimes, the page never finishes to load, preventing the page capture
-// To workaround this problem, we always perform a capture after the following
-// delay.
-static const int kDelayForForcedCaptureMs = 6000;
-
// define to write the time necessary for thumbnail/DOM text retrieval,
// respectively, into the system debug log
// #define TIME_TEXT_RETRIEVAL
@@ -272,10 +265,6 @@ void ChromeRenderViewObserver::DidStopLoading() {
search_provider::AUTODETECTED_PROVIDER));
}
- // Don't capture pages including refresh meta tag.
- if (HasRefreshMetaTag(main_frame))
- return;
-
CapturePageInfoLater(
false, // preliminary_capture
base::TimeDelta::FromMilliseconds(
@@ -286,16 +275,12 @@ void ChromeRenderViewObserver::DidStopLoading() {
void ChromeRenderViewObserver::DidCommitProvisionalLoad(
WebLocalFrame* frame, bool is_new_navigation) {
// Don't capture pages being not new, or including refresh meta tag.
- if (!is_new_navigation || HasRefreshMetaTag(frame))
+ if (!is_new_navigation)
return;
base::debug::SetCrashKeyValue(
crash_keys::kViewCount,
base::SizeTToString(content::RenderView::GetRenderViewCount()));
-
- CapturePageInfoLater(
- true, // preliminary_capture
- base::TimeDelta::FromMilliseconds(kDelayForForcedCaptureMs));
}
void ChromeRenderViewObserver::CapturePageInfoLater(bool preliminary_capture,
@@ -308,6 +293,10 @@ void ChromeRenderViewObserver::CapturePageInfoLater(bool preliminary_capture,
preliminary_capture));
}
+void ChromeRenderViewObserver::DidFirstLayoutAfterFinishedParsing() {
+ CapturePageInfo(true);
+}
+
void ChromeRenderViewObserver::CapturePageInfo(bool preliminary_capture) {
if (!render_view()->GetWebView())
return;
@@ -323,6 +312,10 @@ void ChromeRenderViewObserver::CapturePageInfo(bool preliminary_capture) {
if (main_frame->isWebRemoteFrame())
return;
+ WebLocalFrame* local_frame = main_frame->toWebLocalFrame();
+ if (local_frame->isNavigationScheduled())
+ return;
+
// Don't index/capture pages that are in view source mode.
if (main_frame->isViewSourceModeEnabled())
return;
@@ -388,30 +381,3 @@ void ChromeRenderViewObserver::CaptureText(WebFrame* frame,
contents->resize(last_space_index);
}
}
-
-bool ChromeRenderViewObserver::HasRefreshMetaTag(WebFrame* frame) {
- if (!frame)
- return false;
- WebElement head = frame->document().head();
- if (head.isNull() || !head.hasChildNodes())
- return false;
-
- const WebString tag_name(base::ASCIIToUTF16("meta"));
- const WebString attribute_name(base::ASCIIToUTF16("http-equiv"));
-
- WebNodeList children = head.childNodes();
- for (size_t i = 0; i < children.length(); ++i) {
- WebNode node = children.item(i);
- if (!node.isElementNode())
- continue;
- WebElement element = node.to<WebElement>();
- if (!element.hasHTMLTagName(tag_name))
- continue;
- WebString value = element.getAttribute(attribute_name);
- if (value.isNull() ||
- !base::LowerCaseEqualsASCII(base::StringPiece16(value), "refresh"))
- continue;
- return true;
- }
- return false;
-}

Powered by Google App Engine
This is Rietveld 408576698