summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorjcivelli@google.com <jcivelli@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-12 17:38:10 +0000
committerjcivelli@google.com <jcivelli@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-12 17:38:10 +0000
commit1c57b7b3f5bfe15eeea1fb9023a86b30cba5a2be (patch)
tree8629f2d46895e84f3bab409ce2ae99d59557309d /chrome/renderer
parent310c28a1848fbf047162eccf96c8b9528be6ac83 (diff)
downloadchromium_src-1c57b7b3f5bfe15eeea1fb9023a86b30cba5a2be.zip
chromium_src-1c57b7b3f5bfe15eeea1fb9023a86b30cba5a2be.tar.gz
chromium_src-1c57b7b3f5bfe15eeea1fb9023a86b30cba5a2be.tar.bz2
Don't offer to translate pages if the page says so by
using the magic Google meta-tag. BUG=48606 TEST=See bug. Review URL: http://codereview.chromium.org/2960001 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52097 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/render_view.cc21
-rw-r--r--chrome/renderer/render_view.h6
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();