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

Unified Diff: chrome/renderer/chrome_render_frame_observer.cc

Issue 1398823004: Switch the page-capturing machinery to use the new hooks. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes http://crbug.com/583261. 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 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;
+ }
}
« 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