summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorjcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-15 17:38:19 +0000
committerjcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-15 17:38:19 +0000
commitcf3f387e6dd8072cb884964923e978bb198bca12 (patch)
tree358fbdcfc310baba78a7b87bfc48a4a402ae968e /chrome/renderer
parentae1b251286512eded9ff13561ea84a645878859b (diff)
downloadchromium_src-cf3f387e6dd8072cb884964923e978bb198bca12.zip
chromium_src-cf3f387e6dd8072cb884964923e978bb198bca12.tar.gz
chromium_src-cf3f387e6dd8072cb884964923e978bb198bca12.tar.bz2
Revert 36362 - It breaks NACLTests and Chrome Frame Tests
3rd attempt at landing the language detection on page load. A memory error has been fixed in the CLD library in the meantime. This should hopefully fixes the crashers in the reliability tests. Note that this version is actually simpler than the original review since the detection is now performed in the renderer. (So the CLD code runs sandboxed.) Original review: http://codereview.chromium.org/492024/show BUG=30662 TEST=Run the unittests. Review URL: http://codereview.chromium.org/518075 TBR=jcampan@chromium.org Review URL: http://codereview.chromium.org/546062 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@36364 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/render_view.cc53
-rw-r--r--chrome/renderer/render_view.h3
2 files changed, 35 insertions, 21 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index 040fc4c..b901a7e 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -304,6 +304,7 @@ RenderView::RenderView(RenderThreadBase* render_thread,
send_preferred_size_changes_(false),
ALLOW_THIS_IN_INITIALIZER_LIST(
notification_provider_(new NotificationProvider(this))),
+ determine_page_text_after_loading_stops_(false),
view_type_(ViewType::INVALID),
browser_window_id_(-1),
last_top_level_navigation_page_id_(-1),
@@ -494,6 +495,7 @@ void RenderView::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_HANDLER(ViewMsg_CopyImageAt, OnCopyImageAt)
IPC_MESSAGE_HANDLER(ViewMsg_ExecuteEditCommand, OnExecuteEditCommand)
IPC_MESSAGE_HANDLER(ViewMsg_Find, OnFind)
+ IPC_MESSAGE_HANDLER(ViewMsg_DeterminePageLanguage, OnDeterminePageLanguage)
IPC_MESSAGE_HANDLER(ViewMsg_Zoom, OnZoom)
IPC_MESSAGE_HANDLER(ViewMsg_SetZoomLevelForLoadingHost,
OnSetZoomLevelForLoadingHost)
@@ -664,35 +666,24 @@ void RenderView::CapturePageInfo(int load_id, bool preliminary_capture) {
if (!preliminary_capture)
last_indexed_page_id_ = load_id;
- // Get the URL for this page.
+ // get the URL for this page
GURL url(main_frame->url());
if (url.is_empty())
return;
- // Retrieve the frame's full text.
+ // full text
std::wstring contents;
CaptureText(main_frame, &contents);
if (contents.size()) {
- std::string language = "unknown";
-#if defined(OS_WIN)
- int num_languages = 0;
- bool is_reliable = false;
- base::TimeTicks begin_time = base::TimeTicks::Now();
- Language cld_lang =
- DetectLanguageOfUnicodeText(NULL, contents.c_str(), true,
- &is_reliable, &num_languages, NULL);
- if (cld_lang != NUM_LANGUAGES && cld_lang != UNKNOWN_LANGUAGE &&
- cld_lang != TG_UNKNOWN_LANGUAGE) {
- language = LanguageCodeISO639_1(cld_lang);
- }
- UMA_HISTOGRAM_MEDIUM_TIMES("Renderer4.LanguageDetection",
- base::TimeTicks::Now() - begin_time);
-#endif
+ // Send the text to the browser for indexing.
+ Send(new ViewHostMsg_PageContents(url, load_id, contents));
+ }
- // Send the text to the browser for indexing (the browser might decide not
- // to index, if the URL is HTTPS for instance) and language discovery.
- Send(new ViewHostMsg_PageContents(routing_id_, url, load_id, contents,
- language));
+ // Now that we have the contents, we can determine the language if necessary.
+ if (determine_page_text_after_loading_stops_) {
+ determine_page_text_after_loading_stops_ = false;
+ Send(new ViewHostMsg_PageLanguageDetermined(
+ routing_id_, DetermineTextLanguage(contents)));
}
// thumbnail
@@ -704,6 +695,15 @@ void RenderView::CaptureText(WebFrame* frame, std::wstring* contents) {
if (!frame)
return;
+ // Don't index any https pages. People generally don't want their bank
+ // accounts, etc. indexed on their computer, especially since some of these
+ // things are not marked cachable.
+ // TODO(brettw) we may want to consider more elaborate heuristics such as
+ // the cachability of the page. We may also want to consider subframes (this
+ // test will still index subframes if the subframe is SSL).
+ if (GURL(frame->url()).SchemeIsSecure())
+ return;
+
#ifdef TIME_TEXT_RETRIEVAL
double begin = time_util::GetHighResolutionTimeNow();
#endif
@@ -3079,6 +3079,17 @@ void RenderView::OnFind(int request_id, const string16& search_text,
}
}
+void RenderView::OnDeterminePageLanguage() {
+ if (is_loading_) {
+ // Wait for the page to finish loading before trying to determine the
+ // language.
+ determine_page_text_after_loading_stops_ = true;
+ return;
+ }
+
+ Send(new ViewHostMsg_PageLanguageDetermined(routing_id_, DetectLanguage()));
+}
+
std::string RenderView::DetectLanguage() {
if (!webview() || is_loading_)
return kUnknownLanguageCode;
diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h
index 3e178ce..4d3a4e9 100644
--- a/chrome/renderer/render_view.h
+++ b/chrome/renderer/render_view.h
@@ -956,6 +956,9 @@ class RenderView : public RenderWidget,
// Hopds a reference to the service which provides desktop notifications.
scoped_ptr<NotificationProvider> notification_provider_;
+ // Set to true if request for capturing page text has been made.
+ bool determine_page_text_after_loading_stops_;
+
// Holds state pertaining to a navigation that we initiated. This is held by
// the WebDataSource::ExtraData attribute. We use pending_navigation_state_
// as a temporary holder for the state until the WebDataSource corresponding