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