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

Unified Diff: chrome_frame/simple_resource_loader.cc

Issue 126143005: Remove Chrome Frame code and resources. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: sync to r244038 Created 6 years, 11 months 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome_frame/simple_resource_loader.h ('k') | chrome_frame/smoke_test.bat » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_frame/simple_resource_loader.cc
diff --git a/chrome_frame/simple_resource_loader.cc b/chrome_frame/simple_resource_loader.cc
deleted file mode 100644
index 22024f3d50894bb813d402f10be3edd66fe74027..0000000000000000000000000000000000000000
--- a/chrome_frame/simple_resource_loader.cc
+++ /dev/null
@@ -1,272 +0,0 @@
-// Copyright (c) 2012 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 "chrome_frame/simple_resource_loader.h"
-
-#include <atlbase.h>
-
-#include <algorithm>
-
-#include "base/base_paths.h"
-#include "base/file_util.h"
-#include "base/files/file_path.h"
-#include "base/i18n/rtl.h"
-#include "base/memory/singleton.h"
-#include "base/path_service.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/win/i18n.h"
-#include "base/win/windows_version.h"
-#include "chrome_frame/policy_settings.h"
-#include "ui/base/resource/data_pack.h"
-
-namespace {
-
-const wchar_t kLocalesDirName[] = L"Locales";
-
-bool IsInvalidTagCharacter(wchar_t tag_character) {
- return !(L'-' == tag_character ||
- IsAsciiDigit(tag_character) ||
- IsAsciiAlpha(tag_character));
-}
-
-// A helper function object that performs a lower-case ASCII comparison between
-// two strings.
-class CompareInsensitiveASCII
- : public std::unary_function<const std::wstring&, bool> {
- public:
- explicit CompareInsensitiveASCII(const std::wstring& value)
- : value_lowered_(WideToASCII(value)) {
- StringToLowerASCII(&value_lowered_);
- }
- bool operator()(const std::wstring& comparand) {
- return LowerCaseEqualsASCII(comparand, value_lowered_.c_str());
- }
-
- private:
- std::string value_lowered_;
-};
-
-// Returns true if the value was added.
-bool PushBackIfAbsent(
- const std::wstring& value,
- std::vector<std::wstring>* collection) {
- if (collection->end() ==
- std::find_if(collection->begin(), collection->end(),
- CompareInsensitiveASCII(value))) {
- collection->push_back(value);
- return true;
- }
- return false;
-}
-
-// Returns true if the collection is modified.
-bool PushBackWithFallbackIfAbsent(
- const std::wstring& language,
- std::vector<std::wstring>* collection) {
- bool modified = false;
-
- if (!language.empty()) {
- // Try adding the language itself.
- modified = PushBackIfAbsent(language, collection);
-
- // Now try adding its fallback, if it has one.
- std::wstring::size_type dash_pos = language.find(L'-');
- if (0 < dash_pos && language.size() - 1 > dash_pos)
- modified |= PushBackIfAbsent(language.substr(0, dash_pos), collection);
- }
-
- return modified;
-}
-
-} // namespace
-
-SimpleResourceLoader::SimpleResourceLoader()
- : data_pack_(NULL),
- locale_dll_handle_(NULL) {
- // Find and load the resource DLL.
- std::vector<std::wstring> language_tags;
-
- // First, try the locale dictated by policy and its fallback.
- PushBackWithFallbackIfAbsent(
- PolicySettings::GetInstance()->ApplicationLocale(),
- &language_tags);
-
- // Next, try the thread, process, user, system languages.
- GetPreferredLanguages(&language_tags);
-
- // Finally, fall-back on "en-US" (which may already be present in the vector,
- // but that's okay since we'll exit with success when the first is tried).
- language_tags.push_back(L"en-US");
-
- base::FilePath locales_path;
-
- DetermineLocalesDirectory(&locales_path);
- if (!LoadLocalePack(language_tags, locales_path, &locale_dll_handle_,
- &data_pack_, &language_)) {
- NOTREACHED() << "Failed loading any resource dll (even \"en-US\").";
- }
-}
-
-SimpleResourceLoader::~SimpleResourceLoader() {
- delete data_pack_;
-}
-
-// static
-SimpleResourceLoader* SimpleResourceLoader::GetInstance() {
- return Singleton<SimpleResourceLoader>::get();
-}
-
-// static
-void SimpleResourceLoader::GetPreferredLanguages(
- std::vector<std::wstring>* language_tags) {
- DCHECK(language_tags);
- // The full set of preferred languages and their fallbacks are given priority.
- std::vector<std::wstring> languages;
- if (base::win::i18n::GetThreadPreferredUILanguageList(&languages)) {
- for (std::vector<std::wstring>::const_iterator scan = languages.begin(),
- end = languages.end(); scan != end; ++scan) {
- PushBackIfAbsent(*scan, language_tags);
- }
- }
- // Use the base i18n routines (i.e., ICU) as a last, best hope for something
- // meaningful for the user.
- PushBackWithFallbackIfAbsent(base::ASCIIToWide(
- base::i18n::GetConfiguredLocale()),
- language_tags);
-}
-
-// static
-void SimpleResourceLoader::DetermineLocalesDirectory(
- base::FilePath* locales_path) {
- DCHECK(locales_path);
-
- base::FilePath module_path;
- PathService::Get(base::DIR_MODULE, &module_path);
- *locales_path = module_path.Append(kLocalesDirName);
-
- // We may be residing in the "locales" directory's parent, or we might be
- // in a sibling directory. Move up one and look for Locales again in the
- // latter case.
- if (!base::DirectoryExists(*locales_path)) {
- *locales_path = module_path.DirName();
- *locales_path = locales_path->Append(kLocalesDirName);
- }
-
- // Don't make a second check to see if the dir is in the parent. We'll notice
- // and log that in LoadLocaleDll when we actually try loading DLLs.
-}
-
-// static
-bool SimpleResourceLoader::IsValidLanguageTag(
- const std::wstring& language_tag) {
- // "[a-zA-Z]+(-[a-zA-Z0-9]+)*" is a simplification, but better than nothing.
- // Rather than pick up the weight of a regex processor, just search for a
- // character that isn't in the above set. This will at least weed out
- // attempts at "../../EvilBinary".
- return language_tag.end() == std::find_if(language_tag.begin(),
- language_tag.end(),
- &IsInvalidTagCharacter);
-}
-
-// static
-bool SimpleResourceLoader::LoadLocalePack(
- const std::vector<std::wstring>& language_tags,
- const base::FilePath& locales_path,
- HMODULE* dll_handle,
- ui::DataPack** data_pack,
- std::wstring* language) {
- DCHECK(language);
-
- // The dll should only have resources, not executable code.
- const DWORD load_flags =
- (base::win::GetVersion() >= base::win::VERSION_VISTA ?
- LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE | LOAD_LIBRARY_AS_IMAGE_RESOURCE :
- DONT_RESOLVE_DLL_REFERENCES);
-
- const std::wstring dll_suffix(L".dll");
- const std::wstring pack_suffix(L".pak");
-
- bool found_pack = false;
-
- for (std::vector<std::wstring>::const_iterator scan = language_tags.begin(),
- end = language_tags.end();
- scan != end;
- ++scan) {
- if (!IsValidLanguageTag(*scan)) {
- LOG(WARNING) << "Invalid language tag supplied while locating resources:"
- " \"" << *scan << "\"";
- continue;
- }
-
- // Attempt to load both the resource pack and the dll. We return success
- // only we load both.
- base::FilePath resource_pack_path =
- locales_path.Append(*scan + pack_suffix);
- base::FilePath dll_path = locales_path.Append(*scan + dll_suffix);
-
- if (base::PathExists(resource_pack_path) &&
- base::PathExists(dll_path)) {
- scoped_ptr<ui::DataPack> cur_data_pack(
- new ui::DataPack(ui::SCALE_FACTOR_100P));
- if (!cur_data_pack->LoadFromPath(resource_pack_path))
- continue;
-
- HMODULE locale_dll_handle = LoadLibraryEx(dll_path.value().c_str(), NULL,
- load_flags);
- if (locale_dll_handle) {
- *dll_handle = locale_dll_handle;
- *language = dll_path.BaseName().RemoveExtension().value();
- *data_pack = cur_data_pack.release();
- found_pack = true;
- break;
- } else {
- *data_pack = NULL;
- }
- }
- }
- DCHECK(found_pack || base::DirectoryExists(locales_path))
- << "Could not locate locales DLL directory.";
- return found_pack;
-}
-
-std::wstring SimpleResourceLoader::GetLocalizedResource(int message_id) {
- if (!data_pack_) {
- DLOG(ERROR) << "locale resources are not loaded";
- return std::wstring();
- }
-
- DCHECK(IS_INTRESOURCE(message_id));
-
- base::StringPiece data;
- if (!data_pack_->GetStringPiece(message_id, &data)) {
- DLOG(ERROR) << "Unable to find string for resource id:" << message_id;
- return std::wstring();
- }
-
- // Data pack encodes strings as either UTF8 or UTF16.
- base::string16 msg;
- if (data_pack_->GetTextEncodingType() == ui::DataPack::UTF16) {
- msg = base::string16(reinterpret_cast<const base::char16*>(data.data()),
- data.length() / 2);
- } else if (data_pack_->GetTextEncodingType() == ui::DataPack::UTF8) {
- msg = base::UTF8ToUTF16(data);
- }
- return msg;
-}
-
-// static
-std::wstring SimpleResourceLoader::GetLanguage() {
- return SimpleResourceLoader::GetInstance()->language_;
-}
-
-// static
-std::wstring SimpleResourceLoader::Get(int message_id) {
- SimpleResourceLoader* loader = SimpleResourceLoader::GetInstance();
- return loader->GetLocalizedResource(message_id);
-}
-
-HMODULE SimpleResourceLoader::GetResourceModuleHandle() {
- return locale_dll_handle_;
-}
« no previous file with comments | « chrome_frame/simple_resource_loader.h ('k') | chrome_frame/smoke_test.bat » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698