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: content/common/dwrite_font_platform_win.cc

Issue 733253005: Added few validations in Direct Write Font Cache code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 1 month 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "content/public/common/dwrite_font_platform_win.h" 5 #include "content/public/common/dwrite_font_platform_win.h"
6 6
7 #include <dwrite.h> 7 #include <dwrite.h>
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <utility> 10 #include <utility>
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 struct CacheRegion { 274 struct CacheRegion {
275 UINT64 start_offset; 275 UINT64 start_offset;
276 UINT64 length; 276 UINT64 length;
277 const BYTE* ptr; 277 const BYTE* ptr;
278 /* BYTE blob_[]; // Place holder for the blob that follows. */ 278 /* BYTE blob_[]; // Place holder for the blob that follows. */
279 }; 279 };
280 280
281 // Function to create static font cache file. 281 // Function to create static font cache file.
282 bool Create(const wchar_t* file_name) { 282 bool Create(const wchar_t* file_name) {
283 static_cache_.reset(new base::File(base::FilePath(file_name), 283 static_cache_.reset(new base::File(base::FilePath(file_name),
284 base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_WRITE)); 284 base::File::FLAG_OPEN_ALWAYS | base::File::FLAG_WRITE |
285 base::File::FLAG_EXCLUSIVE_WRITE));
285 if (!static_cache_->IsValid()) { 286 if (!static_cache_->IsValid()) {
286 static_cache_.reset(); 287 static_cache_.reset();
287 // TODO(shrikant): Convert this CHECK to DCHECK post canary.
288 // We have all fallbacks built in, so if we are not able to create
289 // static cache, browser can still run with old way of loading all fonts.
290 CHECK(FALSE);
291 return false; 288 return false;
292 } 289 }
293 CacheFileHeader header; 290 CacheFileHeader header;
294 291
295 // At offset 0 write cache version 292 // At offset 0 write cache version
296 static_cache_->Write(0, 293 static_cache_->Write(0,
297 reinterpret_cast<const char*>(&header), 294 reinterpret_cast<const char*>(&header),
298 sizeof(header)); 295 sizeof(header));
299 296
300 static_cache_->Flush(); 297 static_cache_->Flush();
(...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after
904 if (!ValidateAndLoadCacheMap()) { 901 if (!ValidateAndLoadCacheMap()) {
905 cache_.reset(); 902 cache_.reset();
906 return false; 903 return false;
907 } 904 }
908 905
909 return true; 906 return true;
910 } 907 }
911 908
912 void FontCollectionLoader::EnterStaticCacheMode(const WCHAR* file_name) { 909 void FontCollectionLoader::EnterStaticCacheMode(const WCHAR* file_name) {
913 cache_writer_.reset(new FontCacheWriter()); 910 cache_writer_.reset(new FontCacheWriter());
914 cache_writer_->Create(file_name); 911 if (cache_writer_->Create(file_name))
915 create_static_cache_ = true; 912 create_static_cache_ = true;
916 } 913 }
917 914
918 void FontCollectionLoader::LeaveStaticCacheMode() { 915 void FontCollectionLoader::LeaveStaticCacheMode() {
919 cache_writer_->Close(); 916 cache_writer_->Close();
920 cache_writer_.reset(NULL); 917 cache_writer_.reset(NULL);
921 create_static_cache_ = false; 918 create_static_cache_ = false;
922 } 919 }
923 920
924 bool FontCollectionLoader::IsBuildStaticCacheMode() { 921 bool FontCollectionLoader::IsBuildStaticCacheMode() {
925 return create_static_cache_; 922 return create_static_cache_;
(...skipping 23 matching lines...) Expand all
949 _TRUNCATE); 946 _TRUNCATE);
950 CacheTableEntry* table_entry = NULL; 947 CacheTableEntry* table_entry = NULL;
951 CacheMap::iterator iter = cache_map_.find(file_name); 948 CacheMap::iterator iter = cache_map_.find(file_name);
952 if (iter == cache_map_.end()) { 949 if (iter == cache_map_.end()) {
953 table_entry = new CacheTableEntry(); 950 table_entry = new CacheTableEntry();
954 cache_map_[file_name] = table_entry; 951 cache_map_[file_name] = table_entry;
955 } else { 952 } else {
956 table_entry = iter->second; 953 table_entry = iter->second;
957 } 954 }
958 table_entry->file_size = entry->file_size; 955 table_entry->file_size = entry->file_size;
959 for (DWORD idx = 0; current_ptr < mem_file_end && idx < entry->entry_count; 956 for (DWORD idx = 0;
957 (current_ptr + sizeof(CacheFileOffsetEntry)) < mem_file_end &&
958 idx < entry->entry_count;
960 idx++) { 959 idx++) {
961 CacheFileOffsetEntry* offset_entry = 960 CacheFileOffsetEntry* offset_entry =
962 reinterpret_cast<CacheFileOffsetEntry*>(current_ptr); 961 reinterpret_cast<CacheFileOffsetEntry*>(current_ptr);
963 CacheTableOffsetEntry table_offset_entry; 962 CacheTableOffsetEntry table_offset_entry;
964 table_offset_entry.start_offset = offset_entry->start_offset; 963 table_offset_entry.start_offset = offset_entry->start_offset;
965 table_offset_entry.length = offset_entry->length; 964 table_offset_entry.length = offset_entry->length;
966 table_offset_entry.inside_file_ptr = 965 table_offset_entry.inside_file_ptr =
967 current_ptr + sizeof(CacheFileOffsetEntry); 966 current_ptr + sizeof(CacheFileOffsetEntry);
968 table_entry->offset_entries.push_back(table_offset_entry); 967 table_entry->offset_entries.push_back(table_offset_entry);
969 current_ptr += sizeof(CacheFileOffsetEntry); 968 current_ptr += sizeof(CacheFileOffsetEntry);
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after
1184 g_shared_font_cache.Set(mapping); 1183 g_shared_font_cache.Set(mapping);
1185 1184
1186 return true; 1185 return true;
1187 } 1186 }
1188 1187
1189 bool BuildFontCache(const base::FilePath& file) { 1188 bool BuildFontCache(const base::FilePath& file) {
1190 return BuildFontCacheInternal(file.value().c_str()); 1189 return BuildFontCacheInternal(file.value().c_str());
1191 } 1190 }
1192 1191
1193 } // namespace content 1192 } // namespace content
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