@@ -5,7 +5,8 @@ use crate::net::{Resource, StylesheetLoader};
5
5
use crate :: node:: { ImageData , NodeFlags , RasterImageData , SpecialElementData , Status , TextBrush } ;
6
6
use crate :: stylo_to_cursor_icon:: stylo_to_cursor_icon;
7
7
use crate :: traversal:: TreeTraverser ;
8
- use crate :: util:: { ImageType , resolve_url} ;
8
+ use crate :: url:: DocumentUrl ;
9
+ use crate :: util:: ImageType ;
9
10
use crate :: {
10
11
DEFAULT_CSS , DocumentConfig , DocumentMutator , ElementData , Node , NodeData , TextNodeData ,
11
12
} ;
@@ -24,6 +25,7 @@ use slab::Slab;
24
25
use std:: any:: Any ;
25
26
use std:: collections:: { BTreeMap , Bound , HashMap , HashSet } ;
26
27
use std:: ops:: { Deref , DerefMut } ;
28
+ use std:: str:: FromStr ;
27
29
use std:: sync:: Arc ;
28
30
use std:: sync:: atomic:: { AtomicUsize , Ordering } ;
29
31
use style:: Atom ;
@@ -43,7 +45,7 @@ use style::{
43
45
media_queries:: { Device , MediaList } ,
44
46
selector_parser:: SnapshotMap ,
45
47
shared_lock:: { SharedRwLock , StylesheetGuards } ,
46
- stylesheets:: { AllowImportRules , DocumentStyleSheet , Origin , Stylesheet , UrlExtraData } ,
48
+ stylesheets:: { AllowImportRules , DocumentStyleSheet , Origin , Stylesheet } ,
47
49
stylist:: Stylist ,
48
50
} ;
49
51
use taffy:: AvailableSpace ;
@@ -98,7 +100,7 @@ pub struct BaseDocument {
98
100
99
101
// Config
100
102
/// Base url for resolving linked resources (stylesheets, images, fonts, etc)
101
- pub ( crate ) base_url : Option < url:: Url > ,
103
+ pub ( crate ) url : DocumentUrl ,
102
104
// Devtool settings. Currently used to render debug overlays
103
105
pub ( crate ) devtool_settings : DevtoolSettings ,
104
106
// Viewport details such as the dimensions, HiDPI scale, and zoom factor,
@@ -208,6 +210,11 @@ impl BaseDocument {
208
210
style_config:: set_bool ( "layout.unimplemented" , true ) ;
209
211
style_config:: set_bool ( "layout.columns.enabled" , true ) ;
210
212
213
+ let base_url = config
214
+ . base_url
215
+ . and_then ( |url| DocumentUrl :: from_str ( & url) . ok ( ) )
216
+ . unwrap_or_default ( ) ;
217
+
211
218
let font_ctx = config. font_ctx . unwrap_or_else ( || {
212
219
let mut font_ctx = FontContext :: default ( ) ;
213
220
font_ctx
@@ -236,7 +243,7 @@ impl BaseDocument {
236
243
viewport,
237
244
devtool_settings : DevtoolSettings :: default ( ) ,
238
245
viewport_scroll : kurbo:: Point :: ZERO ,
239
- base_url : None ,
246
+ url : base_url ,
240
247
ua_stylesheets : HashMap :: new ( ) ,
241
248
nodes_to_stylesheet : BTreeMap :: new ( ) ,
242
249
font_ctx,
@@ -300,7 +307,7 @@ impl BaseDocument {
300
307
301
308
/// Set base url for resolving linked resources (stylesheets, images, fonts, etc)
302
309
pub fn set_base_url ( & mut self , url : & str ) {
303
- self . base_url = Some ( Url :: parse ( url) . unwrap ( ) ) ;
310
+ self . url = DocumentUrl :: from ( Url :: parse ( url) . unwrap ( ) ) ;
304
311
}
305
312
306
313
pub fn guard ( & self ) -> & SharedRwLock {
@@ -483,11 +490,11 @@ impl BaseDocument {
483
490
node
484
491
}
485
492
486
- pub fn resolve_url ( & self , raw : & str ) -> url:: Url {
487
- resolve_url ( & self . base_url , raw) . unwrap_or_else ( || {
493
+ pub ( crate ) fn resolve_url ( & self , raw : & str ) -> url:: Url {
494
+ self . url . resolve_relative ( raw) . unwrap_or_else ( || {
488
495
panic ! (
489
- "to be able to resolve {raw} with the base_url: {base_url :?}" ,
490
- base_url = self . base_url
496
+ "to be able to resolve {raw} with the base_url: {:?}" ,
497
+ * self . url
491
498
)
492
499
} )
493
500
}
@@ -522,11 +529,7 @@ impl BaseDocument {
522
529
pub fn make_stylesheet ( & self , css : impl AsRef < str > , origin : Origin ) -> DocumentStyleSheet {
523
530
let data = Stylesheet :: from_str (
524
531
css. as_ref ( ) ,
525
- UrlExtraData :: from ( self . base_url . clone ( ) . unwrap_or_else ( || {
526
- "data:text/css;charset=utf-8;base64,"
527
- . parse :: < Url > ( )
528
- . unwrap ( )
529
- } ) ) ,
532
+ self . url . url_extra_data ( ) ,
530
533
origin,
531
534
ServoArc :: new ( self . guard . wrap ( MediaList :: empty ( ) ) ) ,
532
535
self . guard . clone ( ) ,
0 commit comments