// Copyright 2017 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef THIRD_PARTY_BLINK_RENDERER_MODULES_SERVICE_WORKER_THREAD_SAFE_SCRIPT_CONTAINER_H_ #define THIRD_PARTY_BLINK_RENDERER_MODULES_SERVICE_WORKER_THREAD_SAFE_SCRIPT_CONTAINER_H_ #include <memory> #include <utility> #include "base/synchronization/condition_variable.h" #include "base/synchronization/lock.h" #include "base/thread_annotations.h" #include "third_party/blink/renderer/modules/modules_export.h" #include "third_party/blink/renderer/platform/network/http_header_map.h" #include "third_party/blink/renderer/platform/weborigin/kurl.h" #include "third_party/blink/renderer/platform/weborigin/kurl_hash.h" #include "third_party/blink/renderer/platform/wtf/hash_map.h" #include "third_party/blink/renderer/platform/wtf/text/wtf_string.h" #include "third_party/blink/renderer/platform/wtf/thread_safe_ref_counted.h" #include "third_party/blink/renderer/platform/wtf/vector.h" namespace blink { // ThreadSafeScriptContainer stores the scripts of a service worker for // startup. This container is created for each service worker. The IO thread // adds scripts to the container, and the worker thread takes the scripts. // Note: Due to the above explanations about multi-threads access on this // container, all the non-thread-safe members like KURL and String need to be // deep-copied. // // This class uses explicit synchronization because it needs to support // synchronous importScripts() from the worker thread. // // This class is RefCounted because there is no ordering guarantee of lifetime // of its owners, i.e. ServiceWorkerInstalledScriptsManager and its // Internal class. ServiceWorkerInstalledScriptsManager is destroyed earlier // than Internal if the worker is terminated before all scripts are streamed, // and Internal is destroyed earlier if all of scripts are received before // finishing script evaluation. class MODULES_EXPORT ThreadSafeScriptContainer : public WTF::ThreadSafeRefCounted<ThreadSafeScriptContainer> { … }; } // namespace blink #endif // THIRD_PARTY_BLINK_RENDERER_MODULES_SERVICE_WORKER_THREAD_SAFE_SCRIPT_CONTAINER_H_