190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved.
290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file.
490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/android/resource_mapper.h"
690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include <map>
890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/lazy_instance.h"
1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "base/logging.h"
1190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "grit/theme_resources.h"
1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace {
1490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)typedef std::map<int, int> ResourceMap;
1690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)base::LazyInstance<ResourceMap>::Leaky g_id_map = LAZY_INSTANCE_INITIALIZER;
1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace
1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)const int ResourceMapper::kMissingId = -1;
2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)int ResourceMapper::MapFromChromiumId(int resource_id) {
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  if (g_id_map.Get().empty()) {
2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    ConstructMap();
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  ResourceMap::iterator iterator = g_id_map.Get().find(resource_id);
2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  if (iterator != g_id_map.Get().end()) {
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    return iterator->second;
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  }
3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  // The resource couldn't be found.
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  NOTREACHED();
3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  return kMissingId;
3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ResourceMapper::ConstructMap() {
3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  DCHECK(g_id_map.Get().empty());
3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  int next_id = 0;
4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#define DEFINE_RESOURCE_ID(c_id,java_id) g_id_map.Get()[c_id] = next_id++;
4290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/android/resource_id.h"
4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#undef DEFINE_RESOURCE_ID
4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}
45