OLD | NEW |
| (Empty) |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "components/font_service/public/cpp/font_loader.h" | |
6 | |
7 #include "components/font_service/public/cpp/font_service_thread.h" | |
8 #include "mojo/application/public/cpp/application_impl.h" | |
9 | |
10 namespace font_service { | |
11 | |
12 FontLoader::FontLoader(mojo::ApplicationImpl* application_impl) { | |
13 mojo::URLRequestPtr request(mojo::URLRequest::New()); | |
14 request->url = mojo::String::From("mojo:font_service"); | |
15 FontServicePtr font_service; | |
16 application_impl->ConnectToService(request.Pass(), &font_service); | |
17 | |
18 thread_ = new internal::FontServiceThread(font_service.Pass()); | |
19 } | |
20 | |
21 FontLoader::~FontLoader() {} | |
22 | |
23 bool FontLoader::matchFamilyName(const char family_name[], | |
24 SkTypeface::Style requested, | |
25 FontIdentity* out_font_identifier, | |
26 SkString* out_family_name, | |
27 SkTypeface::Style* out_style) { | |
28 return thread_->MatchFamilyName(family_name, requested, out_font_identifier, | |
29 out_family_name, out_style); | |
30 } | |
31 | |
32 SkStreamAsset* FontLoader::openStream(const FontIdentity& identity) { | |
33 { | |
34 base::AutoLock lock(lock_); | |
35 auto mapped_font_files_it = mapped_font_files_.find(identity.fID); | |
36 if (mapped_font_files_it != mapped_font_files_.end()) | |
37 return mapped_font_files_it->second->CreateMemoryStream(); | |
38 } | |
39 | |
40 scoped_refptr<internal::MappedFontFile> mapped_font_file = | |
41 thread_->OpenStream(identity); | |
42 if (!mapped_font_file) | |
43 return nullptr; | |
44 | |
45 // Get notified with |mapped_font_file| is destroyed. | |
46 mapped_font_file->set_observer(this); | |
47 | |
48 { | |
49 base::AutoLock lock(lock_); | |
50 auto mapped_font_files_it = | |
51 mapped_font_files_.insert(std::make_pair(mapped_font_file->font_id(), | |
52 mapped_font_file.get())) | |
53 .first; | |
54 return mapped_font_files_it->second->CreateMemoryStream(); | |
55 } | |
56 } | |
57 | |
58 void FontLoader::OnMappedFontFileDestroyed(internal::MappedFontFile* f) { | |
59 base::AutoLock lock(lock_); | |
60 mapped_font_files_.erase(f->font_id()); | |
61 } | |
62 | |
63 } // namespace font_service | |
OLD | NEW |