@@ -39,6 +39,14 @@ if (typeof PDFJSDev === "undefined" || PDFJSDev.test("GENERIC")) {
39
39
compatParams . set ( "maxCanvasPixels" , 5242880 ) ;
40
40
}
41
41
} ) ( ) ;
42
+
43
+ // Don't use system fonts on Android (issue 18210).
44
+ // Support: Android
45
+ ( function ( ) {
46
+ if ( isAndroid ) {
47
+ compatParams . set ( "useSystemFonts" , false ) ;
48
+ }
49
+ } ) ( ) ;
42
50
}
43
51
44
52
const OptionKind = {
@@ -47,6 +55,7 @@ const OptionKind = {
47
55
API : 0x04 ,
48
56
WORKER : 0x08 ,
49
57
EVENT_DISPATCH : 0x10 ,
58
+ UNDEF_ALLOWED : 0x20 ,
50
59
PREFERENCE : 0x80 ,
51
60
} ;
52
61
@@ -385,6 +394,19 @@ const defaultOptions = {
385
394
: "../web/standard_fonts/" ,
386
395
kind : OptionKind . API ,
387
396
} ,
397
+ useSystemFonts : {
398
+ // On Android, there is almost no chance to have the font we want so we
399
+ // don't use the system fonts in this case (bug 1882613).
400
+ /** @type {boolean|undefined } */
401
+ value : (
402
+ typeof PDFJSDev === "undefined"
403
+ ? window . isGECKOVIEW
404
+ : PDFJSDev . test ( "GECKOVIEW" )
405
+ )
406
+ ? false
407
+ : undefined ,
408
+ kind : OptionKind . API + OptionKind . UNDEF_ALLOWED ,
409
+ } ,
388
410
verbosity : {
389
411
/** @type {number } */
390
412
value : 1 ,
@@ -472,6 +494,11 @@ if (typeof PDFJSDev === "undefined" || PDFJSDev.test("TESTING || LIB")) {
472
494
if ( kind & OptionKind . BROWSER ) {
473
495
throw new Error ( `Cannot mix "PREFERENCE" and "BROWSER" kind: ${ name } ` ) ;
474
496
}
497
+ if ( kind & OptionKind . UNDEF_ALLOWED ) {
498
+ throw new Error (
499
+ `Cannot allow \`undefined\` value for "PREFERENCE" kind: ${ name } `
500
+ ) ;
501
+ }
475
502
if ( typeof compatParams === "object" && compatParams . has ( name ) ) {
476
503
throw new Error (
477
504
`Should not have compatibility-value for "PREFERENCE" kind: ${ name } `
@@ -486,6 +513,11 @@ if (typeof PDFJSDev === "undefined" || PDFJSDev.test("TESTING || LIB")) {
486
513
throw new Error ( `Invalid value for "PREFERENCE" kind: ${ name } ` ) ;
487
514
}
488
515
} else if ( kind & OptionKind . BROWSER ) {
516
+ if ( kind & OptionKind . UNDEF_ALLOWED ) {
517
+ throw new Error (
518
+ `Cannot allow \`undefined\` value for "BROWSER" kind: ${ name } `
519
+ ) ;
520
+ }
489
521
if ( typeof compatParams === "object" && compatParams . has ( name ) ) {
490
522
throw new Error (
491
523
`Should not have compatibility-value for "BROWSER" kind: ${ name } `
@@ -514,23 +546,30 @@ class AppOptions {
514
546
static getAll ( kind = null , defaultOnly = false ) {
515
547
const options = Object . create ( null ) ;
516
548
for ( const name in defaultOptions ) {
517
- const defaultOption = defaultOptions [ name ] ;
549
+ const defaultOpt = defaultOptions [ name ] ;
518
550
519
- if ( kind && ! ( kind & defaultOption . kind ) ) {
551
+ if ( kind && ! ( kind & defaultOpt . kind ) ) {
520
552
continue ;
521
553
}
522
554
options [ name ] =
523
555
! defaultOnly && userOptions . has ( name )
524
556
? userOptions . get ( name )
525
- : defaultOption . value ;
557
+ : defaultOpt . value ;
526
558
}
527
559
return options ;
528
560
}
529
561
530
562
static set ( name , value ) {
531
- const defaultOption = defaultOptions [ name ] ;
563
+ const defaultOpt = defaultOptions [ name ] ;
532
564
533
- if ( ! defaultOption || typeof value !== typeof defaultOption . value ) {
565
+ if (
566
+ ! defaultOpt ||
567
+ ! (
568
+ typeof value === typeof defaultOpt . value ||
569
+ ( defaultOpt . kind & OptionKind . UNDEF_ALLOWED &&
570
+ ( value === undefined || defaultOpt . value === undefined ) )
571
+ )
572
+ ) {
534
573
return ;
535
574
}
536
575
userOptions . set ( name , value ) ;
@@ -540,23 +579,30 @@ class AppOptions {
540
579
let events ;
541
580
542
581
for ( const name in options ) {
543
- const defaultOption = defaultOptions [ name ] ,
544
- userOption = options [ name ] ;
582
+ const defaultOpt = defaultOptions [ name ] ,
583
+ userOpt = options [ name ] ;
545
584
546
- if ( ! defaultOption || typeof userOption !== typeof defaultOption . value ) {
585
+ if (
586
+ ! defaultOpt ||
587
+ ! (
588
+ typeof userOpt === typeof defaultOpt . value ||
589
+ ( defaultOpt . kind & OptionKind . UNDEF_ALLOWED &&
590
+ ( userOpt === undefined || defaultOpt . value === undefined ) )
591
+ )
592
+ ) {
547
593
continue ;
548
594
}
549
595
if ( prefs ) {
550
- const { kind } = defaultOption ;
596
+ const { kind } = defaultOpt ;
551
597
552
598
if ( ! ( kind & OptionKind . BROWSER || kind & OptionKind . PREFERENCE ) ) {
553
599
continue ;
554
600
}
555
601
if ( this . eventBus && kind & OptionKind . EVENT_DISPATCH ) {
556
- ( events ||= new Map ( ) ) . set ( name , userOption ) ;
602
+ ( events ||= new Map ( ) ) . set ( name , userOpt ) ;
557
603
}
558
604
}
559
- userOptions . set ( name , userOption ) ;
605
+ userOptions . set ( name , userOpt ) ;
560
606
}
561
607
562
608
if ( events ) {
0 commit comments