1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "base/files/file_path.h" 6 #include "base/files/file_util.h" 7 #include "base/files/scoped_temp_dir.h" 8 #include "base/strings/utf_string_conversions.h" 9 #include "chrome/browser/extensions/extension_apitest.h" 10 #include "chrome/browser/ui/browser.h" 11 #include "chrome/test/base/ui_test_utils.h" 12 #include "extensions/common/extension.h" 13 #include "extensions/test/result_catcher.h" 14 #include "net/test/embedded_test_server/embedded_test_server.h" 15 16 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, I18N) { 17 ASSERT_TRUE(StartEmbeddedTestServer()); 18 ASSERT_TRUE(RunExtensionTest("i18n")) << message_; 19 } 20 21 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, I18NUpdate) { 22 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 23 // Create an Extension whose messages.json file will be updated. 24 base::ScopedTempDir extension_dir; 25 ASSERT_TRUE(extension_dir.CreateUniqueTempDir()); 26 base::CopyFile( 27 test_data_dir_.AppendASCII("i18nUpdate") 28 .AppendASCII("manifest.json"), 29 extension_dir.path().AppendASCII("manifest.json")); 30 base::CopyFile( 31 test_data_dir_.AppendASCII("i18nUpdate") 32 .AppendASCII("contentscript.js"), 33 extension_dir.path().AppendASCII("contentscript.js")); 34 base::CopyDirectory( 35 test_data_dir_.AppendASCII("i18nUpdate") 36 .AppendASCII("_locales"), 37 extension_dir.path().AppendASCII("_locales"), 38 true); 39 40 const extensions::Extension* extension = LoadExtension(extension_dir.path()); 41 42 extensions::ResultCatcher catcher; 43 44 // Test that the messages.json file is loaded and the i18n message is loaded. 45 ui_test_utils::NavigateToURL( 46 browser(), 47 embedded_test_server()->GetURL("/extensions/test_file.html")); 48 EXPECT_TRUE(catcher.GetNextResult()); 49 50 base::string16 title; 51 ui_test_utils::GetCurrentTabTitle(browser(), &title); 52 EXPECT_EQ(std::string("FIRSTMESSAGE"), base::UTF16ToUTF8(title)); 53 54 // Change messages.json file and reload extension. 55 base::CopyFile( 56 test_data_dir_.AppendASCII("i18nUpdate") 57 .AppendASCII("messages2.json"), 58 extension_dir.path().AppendASCII("_locales/en/messages.json")); 59 ReloadExtension(extension->id()); 60 61 // Check that the i18n message is also changed. 62 ui_test_utils::NavigateToURL( 63 browser(), 64 embedded_test_server()->GetURL("/extensions/test_file.html")); 65 EXPECT_TRUE(catcher.GetNextResult()); 66 67 ui_test_utils::GetCurrentTabTitle(browser(), &title); 68 EXPECT_EQ(std::string("SECONDMESSAGE"), base::UTF16ToUTF8(title)); 69 } 70