| Index: components/font_service/public/cpp/mapped_font_file.cc | 
| diff --git a/components/font_service/public/cpp/mapped_font_file.cc b/components/font_service/public/cpp/mapped_font_file.cc | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..98deaafb8f381d48584fdc0fa3a30f442684426b | 
| --- /dev/null | 
| +++ b/components/font_service/public/cpp/mapped_font_file.cc | 
| @@ -0,0 +1,48 @@ | 
| +// Copyright 2015 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 "components/font_service/public/cpp/mapped_font_file.h" | 
| + | 
| +#include "base/files/file_util.h" | 
| +#include "base/threading/thread_restrictions.h" | 
| +#include "skia/ext/refptr.h" | 
| +#include "skia/ext/skia_utils_base.h" | 
| +#include "third_party/skia/include/core/SkData.h" | 
| +#include "third_party/skia/include/core/SkStream.h" | 
| + | 
| +namespace font_service { | 
| +namespace internal { | 
| + | 
| +MappedFontFile::MappedFontFile(uint32_t font_id) | 
| +    : font_id_(font_id), observer_(nullptr) {} | 
| + | 
| +bool MappedFontFile::Initialize(base::File file) { | 
| +  base::ThreadRestrictions::ScopedAllowIO allow_mmap; | 
| +  return mapped_font_file_.Initialize(file.Pass()); | 
| +} | 
| + | 
| +SkMemoryStream* MappedFontFile::CreateMemoryStream() { | 
| +  DCHECK(mapped_font_file_.IsValid()); | 
| +  auto data = skia::AdoptRef( | 
| +      SkData::NewWithProc(mapped_font_file_.data(), mapped_font_file_.length(), | 
| +                          &MappedFontFile::ReleaseProc, this)); | 
| +  if (!data) | 
| +    return nullptr; | 
| +  AddRef(); | 
| +  return new SkMemoryStream(data.get()); | 
| +} | 
| + | 
| +MappedFontFile::~MappedFontFile() { | 
| +  if (observer_) | 
| +    observer_->OnMappedFontFileDestroyed(this); | 
| +} | 
| + | 
| +// static | 
| +void MappedFontFile::ReleaseProc(const void* ptr, void* context) { | 
| +  base::ThreadRestrictions::ScopedAllowIO allow_munmap; | 
| +  static_cast<MappedFontFile*>(context)->Release(); | 
| +} | 
| + | 
| +}  // namespace internal | 
| +}  // namespace font_service | 
|  |