diff options
-rw-r--r-- | chrome/browser/browser_main.cc | 7 | ||||
-rw-r--r-- | chrome/browser/translate/translate_manager.cc | 204 | ||||
-rw-r--r-- | chrome/browser/translate/translate_manager.h | 24 | ||||
-rw-r--r-- | chrome/browser/translate/translate_manager_browsertest.cc | 119 |
4 files changed, 286 insertions, 68 deletions
diff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc index 61e4030..51537b7 100644 --- a/chrome/browser/browser_main.cc +++ b/chrome/browser/browser_main.cc @@ -1617,7 +1617,12 @@ int BrowserMain(const MainFunctionParams& parameters) { return ResultCodes::MACHINE_LEVEL_INSTALL_EXISTS; // Create the TranslateManager singleton. - TranslateManager::GetInstance(); + TranslateManager* translate_manager = TranslateManager::GetInstance(); + DCHECK(translate_manager != NULL); + // If we're running tests (ui_task is non-null), then we don't want to + // call FetchLanguageListFromTranslateServer + if (parameters.ui_task == NULL && translate_manager != NULL) + translate_manager->FetchLanguageListFromTranslateServer(user_prefs); #if defined(OS_MACOSX) if (!parsed_command_line.HasSwitch(switches::kNoFirstRun)) { diff --git a/chrome/browser/translate/translate_manager.cc b/chrome/browser/translate/translate_manager.cc index 6816171..de144f7 100644 --- a/chrome/browser/translate/translate_manager.cc +++ b/chrome/browser/translate/translate_manager.cc @@ -6,10 +6,12 @@ #include "base/command_line.h" #include "base/compiler_specific.h" +#include "base/json/json_reader.h" #include "base/memory/singleton.h" #include "base/metrics/histogram.h" #include "base/string_split.h" #include "base/string_util.h" +#include "base/values.h" #include "chrome/browser/autofill/autofill_manager.h" #include "chrome/browser/browser_process.h" #include "chrome/browser/prefs/pref_service.h" @@ -124,11 +126,17 @@ const char* const kTranslateScriptHeader = "Google-Translate-Element-Mode: library"; const char* const kReportLanguageDetectionErrorURL = "http://translate.google.com/translate_error"; - +const char* const kLanguageListFetchURL = + "http://translate.googleapis.com/translate_a/l?client=chrome&cb=sl"; +const int kMaxRetryLanguageListFetch = 5; const int kTranslateScriptExpirationDelayMS = 24 * 60 * 60 * 1000; // 1 day. } // namespace +// This must be kept in sync with the &cb= value in the kLanguageListFetchURL. +const char* const TranslateManager::kLanguageListCallbackName = "sl("; +const char* const TranslateManager::kTargetLanguagesKey = "tl"; + // static base::LazyInstance<std::set<std::string> > TranslateManager::supported_languages_(base::LINKER_INITIALIZED); @@ -154,11 +162,69 @@ bool TranslateManager::IsTranslatableURL(const GURL& url) { } // static +void TranslateManager::SetSupportedLanguages(const std::string& language_list) { + // The format is: + // sl({'sl': {'XX': 'LanguageName', ...}, 'tl': {'XX': 'LanguageName', ...}}) + // Where "sl(" is set in kLanguageListCallbackName + // and 'tl' is kTargetLanguagesKey + if (!StartsWithASCII(language_list, kLanguageListCallbackName, false) || + !EndsWith(language_list, ")", false)) { + // We don't have a NOTREACHED here since this can happen in ui_tests, even + // though the the BrowserMain function won't call us with parameters.ui_task + // is NULL some tests don't set it, so we must bail here. + return; + } + static const size_t kLanguageListCallbackNameLength = + strlen(kLanguageListCallbackName); + std::string languages_json = language_list.substr( + kLanguageListCallbackNameLength, + language_list.size() - kLanguageListCallbackNameLength - 1); + // JSON doesn't support single quotes though this is what is used on the + // translate server so we must replace them with double quotes. + ReplaceSubstringsAfterOffset(&languages_json, 0, "'", "\""); + scoped_ptr<Value> json_value(base::JSONReader::Read(languages_json, true)); + if (json_value == NULL || !json_value->IsType(Value::TYPE_DICTIONARY)) { + NOTREACHED(); + return; + } + // The first level dictionary contains two sub-dict, one for source languages + // and the other for target languages, we want to use the target languages. + DictionaryValue* language_dict = + static_cast<DictionaryValue*>(json_value.get()); + DictionaryValue* target_languages = NULL; + if (!language_dict->GetDictionary(kTargetLanguagesKey, &target_languages) || + target_languages == NULL) { + NOTREACHED(); + return; + } + // Now we can clear our current state... + std::set<std::string>* supported_languages = supported_languages_.Pointer(); + supported_languages->clear(); + // ... and replace it with the values we just fetched from the server. + DictionaryValue::key_iterator iter = target_languages->begin_keys(); + for (; iter != target_languages->end_keys(); ++iter) + supported_languages_.Pointer()->insert(*iter); +} + +// static +void TranslateManager::InitSupportedLanguages() { + // If our list of supported languages have not been set yet, we default + // to our hard coded list of languages in kSupportedLanguages. + if (supported_languages_.Pointer()->empty()) { + for (size_t i = 0; i < arraysize(kSupportedLanguages); ++i) + supported_languages_.Pointer()->insert(kSupportedLanguages[i]); + } +} + +// static void TranslateManager::GetSupportedLanguages( std::vector<std::string>* languages) { DCHECK(languages && languages->empty()); - for (size_t i = 0; i < arraysize(kSupportedLanguages); ++i) - languages->push_back(kSupportedLanguages[i]); + InitSupportedLanguages(); + std::set<std::string>* supported_languages = supported_languages_.Pointer(); + std::set<std::string>::const_iterator iter = supported_languages->begin(); + for (; iter != supported_languages->end(); ++iter) + languages->push_back(*iter); } // static @@ -177,12 +243,8 @@ std::string TranslateManager::GetLanguageCode( // static bool TranslateManager::IsSupportedLanguage(const std::string& page_language) { - std::set<std::string>* supported_languages = supported_languages_.Pointer(); - if (supported_languages->empty()) { - for (size_t i = 0; i < arraysize(kSupportedLanguages); ++i) - supported_languages->insert(kSupportedLanguages[i]); - } - return supported_languages->find(page_language) != supported_languages->end(); + InitSupportedLanguages(); + return supported_languages_.Pointer()->count(page_language) != 0; } void TranslateManager::Observe(NotificationType type, @@ -288,54 +350,74 @@ void TranslateManager::OnURLFetchComplete(const URLFetcher* source, const net::ResponseCookies& cookies, const std::string& data) { scoped_ptr<const URLFetcher> delete_ptr(source); - DCHECK(translate_script_request_pending_); - translate_script_request_pending_ = false; + DCHECK(translate_script_request_pending_ || language_list_request_pending_); + // We quickly recognize that we are handling a translate script request + // if we don't have a language_list_request_pending_. Otherwise we do the + // more expensive check of confirming we got the kTranslateScriptURL in the + // rare case where we would have both requests pending at the same time. + bool translate_script_request = !language_list_request_pending_ || + url == GURL(kTranslateScriptURL); + // Here we make sure that if we didn't get the translate_script_request, + // we actually got a language_list_request. + DCHECK(translate_script_request || url == GURL(kLanguageListFetchURL)); + if (translate_script_request) + translate_script_request_pending_ = false; + else + language_list_request_pending_ = false; + bool error = (status.status() != net::URLRequestStatus::SUCCESS || response_code != 200); - if (!error) { - base::StringPiece str = ResourceBundle::GetSharedInstance(). - GetRawDataResource(IDR_TRANSLATE_JS); - DCHECK(translate_script_.empty()); - str.CopyToString(&translate_script_); - translate_script_ += "\n" + data; - // We'll expire the cached script after some time, to make sure long running - // browsers still get fixes that might get pushed with newer scripts. - MessageLoop::current()->PostDelayedTask(FROM_HERE, - method_factory_.NewRunnableMethod( - &TranslateManager::ClearTranslateScript), - translate_script_expiration_delay_); - } - - // Process any pending requests. - std::vector<PendingRequest>::const_iterator iter; - for (iter = pending_requests_.begin(); iter != pending_requests_.end(); - ++iter) { - const PendingRequest& request = *iter; - TabContents* tab = tab_util::GetTabContentsByID(request.render_process_id, - request.render_view_id); - if (!tab) { - // The tab went away while we were retrieving the script. - continue; - } - NavigationEntry* entry = tab->controller().GetActiveEntry(); - if (!entry || entry->page_id() != request.page_id) { - // We navigated away from the page the translation was triggered on. - continue; + if (translate_script_request) { + if (!error) { + base::StringPiece str = ResourceBundle::GetSharedInstance(). + GetRawDataResource(IDR_TRANSLATE_JS); + DCHECK(translate_script_.empty()); + str.CopyToString(&translate_script_); + translate_script_ += "\n" + data; + // We'll expire the cached script after some time, to make sure long + // running browsers still get fixes that might get pushed with newer + // scripts. + MessageLoop::current()->PostDelayedTask(FROM_HERE, + method_factory_.NewRunnableMethod( + &TranslateManager::ClearTranslateScript), + translate_script_expiration_delay_); } + // Process any pending requests. + std::vector<PendingRequest>::const_iterator iter; + for (iter = pending_requests_.begin(); iter != pending_requests_.end(); + ++iter) { + const PendingRequest& request = *iter; + TabContents* tab = tab_util::GetTabContentsByID(request.render_process_id, + request.render_view_id); + if (!tab) { + // The tab went away while we were retrieving the script. + continue; + } + NavigationEntry* entry = tab->controller().GetActiveEntry(); + if (!entry || entry->page_id() != request.page_id) { + // We navigated away from the page the translation was triggered on. + continue; + } - if (error) { - ShowInfoBar(tab, TranslateInfoBarDelegate::CreateErrorDelegate( - TranslateErrors::NETWORK, tab, - request.source_lang, request.target_lang)); - } else { - // Translate the page. - DoTranslatePage(tab, translate_script_, - request.source_lang, request.target_lang); + if (error) { + ShowInfoBar(tab, TranslateInfoBarDelegate::CreateErrorDelegate( + TranslateErrors::NETWORK, tab, + request.source_lang, request.target_lang)); + } else { + // Translate the page. + DoTranslatePage(tab, translate_script_, + request.source_lang, request.target_lang); + } } + pending_requests_.clear(); + } else { // if (translate_script_request) + if (!error) + SetSupportedLanguages(data); + else + VLOG(1) << "Failed to Fetch languages from: " << kLanguageListFetchURL; } - pending_requests_.clear(); } // static @@ -346,7 +428,8 @@ bool TranslateManager::IsShowingTranslateInfobar(TabContents* tab) { TranslateManager::TranslateManager() : ALLOW_THIS_IN_INITIALIZER_LIST(method_factory_(this)), translate_script_expiration_delay_(kTranslateScriptExpirationDelayMS), - translate_script_request_pending_(false) { + translate_script_request_pending_(false), + language_list_request_pending_(false) { notification_registrar_.Add(this, NotificationType::NAV_ENTRY_COMMITTED, NotificationService::AllSources()); notification_registrar_.Add(this, NotificationType::TAB_LANGUAGE_DETERMINED, @@ -620,6 +703,27 @@ void TranslateManager::InitAcceptLanguages(PrefService* prefs) { accept_languages_[prefs] = accept_langs_set; } +void TranslateManager::FetchLanguageListFromTranslateServer( + PrefService* prefs) { + if (language_list_request_pending_) + return; + + // We don't want to do this when translate is disabled. + DCHECK(prefs != NULL); + if (CommandLine::ForCurrentProcess()->HasSwitch( + switches::kDisableTranslate) || + (prefs != NULL && !prefs->GetBoolean(prefs::kEnableTranslate))) { + return; + } + + language_list_request_pending_ = true; + URLFetcher* fetcher = URLFetcher::Create(1, GURL(kLanguageListFetchURL), + URLFetcher::GET, this); + fetcher->set_request_context(Profile::GetDefaultRequestContext()); + fetcher->set_max_retries(kMaxRetryLanguageListFetch); + fetcher->Start(); +} + void TranslateManager::RequestTranslateScript() { if (translate_script_request_pending_) return; diff --git a/chrome/browser/translate/translate_manager.h b/chrome/browser/translate/translate_manager.h index 1e2d54a..1c5caa0 100644 --- a/chrome/browser/translate/translate_manager.h +++ b/chrome/browser/translate/translate_manager.h @@ -39,6 +39,12 @@ class TranslateManager : public NotificationObserver, virtual ~TranslateManager(); + // Let the caller decide if and when we should fetch the language list from + // the translate server. This is a NOOP if switches::kDisableTranslate is + // set or if prefs::kEnableTranslate is set to false. + // It will not retry more than kMaxRetryLanguageListFetch times. + void FetchLanguageListFromTranslateServer(PrefService* prefs); + // Translates the page contents from |source_lang| to |target_lang|. // The actual translation might be performed asynchronously if the translate // script is not yet available. @@ -94,6 +100,9 @@ class TranslateManager : public NotificationObserver, // Returns true if |language| is supported by the translation server. static bool IsSupportedLanguage(const std::string& language); + // static const values shared with our browser tests. + static const char* const kLanguageListCallbackName; + static const char* const kTargetLanguagesKey; protected: TranslateManager(); @@ -111,6 +120,14 @@ class TranslateManager : public NotificationObserver, std::string target_lang; }; + // Fills supported_languages_ with the list of languages that the translate + // server can translate to and from. + static void SetSupportedLanguages(const std::string& language_list); + + // Initializes the list of supported languages if it wasn't initialized before + // in case we failed to get them from the server, or didn't get them just yet. + static void InitSupportedLanguages(); + // Starts the translation process on |tab| containing the page in the // |page_lang| language. void InitiateTranslation(TabContents* tab, const std::string& page_lang); @@ -127,8 +144,8 @@ class TranslateManager : public NotificationObserver, const std::string& source_lang, const std::string& target_lang); - // Shows the after translate or error infobar depending on the details. - void PageTranslated(TabContents* tab, PageTranslatedDetails* details); + // Shows the after translate or error infobar depending on the details. + void PageTranslated(TabContents* tab, PageTranslatedDetails* details); // Returns true if the passed language has been configured by the user as an // accept language. @@ -175,6 +192,9 @@ class TranslateManager : public NotificationObserver, // Whether the translate JS is currently being retrieved. bool translate_script_request_pending_; + // Whether the list of languages is currently being retrieved. + bool language_list_request_pending_; + // The list of pending translate requests. Translate requests are queued when // the translate script is not ready and has to be fetched from the translate // server. diff --git a/chrome/browser/translate/translate_manager_browsertest.cc b/chrome/browser/translate/translate_manager_browsertest.cc index f5f7631..0e0b50c 100644 --- a/chrome/browser/translate/translate_manager_browsertest.cc +++ b/chrome/browser/translate/translate_manager_browsertest.cc @@ -3,9 +3,12 @@ // found in the LICENSE file. +#include <algorithm> #include <set> +#include <vector> #include "base/utf_string_conversions.h" +#include "base/stringprintf.h" #include "chrome/app/chrome_command_ids.h" #include "chrome/browser/prefs/pref_change_registrar.h" #include "chrome/browser/prefs/pref_service.h" @@ -177,7 +180,7 @@ class TranslateManagerTest : public TabContentsWrapperTestHarness, URLFetcher::set_factory(NULL); } - void SimulateURLFetch(bool success) { + void SimulateTranslateScriptURLFetch(bool success) { TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(0); ASSERT_TRUE(fetcher); net::URLRequestStatus status; @@ -189,6 +192,34 @@ class TranslateManagerTest : public TabContentsWrapperTestHarness, std::string()); } + void SimulateSupportedLanguagesURLFetch( + bool success, const std::vector<std::string>& languages) { + TestURLFetcher* fetcher = url_fetcher_factory_.GetFetcherByID(1); + ASSERT_TRUE(fetcher); + net::URLRequestStatus status; + status.set_status(success ? net::URLRequestStatus::SUCCESS : + net::URLRequestStatus::FAILED); + + std::string data; + if (success) { + data = base::StringPrintf("%s{'sl': {'bla': 'bla'}, '%s': {", + TranslateManager::kLanguageListCallbackName, + TranslateManager::kTargetLanguagesKey); + const char* comma = ""; + for (size_t i = 0; i < languages.size(); ++i) { + data += base::StringPrintf( + "%s'%s': 'UnusedFullName'", comma, languages[i].c_str()); + if (i == 0) + comma = ","; + } + data += "}})"; + } + fetcher->delegate()->OnURLFetchComplete(fetcher, fetcher->original_url(), + status, success ? 200 : 500, + net::ResponseCookies(), + data); + } + void SetPrefObserverExpectation(const char* path) { EXPECT_CALL( pref_observer_, @@ -300,7 +331,7 @@ TEST_F(TranslateManagerTest, NormalTranslate) { // Simulate the translate script being retrieved (it only needs to be done // once in the test as it is cached). - SimulateURLFetch(true); + SimulateTranslateScriptURLFetch(true); // Test that we sent the right message to the renderer. int page_id = 0; @@ -361,7 +392,7 @@ TEST_F(TranslateManagerTest, TranslateScriptNotAvailable) { process()->sink().ClearMessages(); infobar->Translate(); // Simulate a failure retrieving the translate script. - SimulateURLFetch(false); + SimulateTranslateScriptURLFetch(false); // We should not have sent any message to translate to the renderer. EXPECT_FALSE(GetTranslateMessage(NULL, NULL, NULL)); @@ -389,13 +420,14 @@ TEST_F(TranslateManagerTest, TranslateUnknownLanguage) { menu->ExecuteCommand(IDC_CONTENT_CONTEXT_TRANSLATE); // To test that bug #49018 if fixed, make sure we deal correctly with errors. - SimulateURLFetch(false); // Simulate a failure to fetch the translate script. + // Simulate a failure to fetch the translate script. + SimulateTranslateScriptURLFetch(false); TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); ASSERT_TRUE(infobar != NULL); EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATION_ERROR, infobar->type()); EXPECT_TRUE(infobar->IsError()); infobar->MessageInfoBarButtonPressed(); - SimulateURLFetch(true); // This time succeed. + SimulateTranslateScriptURLFetch(true); // This time succeed. // Simulate the render notifying the translation has been done, the server // having detected the page was in a known and supported language. @@ -506,6 +538,59 @@ TEST_F(TranslateManagerTest, TestAllLanguages) { } } +// Test the fetching of languages from the translate server +TEST_F(TranslateManagerTest, FetchLanguagesFromTranslateServer) { + std::vector<std::string> server_languages; + // A list of languages to fake being returned by the translate server. + server_languages.push_back("aa"); + server_languages.push_back("bb"); + server_languages.push_back("ab"); + server_languages.push_back("en-CA"); + server_languages.push_back("zz"); + server_languages.push_back("yy"); + server_languages.push_back("fr-FR"); + + // First, get the default languages list: + std::vector<std::string> default_supported_languages; + TranslateManager::GetSupportedLanguages(&default_supported_languages); + // To make sure we got the defaults and don't confuse them with the mocks. + ASSERT_NE(default_supported_languages.size(), server_languages.size()); + + TranslateManager::GetInstance()->FetchLanguageListFromTranslateServer( + contents()->profile()->GetPrefs()); + + // Check that we still get the defaults until the URLFetch has completed. + std::vector<std::string> current_supported_languages; + TranslateManager::GetSupportedLanguages(¤t_supported_languages); + EXPECT_EQ(default_supported_languages, current_supported_languages); + + // Also check that it didn't change if we failed the URL fetch. + SimulateSupportedLanguagesURLFetch(false, std::vector<std::string>()); + current_supported_languages.clear(); + TranslateManager::GetSupportedLanguages(¤t_supported_languages); + EXPECT_EQ(default_supported_languages, current_supported_languages); + + // Now check that we got the appropriate set of languages from the server. + TranslateManager::GetInstance()->FetchLanguageListFromTranslateServer( + contents()->profile()->GetPrefs()); + SimulateSupportedLanguagesURLFetch(true, server_languages); + current_supported_languages.clear(); + TranslateManager::GetSupportedLanguages(¤t_supported_languages); + // Not sure we need to guarantee the order of languages, so we find them. + EXPECT_EQ(server_languages.size(), current_supported_languages.size()); + for (size_t i = 0; i < server_languages.size(); ++i) { + EXPECT_NE(current_supported_languages.end(), + std::find(current_supported_languages.begin(), + current_supported_languages.end(), + server_languages[i])); + } + + // Reset to original state. + TranslateManager::GetInstance()->FetchLanguageListFromTranslateServer( + contents()->profile()->GetPrefs()); + SimulateSupportedLanguagesURLFetch(true, default_supported_languages); +} + // Tests auto-translate on page. TEST_F(TranslateManagerTest, AutoTranslateOnNavigate) { // Simulate navigating to a page and getting its language. @@ -515,7 +600,8 @@ TEST_F(TranslateManagerTest, AutoTranslateOnNavigate) { TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); ASSERT_TRUE(infobar != NULL); infobar->Translate(); - SimulateURLFetch(true); // Simulate the translate script being retrieved. + // Simulate the translate script being retrieved. + SimulateTranslateScriptURLFetch(true); rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en", TranslateErrors::NONE)); @@ -687,7 +773,8 @@ TEST_F(TranslateManagerTest, TranslateCloseInfoBarInPageNavigation) { TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); ASSERT_TRUE(infobar != NULL); infobar->Translate(); - SimulateURLFetch(true); // Simulate the translate script being retrieved. + // Simulate the translate script being retrieved. + SimulateTranslateScriptURLFetch(true); rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en", TranslateErrors::NONE)); @@ -716,7 +803,8 @@ TEST_F(TranslateManagerTest, TranslateInPageNavigation) { TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); ASSERT_TRUE(infobar != NULL); infobar->Translate(); - SimulateURLFetch(true); // Simulate the translate script being retrieved. + // Simulate the translate script being retrieved. + SimulateTranslateScriptURLFetch(true); rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en", TranslateErrors::NONE)); // The after translate infobar is showing. @@ -753,7 +841,7 @@ TEST_F(TranslateManagerTest, ServerReportsUnsupportedLanguage) { ASSERT_TRUE(infobar != NULL); process()->sink().ClearMessages(); infobar->Translate(); - SimulateURLFetch(true); + SimulateTranslateScriptURLFetch(true); // Simulate the render notifying the translation has been done, but it // reports a language we don't support. rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "qbz", "en", @@ -936,8 +1024,8 @@ TEST_F(TranslateManagerTest, AlwaysTranslateLanguagePref) { TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); ASSERT_TRUE(infobar != NULL); EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATING, infobar->type()); - - SimulateURLFetch(true); // Simulate the translate script being retrieved. + // Simulate the translate script being retrieved. + SimulateTranslateScriptURLFetch(true); int page_id = 0; std::string original_lang, target_lang; EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); @@ -1007,7 +1095,8 @@ TEST_F(TranslateManagerTest, ContextMenu) { TranslateInfoBarDelegate* infobar = GetTranslateInfoBar(); ASSERT_TRUE(infobar != NULL); EXPECT_EQ(TranslateInfoBarDelegate::TRANSLATING, infobar->type()); - SimulateURLFetch(true); // Simulate the translate script being retrieved. + // Simulate the translate script being retrieved. + SimulateTranslateScriptURLFetch(true); int page_id = 0; std::string original_lang, target_lang; EXPECT_TRUE(GetTranslateMessage(&page_id, &original_lang, &target_lang)); @@ -1117,7 +1206,7 @@ TEST_F(TranslateManagerTest, BeforeTranslateExtraButtons) { EXPECT_TRUE(translate_prefs.IsLanguagePairWhitelisted("fr", "en")); // Simulate the translate script being retrieved (it only needs to be done // once in the test as it is cached). - SimulateURLFetch(true); + SimulateTranslateScriptURLFetch(true); // That should have triggered a page translate. int page_id = 0; std::string original_lang, target_lang; @@ -1179,7 +1268,7 @@ TEST_F(TranslateManagerTest, ScriptExpires) { ASSERT_TRUE(infobar != NULL); process()->sink().ClearMessages(); infobar->Translate(); - SimulateURLFetch(true); + SimulateTranslateScriptURLFetch(true); rvh()->TestOnMessageReceived(ViewHostMsg_PageTranslated(0, 0, "fr", "en", TranslateErrors::NONE)); @@ -1198,7 +1287,7 @@ TEST_F(TranslateManagerTest, ScriptExpires) { process()->sink().GetFirstMessageMatching(ViewMsg_TranslatePage::ID) == NULL); // Now simulate the URL fetch. - SimulateURLFetch(true); + SimulateTranslateScriptURLFetch(true); // Now the message should have been sent. int page_id = 0; std::string original_lang, target_lang; |