| Index: chrome_frame/chrome_tab.cc
|
| diff --git a/chrome_frame/chrome_tab.cc b/chrome_frame/chrome_tab.cc
|
| index b3c209985600a4f9c8381bb06b1f5084275525c5..2f22fbe8b6caffa2b7fa93565f4bc223f9cebd51 100644
|
| --- a/chrome_frame/chrome_tab.cc
|
| +++ b/chrome_frame/chrome_tab.cc
|
| @@ -15,6 +15,7 @@
|
| #include "base/command_line.h"
|
| #include "base/file_util.h"
|
| #include "base/file_version_info.h"
|
| +#include "base/i18n/icu_util.h"
|
| #include "base/logging.h"
|
| #include "base/logging_win.h"
|
| #include "base/path_service.h"
|
| @@ -107,7 +108,9 @@ class ChromeTabModule : public CAtlDllModuleT<ChromeTabModule> {
|
| public:
|
| typedef CAtlDllModuleT<ChromeTabModule> ParentClass;
|
|
|
| - ChromeTabModule() : do_system_registration_(true), crash_reporting_(NULL) {}
|
| + ChromeTabModule() : do_system_registration_(true),
|
| + crash_reporting_(NULL),
|
| + icu_initialized_(false) {}
|
|
|
| DECLARE_LIBID(LIBID_ChromeTabLib)
|
| DECLARE_REGISTRY_APPID_RESOURCEID(IDR_CHROMETAB,
|
| @@ -199,13 +202,20 @@ class ChromeTabModule : public CAtlDllModuleT<ChromeTabModule> {
|
|
|
| // The module is "locked" when an object takes a reference on it. The first
|
| // time it is locked, take a reference on crash reporting to bind its lifetime
|
| - // to the module.
|
| + // to the module and initialize ICU.
|
| virtual LONG Lock() throw() {
|
| LONG result = ParentClass::Lock();
|
| if (result == 1) {
|
| DCHECK_EQ(crash_reporting_,
|
| static_cast<chrome_frame::ScopedCrashReporting*>(NULL));
|
| crash_reporting_ = new chrome_frame::ScopedCrashReporting();
|
| +
|
| + // Initialize ICU if this is the first time the module has been locked.
|
| + if (!icu_initialized_) {
|
| + icu_initialized_ = true;
|
| + // Best-effort since something is better than nothing here.
|
| + ignore_result(base::i18n::InitializeICU());
|
| + }
|
| }
|
| return result;
|
| }
|
| @@ -233,6 +243,10 @@ class ChromeTabModule : public CAtlDllModuleT<ChromeTabModule> {
|
| // reporting to shut down at exit, which would lead to problems with the
|
| // loader lock.
|
| chrome_frame::ScopedCrashReporting* crash_reporting_;
|
| +
|
| + // Initially false, this is flipped to true to indicate that ICU has been
|
| + // initialized for the module.
|
| + bool icu_initialized_;
|
| };
|
|
|
| ChromeTabModule _AtlModule;
|
|
|