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

Unified Diff: chrome/renderer/chrome_render_frame_observer.cc

Issue 1659393003: Revert of Switch the page-capturing machinery to use the new hooks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 11 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
« no previous file with comments | « chrome/renderer/chrome_render_frame_observer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 9fd19893f6daa9b2a071ad61e512ce34570c44f0..23aafc61a47194873271c98d86ccaae1738b7864 100644
--- a/chrome/renderer/chrome_render_frame_observer.cc
+++ b/chrome/renderer/chrome_render_frame_observer.cc
@@ -53,6 +53,15 @@
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;
@@ -103,6 +112,7 @@
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.
@@ -297,12 +307,16 @@
search_provider::AUTODETECTED_PROVIDER));
}
- // 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);
- }
+ // 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));
}
void ChromeRenderFrameObserver::DidStartProvisionalLoad() {
@@ -323,9 +337,17 @@
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) {
@@ -333,10 +355,6 @@
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;
@@ -359,9 +377,7 @@
UMA_HISTOGRAM_TIMES(kTranslateCaptureText,
base::TimeTicks::Now() - capture_begin_time);
- // 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)
+ if (translate_helper_)
translate_helper_->PageCaptured(contents);
TRACE_EVENT0("renderer", "ChromeRenderFrameObserver::CapturePageText");
@@ -374,16 +390,10 @@
#endif
}
-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;
- }
-}
+void ChromeRenderFrameObserver::CapturePageTextLater(
+ TextCaptureType capture_type,
+ base::TimeDelta delay) {
+ capture_timer_.Start(FROM_HERE, delay,
+ base::Bind(&ChromeRenderFrameObserver::CapturePageText,
+ base::Unretained(this), capture_type));
+}
« no previous file with comments | « chrome/renderer/chrome_render_frame_observer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698