blob: d7ec4fce5eeb249aaab41985aeeee8a28ea9bd3f [file] [log] [blame]
// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/translate/translate_tab_helper.h"
#include "chrome/browser/translate/page_translated_details.h"
#include "chrome/common/render_messages.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "content/common/notification_service.h"
TranslateTabHelper::TranslateTabHelper(TabContents* tab_contents)
: TabContentsObserver(tab_contents),
language_state_(&tab_contents->controller()) {
}
TranslateTabHelper::~TranslateTabHelper() {
}
bool TranslateTabHelper::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(TranslateTabHelper, message)
IPC_MESSAGE_HANDLER(ViewHostMsg_TranslateLanguageDetermined,
OnLanguageDetermined)
IPC_MESSAGE_HANDLER(ViewHostMsg_PageTranslated, OnPageTranslated)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
void TranslateTabHelper::DidNavigateAnyFramePostCommit(
const NavigationController::LoadCommittedDetails& details,
const ViewHostMsg_FrameNavigate_Params& params) {
// Let the LanguageState clear its state.
language_state_.DidNavigate(details);
}
void TranslateTabHelper::OnLanguageDetermined(const std::string& language,
bool page_translatable) {
language_state_.LanguageDetermined(language, page_translatable);
std::string lang = language;
NotificationService::current()->Notify(
NotificationType::TAB_LANGUAGE_DETERMINED,
Source<TabContents>(tab_contents()),
Details<std::string>(&lang));
}
void TranslateTabHelper::OnPageTranslated(int32 page_id,
const std::string& original_lang,
const std::string& translated_lang,
TranslateErrors::Type error_type) {
language_state_.set_current_language(translated_lang);
language_state_.set_translation_pending(false);
PageTranslatedDetails details(original_lang, translated_lang, error_type);
NotificationService::current()->Notify(
NotificationType::PAGE_TRANSLATED,
Source<TabContents>(tab_contents()),
Details<PageTranslatedDetails>(&details));
}