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; |
-} |