1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 28ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Use of this source code is governed by a BSD-style license that can be 38ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// found in the LICENSE file. 48ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 58ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#include "base/file_path.h" 68ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#include "base/file_util.h" 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/linked_ptr.h" 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_ptr.h" 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/scoped_temp_dir.h" 108ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#include "base/path_service.h" 118ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#include "base/values.h" 128ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#include "chrome/common/chrome_paths.h" 138ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#include "chrome/common/extensions/extension.h" 148ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#include "chrome/common/extensions/extension_constants.h" 158ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#include "chrome/common/extensions/extension_l10n_util.h" 168ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#include "chrome/common/extensions/extension_message_bundle.h" 178ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen#include "testing/gtest/include/gtest/gtest.h" 1872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/l10n/l10n_util.h" 198ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 208ae428e0fb7feea16d79853f29447469a93bedffKristian Monsennamespace errors = extension_manifest_errors; 218ae428e0fb7feea16d79853f29447469a93bedffKristian Monsennamespace keys = extension_manifest_keys; 228ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 238ae428e0fb7feea16d79853f29447469a93bedffKristian Monsennamespace { 248ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 258ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, GetValidLocalesEmptyLocaleFolder) { 268ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ScopedTempDir temp; 278ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(temp.CreateUniqueTempDir()); 288ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 298ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen FilePath src_path = temp.path().Append(Extension::kLocaleFolder); 308ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(file_util::CreateDirectory(src_path)); 318ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 328ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string error; 338ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::set<std::string> locales; 348ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_FALSE(extension_l10n_util::GetValidLocales(src_path, 358ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen &locales, 368ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen &error)); 378ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 388ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(locales.empty()); 398ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 408ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 418ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, GetValidLocalesWithValidLocaleNoMessagesFile) { 428ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ScopedTempDir temp; 438ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(temp.CreateUniqueTempDir()); 448ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 458ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen FilePath src_path = temp.path().Append(Extension::kLocaleFolder); 468ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(file_util::CreateDirectory(src_path)); 478ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(file_util::CreateDirectory(src_path.AppendASCII("sr"))); 488ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 498ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string error; 508ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::set<std::string> locales; 518ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_FALSE(extension_l10n_util::GetValidLocales(src_path, 528ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen &locales, 538ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen &error)); 548ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 558ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(locales.empty()); 568ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 578ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 588ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, GetValidLocalesWithUnsupportedLocale) { 598ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ScopedTempDir temp; 608ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(temp.CreateUniqueTempDir()); 618ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 628ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen FilePath src_path = temp.path().Append(Extension::kLocaleFolder); 638ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(file_util::CreateDirectory(src_path)); 648ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen // Supported locale. 658ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen FilePath locale_1 = src_path.AppendASCII("sr"); 668ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(file_util::CreateDirectory(locale_1)); 678ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string data("whatever"); 688ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(file_util::WriteFile( 698ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen locale_1.Append(Extension::kMessagesFilename), 708ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen data.c_str(), data.length())); 718ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen // Unsupported locale. 728ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(file_util::CreateDirectory(src_path.AppendASCII("xxx_yyy"))); 738ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 748ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string error; 758ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::set<std::string> locales; 768ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(extension_l10n_util::GetValidLocales(src_path, 778ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen &locales, 788ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen &error)); 798ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 808ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_FALSE(locales.empty()); 818ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(locales.find("sr") != locales.end()); 828ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_FALSE(locales.find("xxx_yyy") != locales.end()); 838ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 848ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 858ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, GetValidLocalesWithValidLocalesAndMessagesFile) { 868ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen FilePath install_dir; 878ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); 888ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen install_dir = install_dir.AppendASCII("extensions") 898ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen .AppendASCII("good") 908ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen .AppendASCII("Extensions") 918ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 928ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen .AppendASCII("1.0.0.0") 938ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen .Append(Extension::kLocaleFolder); 948ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 958ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string error; 968ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::set<std::string> locales; 978ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(extension_l10n_util::GetValidLocales(install_dir, 988ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen &locales, 998ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen &error)); 1008ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_EQ(3U, locales.size()); 1018ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(locales.find("sr") != locales.end()); 1028ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(locales.find("en") != locales.end()); 1038ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(locales.find("en_US") != locales.end()); 1048ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 1058ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1068ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, LoadMessageCatalogsValidFallback) { 1078ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen FilePath install_dir; 1088ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &install_dir)); 1098ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen install_dir = install_dir.AppendASCII("extensions") 1108ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen .AppendASCII("good") 1118ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen .AppendASCII("Extensions") 1128ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen .AppendASCII("behllobkkfkfnphdnhnkndlbkcpglgmj") 1138ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen .AppendASCII("1.0.0.0") 1148ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen .Append(Extension::kLocaleFolder); 1158ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1168ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string error; 1178ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::set<std::string> locales; 1188ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(extension_l10n_util::GetValidLocales(install_dir, 1198ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen &locales, 1208ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen &error)); 1218ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1228ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen scoped_ptr<ExtensionMessageBundle> bundle( 1238ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen extension_l10n_util::LoadMessageCatalogs( 1248ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen install_dir, "sr", "en_US", locales, &error)); 1258ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_FALSE(NULL == bundle.get()); 1268ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(error.empty()); 1278ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_EQ("Color", bundle->GetL10nMessage("color")); 1288ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_EQ("Not in the US or GB.", bundle->GetL10nMessage("not_in_US_or_GB")); 1298ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 1308ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1318ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, LoadMessageCatalogsMissingFiles) { 1328ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ScopedTempDir temp; 1338ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(temp.CreateUniqueTempDir()); 1348ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1358ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen FilePath src_path = temp.path().Append(Extension::kLocaleFolder); 1368ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(file_util::CreateDirectory(src_path)); 1378ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1388ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::set<std::string> valid_locales; 1398ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen valid_locales.insert("sr"); 1408ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen valid_locales.insert("en"); 1418ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string error; 1428ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(NULL == extension_l10n_util::LoadMessageCatalogs(src_path, 1438ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen "en", 1448ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen "sr", 1458ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen valid_locales, 1468ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen &error)); 1478ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_FALSE(error.empty()); 1488ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 1498ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1508ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, LoadMessageCatalogsBadJSONFormat) { 1518ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ScopedTempDir temp; 1528ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(temp.CreateUniqueTempDir()); 1538ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1548ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen FilePath src_path = temp.path().Append(Extension::kLocaleFolder); 1558ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(file_util::CreateDirectory(src_path)); 1568ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1578ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen FilePath locale = src_path.AppendASCII("sr"); 1588ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(file_util::CreateDirectory(locale)); 1598ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1608ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string data = "{ \"name\":"; 1618ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE( 1628ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen file_util::WriteFile(locale.Append(Extension::kMessagesFilename), 1638ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen data.c_str(), data.length())); 1648ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1658ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::set<std::string> valid_locales; 1668ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen valid_locales.insert("sr"); 1678ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen valid_locales.insert("en_US"); 1688ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string error; 1698ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(NULL == extension_l10n_util::LoadMessageCatalogs(src_path, 1708ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen "en_US", 1718ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen "sr", 1728ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen valid_locales, 1738ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen &error)); 1748ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_EQ("Line: 1, column: 10, Syntax error.", error); 1758ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 1768ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1778ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, LoadMessageCatalogsDuplicateKeys) { 1788ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ScopedTempDir temp; 1798ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(temp.CreateUniqueTempDir()); 1808ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1818ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen FilePath src_path = temp.path().Append(Extension::kLocaleFolder); 1828ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(file_util::CreateDirectory(src_path)); 1838ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1848ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen FilePath locale_1 = src_path.AppendASCII("en"); 1858ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(file_util::CreateDirectory(locale_1)); 1868ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1878ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string data = 1888ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen "{ \"name\": { \"message\": \"something\" }, " 1898ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen "\"name\": { \"message\": \"something else\" } }"; 1908ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE( 1918ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen file_util::WriteFile(locale_1.Append(Extension::kMessagesFilename), 1928ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen data.c_str(), data.length())); 1938ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1948ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen FilePath locale_2 = src_path.AppendASCII("sr"); 1958ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(file_util::CreateDirectory(locale_2)); 1968ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 1978ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE( 1988ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen file_util::WriteFile(locale_2.Append(Extension::kMessagesFilename), 1998ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen data.c_str(), data.length())); 2008ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2018ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::set<std::string> valid_locales; 2028ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen valid_locales.insert("sr"); 2038ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen valid_locales.insert("en"); 2048ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string error; 2058ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen // JSON parser hides duplicates. We are going to get only one key/value 2068ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen // pair at the end. 2078ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen scoped_ptr<ExtensionMessageBundle> message_bundle( 2088ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen extension_l10n_util::LoadMessageCatalogs(src_path, 2098ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen "en", 2108ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen "sr", 2118ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen valid_locales, 2128ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen &error)); 2138ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(NULL != message_bundle.get()); 2148ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(error.empty()); 2158ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 2168ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2178ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Caller owns the returned object. 2188ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenExtensionMessageBundle* CreateManifestBundle() { 2198ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen linked_ptr<DictionaryValue> catalog(new DictionaryValue); 2208ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2218ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen DictionaryValue* name_tree = new DictionaryValue(); 2228ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen name_tree->SetString("message", "name"); 2238ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen catalog->Set("name", name_tree); 2248ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2258ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen DictionaryValue* description_tree = new DictionaryValue(); 2268ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen description_tree->SetString("message", "description"); 2278ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen catalog->Set("description", description_tree); 2288ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2298ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen DictionaryValue* action_title_tree = new DictionaryValue(); 2308ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen action_title_tree->SetString("message", "action title"); 2318ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen catalog->Set("title", action_title_tree); 2328ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2334a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DictionaryValue* omnibox_keyword_tree = new DictionaryValue(); 2344a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch omnibox_keyword_tree->SetString("message", "omnibox keyword"); 2354a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch catalog->Set("omnibox_keyword", omnibox_keyword_tree); 2364a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* file_handler_title_tree = new DictionaryValue(); 238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen file_handler_title_tree->SetString("message", "file handler title"); 239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen catalog->Set("file_handler_title", file_handler_title_tree); 240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 2418ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::vector<linked_ptr<DictionaryValue> > catalogs; 2428ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen catalogs.push_back(catalog); 2438ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2448ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string error; 2458ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ExtensionMessageBundle* bundle = 2464a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ExtensionMessageBundle::Create(catalogs, &error); 2474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_TRUE(bundle); 2488ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(error.empty()); 2498ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2508ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen return bundle; 2518ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 2528ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2538ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, LocalizeEmptyManifest) { 2548ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen DictionaryValue manifest; 2558ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string error; 2568ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen scoped_ptr<ExtensionMessageBundle> messages(CreateManifestBundle()); 2578ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2588ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_FALSE( 2598ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen extension_l10n_util::LocalizeManifest(*messages, &manifest, &error)); 2608ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_EQ(errors::kInvalidName, error); 2618ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 2628ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2638ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, LocalizeManifestWithoutNameMsgAndEmptyDescription) { 2648ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen DictionaryValue manifest; 2658ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen manifest.SetString(keys::kName, "no __MSG"); 2668ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string error; 2678ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen scoped_ptr<ExtensionMessageBundle> messages(CreateManifestBundle()); 2688ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2698ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE( 2708ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen extension_l10n_util::LocalizeManifest(*messages, &manifest, &error)); 2718ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2728ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string result; 2738ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(manifest.GetString(keys::kName, &result)); 2748ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_EQ("no __MSG", result); 2758ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2768ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_FALSE(manifest.HasKey(keys::kDescription)); 2778ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2788ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(error.empty()); 2798ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 2808ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2818ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, LocalizeManifestWithNameMsgAndEmptyDescription) { 2828ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen DictionaryValue manifest; 2838ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen manifest.SetString(keys::kName, "__MSG_name__"); 2848ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string error; 2858ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen scoped_ptr<ExtensionMessageBundle> messages(CreateManifestBundle()); 2868ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2878ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE( 2888ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen extension_l10n_util::LocalizeManifest(*messages, &manifest, &error)); 2898ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2908ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string result; 2918ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(manifest.GetString(keys::kName, &result)); 2928ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_EQ("name", result); 2938ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2948ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_FALSE(manifest.HasKey(keys::kDescription)); 2958ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2968ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(error.empty()); 2978ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 2988ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 2998ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, LocalizeManifestWithBadNameMsg) { 3008ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen DictionaryValue manifest; 3018ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen manifest.SetString(keys::kName, "__MSG_name_is_bad__"); 3028ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen manifest.SetString(keys::kDescription, "__MSG_description__"); 3038ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string error; 3048ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen scoped_ptr<ExtensionMessageBundle> messages(CreateManifestBundle()); 3058ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 3068ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_FALSE( 3078ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen extension_l10n_util::LocalizeManifest(*messages, &manifest, &error)); 3088ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 3098ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string result; 3108ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(manifest.GetString(keys::kName, &result)); 3118ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_EQ("__MSG_name_is_bad__", result); 3128ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 3138ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(manifest.GetString(keys::kDescription, &result)); 3148ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_EQ("__MSG_description__", result); 3158ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 3168ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_EQ("Variable __MSG_name_is_bad__ used but not defined.", error); 3178ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 3188ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 3198ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, LocalizeManifestWithNameDescriptionDefaultTitleMsgs) { 3208ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen DictionaryValue manifest; 3218ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen manifest.SetString(keys::kName, "__MSG_name__"); 3228ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen manifest.SetString(keys::kDescription, "__MSG_description__"); 3238ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string action_title(keys::kBrowserAction); 3248ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen action_title.append("."); 3258ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen action_title.append(keys::kPageActionDefaultTitle); 3268ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen manifest.SetString(action_title, "__MSG_title__"); 3278ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 3288ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string error; 3298ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen scoped_ptr<ExtensionMessageBundle> messages(CreateManifestBundle()); 3308ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 3318ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE( 3328ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen extension_l10n_util::LocalizeManifest(*messages, &manifest, &error)); 3338ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 3348ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen std::string result; 3358ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(manifest.GetString(keys::kName, &result)); 3368ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_EQ("name", result); 3378ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 3388ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(manifest.GetString(keys::kDescription, &result)); 3398ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_EQ("description", result); 3408ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 3418ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ASSERT_TRUE(manifest.GetString(action_title, &result)); 3428ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_EQ("action title", result); 3438ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 3448ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(error.empty()); 3458ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 3468ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 3474a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben MurdochTEST(ExtensionL10nUtil, LocalizeManifestWithNameDescriptionOmniboxMsgs) { 3484a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch DictionaryValue manifest; 3494a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch manifest.SetString(keys::kName, "__MSG_name__"); 3504a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch manifest.SetString(keys::kDescription, "__MSG_description__"); 3514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch manifest.SetString(keys::kOmniboxKeyword, "__MSG_omnibox_keyword__"); 3524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3534a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch std::string error; 3544a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch scoped_ptr<ExtensionMessageBundle> messages(CreateManifestBundle()); 3554a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3564a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_TRUE( 3574a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch extension_l10n_util::LocalizeManifest(*messages, &manifest, &error)); 3584a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3594a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch std::string result; 3604a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_TRUE(manifest.GetString(keys::kName, &result)); 3614a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ("name", result); 3624a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3634a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_TRUE(manifest.GetString(keys::kDescription, &result)); 3644a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ("description", result); 3654a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3664a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch ASSERT_TRUE(manifest.GetString(keys::kOmniboxKeyword, &result)); 3674a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_EQ("omnibox keyword", result); 3684a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 3694a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch EXPECT_TRUE(error.empty()); 3704a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch} 3714a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch 372ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST(ExtensionL10nUtil, LocalizeManifestWithNameDescriptionFileHandlerTitle) { 373ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue manifest; 374ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen manifest.SetString(keys::kName, "__MSG_name__"); 375ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen manifest.SetString(keys::kDescription, "__MSG_description__"); 376ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ListValue* handlers = new ListValue(); 377ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen manifest.Set(keys::kFileBrowserHandlers, handlers); 378ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DictionaryValue* handler = new DictionaryValue(); 379ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handlers->Append(handler); 380ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen handler->SetString(keys::kPageActionDefaultTitle, 381ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen "__MSG_file_handler_title__"); 382ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 383ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string error; 384ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen scoped_ptr<ExtensionMessageBundle> messages(CreateManifestBundle()); 385ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 386ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE( 387ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen extension_l10n_util::LocalizeManifest(*messages, &manifest, &error)); 388ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 389ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen std::string result; 390ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(manifest.GetString(keys::kName, &result)); 391ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ("name", result); 392ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 393ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(manifest.GetString(keys::kDescription, &result)); 394ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ("description", result); 395ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 396ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ASSERT_TRUE(handler->GetString(keys::kPageActionDefaultTitle, &result)); 397ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_EQ("file handler title", result); 398ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 399ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen EXPECT_TRUE(error.empty()); 400ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen} 401ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 4028ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Try with NULL manifest. 4038ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, ShouldRelocalizeManifestWithNullManifest) { 4048ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ExtensionInfo info(NULL, "", FilePath(), Extension::LOAD); 4058ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4068ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_FALSE(extension_l10n_util::ShouldRelocalizeManifest(info)); 4078ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 4088ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4098ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Try with default and current locales missing. 4108ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, ShouldRelocalizeManifestEmptyManifest) { 4118ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen DictionaryValue manifest; 4128ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ExtensionInfo info(&manifest, "", FilePath(), Extension::LOAD); 4138ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4148ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_FALSE(extension_l10n_util::ShouldRelocalizeManifest(info)); 4158ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 4168ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4178ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Try with missing current_locale. 4188ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, ShouldRelocalizeManifestWithDefaultLocale) { 4198ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen DictionaryValue manifest; 4208ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen manifest.SetString(keys::kDefaultLocale, "en_US"); 4218ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4228ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ExtensionInfo info(&manifest, "", FilePath(), Extension::LOAD); 4238ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4248ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(extension_l10n_util::ShouldRelocalizeManifest(info)); 4258ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 4268ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4278ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Try with missing default_locale. 4288ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, ShouldRelocalizeManifestWithCurrentLocale) { 4298ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen DictionaryValue manifest; 4308ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen manifest.SetString(keys::kCurrentLocale, 4318ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen extension_l10n_util::CurrentLocaleOrDefault()); 4328ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4338ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ExtensionInfo info(&manifest, "", FilePath(), Extension::LOAD); 4348ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4358ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_FALSE(extension_l10n_util::ShouldRelocalizeManifest(info)); 4368ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 4378ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4388ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Try with all data present, but with same current_locale as system locale. 4398ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, ShouldRelocalizeManifestSameCurrentLocale) { 4408ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen DictionaryValue manifest; 4418ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen manifest.SetString(keys::kDefaultLocale, "en_US"); 4428ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen manifest.SetString(keys::kCurrentLocale, 4438ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen extension_l10n_util::CurrentLocaleOrDefault()); 4448ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4458ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ExtensionInfo info(&manifest, "", FilePath(), Extension::LOAD); 4468ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4478ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_FALSE(extension_l10n_util::ShouldRelocalizeManifest(info)); 4488ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 4498ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4508ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen// Try with all data present, but with different current_locale. 4518ae428e0fb7feea16d79853f29447469a93bedffKristian MonsenTEST(ExtensionL10nUtil, ShouldRelocalizeManifestDifferentCurrentLocale) { 4528ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen DictionaryValue manifest; 4538ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen manifest.SetString(keys::kDefaultLocale, "en_US"); 4548ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen manifest.SetString(keys::kCurrentLocale, "sr"); 4558ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4568ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen ExtensionInfo info(&manifest, "", FilePath(), Extension::LOAD); 4578ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4588ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen EXPECT_TRUE(extension_l10n_util::ShouldRelocalizeManifest(info)); 4598ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} 4608ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen 4618ae428e0fb7feea16d79853f29447469a93bedffKristian Monsen} // namespace 462