Index: pdf/pdf.cc |
diff --git a/pdf/pdf.cc b/pdf/pdf.cc |
index 655a13359eefb7420310213430ceed8ab4713730..1f580e4f1532a7d543314d2e3f1f87f0d1851f30 100644 |
--- a/pdf/pdf.cc |
+++ b/pdf/pdf.cc |
@@ -10,21 +10,36 @@ |
#include "base/command_line.h" |
#include "base/logging.h" |
+#include "gin/array_buffer.h" |
+#include "gin/public/isolate_holder.h" |
#include "pdf/out_of_process_instance.h" |
#include "ppapi/c/ppp.h" |
#include "ppapi/cpp/private/internal_module.h" |
#include "ppapi/cpp/private/pdf.h" |
#include "v8/include/v8.h" |
+namespace chrome_pdf { |
+ |
+namespace { |
+ |
bool g_sdk_initialized_via_pepper = false; |
-namespace chrome_pdf { |
+gin::IsolateHolder* g_isolate_holder = nullptr; |
+ |
+void TearDownV8() { |
+ g_isolate_holder->isolate()->Exit(); |
+ delete g_isolate_holder; |
+ g_isolate_holder = nullptr; |
+} |
+ |
+} // namespace |
PDFModule::PDFModule() { |
} |
PDFModule::~PDFModule() { |
if (g_sdk_initialized_via_pepper) { |
+ TearDownV8(); |
chrome_pdf::ShutdownSDK(); |
g_sdk_initialized_via_pepper = false; |
} |
@@ -45,8 +60,15 @@ pp::Instance* PDFModule::CreateInstance(PP_Instance instance) { |
v8::V8::SetNativesDataBlob(&natives); |
v8::V8::SetSnapshotDataBlob(&snapshot); |
} |
- if (!chrome_pdf::InitializeSDK()) |
+ gin::IsolateHolder::Initialize(gin::IsolateHolder::kNonStrictMode, |
+ gin::ArrayBufferAllocator::SharedInstance()); |
+ g_isolate_holder = |
+ new gin::IsolateHolder(gin::IsolateHolder::kSingleThread); |
+ g_isolate_holder->isolate()->Enter(); |
+ if (!chrome_pdf::InitializeSDK()) { |
+ TearDownV8(); |
return NULL; |
+ } |
g_sdk_initialized_via_pepper = true; |
} |