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

Side by Side Diff: base/i18n/icu_util.cc

Issue 1816173004: Capture icu data file name on failure to load (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 9 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/i18n/icu_util.h" 5 #include "base/i18n/icu_util.h"
6 6
7 #if defined(OS_WIN) 7 #if defined(OS_WIN)
8 #include <windows.h> 8 #include <windows.h>
9 #endif 9 #endif
10 10
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
56 // Assert that we are not called more than once. Even though calling this 56 // Assert that we are not called more than once. Even though calling this
57 // function isn't harmful (ICU can handle it), being called twice probably 57 // function isn't harmful (ICU can handle it), being called twice probably
58 // indicates a programming error. 58 // indicates a programming error.
59 bool g_check_called_once = true; 59 bool g_check_called_once = true;
60 bool g_called_once = false; 60 bool g_called_once = false;
61 #endif // !defined(NDEBUG) 61 #endif // !defined(NDEBUG)
62 62
63 // To debug http://crbug.com/445616. 63 // To debug http://crbug.com/445616.
64 int g_debug_icu_last_error; 64 int g_debug_icu_last_error;
65 int g_debug_icu_load; 65 int g_debug_icu_load;
66 int g_debug_icu_pf_error_details;
66 int g_debug_icu_pf_last_error; 67 int g_debug_icu_pf_last_error;
67 int g_debug_icu_pf_error_details; 68 #if defined(OS_WIN)
69 wchar_t g_debug_icu_pf_filename[_MAX_PATH];
70 #endif // OS_WIN
68 71
69 #if ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_FILE 72 #if ICU_UTIL_DATA_IMPL == ICU_UTIL_DATA_FILE
70 // Use an unversioned file name to simplify a icu version update down the road. 73 // Use an unversioned file name to simplify a icu version update down the road.
71 // No need to change the filename in multiple places (gyp files, windows 74 // No need to change the filename in multiple places (gyp files, windows
72 // build pkg configurations, etc). 'l' stands for Little Endian. 75 // build pkg configurations, etc). 'l' stands for Little Endian.
73 // This variable is exported through the header file. 76 // This variable is exported through the header file.
74 const char kIcuDataFileName[] = "icudtl.dat"; 77 const char kIcuDataFileName[] = "icudtl.dat";
75 #if defined(OS_ANDROID) 78 #if defined(OS_ANDROID)
76 const char kAndroidAssetsIcuDataFileName[] = "assets/icudtl.dat"; 79 const char kAndroidAssetsIcuDataFileName[] = "assets/icudtl.dat";
77 #endif 80 #endif
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 if (data_path.empty()) { 146 if (data_path.empty()) {
144 LOG(ERROR) << kIcuDataFileName << " not found in bundle"; 147 LOG(ERROR) << kIcuDataFileName << " not found in bundle";
145 return; 148 return;
146 } 149 }
147 #endif // !defined(OS_MACOSX) 150 #endif // !defined(OS_MACOSX)
148 File file(data_path, File::FLAG_OPEN | File::FLAG_READ); 151 File file(data_path, File::FLAG_OPEN | File::FLAG_READ);
149 if (file.IsValid()) { 152 if (file.IsValid()) {
150 // TODO(scottmg): http://crbug.com/445616. 153 // TODO(scottmg): http://crbug.com/445616.
151 g_debug_icu_pf_last_error = 0; 154 g_debug_icu_pf_last_error = 0;
152 g_debug_icu_pf_error_details = 0; 155 g_debug_icu_pf_error_details = 0;
156 #if defined(OS_WIN)
157 g_debug_icu_pf_filename[0] = 0;
158 #endif // OS_WIN
153 159
154 g_icudtl_pf = file.TakePlatformFile(); 160 g_icudtl_pf = file.TakePlatformFile();
155 g_icudtl_region = MemoryMappedFile::Region::kWholeFile; 161 g_icudtl_region = MemoryMappedFile::Region::kWholeFile;
156 } 162 }
157 #if defined(OS_WIN) 163 #if defined(OS_WIN)
158 else { 164 else {
159 // TODO(scottmg): http://crbug.com/445616. 165 // TODO(scottmg): http://crbug.com/445616.
160 g_debug_icu_pf_last_error = ::GetLastError(); 166 g_debug_icu_pf_last_error = ::GetLastError();
161 g_debug_icu_pf_error_details = file.error_details(); 167 g_debug_icu_pf_error_details = file.error_details();
168 wcscpy_s(g_debug_icu_pf_filename, data_path.value().c_str());
162 } 169 }
163 #endif // OS_WIN 170 #endif // OS_WIN
164 } 171 }
165 172
166 bool InitializeICUWithFileDescriptorInternal( 173 bool InitializeICUWithFileDescriptorInternal(
167 PlatformFile data_fd, 174 PlatformFile data_fd,
168 const MemoryMappedFile::Region& data_region) { 175 const MemoryMappedFile::Region& data_region) {
169 // This can be called multiple times in tests. 176 // This can be called multiple times in tests.
170 if (g_icudtl_mapped_file) { 177 if (g_icudtl_mapped_file) {
171 g_debug_icu_load = 0; // To debug http://crbug.com/445616. 178 g_debug_icu_load = 0; // To debug http://crbug.com/445616.
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
282 InitializeICUWithFileDescriptorInternal(g_icudtl_pf, g_icudtl_region); 289 InitializeICUWithFileDescriptorInternal(g_icudtl_pf, g_icudtl_region);
283 #if defined(OS_WIN) 290 #if defined(OS_WIN)
284 int debug_icu_load = g_debug_icu_load; 291 int debug_icu_load = g_debug_icu_load;
285 debug::Alias(&debug_icu_load); 292 debug::Alias(&debug_icu_load);
286 int debug_icu_last_error = g_debug_icu_last_error; 293 int debug_icu_last_error = g_debug_icu_last_error;
287 debug::Alias(&debug_icu_last_error); 294 debug::Alias(&debug_icu_last_error);
288 int debug_icu_pf_last_error = g_debug_icu_pf_last_error; 295 int debug_icu_pf_last_error = g_debug_icu_pf_last_error;
289 debug::Alias(&debug_icu_pf_last_error); 296 debug::Alias(&debug_icu_pf_last_error);
290 int debug_icu_pf_error_details = g_debug_icu_pf_error_details; 297 int debug_icu_pf_error_details = g_debug_icu_pf_error_details;
291 debug::Alias(&debug_icu_pf_error_details); 298 debug::Alias(&debug_icu_pf_error_details);
299 wchar_t debug_icu_pf_filename[_MAX_PATH] = {0};
300 wcscpy_s(debug_icu_pf_filename, g_debug_icu_pf_filename);
301 debug::Alias(&debug_icu_pf_filename);
292 CHECK(result); // TODO(scottmg): http://crbug.com/445616 302 CHECK(result); // TODO(scottmg): http://crbug.com/445616
293 #endif 303 #endif
294 #endif 304 #endif
295 305
296 // To respond to the timezone change properly, the default timezone 306 // To respond to the timezone change properly, the default timezone
297 // cache in ICU has to be populated on starting up. 307 // cache in ICU has to be populated on starting up.
298 // TODO(jungshik): Some callers do not care about tz at all. If necessary, 308 // TODO(jungshik): Some callers do not care about tz at all. If necessary,
299 // add a boolean argument to this function to init'd the default tz only 309 // add a boolean argument to this function to init'd the default tz only
300 // when requested. 310 // when requested.
301 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) 311 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
302 if (result) 312 if (result)
303 scoped_ptr<icu::TimeZone> zone(icu::TimeZone::createDefault()); 313 scoped_ptr<icu::TimeZone> zone(icu::TimeZone::createDefault());
304 #endif 314 #endif
305 return result; 315 return result;
306 } 316 }
307 #endif // !defined(OS_NACL) 317 #endif // !defined(OS_NACL)
308 318
309 void AllowMultipleInitializeCallsForTesting() { 319 void AllowMultipleInitializeCallsForTesting() {
310 #if !defined(NDEBUG) && !defined(OS_NACL) 320 #if !defined(NDEBUG) && !defined(OS_NACL)
311 g_check_called_once = false; 321 g_check_called_once = false;
312 #endif 322 #endif
313 } 323 }
314 324
315 } // namespace i18n 325 } // namespace i18n
316 } // namespace base 326 } // namespace base
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698