@@ -72,6 +72,7 @@ define(['./impl/PersistenceXMLHttpRequest', './impl/PersistenceSyncManager', './
72
72
* });
73
73
*/
74
74
PersistenceManager . prototype . init = function ( ) {
75
+ logger . log ( "Offline Persistence Toolkit PersistenceManager: Initilizing" ) ;
75
76
_replaceBrowserApis ( this ) ;
76
77
_addBrowserEventListeners ( this ) ;
77
78
_openOfflineCache ( this ) ;
@@ -301,6 +302,7 @@ define(['./impl/PersistenceXMLHttpRequest', './impl/PersistenceSyncManager', './
301
302
logger . log ( "Offline Persistence Toolkit PersistenceManager: browserFetch() for Request with url: " + request . url ) ;
302
303
// only do special processing in browser context. In service worker context
303
304
// just call regular fetch.
305
+ var requestObj = request
304
306
if ( _isBrowserContext ( ) ) {
305
307
// store the last Request object on the PersistenceManager so that we
306
308
// can detect if a fetch polyfill is causing a XHR request to our
@@ -312,9 +314,9 @@ define(['./impl/PersistenceXMLHttpRequest', './impl/PersistenceSyncManager', './
312
314
return new Promise ( function ( resolve , reject ) {
313
315
logger . log ( "Offline Persistence Toolkit PersistenceManager: Calling browser fetch function for Request with url: " + request . url ) ;
314
316
if ( request . _browserRequest ) {
315
- request = request . _browserRequest ;
317
+ requestObj = request . _browserRequest ;
316
318
}
317
- self . _browserFetchFunc . call ( window , request ) . then ( function ( response ) {
319
+ self . _browserFetchFunc . call ( window , requestObj ) . then ( function ( response ) {
318
320
resolve ( response ) ;
319
321
} , function ( error ) {
320
322
reject ( error ) ;
@@ -323,9 +325,9 @@ define(['./impl/PersistenceXMLHttpRequest', './impl/PersistenceSyncManager', './
323
325
} ) ;
324
326
} else {
325
327
if ( request . _browserRequest ) {
326
- request = request . _browserRequest ;
328
+ requestObj = request . _browserRequest ;
327
329
}
328
- return fetch ( request ) ;
330
+ return fetch ( requestObj ) ;
329
331
}
330
332
} ;
331
333
@@ -407,6 +409,7 @@ define(['./impl/PersistenceXMLHttpRequest', './impl/PersistenceSyncManager', './
407
409
// also add listeners for browser online
408
410
// Don't do it for Service Workers
409
411
if ( _isSafari ( ) ) {
412
+ logger . log ( "Offline Persistence Toolkit PersistenceManager: Replacing Safari Browser APIs" ) ;
410
413
// using self to refer to both the "window" and the "self" context
411
414
// of serviceworker
412
415
Object . defineProperty ( persistenceManager , '_browserRequestConstructor' , {
@@ -667,9 +670,45 @@ define(['./impl/PersistenceXMLHttpRequest', './impl/PersistenceSyncManager', './
667
670
function persistenceRequest ( persistenceManager ) {
668
671
function PersistenceRequest ( input , init ) {
669
672
var self = this ;
670
- this . _browserRequest = new persistenceManager . _browserRequestConstructor ( input , init ) ;
671
- this . _input = input ;
672
- this . _init = init ;
673
+
674
+ // create two variables to house the input and init vars
675
+ var requestInput = input ;
676
+ var requestInit = init ;
677
+ logger . log ( "Offline Persistence Toolkit persistenceRequest: Create New Request" ) ;
678
+ // Check if the input is a Request object
679
+ if ( input . _input ) {
680
+ logger . log ( "Offline Persistence Toolkit persistenceRequest: Input is a PersistenceRequest" ) ;
681
+ // we replace the user inputs with a copy of the previous request object's input and init vars
682
+ requestInput = input . _input ;
683
+ requestInit = Object . assign ( { } , input . _init ) ;
684
+ // if there are any init's for for this request, then those must also be carried over to
685
+ // the requestInit overwriting any previous entries
686
+ for ( var key in init ) {
687
+ if ( init . hasOwnProperty ( key ) ) {
688
+ requestInit [ key ] = init [ key ] ;
689
+ }
690
+ }
691
+ // the headers and body must be checked for formData instance
692
+ // if it has both exist, then the headers.get("Content-Type") must be replace
693
+ // to preserve formData Boundary
694
+ if ( input . headers &&
695
+ requestInit &&
696
+ requestInit . body &&
697
+ requestInit . body instanceof FormData ) {
698
+ // check to see if the header exist before adding, if it does only replace content-type
699
+ if ( requestInit . headers ) {
700
+ var contentType = input . headers . get ( "Content-Type" )
701
+ requestInit . headers . set ( "Content-Type" , contentType ) ;
702
+ } else {
703
+ // else replace whole header
704
+ requestInit . headers = input . headers ;
705
+ }
706
+ }
707
+ }
708
+
709
+ this . _browserRequest = new persistenceManager . _browserRequestConstructor ( requestInput , requestInit ) ;
710
+ this . _input = requestInput ;
711
+ this . _init = requestInit ;
673
712
var requestDefineProperty = function ( requestProperty ) {
674
713
var propDescriptors = Object . getOwnPropertyDescriptor ( self . _browserRequest , requestProperty ) ;
675
714
@@ -710,108 +749,126 @@ define(['./impl/PersistenceXMLHttpRequest', './impl/PersistenceSyncManager', './
710
749
}
711
750
712
751
this . arrayBuffer = function ( ) {
752
+ logger . log ( "Offline Persistence Toolkit persistenceRequest: Called arrayBuffer()" ) ;
753
+ var self = this ;
713
754
try {
714
- if ( this . _init &&
715
- this . _init . body ) {
716
- if ( ! ( this . _init . body instanceof FormData ) ) {
717
- return this . _browserRequest . arrayBuffer ( ) ;
755
+ if ( self . _init &&
756
+ self . _init . body ) {
757
+ if ( ! ( self . _init . body instanceof FormData ) ) {
758
+ return self . _browserRequest . arrayBuffer ( ) ;
718
759
} else {
719
- return _formDataToString ( this . _init . body , this . _boundary ) . then ( function ( formDataText ) {
760
+ return _formDataToString ( self . _init . body , self . _boundary ) . then ( function ( formDataText ) {
720
761
var formDataArrayBuffer = _strToArrayBuffer ( formDataText ) ;
721
762
return formDataArrayBuffer ;
722
763
} )
723
764
}
724
765
}
725
- return this . _browserRequest . arrayBuffer ( ) ;
766
+ return self . _browserRequest . arrayBuffer ( ) ;
726
767
} catch ( e ) {
727
768
return Promise . reject ( e ) ;
728
769
}
729
770
}
730
771
731
772
this . blob = function ( ) {
773
+ logger . log ( "Offline Persistence Toolkit persistenceRequest: Called blob()" ) ;
774
+ var self = this ;
732
775
try {
733
- if ( this . _init &&
734
- this . _init . body ) {
735
- if ( ! ( this . _init . body instanceof FormData ) ) {
736
- return this . _browserRequest . blob ( ) ;
776
+ if ( self . _init &&
777
+ self . _init . body ) {
778
+ if ( ! ( self . _init . body instanceof FormData ) ) {
779
+ return self . _browserRequest . blob ( ) ;
737
780
} else {
738
- return _formDataToString ( this . _init . body , this . _boundary ) . then ( function ( formDataText ) {
781
+ return _formDataToString ( self . _init . body , self . _boundary ) . then ( function ( formDataText ) {
739
782
var formDataBlob = new Blob ( [ formDataText ] ,
740
- { type : this . headers . get ( "Content-Type" ) } ) ;
783
+ { type : self . headers . get ( "Content-Type" ) } ) ;
741
784
return formDataBlob ;
742
785
} )
743
786
}
744
787
}
745
- return this . _browserRequest . blob ( ) ;
788
+ return self . _browserRequest . blob ( ) ;
746
789
} catch ( e ) {
747
790
return Promise . reject ( e ) ;
748
791
}
749
792
}
750
793
751
794
this . formData = function ( ) {
795
+ logger . log ( "Offline Persistence Toolkit persistenceRequest: Called formData()" ) ;
796
+ var self = this ;
752
797
try {
753
- if ( this . _init &&
754
- this . _init . body ) {
755
- if ( ! ( this . _init . body instanceof FormData ) ) {
756
- return this . _browserRequest . formData ( ) ;
798
+ if ( self . _init &&
799
+ self . _init . body ) {
800
+ if ( ! ( self . _init . body instanceof FormData ) ) {
801
+ return self . _browserRequest . formData ( ) ;
757
802
} else {
758
- return Promise . resolve ( this . _init . body ) ;
803
+ return Promise . resolve ( self . _init . body ) ;
759
804
}
760
805
}
761
- return this . _browserRequest . formData ( ) ;
806
+ return self . _browserRequest . formData ( ) ;
762
807
} catch ( e ) {
763
808
return Promise . reject ( e ) ;
764
809
}
765
810
}
766
811
767
812
this . json = function ( ) {
813
+ logger . log ( "Offline Persistence Toolkit persistenceRequest: Called json()" ) ;
814
+ var self = this ;
768
815
try {
769
- if ( this . _init &&
770
- this . _init . body ) {
771
- if ( ! ( this . _init . body instanceof FormData ) ) {
772
- return this . _browserRequest . json ( ) ;
816
+ if ( self . _init &&
817
+ self . _init . body ) {
818
+ if ( ! ( self . _init . body instanceof FormData ) ) {
819
+ return self . _browserRequest . json ( ) ;
773
820
} else {
774
821
return Promise . reject ( new SyntaxError ( "Unexpected number in JSON at position 1" ) ) ;
775
822
}
776
823
}
777
- return this . _browserRequest . json ( ) ;
824
+ return self . _browserRequest . json ( ) ;
778
825
} catch ( e ) {
779
826
return Promise . reject ( e ) ;
780
827
}
781
828
}
782
829
783
830
this . text = function ( ) {
831
+ logger . log ( "Offline Persistence Toolkit persistenceRequest: Called text()" ) ;
832
+ var self = this ;
784
833
try {
785
- if ( this . _init &&
786
- this . _init . body ) {
787
- if ( ! ( this . _init . body instanceof FormData ) ) {
788
- return this . _browserRequest . text ( ) ;
834
+ if ( self . _init &&
835
+ self . _init . body ) {
836
+ if ( ! ( self . _init . body instanceof FormData ) ) {
837
+ return self . _browserRequest . text ( ) ;
789
838
} else {
790
- return _formDataToString ( this . _init . body , this . _boundary ) ;
839
+ return _formDataToString ( self . _init . body , self . _boundary ) ;
791
840
}
792
841
}
793
- return this . _browserRequest . text ( ) ;
842
+ return self . _browserRequest . text ( ) ;
794
843
} catch ( e ) {
795
844
return Promise . reject ( e ) ;
796
845
}
797
846
}
798
847
799
848
this . clone = function ( ) {
800
- if ( this . headers &&
801
- this . _init &&
802
- this . _init . body &&
803
- this . _init . body instanceof FormData ) {
804
- this . _init . headers = this . headers ;
849
+ logger . log ( "Offline Persistence Toolkit persistenceRequest: Called clone()" ) ;
850
+ var self = this ;
851
+ if ( self . headers &&
852
+ self . _init &&
853
+ self . _init . body &&
854
+ self . _init . body instanceof FormData ) {
855
+ self . _init . headers = self . headers ;
805
856
}
806
- var clonedRequest = new PersistenceRequest ( this . _input , this . _init ) ;
807
- clonedRequest . _browserRequest = this . _browserRequest . clone ( ) ;
857
+ var clonedRequest = new PersistenceRequest ( self . _input , self . _init ) ;
858
+ clonedRequest . _browserRequest = self . _browserRequest . clone ( ) ;
808
859
return clonedRequest ;
809
860
}
861
+ this . toString = function ( ) {
862
+ logger . log ( "Offline Persistence Toolkit persistenceRequest:requestToString()" ) ;
863
+ if ( this . _input . url ) {
864
+ return this . _input . url ;
865
+ } else {
866
+ return this . _input ;
867
+ }
868
+ }
810
869
} ;
811
-
812
870
return PersistenceRequest ;
813
871
} ;
814
-
815
872
// this is the minimal wrapper version of fetch which we replace the serviceworker
816
873
// version with. We only do this in Safari's serviceworker context to unwrap our
817
874
// wrapped requests so that there are no need to call request._browserRequest
@@ -874,6 +931,7 @@ define(['./impl/PersistenceXMLHttpRequest', './impl/PersistenceSyncManager', './
874
931
} else {
875
932
request = new Request ( input , init ) ;
876
933
}
934
+ logger . log ( "Offline Persistence Toolkit serviceWorkerFetch:" + request . url ) ;
877
935
if ( request . _browserRequest ) {
878
936
request = request . _browserRequest ;
879
937
}
0 commit comments