diff options
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/render_view.cc | 21 | ||||
-rw-r--r-- | chrome/renderer/render_view.h | 6 |
2 files changed, 25 insertions, 2 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 1386917..7030f80 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -838,11 +838,11 @@ void RenderView::CapturePageInfo(int load_id, bool preliminary_capture) { std::string language = DetermineTextLanguage(contents); UMA_HISTOGRAM_MEDIUM_TIMES("Renderer4.LanguageDetection", base::TimeTicks::Now() - begin_time); - + WebKit::WebDocument document = main_frame->document(); // 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)); + language, IsPageTranslatable(&document))); } OnCaptureThumbnail(); @@ -1978,6 +1978,23 @@ void RenderView::UpdateTargetURL(const GURL& url, const GURL& fallback_url) { } } +bool RenderView::IsPageTranslatable(WebKit::WebDocument* document) { + std::vector<WebKit::WebElement> meta_elements; + webkit_glue::GetMetaElementsWithName(document, ASCIIToUTF16("google"), + &meta_elements); + std::vector<WebKit::WebElement>::const_iterator iter; + for (iter = meta_elements.begin(); iter != meta_elements.end(); ++iter) { + WebString attribute = iter->getAttribute("value"); + if (attribute.isNull()) // We support both 'value' and 'content'. + attribute = iter->getAttribute("content"); + if (attribute.isNull()) + continue; + if (LowerCaseEqualsASCII(attribute, "notranslate")) + return false; + } + return true; +} + void RenderView::StartNavStateSyncTimerIfNecessary() { int delay; if (send_content_state_immediately_) diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h index ea515b4..71b8693 100644 --- a/chrome/renderer/render_view.h +++ b/chrome/renderer/render_view.h @@ -103,6 +103,7 @@ class WebAccessibilityCache; class WebApplicationCacheHost; class WebApplicationCacheHostClient; class WebDataSource; +class WebDocument; class WebDragData; class WebGeolocationServiceInterface; class WebImage; @@ -933,6 +934,11 @@ class RenderView : public RenderWidget, // If |only_visible| is true, only forms visible in the layout are sent void SendPasswordForms(WebKit::WebFrame* frame, bool only_visible); + // Returns whether the page associated with |document| is a candidate for + // translation. Some pages can explictly specify (via a meta-tag) that they + // should not be translated. + bool IsPageTranslatable(WebKit::WebDocument* document); + // Starts nav_state_sync_timer_ if it isn't already running. void StartNavStateSyncTimerIfNecessary(); |