Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(575)

Side by Side Diff: extensions/common/extension_l10n_util.cc

Issue 2500573003: Some easy linked_ptr removal from extensions/common/ (Closed)
Patch Set: Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « extensions/common/event_filter.cc ('k') | extensions/common/extension_l10n_util_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/common/extension_l10n_util.h" 5 #include "extensions/common/extension_l10n_util.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <set> 10 #include <set>
11 #include <string> 11 #include <string>
12 #include <vector> 12 #include <vector>
13 13
14 #include "base/files/file_enumerator.h" 14 #include "base/files/file_enumerator.h"
15 #include "base/files/file_util.h" 15 #include "base/files/file_util.h"
16 #include "base/json/json_file_value_serializer.h" 16 #include "base/json/json_file_value_serializer.h"
17 #include "base/logging.h" 17 #include "base/logging.h"
18 #include "base/memory/linked_ptr.h"
19 #include "base/strings/string_util.h" 18 #include "base/strings/string_util.h"
20 #include "base/strings/stringprintf.h" 19 #include "base/strings/stringprintf.h"
21 #include "base/strings/utf_string_conversions.h" 20 #include "base/strings/utf_string_conversions.h"
22 #include "base/values.h" 21 #include "base/values.h"
23 #include "extensions/common/constants.h" 22 #include "extensions/common/constants.h"
24 #include "extensions/common/error_utils.h" 23 #include "extensions/common/error_utils.h"
25 #include "extensions/common/file_util.h" 24 #include "extensions/common/file_util.h"
26 #include "extensions/common/manifest_constants.h" 25 #include "extensions/common/manifest_constants.h"
27 #include "extensions/common/message_bundle.h" 26 #include "extensions/common/message_bundle.h"
28 #include "third_party/icu/source/common/unicode/uloc.h" 27 #include "third_party/icu/source/common/unicode/uloc.h"
29 #include "ui/base/l10n/l10n_util.h" 28 #include "ui/base/l10n/l10n_util.h"
30 29
31 namespace errors = extensions::manifest_errors; 30 namespace errors = extensions::manifest_errors;
32 namespace keys = extensions::manifest_keys; 31 namespace keys = extensions::manifest_keys;
33 32
34 namespace { 33 namespace {
35 34
36 // Loads contents of the messages file for given locale. If file is not found, 35 // Loads contents of the messages file for given locale. If file is not found,
37 // or there was parsing error we return NULL and set |error|. 36 // or there was parsing error we return NULL and set |error|.
38 // Caller owns the returned object. 37 // Caller owns the returned object.
39 base::DictionaryValue* LoadMessageFile(const base::FilePath& locale_path, 38 std::unique_ptr<base::DictionaryValue> LoadMessageFile(
40 const std::string& locale, 39 const base::FilePath& locale_path,
41 std::string* error) { 40 const std::string& locale,
41 std::string* error) {
42 base::FilePath file = 42 base::FilePath file =
43 locale_path.AppendASCII(locale).Append(extensions::kMessagesFilename); 43 locale_path.AppendASCII(locale).Append(extensions::kMessagesFilename);
44 JSONFileValueDeserializer messages_deserializer(file); 44 JSONFileValueDeserializer messages_deserializer(file);
45 std::unique_ptr<base::DictionaryValue> dictionary = 45 std::unique_ptr<base::DictionaryValue> dictionary =
46 base::DictionaryValue::From( 46 base::DictionaryValue::From(
47 messages_deserializer.Deserialize(NULL, error)); 47 messages_deserializer.Deserialize(NULL, error));
48 if (!dictionary) { 48 if (!dictionary) {
49 if (error->empty()) { 49 if (error->empty()) {
50 // JSONFileValueSerializer just returns NULL if file cannot be found. It 50 // JSONFileValueSerializer just returns NULL if file cannot be found. It
51 // doesn't set the error, so we have to do it. 51 // doesn't set the error, so we have to do it.
52 *error = base::StringPrintf("Catalog file is missing for locale %s.", 52 *error = base::StringPrintf("Catalog file is missing for locale %s.",
53 locale.c_str()); 53 locale.c_str());
54 } else { 54 } else {
55 *error = extensions::ErrorUtils::FormatErrorMessage( 55 *error = extensions::ErrorUtils::FormatErrorMessage(
56 errors::kLocalesInvalidLocale, 56 errors::kLocalesInvalidLocale,
57 base::UTF16ToUTF8(file.LossyDisplayName()), 57 base::UTF16ToUTF8(file.LossyDisplayName()),
58 *error); 58 *error);
59 } 59 }
60 } 60 }
61 61
62 return dictionary.release(); 62 return dictionary;
63 } 63 }
64 64
65 // Localizes manifest value of string type for a given key. 65 // Localizes manifest value of string type for a given key.
66 bool LocalizeManifestValue(const std::string& key, 66 bool LocalizeManifestValue(const std::string& key,
67 const extensions::MessageBundle& messages, 67 const extensions::MessageBundle& messages,
68 base::DictionaryValue* manifest, 68 base::DictionaryValue* manifest,
69 std::string* error) { 69 std::string* error) {
70 std::string result; 70 std::string result;
71 if (!manifest->GetString(key, &result)) 71 if (!manifest->GetString(key, &result))
72 return true; 72 return true;
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 369
370 extensions::MessageBundle* LoadMessageCatalogs( 370 extensions::MessageBundle* LoadMessageCatalogs(
371 const base::FilePath& locale_path, 371 const base::FilePath& locale_path,
372 const std::string& default_locale, 372 const std::string& default_locale,
373 const std::string& application_locale, 373 const std::string& application_locale,
374 std::string* error) { 374 std::string* error) {
375 std::vector<std::string> all_fallback_locales; 375 std::vector<std::string> all_fallback_locales;
376 GetAllFallbackLocales( 376 GetAllFallbackLocales(
377 application_locale, default_locale, &all_fallback_locales); 377 application_locale, default_locale, &all_fallback_locales);
378 378
379 std::vector<linked_ptr<base::DictionaryValue> > catalogs; 379 std::vector<std::unique_ptr<base::DictionaryValue>> catalogs;
380 for (size_t i = 0; i < all_fallback_locales.size(); ++i) { 380 for (size_t i = 0; i < all_fallback_locales.size(); ++i) {
381 // Skip all parent locales that are not supplied. 381 // Skip all parent locales that are not supplied.
382 base::FilePath this_locale_path = 382 base::FilePath this_locale_path =
383 locale_path.AppendASCII(all_fallback_locales[i]); 383 locale_path.AppendASCII(all_fallback_locales[i]);
384 if (!base::PathExists(this_locale_path)) 384 if (!base::PathExists(this_locale_path))
385 continue; 385 continue;
386 linked_ptr<base::DictionaryValue> catalog( 386 std::unique_ptr<base::DictionaryValue> catalog =
387 LoadMessageFile(locale_path, all_fallback_locales[i], error)); 387 LoadMessageFile(locale_path, all_fallback_locales[i], error);
388 if (!catalog.get()) { 388 if (!catalog.get()) {
389 // If locale is valid, but messages.json is corrupted or missing, return 389 // If locale is valid, but messages.json is corrupted or missing, return
390 // an error. 390 // an error.
391 return NULL; 391 return nullptr;
392 } else { 392 } else {
393 catalogs.push_back(catalog); 393 catalogs.push_back(std::move(catalog));
394 } 394 }
395 } 395 }
396 396
397 return extensions::MessageBundle::Create(catalogs, error); 397 return extensions::MessageBundle::Create(catalogs, error);
398 } 398 }
399 399
400 bool ValidateExtensionLocales(const base::FilePath& extension_path, 400 bool ValidateExtensionLocales(const base::FilePath& extension_path,
401 const base::DictionaryValue* manifest, 401 const base::DictionaryValue* manifest,
402 std::string* error) { 402 std::string* error) {
403 std::string default_locale = GetDefaultLocaleFromManifest(*manifest, error); 403 std::string default_locale = GetDefaultLocaleFromManifest(*manifest, error);
404 404
405 if (default_locale.empty()) 405 if (default_locale.empty())
406 return true; 406 return true;
407 407
408 base::FilePath locale_path = extension_path.Append(extensions::kLocaleFolder); 408 base::FilePath locale_path = extension_path.Append(extensions::kLocaleFolder);
409 409
410 std::set<std::string> valid_locales; 410 std::set<std::string> valid_locales;
411 if (!GetValidLocales(locale_path, &valid_locales, error)) 411 if (!GetValidLocales(locale_path, &valid_locales, error))
412 return false; 412 return false;
413 413
414 for (std::set<std::string>::const_iterator locale = valid_locales.begin(); 414 for (std::set<std::string>::const_iterator locale = valid_locales.begin();
415 locale != valid_locales.end(); 415 locale != valid_locales.end();
416 ++locale) { 416 ++locale) {
417 std::string locale_error; 417 std::string locale_error;
418 std::unique_ptr<base::DictionaryValue> catalog( 418 std::unique_ptr<base::DictionaryValue> catalog =
419 LoadMessageFile(locale_path, *locale, &locale_error)); 419 LoadMessageFile(locale_path, *locale, &locale_error);
420 420
421 if (!locale_error.empty()) { 421 if (!locale_error.empty()) {
422 if (!error->empty()) 422 if (!error->empty())
423 error->append(" "); 423 error->append(" ");
424 error->append(locale_error); 424 error->append(locale_error);
425 } 425 }
426 } 426 }
427 427
428 return error->empty(); 428 return error->empty();
429 } 429 }
(...skipping 28 matching lines...) Expand all
458 ScopedLocaleForTest::ScopedLocaleForTest(const std::string& locale) 458 ScopedLocaleForTest::ScopedLocaleForTest(const std::string& locale)
459 : locale_(extension_l10n_util::CurrentLocaleOrDefault()) { 459 : locale_(extension_l10n_util::CurrentLocaleOrDefault()) {
460 extension_l10n_util::SetProcessLocale(locale); 460 extension_l10n_util::SetProcessLocale(locale);
461 } 461 }
462 462
463 ScopedLocaleForTest::~ScopedLocaleForTest() { 463 ScopedLocaleForTest::~ScopedLocaleForTest() {
464 extension_l10n_util::SetProcessLocale(locale_); 464 extension_l10n_util::SetProcessLocale(locale_);
465 } 465 }
466 466
467 } // namespace extension_l10n_util 467 } // namespace extension_l10n_util
OLDNEW
« no previous file with comments | « extensions/common/event_filter.cc ('k') | extensions/common/extension_l10n_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698