1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- // Copyright 2019 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 "android_webview/common/aw_resource_bundle.h"
- #include "android_webview/common/aw_descriptors.h"
- #include "base/android/locale_utils.h"
- #include "base/files/file.h"
- #include "base/files/file_path.h"
- #include "base/files/memory_mapped_file.h"
- #include "base/i18n/rtl.h"
- #include "base/logging.h"
- #include "base/path_service.h"
- #include "base/posix/global_descriptors.h"
- #include "base/trace_event/trace_event.h"
- #include "ui/base/resource/resource_bundle.h"
- #include "ui/base/resource/resource_bundle_android.h"
- #include "ui/base/ui_base_paths.h"
- namespace android_webview {
- void InitIcuAndResourceBundleBrowserSide() {
- TRACE_EVENT0("startup", "InitIcuAndResourceBundleBrowserSide");
- ui::SetLocalePaksStoredInApk(true);
- std::string locale = ui::ResourceBundle::InitSharedInstanceWithLocale(
- base::android::GetDefaultLocaleString(), NULL,
- ui::ResourceBundle::LOAD_COMMON_RESOURCES);
- if (locale.empty()) {
- LOG(WARNING) << "Failed to load locale .pak from apk.";
- }
- base::i18n::SetICUDefaultLocale(locale);
- // Try to directly mmap the resources.pak from the apk. Fall back to load
- // from file, using PATH_SERVICE, otherwise.
- base::FilePath pak_file_path;
- base::PathService::Get(ui::DIR_RESOURCE_PAKS_ANDROID, &pak_file_path);
- pak_file_path = pak_file_path.AppendASCII("resources.pak");
- ui::LoadMainAndroidPackFile("assets/resources.pak", pak_file_path);
- }
- void InitResourceBundleRendererSide() {
- auto* global_descriptors = base::GlobalDescriptors::GetInstance();
- int pak_fd = global_descriptors->Get(kAndroidWebViewLocalePakDescriptor);
- base::MemoryMappedFile::Region pak_region =
- global_descriptors->GetRegion(kAndroidWebViewLocalePakDescriptor);
- ui::ResourceBundle::InitSharedInstanceWithPakFileRegion(base::File(pak_fd),
- pak_region);
- std::pair<int, ui::ResourceScaleFactor> extra_paks[] = {
- {kAndroidWebViewMainPakDescriptor, ui::kScaleFactorNone},
- {kAndroidWebView100PercentPakDescriptor, ui::k100Percent}};
- for (const auto& pak_info : extra_paks) {
- pak_fd = global_descriptors->Get(pak_info.first);
- pak_region = global_descriptors->GetRegion(pak_info.first);
- ui::ResourceBundle::GetSharedInstance().AddDataPackFromFileRegion(
- base::File(pak_fd), pak_region, pak_info.second);
- }
- }
- } // namespace android_webview
|