Index: chrome/renderer/chrome_render_frame_observer.cc |
diff --git a/chrome/renderer/chrome_render_frame_observer.cc b/chrome/renderer/chrome_render_frame_observer.cc |
index 23aafc61a47194873271c98d86ccaae1738b7864..9fd19893f6daa9b2a071ad61e512ce34570c44f0 100644 |
--- a/chrome/renderer/chrome_render_frame_observer.cc |
+++ b/chrome/renderer/chrome_render_frame_observer.cc |
@@ -53,15 +53,6 @@ using blink::WebString; |
using content::SSLStatus; |
using content::RenderFrame; |
-// 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; |
- |
// Maximum number of characters in the document to index. |
// Any text beyond this point will be clipped. |
static const size_t kMaxIndexChars = 65535; |
@@ -112,7 +103,6 @@ SkBitmap Downscale(const blink::WebImage& image, |
ChromeRenderFrameObserver::ChromeRenderFrameObserver( |
content::RenderFrame* render_frame) |
: content::RenderFrameObserver(render_frame), |
- capture_timer_(false, false), |
translate_helper_(nullptr), |
phishing_classifier_(nullptr) { |
// Don't do anything for subframes. |
@@ -307,16 +297,12 @@ void ChromeRenderFrameObserver::DidFinishLoad() { |
search_provider::AUTODETECTED_PROVIDER)); |
} |
- // Don't capture pages that have pending redirect or location change. |
- if (frame->isNavigationScheduled()) |
- return; |
- |
- CapturePageTextLater( |
- FINAL_CAPTURE, |
- base::TimeDelta::FromMilliseconds( |
- render_frame()->GetRenderView()->GetContentStateImmediately() |
- ? 0 |
- : kDelayForCaptureMs)); |
+ // TODO(dglazkov): This is only necessary for ChromeRenderViewTests, |
+ // since they don't actually pump frames. These tests will need |
+ // to be rewritten eventually (there is no ChromeRenderView anymore). |
+ if (render_frame()->GetRenderView()->GetContentStateImmediately()) { |
+ CapturePageText(PRELIMINARY_CAPTURE); |
+ } |
} |
void ChromeRenderFrameObserver::DidStartProvisionalLoad() { |
@@ -337,17 +323,9 @@ void ChromeRenderFrameObserver::DidCommitProvisionalLoad( |
if (frame->parent()) |
return; |
- // Don't capture pages being not new, with pending redirect, or location |
- // change. |
- if (!is_new_navigation || frame->isNavigationScheduled()) |
- return; |
- |
base::debug::SetCrashKeyValue( |
crash_keys::kViewCount, |
base::SizeTToString(content::RenderView::GetRenderViewCount())); |
- |
- CapturePageTextLater(PRELIMINARY_CAPTURE, base::TimeDelta::FromMilliseconds( |
- kDelayForForcedCaptureMs)); |
} |
void ChromeRenderFrameObserver::CapturePageText(TextCaptureType capture_type) { |
@@ -355,6 +333,10 @@ void ChromeRenderFrameObserver::CapturePageText(TextCaptureType capture_type) { |
if (!frame) |
return; |
+ // Don't capture pages that have pending redirect or location change. |
+ if (frame->isNavigationScheduled()) |
+ return; |
+ |
// Don't index/capture pages that are in view source mode. |
if (frame->isViewSourceModeEnabled()) |
return; |
@@ -377,7 +359,9 @@ void ChromeRenderFrameObserver::CapturePageText(TextCaptureType capture_type) { |
UMA_HISTOGRAM_TIMES(kTranslateCaptureText, |
base::TimeTicks::Now() - capture_begin_time); |
- if (translate_helper_) |
+ // We should run language detection only once. Parsing finishes before |
+ // the page loads, so let's pick that timing. |
+ if (translate_helper_ && capture_type == PRELIMINARY_CAPTURE) |
translate_helper_->PageCaptured(contents); |
TRACE_EVENT0("renderer", "ChromeRenderFrameObserver::CapturePageText"); |
@@ -390,10 +374,16 @@ void ChromeRenderFrameObserver::CapturePageText(TextCaptureType capture_type) { |
#endif |
} |
-void ChromeRenderFrameObserver::CapturePageTextLater( |
- TextCaptureType capture_type, |
- base::TimeDelta delay) { |
- capture_timer_.Start(FROM_HERE, delay, |
- base::Bind(&ChromeRenderFrameObserver::CapturePageText, |
- base::Unretained(this), capture_type)); |
+void ChromeRenderFrameObserver::DidMeaningfulLayout( |
+ blink::WebMeaningfulLayout layout_type) { |
+ switch (layout_type) { |
+ case blink::WebMeaningfulLayout::FinishedParsing: |
+ CapturePageText(PRELIMINARY_CAPTURE); |
+ break; |
+ case blink::WebMeaningfulLayout::FinishedLoading: |
+ CapturePageText(FINAL_CAPTURE); |
+ break; |
+ default: |
+ break; |
+ } |
} |