@@ -366,7 +366,7 @@ describe('Background', () => {
366366 expect ( mockTrackRequest ) . toHaveBeenCalledWith ( 'mangalib' ) ;
367367 } ) ;
368368
369- it ( 'Calls recordRequest for non-extension service request' , async ( ) => {
369+ it ( 'Does not track non-extension service request' , async ( ) => {
370370 const details = {
371371 tabId : 1 ,
372372 frameId : 0 ,
@@ -376,8 +376,98 @@ describe('Background', () => {
376376 ] ,
377377 } ;
378378 await capturedBeforeSendHeadersCb ( details ) ;
379- expect ( globalThis . globalRateLimiter . recordRequest ) . toHaveBeenCalledWith ( 'mangalib' ) ;
380- } )
379+ expect ( globalThis . globalRateLimiter . recordRequest ) . not . toHaveBeenCalled ( ) ;
380+ expect ( mockTrackRequest ) . not . toHaveBeenCalled ( ) ;
381+ } ) ;
382+
383+ it ( 'Detects service by X-DL-Service header' , async ( ) => {
384+ await capturedBeforeSendHeadersCb ( {
385+ tabId : - 1 ,
386+ frameId : 0 ,
387+ url : 'https://api.cdnlibs.org/api/manga/slug' ,
388+ requestHeaders : [
389+ { name : 'X-DL-Service' , value : 'ranobelib' } ,
390+ ] ,
391+ } ) ;
392+ expect ( mockTrackRequest ) . toHaveBeenCalledWith ( 'ranobelib' ) ;
393+ } ) ;
394+
395+ it ( 'Detects mangalib by X-DL-Service header' , async ( ) => {
396+ await capturedBeforeSendHeadersCb ( {
397+ tabId : - 1 ,
398+ frameId : 0 ,
399+ url : 'https://api.cdnlibs.org/api/manga/slug' ,
400+ requestHeaders : [
401+ { name : 'X-DL-Service' , value : 'mangalib' } ,
402+ { name : 'Site-Id' , value : '3' } ,
403+ ] ,
404+ } ) ;
405+ expect ( mockTrackRequest ) . toHaveBeenCalledWith ( 'mangalib' ) ;
406+ } ) ;
407+
408+ it ( 'Detects service by Site-Id header' , async ( ) => {
409+ await capturedBeforeSendHeadersCb ( {
410+ tabId : - 1 ,
411+ frameId : 0 ,
412+ url : 'https://api.cdnlibs.org/api/manga/slug' ,
413+ requestHeaders : [
414+ { name : 'Site-Id' , value : '1' } ,
415+ ] ,
416+ } ) ;
417+ expect ( mockTrackRequest ) . toHaveBeenCalledWith ( 'mangalib' ) ;
418+ } ) ;
419+
420+ it ( 'Detects ranobelib by Site-Id 3 when service header value is empty' , async ( ) => {
421+ await capturedBeforeSendHeadersCb ( {
422+ tabId : - 1 ,
423+ frameId : 0 ,
424+ url : 'https://api.cdnlibs.org/api/manga/slug' ,
425+ requestHeaders : [
426+ { name : 'X-DL-Service' , value : undefined } ,
427+ { name : 'Site-Id' , value : '3' } ,
428+ ] ,
429+ } ) ;
430+ expect ( mockTrackRequest ) . toHaveBeenCalledWith ( 'ranobelib' ) ;
431+ } ) ;
432+
433+ it ( 'Falls back from unknown service header to Site-Id mapping' , async ( ) => {
434+ await capturedBeforeSendHeadersCb ( {
435+ tabId : - 1 ,
436+ frameId : 0 ,
437+ url : 'https://api.cdnlibs.org/api/manga/slug' ,
438+ requestHeaders : [
439+ { name : 'X-DL-Service' , value : 'unknown-service' } ,
440+ { name : 'Site-Id' , value : '1' } ,
441+ ] ,
442+ } ) ;
443+ expect ( mockTrackRequest ) . toHaveBeenCalledWith ( 'mangalib' ) ;
444+ } ) ;
445+
446+ it ( 'Falls back from unknown Site-Id to referer mapping' , async ( ) => {
447+ await capturedBeforeSendHeadersCb ( {
448+ tabId : - 1 ,
449+ frameId : 0 ,
450+ url : 'https://api.cdnlibs.org/api/manga/slug' ,
451+ requestHeaders : [
452+ { name : 'Site-Id' , value : '2' } ,
453+ { name : 'Referer' , value : 'https://ranobelib.me/title' } ,
454+ ] ,
455+ } ) ;
456+ expect ( mockTrackRequest ) . toHaveBeenCalledWith ( 'ranobelib' ) ;
457+ } ) ;
458+
459+ it ( 'Falls back from empty Site-Id value to referer mapping' , async ( ) => {
460+ await capturedBeforeSendHeadersCb ( {
461+ tabId : - 1 ,
462+ frameId : 0 ,
463+ url : 'https://api.cdnlibs.org/api/manga/slug' ,
464+ requestHeaders : [
465+ { name : 'Site-Id' , value : undefined } ,
466+ { name : 'Referer' , value : 'https://mangalib.me/title' } ,
467+ ] ,
468+ } ) ;
469+ expect ( mockTrackRequest ) . toHaveBeenCalledWith ( 'mangalib' ) ;
470+ } ) ;
381471 } ) ;
382472
383473 describe ( 'Chrome mode' , ( ) => {
0 commit comments