diff options
author | Lei Zhang <thestig@chromium.org> | 2018-02-08 14:01:32 +0000 |
---|---|---|
committer | Chromium commit bot <commit-bot@chromium.org> | 2018-02-08 14:01:32 +0000 |
commit | b0fb8cc23c0ae555726f873101961676f96f6f07 (patch) | |
tree | 6ff26ef212fd3d123483866eb4053f19189a6262 /testing/test_support.cpp | |
parent | 6183a6e7693b7aeb9763eaa130b43269b13a02d7 (diff) | |
download | pdfium-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.cpp | 49 |
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 |