Index: components/variations/service/ui_string_overrider.cc |
diff --git a/components/variations/service/ui_string_overrider.cc b/components/variations/service/ui_string_overrider.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ec573f521f833c24214859080b8b9fd8e8f2899d |
--- /dev/null |
+++ b/components/variations/service/ui_string_overrider.cc |
@@ -0,0 +1,51 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "components/variations/service/ui_string_overrider.h" |
+ |
+#include <algorithm> |
+ |
+#include "base/logging.h" |
+#include "ui/base/resource/resource_bundle.h" |
+ |
+namespace variations { |
+ |
+UIStringOverrider::UIStringOverrider() |
+ : resource_hashes_(nullptr), |
+ resource_indices_(nullptr), |
+ num_resources_(0) {} |
+ |
+UIStringOverrider::UIStringOverrider(const uint32_t* resource_hashes, |
+ const int* resource_indices, |
+ size_t num_resources) |
+ : resource_hashes_(resource_hashes), |
+ resource_indices_(resource_indices), |
+ num_resources_(num_resources) { |
+ DCHECK(!num_resources || resource_hashes_); |
+ DCHECK(!num_resources || resource_indices_); |
+} |
+ |
+UIStringOverrider::~UIStringOverrider() {} |
+ |
+int UIStringOverrider::GetResourceIndex(uint32_t hash) { |
+ if (!num_resources_) |
+ return -1; |
+ const uint32_t* end = resource_hashes_ + num_resources_; |
+ const uint32_t* element = std::lower_bound(resource_hashes_, end, hash); |
+ if (element == end || *element != hash) |
+ return -1; |
+ return resource_indices_[element - resource_hashes_]; |
+} |
+ |
+void UIStringOverrider::OverrideUIString(uint32_t hash, |
+ const base::string16& string) { |
+ int resource_id = GetResourceIndex(hash); |
+ if (resource_id == -1) |
+ return; |
+ |
+ ui::ResourceBundle::GetSharedInstance().OverrideLocaleStringResource( |
+ resource_id, string); |
+} |
+ |
+} // namespace variations |