summaryrefslogtreecommitdiff
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
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>
-rw-r--r--samples/pdfium_test.cc9
-rw-r--r--testing/embedder_test_main.cpp13
-rw-r--r--testing/test_support.cpp49
-rw-r--r--testing/test_support.h14
4 files changed, 60 insertions, 25 deletions
diff --git a/samples/pdfium_test.cc b/samples/pdfium_test.cc
index b83663db69..ebc7412055 100644
--- a/samples/pdfium_test.cc
+++ b/samples/pdfium_test.cc
@@ -1567,14 +1567,14 @@ int main(int argc, const char* argv[]) {
}
#ifdef PDF_ENABLE_V8
- v8::Platform* platform;
+ std::unique_ptr<v8::Platform> platform;
#ifdef V8_USE_EXTERNAL_STARTUP_DATA
v8::StartupData natives;
v8::StartupData snapshot;
- InitializeV8ForPDFium(options.exe_path, options.bin_directory, &natives,
- &snapshot, &platform);
+ platform = InitializeV8ForPDFiumWithStartupData(
+ options.exe_path, options.bin_directory, &natives, &snapshot);
#else // V8_USE_EXTERNAL_STARTUP_DATA
- InitializeV8ForPDFium(options.exe_path, &platform);
+ platform = InitializeV8ForPDFium(options.exe_path);
#endif // V8_USE_EXTERNAL_STARTUP_DATA
#endif // PDF_ENABLE_V8
@@ -1641,7 +1641,6 @@ int main(int argc, const char* argv[]) {
FPDF_DestroyLibrary();
#ifdef PDF_ENABLE_V8
v8::V8::ShutdownPlatform();
- delete platform;
#ifdef V8_USE_EXTERNAL_STARTUP_DATA
free(const_cast<char*>(natives.data));
diff --git a/testing/embedder_test_main.cpp b/testing/embedder_test_main.cpp
index ade6118e64..0c3ceb60ce 100644
--- a/testing/embedder_test_main.cpp
+++ b/testing/embedder_test_main.cpp
@@ -34,16 +34,16 @@ class Environment : public testing::Environment {
#ifdef PDF_ENABLE_V8
#ifdef V8_USE_EXTERNAL_STARTUP_DATA
if (g_v8_natives && g_v8_snapshot) {
- InitializeV8ForPDFium(g_exe_path, std::string(), nullptr, nullptr,
- &platform_);
+ platform_ = InitializeV8ForPDFiumWithStartupData(
+ g_exe_path, std::string(), nullptr, nullptr);
} else {
g_v8_natives = new v8::StartupData;
g_v8_snapshot = new v8::StartupData;
- InitializeV8ForPDFium(g_exe_path, std::string(), g_v8_natives,
- g_v8_snapshot, &platform_);
+ platform_ = InitializeV8ForPDFiumWithStartupData(
+ g_exe_path, std::string(), g_v8_natives, g_v8_snapshot);
}
#else
- InitializeV8ForPDFium(g_exe_path, &platform_);
+ platform_ = InitializeV8ForPDFium(g_exe_path);
#endif // V8_USE_EXTERNAL_STARTUP_DATA
#endif // FPDF_ENABLE_V8
}
@@ -51,13 +51,12 @@ class Environment : public testing::Environment {
void TearDown() override {
#ifdef PDF_ENABLE_V8
v8::V8::ShutdownPlatform();
- delete platform_;
#endif // PDF_ENABLE_V8
}
private:
#ifdef PDF_ENABLE_V8
- v8::Platform* platform_;
+ std::unique_ptr<v8::Platform> platform_;
#endif // PDF_ENABLE_V8
};
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
diff --git a/testing/test_support.h b/testing/test_support.h
index ec4b4aeacb..00d72b35d1 100644
--- a/testing/test_support.h
+++ b/testing/test_support.h
@@ -91,12 +91,26 @@ class Platform;
namespace v8 {
class StartupData;
}
+
+// |natives_blob| and |snapshot_blob| are optional out parameters. They should
+// either both be valid or both be nullptrs.
+std::unique_ptr<v8::Platform> InitializeV8ForPDFiumWithStartupData(
+ const std::string& exe_path,
+ const std::string& bin_dir,
+ v8::StartupData* natives_blob,
+ v8::StartupData* snapshot_blob);
+
+// TODO(thestig): Remove this in the near future once it has no callers.
bool InitializeV8ForPDFium(const std::string& exe_path,
const std::string& bin_dir,
v8::StartupData* natives_blob,
v8::StartupData* snapshot_blob,
v8::Platform** platform);
#else // V8_USE_EXTERNAL_STARTUP_DATA
+std::unique_ptr<v8::Platform> InitializeV8ForPDFium(
+ const std::string& exe_path);
+
+// TODO(thestig): Remove this in the near future once it has no callers.
bool InitializeV8ForPDFium(const std::string& exe_path,
v8::Platform** platform);
#endif // V8_USE_EXTERNAL_STARTUP_DATA