| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CONTENT_RENDERER_LOADER_CODE_CACHE_LOADER_IMPL_H_ |
| #define CONTENT_RENDERER_LOADER_CODE_CACHE_LOADER_IMPL_H_ |
| |
| #include "base/memory/weak_ptr.h" |
| #include "base/synchronization/waitable_event.h" |
| #include "base/synchronization/waitable_event_watcher.h" |
| #include "third_party/blink/public/platform/code_cache_loader.h" |
| #include "url/gurl.h" |
| |
| namespace content { |
| |
| // This class is loading V8 compilation code cache for scripts |
| // (either separate script resources, or inline scripts in html file). |
| // It is talking to the browser process and uses per-site isolated |
| // cache backend to avoid cross-origin contamination. |
| class CodeCacheLoaderImpl : public blink::CodeCacheLoader { |
| public: |
| CodeCacheLoaderImpl(); |
| explicit CodeCacheLoaderImpl(base::WaitableEvent* terminate_sync_load_event); |
| |
| ~CodeCacheLoaderImpl() override; |
| |
| // Fetches code cache corresponding to |url| and returns response in |
| // |response_time_out| and |data_out|. |response_time_out| and |data_out| |
| // cannot be nullptrs. This only fetches from the Javascript cache. |
| void FetchFromCodeCacheSynchronously(const GURL& url, |
| base::Time* response_time_out, |
| std::vector<uint8_t>* data_out) override; |
| |
| void FetchFromCodeCache(blink::mojom::CodeCacheType cache_type, |
| const GURL& url, |
| FetchCodeCacheCallback callback) override; |
| |
| private: |
| void FetchFromCodeCacheImpl(blink::mojom::CodeCacheType cache_type, |
| const GURL& url, |
| FetchCodeCacheCallback callback, |
| base::WaitableEvent* event); |
| |
| void OnReceiveCachedCode(FetchCodeCacheCallback callback, |
| base::WaitableEvent* event, |
| base::Time response_time, |
| const std::vector<uint8_t>& data); |
| void ReceiveDataForSynchronousFetch(const base::Time& response_time, |
| const std::vector<uint8_t>& data); |
| void OnTerminate(base::WaitableEvent* fetch_event, |
| base::WaitableEvent* terminate_event); |
| |
| base::Time response_time_for_sync_load_; |
| std::vector<uint8_t> data_for_sync_load_; |
| bool terminated_ = false; |
| base::WaitableEventWatcher terminate_watcher_; |
| base::WaitableEvent* terminate_sync_load_event_ = nullptr; |
| base::WeakPtrFactory<CodeCacheLoaderImpl> weak_ptr_factory_; |
| }; |
| |
| } // namespace content |
| |
| #endif |