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