Browse Source

* Add functions to determine script type

Michael Van Canneyt 4 months ago
parent
commit
7137a54cf2
1 changed files with 36 additions and 0 deletions
  1. 36 0
      packages/rtl/src/weborworker.pas

+ 36 - 0
packages/rtl/src/weborworker.pas

@@ -1821,6 +1821,12 @@ type
     property port2 : TJSMessagePort read FPort2;
   end;
 
+  TJSScriptContext = (jscUnknown,jscMainBrowserThread,jscWebWorker,jscServiceWorker);
+
+function isMainBrowserThread: boolean;
+function isWebWorker : boolean;
+function IsServiceWorker :boolean;
+function GetScriptContext : TJSScriptContext;
 
 var
   Console : TJSConsole; external name 'console';
@@ -1835,7 +1841,37 @@ var
   function fetch(resource: TJSObject; init: TJSObject): TJSPromise; overload; external name 'fetch';
   function fetch(resource: TJSObject): TJSPromise; overload; external name 'fetch';
 
+
 implementation
 
+function GetScriptContext : TJSScriptContext;
+begin
+  Result:=jscUnknown;
+  if isMainBrowserThread then
+    exit(jscMainBrowserThread);
+  if isWebWorker then
+    exit(jscWebWorker);
+  if IsServiceWorker then
+    exit(jscServiceWorker);
+end;
+
+function isMainBrowserThread: boolean; assembler;
+ asm
+   return (typeof window !== "undefined");
+ end;
+
+function isWebWorker : boolean; assembler;
+
+asm
+  return (typeof DedicatedWorkerGlobalScope !== 'undefined') &&
+         (self instanceof DedicatedWorkerGlobalScope);
+end;
+
+function IsServiceWorker :boolean; assembler;
+
+asm
+  Return (typeof ServiceWorkerGlobalScope !== 'undefined') && (self instanceof ServiceWorkerGlobalScope);
+end;
+
 end.