|  | // 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 |