Browse Source

fcl-base: TServiceWorkerApplication: added virtual methods

mattias 3 years ago
parent
commit
32705d4659
2 changed files with 36 additions and 36 deletions
  1. 8 9
      demo/pwa/ServiceWorker.lpr
  2. 28 27
      packages/fcl-base/serviceworkerapp.pas

+ 8 - 9
demo/pwa/ServiceWorker.lpr

@@ -3,28 +3,26 @@ program ServiceWorker;
 {$mode objfpc}
 {$mode objfpc}
 
 
 uses
 uses
-  JS, Web, Types, ServiceWorkerApp;
+  Classes, ServiceWorkerApp;
 
 
 const
 const
-  YourCacheName = 'v5';
+  YourCacheName = 'v6';
 
 
 type
 type
 
 
   { TApplication }
   { TApplication }
 
 
   TApplication = class(TServiceWorkerApplication)
   TApplication = class(TServiceWorkerApplication)
-  protected
-    procedure DoRun; override;
   public
   public
+    constructor Create(AOwner: TComponent); override;
   end;
   end;
 
 
-var
-  App: TApplication;
-
 { TApplication }
 { TApplication }
 
 
-procedure TApplication.DoRun;
+constructor TApplication.Create(AOwner: TComponent);
 begin
 begin
+  inherited Create(AOwner);
+
   FCacheName:=YourCacheName;
   FCacheName:=YourCacheName;
   FResources:=[
   FResources:=[
     '/index.html',
     '/index.html',
@@ -41,9 +39,10 @@ begin
     '/images/Iota.png',
     '/images/Iota.png',
     '/images/error.png' ];
     '/images/error.png' ];
   FallbackURL := '/images/error.png';
   FallbackURL := '/images/error.png';
-  inherited DoRun;
 end;
 end;
 
 
+var
+  App: TApplication;
 begin
 begin
   App:=TApplication.Create(nil);
   App:=TApplication.Create(nil);
   App.Run;
   App.Run;

+ 28 - 27
packages/fcl-base/serviceworkerapp.pas

@@ -25,9 +25,11 @@ type
     function DeleteOldCaches: jsvalue; async; virtual;
     function DeleteOldCaches: jsvalue; async; virtual;
     procedure SetFallbackURL(const AValue: string); virtual;
     procedure SetFallbackURL(const AValue: string); virtual;
     procedure DoRun; override;
     procedure DoRun; override;
+    procedure Activate(Event: TJSExtendableEvent); virtual;
+    procedure Install(Event: TJSExtendableEvent); virtual;
+    procedure Fetch(FetchEvent: TJSFetchEvent); virtual;
 
 
     function GetConsoleApplication: boolean; override;
     function GetConsoleApplication: boolean; override;
-    function LogGetElementErrors : Boolean; virtual;
     function GetLocation: String; override;
     function GetLocation: String; override;
   public
   public
     procedure GetEnvironmentList(List: TStrings; NamesOnly: Boolean); override;
     procedure GetEnvironmentList(List: TStrings; NamesOnly: Boolean); override;
@@ -126,7 +128,7 @@ begin
   PreloadResponse := await(TJSResponse,PreloadResponsePromise);
   PreloadResponse := await(TJSResponse,PreloadResponsePromise);
   if Assigned(PreloadResponse) then
   if Assigned(PreloadResponse) then
   begin
   begin
-    console.info('using preload response: '+String(JSValue(PreloadResponse)));
+    //console.info('using preload response: '+String(JSValue(PreloadResponse)));
     putInCache(Request, PreloadResponse.clone());
     putInCache(Request, PreloadResponse.clone());
     exit(PreloadResponse);
     exit(PreloadResponse);
   end;
   end;
@@ -185,38 +187,37 @@ end;
 
 
 procedure TServiceWorkerApplication.DoRun;
 procedure TServiceWorkerApplication.DoRun;
 begin
 begin
-  ServiceWorker.addEventListener('activate', procedure(Event: TJSExtendableEvent)
-    begin
-      Event.waitUntil(EnableNavigationPreload());
-      Event.waitUntil(DeleteOldCaches());
-    end);
+  ServiceWorker.addEventListener('activate', @Activate);
+  ServiceWorker.addEventListener('install', @Install);
+  ServiceWorker.addEventListener('fetch', @Fetch);
+end;
 
 
-  ServiceWorker.addEventListener('install', procedure(Event: TJSExtendableEvent)
-    begin
-      Event.waitUntil(
-        Caches.Open(CacheName)._then(
-          TJSPromiseResolver(procedure(Cache: TJSCache)
-          begin
-            Cache.addAll(Resources);
-          end))
-      );
-    end);
+procedure TServiceWorkerApplication.Activate(Event: TJSExtendableEvent);
+begin
+  Event.waitUntil(EnableNavigationPreload());
+  Event.waitUntil(DeleteOldCaches());
+end;
 
 
-  ServiceWorker.addEventListener('fetch', procedure(FetchEvent: TJSFetchEvent)
-    begin
-      FetchEvent.RespondWith(CacheFirst(FetchEvent.request,
-                             FetchEvent.PreloadResponse,FallbackURL) );
-    end);
+procedure TServiceWorkerApplication.Install(Event: TJSExtendableEvent);
+begin
+  Event.waitUntil(
+    Caches.Open(CacheName)._then(
+      TJSPromiseResolver(procedure(Cache: TJSCache)
+      begin
+        Cache.addAll(Resources);
+      end))
+  );
 end;
 end;
 
 
-function TServiceWorkerApplication.GetConsoleApplication: boolean;
+procedure TServiceWorkerApplication.Fetch(FetchEvent: TJSFetchEvent);
 begin
 begin
-  Result:=true;
+  FetchEvent.RespondWith(CacheFirst(FetchEvent.request,
+                         FetchEvent.PreloadResponse,FallbackURL) );
 end;
 end;
 
 
-function TServiceWorkerApplication.LogGetElementErrors: Boolean;
+function TServiceWorkerApplication.GetConsoleApplication: boolean;
 begin
 begin
-  Result:=True;
+  Result:=true;
 end;
 end;
 
 
 function TServiceWorkerApplication.GetLocation: String;
 function TServiceWorkerApplication.GetLocation: String;
@@ -250,7 +251,7 @@ begin
     S:=E.ClassName+': '+E.Message
     S:=E.ClassName+': '+E.Message
   else if ExceptObjectJS then
   else if ExceptObjectJS then
     s:=TJSObject(ExceptObjectJS).toString;
     s:=TJSObject(ExceptObjectJS).toString;
-  window.alert('Unhandled exception caught:'+S);
+  console.log('Unhandled exception caught:'+S);
 end;
 end;
 
 
 procedure TServiceWorkerApplication.HandleException(Sender: TObject);
 procedure TServiceWorkerApplication.HandleException(Sender: TObject);