Index: chrome/browser/component_updater/supervised_user_whitelist_installer.cc |
diff --git a/chrome/browser/component_updater/supervised_user_whitelist_installer.cc b/chrome/browser/component_updater/supervised_user_whitelist_installer.cc |
index a266eecc310c72e0440bb0d889101a9803ba5a1c..5e7d77a9643b3e226e46838607ce24f43ce70a21 100644 |
--- a/chrome/browser/component_updater/supervised_user_whitelist_installer.cc |
+++ b/chrome/browser/component_updater/supervised_user_whitelist_installer.cc |
@@ -33,6 +33,8 @@ |
#include "components/crx_file/id_util.h" |
#include "components/safe_json/json_sanitizer.h" |
#include "content/public/browser/browser_thread.h" |
+#include "extensions/common/extension_l10n_util.h" |
+#include "extensions/common/manifest_constants.h" |
namespace component_updater { |
@@ -40,25 +42,50 @@ namespace { |
const char kSanitizedWhitelistExtension[] = ".json"; |
-const char kWhitelist[] = "whitelist"; |
-const char kFile[] = "file"; |
+const char kWhitelistedContent[] = "whitelisted_content"; |
+const char kSites[] = "sites"; |
const char kClients[] = "clients"; |
const char kName[] = "name"; |
+using RawWhitelistReadyCallback = |
+ base::Callback<void(const base::string16&, const base::FilePath&)>; |
+ |
+base::string16 GetWhitelistTitle(const base::DictionaryValue& manifest) { |
+ base::string16 title; |
+ if (!manifest.GetString(extensions::manifest_keys::kShortName, &title)) |
+ manifest.GetString(extensions::manifest_keys::kName, &title); |
+ return title; |
+} |
+ |
base::FilePath GetRawWhitelistPath(const base::DictionaryValue& manifest, |
const base::FilePath& install_dir) { |
const base::DictionaryValue* whitelist_dict = nullptr; |
- if (!manifest.GetDictionary(kWhitelist, &whitelist_dict)) |
+ if (!manifest.GetDictionary(kWhitelistedContent, &whitelist_dict)) |
return base::FilePath(); |
base::FilePath::StringType whitelist_file; |
- if (!whitelist_dict->GetString(kFile, &whitelist_file)) |
+ if (!whitelist_dict->GetString(kSites, &whitelist_file)) |
return base::FilePath(); |
return install_dir.Append(whitelist_file); |
} |
+void LocalizeManifestOnBlockingPool(base::DictionaryValue* manifest, |
+ const base::FilePath& install_dir) { |
+ std::string error; |
+ if (!extension_l10n_util::LocalizeExtension(install_dir, manifest, &error)) |
+ LOG(WARNING) << "Localizing whitelist failed: " << error; |
+} |
+ |
+void OnManifestLocalized( |
+ const RawWhitelistReadyCallback& callback, |
+ const base::FilePath& install_dir, |
+ const base::DictionaryValue* manifest) { |
+ callback.Run(GetWhitelistTitle(*manifest), |
+ GetRawWhitelistPath(*manifest, install_dir)); |
+} |
+ |
base::FilePath GetSanitizedWhitelistPath(const std::string& crx_id) { |
base::FilePath base_dir; |
PathService::Get(chrome::DIR_SUPERVISED_USER_INSTALLED_WHITELISTS, &base_dir); |
@@ -190,7 +217,7 @@ class SupervisedUserWhitelistComponentInstallerTraits |
SupervisedUserWhitelistComponentInstallerTraits( |
const std::string& crx_id, |
const std::string& name, |
- const base::Callback<void(const base::FilePath&)>& callback) |
+ const RawWhitelistReadyCallback& callback) |
: crx_id_(crx_id), name_(name), callback_(callback) {} |
~SupervisedUserWhitelistComponentInstallerTraits() override {} |
@@ -210,7 +237,7 @@ class SupervisedUserWhitelistComponentInstallerTraits |
std::string crx_id_; |
std::string name_; |
- base::Callback<void(const base::FilePath&)> callback_; |
+ RawWhitelistReadyCallback callback_; |
DISALLOW_COPY_AND_ASSIGN(SupervisedUserWhitelistComponentInstallerTraits); |
}; |
@@ -238,7 +265,12 @@ void SupervisedUserWhitelistComponentInstallerTraits::ComponentReady( |
const base::Version& version, |
const base::FilePath& install_dir, |
scoped_ptr<base::DictionaryValue> manifest) { |
- callback_.Run(GetRawWhitelistPath(*manifest, install_dir)); |
+ base::DictionaryValue* manifest_raw = manifest.get(); |
+ content::BrowserThread::PostBlockingPoolTaskAndReply( |
+ FROM_HERE, |
+ base::Bind(&LocalizeManifestOnBlockingPool, manifest_raw, install_dir), |
+ base::Bind(&OnManifestLocalized, callback_, install_dir, |
+ base::Owned(manifest.release()))); |
Bernhard Bauer
2015/11/18 12:10:40
base::Passed(&manifest)?
Marc Treib
2015/11/18 12:44:18
Done.
|
} |
base::FilePath |
@@ -276,8 +308,10 @@ class SupervisedUserWhitelistInstallerImpl |
const std::string& crx_id); |
void OnRawWhitelistReady(const std::string& crx_id, |
+ const base::string16& title, |
const base::FilePath& whitelist_path); |
- void OnSanitizedWhitelistReady(const std::string& crx_id); |
+ void OnSanitizedWhitelistReady(const std::string& crx_id, |
+ const base::string16& title); |
// SupervisedUserWhitelistInstaller overrides: |
void RegisterComponents() override; |
@@ -369,6 +403,7 @@ bool SupervisedUserWhitelistInstallerImpl::UnregisterWhitelistInternal( |
void SupervisedUserWhitelistInstallerImpl::OnRawWhitelistReady( |
const std::string& crx_id, |
+ const base::string16& title, |
const base::FilePath& whitelist_path) { |
cus_->GetSequencedTaskRunner()->PostTask( |
FROM_HERE, |
@@ -377,13 +412,14 @@ void SupervisedUserWhitelistInstallerImpl::OnRawWhitelistReady( |
base::ThreadTaskRunnerHandle::Get(), |
base::Bind( |
&SupervisedUserWhitelistInstallerImpl::OnSanitizedWhitelistReady, |
- weak_ptr_factory_.GetWeakPtr(), crx_id))); |
+ weak_ptr_factory_.GetWeakPtr(), crx_id, title))); |
} |
void SupervisedUserWhitelistInstallerImpl::OnSanitizedWhitelistReady( |
- const std::string& crx_id) { |
+ const std::string& crx_id, |
+ const base::string16& title) { |
for (const WhitelistReadyCallback& callback : callbacks_) |
- callback.Run(crx_id, GetSanitizedWhitelistPath(crx_id)); |
+ callback.Run(crx_id, title, GetSanitizedWhitelistPath(crx_id)); |
} |
void SupervisedUserWhitelistInstallerImpl::RegisterComponents() { |