Index: third_party/WebKit/Source/platform/bindings/V8PerIsolateData.h |
diff --git a/third_party/WebKit/Source/platform/bindings/V8PerIsolateData.h b/third_party/WebKit/Source/platform/bindings/V8PerIsolateData.h |
index 8af0f25c01ae503b222213bf66bf7fabf2d31bc4..2e52788a19eca743f453b095e2c51f8235c2c404 100644 |
--- a/third_party/WebKit/Source/platform/bindings/V8PerIsolateData.h |
+++ b/third_party/WebKit/Source/platform/bindings/V8PerIsolateData.h |
@@ -60,6 +60,12 @@ class PLATFORM_EXPORT V8PerIsolateData { |
WTF_MAKE_NONCOPYABLE(V8PerIsolateData); |
public: |
+ enum class V8ContextSnapshotMode { |
+ kTakeSnapshot, |
+ kDontUseSnapshot, |
+ kUseSnapshot, |
+ }; |
+ |
class EndOfScopeTask { |
USING_FAST_MALLOC(EndOfScopeTask); |
@@ -101,7 +107,9 @@ class PLATFORM_EXPORT V8PerIsolateData { |
virtual ~Data() = default; |
}; |
- static v8::Isolate* Initialize(WebTaskRunner*); |
+ static v8::Isolate* Initialize(WebTaskRunner*, |
+ intptr_t* refernce_table, |
+ V8ContextSnapshotMode); |
static V8PerIsolateData* From(v8::Isolate* isolate) { |
DCHECK(isolate); |
@@ -144,6 +152,17 @@ class PLATFORM_EXPORT V8PerIsolateData { |
const void* key, |
v8::Local<v8::FunctionTemplate>); |
+ // When v8::SnapshotCreator::CreateBlob() is called, we must not have |
+ // persistent handles in Blink. This method clears them. |
+ void ClearPersistentsForV8ContextSnapshot(); |
+ |
+ v8::SnapshotCreator* GetSnapshotCreator() const { |
+ return isolate_holder_.snapshot_creator(); |
+ } |
+ V8ContextSnapshotMode GetV8ContextSnapshotMode() const { |
+ return v8_context_snapshot_mode_; |
+ } |
+ |
// Accessor to the cache of cross-origin accessible operation's templates. |
// Created templates get automatically cached. |
v8::Local<v8::FunctionTemplate> FindOrCreateOperationTemplate( |
@@ -224,11 +243,14 @@ class PLATFORM_EXPORT V8PerIsolateData { |
} |
private: |
- explicit V8PerIsolateData(WebTaskRunner*); |
+ V8PerIsolateData(WebTaskRunner*, |
+ intptr_t* reference_table, |
+ V8ContextSnapshotMode); |
+ explicit V8PerIsolateData(intptr_t* reference_table); |
~V8PerIsolateData(); |
- typedef HashMap<const void*, v8::Eternal<v8::FunctionTemplate>> |
- V8FunctionTemplateMap; |
+ using V8FunctionTemplateMap = |
+ HashMap<const void*, v8::Eternal<v8::FunctionTemplate>>; |
V8FunctionTemplateMap& SelectInterfaceTemplateMap(const DOMWrapperWorld&); |
V8FunctionTemplateMap& SelectOperationTemplateMap(const DOMWrapperWorld&); |
bool HasInstance(const WrapperTypeInfo* untrusted, |
@@ -238,12 +260,16 @@ class PLATFORM_EXPORT V8PerIsolateData { |
v8::Local<v8::Value>, |
V8FunctionTemplateMap&); |
+ V8ContextSnapshotMode v8_context_snapshot_mode_; |
+ // This isolate_holder_ must be initialized before initializing some other |
+ // members below. |
gin::IsolateHolder isolate_holder_; |
- // m_interfaceTemplateMapFor{,Non}MainWorld holds function templates for |
+ // interface_template_map_for_{,non_}main_world holds function templates for |
// the inerface objects. |
V8FunctionTemplateMap interface_template_map_for_main_world_; |
V8FunctionTemplateMap interface_template_map_for_non_main_world_; |
+ |
// m_operationTemplateMapFor{,Non}MainWorld holds function templates for |
// the cross-origin accessible DOM operations. |
V8FunctionTemplateMap operation_template_map_for_main_world_; |
@@ -252,6 +278,16 @@ class PLATFORM_EXPORT V8PerIsolateData { |
// Contains lists of eternal names, such as dictionary keys. |
HashMap<const void*, Vector<v8::Eternal<v8::Name>>> eternal_name_cache_; |
+ // Members required for the V8 context snapshot. |
+ // v8::Context is created from this blob data image. This needs to be |
+ // instantiated before |isolate_holder_| gets instantiated. |
+ v8::StartupData startup_data_; |
+ // When taking a V8 context snapshot, we can't keep V8 objects with eternal |
+ // handles. So we use a special interface map that doesn't use eternal handles |
+ // instead of the default V8FunctionTemplateMap. |
+ V8GlobalValueMap<const WrapperTypeInfo*, v8::FunctionTemplate, v8::kNotWeak> |
+ interface_template_map_for_v8_context_snapshot_; |
+ |
std::unique_ptr<StringCache> string_cache_; |
std::unique_ptr<V8PrivateProperty> private_property_; |
RefPtr<ScriptState> script_regexp_script_state_; |