@@ -579,7 +579,8 @@ function onErrorOccurred(details) {
579579}
580580
581581/**
582- * handle webrequest.onHeadersReceived, insert upgrade-insecure-requests directive
582+ * handle webrequest.onHeadersReceived, insert upgrade-insecure-requests directive and
583+ * rewrite access-control-allow-origin if presented in HTTP Nowhere mode
583584 * @param details details for the chrome.webRequest (see chrome doc)
584585 */
585586function onHeadersReceived ( details ) {
@@ -591,27 +592,47 @@ function onHeadersReceived(details) {
591592 return { } ;
592593 }
593594
595+ let responseHeadersChanged = false ;
596+ let cspHeaderFound = false ;
597+
594598 for ( const idx in details . responseHeaders ) {
595599 if ( details . responseHeaders [ idx ] . name . match ( / C o n t e n t - S e c u r i t y - P o l i c y / i) ) {
596600 // Existing CSP headers found
601+ cspHeaderFound = true ;
597602 const value = details . responseHeaders [ idx ] . value ;
598603
599604 // Prepend if no upgrade-insecure-requests directive exists
600605 if ( ! value . match ( / u p g r a d e - i n s e c u r e - r e q u e s t s / i) ) {
601606 details . responseHeaders [ idx ] . value = "upgrade-insecure-requests; " + value ;
602- return { responseHeaders : details . responseHeaders } ;
607+ responseHeadersChanged = true ;
603608 }
604- return { } ;
605609 }
610+
611+ if ( details . responseHeaders [ idx ] . name . match ( / A c c e s s - C o n t r o l - A l l o w - O r i g i n / i) ) {
612+ // Existing access-control-allow-origin header found
613+ const value = details . responseHeaders [ idx ] . value ;
614+
615+ // If HTTP protocol is used, change it to HTTPS
616+ if ( value . match ( / h t t p : / ) ) {
617+ details . responseHeaders [ idx ] . value = value . replace ( / h t t p : / g, "https:" ) ;
618+ responseHeadersChanged = true ;
619+ }
620+ }
621+ }
622+
623+ if ( ! cspHeaderFound ) {
624+ // CSP headers not found
625+ const upgradeInsecureRequests = {
626+ name : 'Content-Security-Policy' ,
627+ value : 'upgrade-insecure-requests'
628+ }
629+ details . responseHeaders . push ( upgradeInsecureRequests ) ;
630+ responseHeadersChanged = true ;
606631 }
607632
608- // CSP headers not found
609- const upgradeInsecureRequests = {
610- name : 'Content-Security-Policy' ,
611- value : 'upgrade-insecure-requests'
633+ if ( responseHeadersChanged ) {
634+ return { responseHeaders : details . responseHeaders } ;
612635 }
613- details . responseHeaders . push ( upgradeInsecureRequests ) ;
614- return { responseHeaders : details . responseHeaders } ;
615636 }
616637 return { } ;
617638}
0 commit comments