summaryrefslogtreecommitdiff
path: root/testing/test_support.cpp
diff options
context:
space:
mode:
authorLei Zhang <thestig@chromium.org>2018-02-08 14:01:32 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-02-08 14:01:32 +0000
commitb0fb8cc23c0ae555726f873101961676f96f6f07 (patch)
tree6ff26ef212fd3d123483866eb4053f19189a6262 /testing/test_support.cpp
parent6183a6e7693b7aeb9763eaa130b43269b13a02d7 (diff)
downloadpdfium-b0fb8cc23c0ae555726f873101961676f96f6f07.tar.xz
[v8-platform] Store the platform in a unique_ptr. (Try 2)
We want to change the signature of {CreateDefaultPlatform} in the V8 API to return a unique_ptr instead of a raw pointer to indicate that the caller owns the platform. With this change we prepare pdfium for this change. In this second attempt, keep the old InitializeV8ForPDFium() method around to complete the Chromium DEPS roll. Once that lands safely, remove it from PDFium. This relands commit 608e8dd6 and commit 3355f459, which commit b3a3eaab reverts. Change-Id: Icc60b17ca202637d34ae242c0785d939194d0fe6 Reviewed-on: https://pdfium-review.googlesource.com/25950 Commit-Queue: dsinclair <dsinclair@chromium.org> Reviewed-by: dsinclair <dsinclair@chromium.org>
Diffstat (limited to 'testing/test_support.cpp')
-rw-r--r--testing/test_support.cpp49
1 files changed, 36 insertions, 13 deletions
diff --git a/testing/test_support.cpp b/testing/test_support.cpp
index b32ec7de96..af7f3d02ad 100644
--- a/testing/test_support.cpp
+++ b/testing/test_support.cpp
@@ -60,17 +60,18 @@ bool GetExternalData(const std::string& exe_path,
}
#endif // V8_USE_EXTERNAL_STARTUP_DATA
-void InitializeV8Common(const char* exe_path, v8::Platform** platform) {
- v8::V8::InitializeICUDefaultLocation(exe_path);
+std::unique_ptr<v8::Platform> InitializeV8Common(const std::string& exe_path) {
+ v8::V8::InitializeICUDefaultLocation(exe_path.c_str());
- *platform = v8::platform::CreateDefaultPlatform();
- v8::V8::InitializePlatform(*platform);
+ std::unique_ptr<v8::Platform> platform = v8::platform::NewDefaultPlatform();
+ v8::V8::InitializePlatform(platform.get());
// By enabling predictable mode, V8 won't post any background tasks.
// By enabling GC, it makes it easier to chase use-after-free.
const char v8_flags[] = "--predictable --expose-gc";
v8::V8::SetFlagsFromString(v8_flags, static_cast<int>(strlen(v8_flags)));
v8::V8::Initialize();
+ return platform;
}
#endif // PDF_ENABLE_V8
@@ -177,26 +178,48 @@ std::string GenerateMD5Base16(const uint8_t* data, uint32_t size) {
#ifdef PDF_ENABLE_V8
#ifdef V8_USE_EXTERNAL_STARTUP_DATA
-bool InitializeV8ForPDFium(const std::string& exe_path,
- const std::string& bin_dir,
- v8::StartupData* natives_blob,
- v8::StartupData* snapshot_blob,
- v8::Platform** platform) {
- InitializeV8Common(exe_path.c_str(), platform);
+std::unique_ptr<v8::Platform> InitializeV8ForPDFiumWithStartupData(
+ const std::string& exe_path,
+ const std::string& bin_dir,
+ v8::StartupData* natives_blob,
+ v8::StartupData* snapshot_blob) {
+ std::unique_ptr<v8::Platform> platform = InitializeV8Common(exe_path);
if (natives_blob && snapshot_blob) {
if (!GetExternalData(exe_path, bin_dir, "natives_blob.bin", natives_blob))
- return false;
+ return nullptr;
if (!GetExternalData(exe_path, bin_dir, "snapshot_blob.bin", snapshot_blob))
- return false;
+ return nullptr;
v8::V8::SetNativesDataBlob(natives_blob);
v8::V8::SetSnapshotDataBlob(snapshot_blob);
}
+ return platform;
+}
+
+bool InitializeV8ForPDFium(const std::string& exe_path,
+ const std::string& bin_dir,
+ v8::StartupData* natives_blob,
+ v8::StartupData* snapshot_blob,
+ v8::Platform** platform) {
+ std::unique_ptr<v8::Platform> new_platform =
+ InitializeV8ForPDFiumWithStartupData(exe_path, bin_dir, natives_blob,
+ snapshot_blob);
+ if (!new_platform)
+ return false;
+ *platform = new_platform.release();
return true;
}
#else // V8_USE_EXTERNAL_STARTUP_DATA
+std::unique_ptr<v8::Platform> InitializeV8ForPDFium(
+ const std::string& exe_path) {
+ return InitializeV8Common(exe_path);
+}
+
bool InitializeV8ForPDFium(const std::string& exe_path,
v8::Platform** platform) {
- InitializeV8Common(exe_path.c_str(), platform);
+ std::unique_ptr<v8::Platform> new_platform = InitializeV8ForPDFium(exe_path);
+ if (!new_platform)
+ return false;
+ *platform = new_platform.release();
return true;
}
#endif // V8_USE_EXTERNAL_STARTUP_DATA