mirror of
https://github.com/servo/servo.git
synced 2025-08-07 14:35:33 +01:00
Use fetch_async in the font cache.
This commit is contained in:
parent
a79c06d9c0
commit
953fa89463
1 changed files with 18 additions and 20 deletions
|
@ -5,8 +5,8 @@
|
||||||
use font_template::{FontTemplate, FontTemplateDescriptor};
|
use font_template::{FontTemplate, FontTemplateDescriptor};
|
||||||
use fontsan;
|
use fontsan;
|
||||||
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
|
use ipc_channel::ipc::{self, IpcReceiver, IpcSender};
|
||||||
use ipc_channel::router::ROUTER;
|
use net_traits::{CoreResourceThread, FetchResponseMsg, fetch_async};
|
||||||
use net_traits::{AsyncResponseTarget, LoadContext, CoreResourceThread, ResponseAction, load_async};
|
use net_traits::request::{Destination, RequestInit, Type as RequestType};
|
||||||
use platform::font_context::FontContextHandle;
|
use platform::font_context::FontContextHandle;
|
||||||
use platform::font_list::SANS_SERIF_FONT_FAMILY;
|
use platform::font_list::SANS_SERIF_FONT_FAMILY;
|
||||||
use platform::font_list::for_each_available_family;
|
use platform::font_list::for_each_available_family;
|
||||||
|
@ -204,35 +204,33 @@ impl FontCache {
|
||||||
}
|
}
|
||||||
|
|
||||||
match src {
|
match src {
|
||||||
Source::Url(ref url_source) => {
|
Source::Url(url_source) => {
|
||||||
let url = &url_source.url;
|
// https://drafts.csswg.org/css-fonts/#font-fetching-requirements
|
||||||
let (data_sender, data_receiver) = ipc::channel().unwrap();
|
let url = url_source.url;
|
||||||
let data_target = AsyncResponseTarget {
|
let request = RequestInit {
|
||||||
sender: data_sender,
|
url: url.clone(),
|
||||||
|
type_: RequestType::Font,
|
||||||
|
destination: Destination::Font,
|
||||||
|
origin: url.clone(),
|
||||||
|
.. RequestInit::default()
|
||||||
};
|
};
|
||||||
load_async(LoadContext::Font,
|
|
||||||
self.core_resource_thread.clone(),
|
|
||||||
url.clone(),
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
None,
|
|
||||||
data_target);
|
|
||||||
let channel_to_self = self.channel_to_self.clone();
|
let channel_to_self = self.channel_to_self.clone();
|
||||||
let url = (*url).clone();
|
|
||||||
let bytes = Mutex::new(Vec::new());
|
let bytes = Mutex::new(Vec::new());
|
||||||
let response_valid = Mutex::new(false);
|
let response_valid = Mutex::new(false);
|
||||||
ROUTER.add_route(data_receiver.to_opaque(), box move |message| {
|
fetch_async(request, &self.core_resource_thread, move |response| {
|
||||||
let response: ResponseAction = message.to().unwrap();
|
|
||||||
match response {
|
match response {
|
||||||
ResponseAction::HeadersAvailable(meta_result) => {
|
FetchResponseMsg::ProcessRequestBody |
|
||||||
|
FetchResponseMsg::ProcessRequestEOF => (),
|
||||||
|
FetchResponseMsg::ProcessResponse(meta_result) => {
|
||||||
*response_valid.lock().unwrap() = meta_result.is_ok();
|
*response_valid.lock().unwrap() = meta_result.is_ok();
|
||||||
}
|
}
|
||||||
ResponseAction::DataAvailable(new_bytes) => {
|
FetchResponseMsg::ProcessResponseChunk(new_bytes) => {
|
||||||
if *response_valid.lock().unwrap() {
|
if *response_valid.lock().unwrap() {
|
||||||
bytes.lock().unwrap().extend(new_bytes.into_iter())
|
bytes.lock().unwrap().extend(new_bytes.into_iter())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ResponseAction::ResponseComplete(response) => {
|
FetchResponseMsg::ProcessResponseEOF(response) => {
|
||||||
if response.is_err() || !*response_valid.lock().unwrap() {
|
if response.is_err() || !*response_valid.lock().unwrap() {
|
||||||
let msg = Command::AddWebFont(family_name.clone(), sources.clone(), sender.clone());
|
let msg = Command::AddWebFont(family_name.clone(), sources.clone(), sender.clone());
|
||||||
channel_to_self.send(msg).unwrap();
|
channel_to_self.send(msg).unwrap();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue