summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorjcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-31 22:38:44 +0000
committerjcampan@chromium.org <jcampan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-31 22:38:44 +0000
commitcbd94cfe486f3f012e63bd4c2bf338da4f2ff9bc (patch)
treeaf91ba96d5f2170bba3f63fbbe8726dbaf3a2c41 /chrome/renderer
parent9ee73628f9d8ec2998b6060805dac0efd825af44 (diff)
downloadchromium_src-cbd94cfe486f3f012e63bd4c2bf338da4f2ff9bc.zip
chromium_src-cbd94cfe486f3f012e63bd4c2bf338da4f2ff9bc.tar.gz
chromium_src-cbd94cfe486f3f012e63bd4c2bf338da4f2ff9bc.tar.bz2
Revert 37674 - Hooking the UI part to the translate feature.
Review URL: http://codereview.chromium.org/549217 TBR=jcampan@chromium.org Review URL: http://codereview.chromium.org/555195 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@37675 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/render_view.cc11
-rw-r--r--chrome/renderer/render_view.h8
-rw-r--r--chrome/renderer/translate/page_translator.cc70
-rw-r--r--chrome/renderer/translate/page_translator.h36
-rw-r--r--chrome/renderer/translate/page_translator_unittest.cc4
5 files changed, 31 insertions, 98 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index 5eea4b3..d4c1c36 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -312,7 +312,7 @@ RenderView::RenderView(RenderThreadBase* render_thread,
webkit_preferences_(webkit_preferences),
session_storage_namespace_id_(session_storage_namespace_id),
ALLOW_THIS_IN_INITIALIZER_LIST(text_translator_(this)) {
- page_translator_.reset(new PageTranslator(&text_translator_, this));
+ page_translator_.reset(new PageTranslator(&text_translator_));
}
RenderView::~RenderView() {
@@ -2872,13 +2872,6 @@ void RenderView::DidStopLoadingForPlugin() {
didStopLoading();
}
-void RenderView::PageTranslated(int page_id,
- const std::string& original_lang,
- const std::string& target_lang) {
- Send(new ViewHostMsg_PageTranslated(routing_id_, page_id_,
- original_lang, target_lang));
-}
-
void RenderView::ShowModalHTMLDialogForPlugin(
const GURL& url,
const gfx::Size& size,
@@ -3383,7 +3376,7 @@ void RenderView::OnTranslatePage(int page_id,
WebFrame* main_frame = webview()->mainFrame();
if (!main_frame)
return;
- page_translator_->Translate(page_id, main_frame, source_lang, target_lang);
+ page_translator_->Translate(main_frame, source_lang, target_lang);
}
void RenderView::OnTranslateTextResponse(
diff --git a/chrome/renderer/render_view.h b/chrome/renderer/render_view.h
index 17a57a8..a96ee39 100644
--- a/chrome/renderer/render_view.h
+++ b/chrome/renderer/render_view.h
@@ -123,8 +123,7 @@ class RenderView : public RenderWidget,
public WebKit::WebFrameClient,
public WebKit::WebPageSerializerClient,
public webkit_glue::WebPluginPageDelegate,
- public base::SupportsWeakPtr<RenderView>,
- public PageTranslator::Delegate {
+ public base::SupportsWeakPtr<RenderView> {
public:
// Visit all RenderViews with a live WebView (i.e., RenderViews that have
// been closed but not yet destroyed are excluded).
@@ -388,11 +387,6 @@ class RenderView : public RenderWidget,
const std::string& json_arguments,
std::string* json_retval);
- // PageTranslator::Delegate implementation:
- virtual void PageTranslated(int page_id,
- const std::string& original_lang,
- const std::string& target_lang);
-
// Do not delete directly. This class is reference counted.
virtual ~RenderView();
diff --git a/chrome/renderer/translate/page_translator.cc b/chrome/renderer/translate/page_translator.cc
index f18de8a..df0a59b 100644
--- a/chrome/renderer/translate/page_translator.cc
+++ b/chrome/renderer/translate/page_translator.cc
@@ -44,11 +44,8 @@ bool PageTranslator::WebStringCompare::operator()(
return len1 < len2;
}
-PageTranslator::PageTranslator(TextTranslator* text_translator,
- Delegate* delegate)
- : delegate_(delegate),
- text_translator_(text_translator),
- page_id_(-1) {
+PageTranslator::PageTranslator(TextTranslator* text_translator)
+ : text_translator_(text_translator) {
for (size_t i = 0; i < arraysize(kSkippedTags); ++i)
ignored_tags_.insert(WebKit::WebString(ASCIIToUTF16(kSkippedTags[i])));
for (size_t i = 0; i < arraysize(kInlineTags); ++i)
@@ -56,35 +53,13 @@ PageTranslator::PageTranslator(TextTranslator* text_translator,
}
PageTranslator::~PageTranslator() {
- ResetPageStates(); // This deletes pending translations.
+ STLDeleteContainerPairSecondPointers(pending_translations_.begin(),
+ pending_translations_.end());
}
-void PageTranslator::Translate(int page_id,
- WebKit::WebFrame* web_frame,
- std::string source_lang,
- std::string target_lang) {
- if (page_id != page_id_) {
- // This is a new page, our states are invalid.
- ResetPageStates();
- page_id_ = page_id;
- }
- if (original_language_.empty()) {
- original_language_ = source_lang;
- current_language_ = source_lang;
- }
- if (original_language_ != current_language_) {
- // The page has already been translated.
- if (target_lang == current_language_) {
- NOTREACHED();
- return;
- }
- // TODO(jcampan): implement translation of an already translated page.
- return;
- }
-
- // We are about to start the translation process.
- current_language_ = target_lang;
-
+void PageTranslator::Translate(WebKit::WebFrame* web_frame,
+ std::string from_lang,
+ std::string to_lang) {
std::stack<NodeList*> node_list_stack;
std::vector<NodeList*> text_node_lists;
TraverseNode(web_frame->document(), &node_list_stack, &text_node_lists);
@@ -110,15 +85,15 @@ void PageTranslator::Translate(int page_id,
// Send the text for translation.
bool secure = static_cast<GURL>(web_frame->top()->url()).SchemeIsSecure();
int work_id =
- text_translator_->Translate(text_chunks, source_lang, target_lang,
- secure, this);
+ text_translator_->Translate(text_chunks, from_lang, to_lang, secure,
+ this);
pending_translations_[work_id] = *iter;
}
}
void PageTranslator::NavigatedToNewPage() {
// We can drop all our states, they were related to the previous page.
- ResetPageStates();
+ ResetPageState();
}
void PageTranslator::UndoTranslation() {
@@ -127,11 +102,8 @@ void PageTranslator::UndoTranslation() {
for (iter = text_nodes_.begin(); iter != text_nodes_.end(); ++iter)
iter->first.setNodeValue(iter->second);
- // The page is back to its original content, we can dop all our states but the
- // page id.
- int page_id = page_id_;
- ResetPageStates();
- page_id_ = page_id;
+ // The page is back to its original content, we can dop all our states.
+ ResetPageState();
}
bool PageTranslator::ShouldElementBeTraversed(WebKit::WebElement element) {
@@ -153,6 +125,11 @@ void PageTranslator::ClearNodeZone(int work_id) {
pending_translations_.erase(iter);
}
+void PageTranslator::ResetPageState() {
+ pending_translations_.clear();
+ text_nodes_.clear();
+}
+
void PageTranslator::TranslationError(int work_id, int error_id) {
// TODO(jcampan): may be we should show somehow that something went wrong to
// the user?
@@ -175,7 +152,6 @@ void PageTranslator::TextTranslated(
// anchor tags.
// NOTREACHED() << "Translation results received are inconsistent with the "
// "request";
- ClearNodeZone(work_id);
return;
}
@@ -183,9 +159,6 @@ void PageTranslator::TextTranslated(
(*nodes)[i].setNodeValue(WebKit::WebString(translated_text_chunks[i]));
ClearNodeZone(work_id);
-
- if (delegate_ && pending_translations_.empty())
- delegate_->PageTranslated(page_id_, original_language_, current_language_);
}
void PageTranslator::TraverseNode(WebKit::WebNode node,
@@ -235,12 +208,3 @@ void PageTranslator::TraverseNode(WebKit::WebNode node,
delete text_nodes;
}
}
-
-void PageTranslator::ResetPageStates() {
- page_id_ = -1;
- original_language_.clear();
- current_language_.clear();
- text_nodes_.clear();
- // Remove pending translations.
- STLDeleteValues(&pending_translations_);
-}
diff --git a/chrome/renderer/translate/page_translator.h b/chrome/renderer/translate/page_translator.h
index 68d18d4..14139227 100644
--- a/chrome/renderer/translate/page_translator.h
+++ b/chrome/renderer/translate/page_translator.h
@@ -31,24 +31,15 @@ class WebString;
// and delegates the actual text translation to a TextTranslator.
class PageTranslator : public TextTranslator::Delegate {
public:
- class Delegate {
- public:
- virtual ~Delegate() {}
- virtual void PageTranslated(int page_id,
- const std::string& original_lang,
- const std::string& target_lang) = 0;
- };
-
// The caller remains the owner of |text_translator|.
- PageTranslator(TextTranslator* text_translator, Delegate* delegate);
+ explicit PageTranslator(TextTranslator* text_translator);
virtual ~PageTranslator();
- // Starts the translation process of |web_frame| from |source_lang| to
- // |target_lang| where the languages are the ISO codes (ex: en, fr...).
- void Translate(int page_id,
- WebKit::WebFrame* web_frame,
- std::string source_lang,
- std::string target_lang);
+ // Starts the translation process of |web_frame| from |from_lang| to |to_lang|
+ // where the languages are the ISO codes (ex: en, fr...).
+ void Translate(WebKit::WebFrame* web_frame,
+ std::string from_lang,
+ std::string to_lang);
// Notification that the associated RenderView has navigated to a new page.
void NavigatedToNewPage();
@@ -89,10 +80,10 @@ class PageTranslator : public TextTranslator::Delegate {
void ClearNodeZone(int work_id);
// Clears all the states related to the page's contents.
- void ResetPageStates();
+ void ResetPageState();
- // Our delegate (notified when a page is translated).
- Delegate* delegate_;
+ // The RenderView we are providing translations for.
+ RenderView* render_view_;
// The TextTranslator is responsible for translating the actual text chunks
// from one language to another.
@@ -107,15 +98,6 @@ class PageTranslator : public TextTranslator::Delegate {
// Mapping from a translation engine work id to the associated nodes.
std::map<int, NodeList*> pending_translations_;
- // The language the page was in originally.
- std::string original_language_;
-
- // The language the page was translated to.
- std::string current_language_;
-
- // The page id of the page last time we translated.
- int page_id_;
-
// The list of text nodes in the current page with their original text.
// Used to undo the translation.
typedef std::pair<WebKit::WebNode, WebKit::WebString> NodeTextPair;
diff --git a/chrome/renderer/translate/page_translator_unittest.cc b/chrome/renderer/translate/page_translator_unittest.cc
index 4ab6c482..4bc1e02 100644
--- a/chrome/renderer/translate/page_translator_unittest.cc
+++ b/chrome/renderer/translate/page_translator_unittest.cc
@@ -168,8 +168,8 @@ TEST_F(TranslatorTest, DISABLED_TranslatePages) {
// Translate it.
ReverseTextTranslator text_translator;
- PageTranslator translator(&text_translator, NULL);
- translator.Translate(0, web_frame, "en", "fr");
+ PageTranslator translator(&text_translator);
+ translator.Translate(web_frame, "en", "fr");
// Translation is asynchronous, so we need to process the pending messages
// to make it happen.