Fix build of pdfium_embeddertest under V8_USE_EXTERNAL_STARTUP_DATA.

Currently, this is a difference between the standalone pdfium environment
vs. pdfium as part of a chromium checkout.

Locating the external data files is a nusiance when you don't have the
binary's argv[0] line, so we create a new main that preserves this for
us.

R=thestig@chromium.org

Review URL: https://codereview.chromium.org/851283006
diff --git a/pdfium.gyp b/pdfium.gyp
index 2125852..d287181 100644
--- a/pdfium.gyp
+++ b/pdfium.gyp
@@ -831,7 +831,6 @@
       'target_name': 'pdfium_embeddertests',
       'type': 'executable',
       'dependencies': [
-        '<(DEPTH)/testing/gtest.gyp:gtest_main',
         '<(DEPTH)/testing/gtest.gyp:gtest',
         'pdfium',
       ],
diff --git a/testing/embedder_test.cpp b/testing/embedder_test.cpp
index 74d4f25..88cce00 100644
--- a/testing/embedder_test.cpp
+++ b/testing/embedder_test.cpp
@@ -29,6 +29,8 @@
 
 namespace {
 
+const char* g_exe_path_ = nullptr;
+
 // Reads the entire contents of a file into a newly malloc'd buffer.
 static char* GetFileContents(const char* filename, size_t* retlen) {
   FILE* file = fopen(filename, "rb");
@@ -60,18 +62,13 @@
 #ifdef V8_USE_EXTERNAL_STARTUP_DATA
 // Returns the full path for an external V8 data file based on either
 // the currect exectuable path or an explicit override.
-static std::string GetFullPathForSnapshotFile(const Options& options,
+static std::string GetFullPathForSnapshotFile(const std::string& exe_path,
                                               const std::string& filename) {
   std::string result;
-  if (!options.bin_directory.empty()) {
-    result = options.bin_directory;
-    if (*options.bin_directory.rbegin() != PATH_SEPARATOR) {
-      result += PATH_SEPARATOR;
-    }
-  } else if (!options.exe_path.empty()) {
-    size_t last_separator = options.exe_path.rfind(PATH_SEPARATOR);
+  if (!exe_path.empty()) {
+    size_t last_separator = exe_path.rfind(PATH_SEPARATOR);
     if (last_separator != std::string::npos)  {
-      result = options.exe_path.substr(0, last_separator + 1);
+      result = exe_path.substr(0, last_separator + 1);
     }
   }
   result += filename;
@@ -80,10 +77,10 @@
 
 // Reads an extenal V8 data file from the |options|-indicated location,
 // returing true on success and false on error.
-static bool GetExternalData(const Options& options,
-                            const std::string& bin_filename,
+static bool GetExternalData(const std::string& exe_path,
+                            const std::string& filename,
                             v8::StartupData* result_data) {
-  std::string full_path = GetFullPathForSnapshotFile(options, bin_filename);
+  std::string full_path = GetFullPathForSnapshotFile(exe_path, filename);
   size_t data_length = 0;
   char* data_buffer = GetFileContents(full_path.c_str(), &data_length);
   if (!data_buffer) {
@@ -177,10 +174,10 @@
     v8::V8::InitializeICU();
 
 #ifdef V8_USE_EXTERNAL_STARTUP_DATA
-    ASSERT_TRUE(GetExternalData(options, "natives_blob.bin", &natives_));
-    ASSERT_TRUE(GetExternalData(options, "snapshot_blob.bin", &snapshot_));
-    v8::V8::SetNativesDataBlob(&natives);
-    v8::V8::SetSnapshotDataBlob(&snapshot);
+    ASSERT_TRUE(GetExternalData(g_exe_path_, "natives_blob.bin", &natives_));
+    ASSERT_TRUE(GetExternalData(g_exe_path_, "snapshot_blob.bin", &snapshot_));
+    v8::V8::SetNativesDataBlob(&natives_);
+    v8::V8::SetSnapshotDataBlob(&snapshot_);
 #endif  // V8_USE_EXTERNAL_STARTUP_DATA
 
     FPDF_InitLibrary();
@@ -304,3 +301,11 @@
   FORM_OnBeforeClosePage(page, form);
   FPDF_ClosePage(page);
 }
+
+// Can't use gtest-provided main since we need to stash the path to the
+// executable in order to find the external V8 binary data files.
+int main(int argc, char** argv) {
+  g_exe_path_ = argv[0];
+  testing::InitGoogleTest(&argc, argv);
+  return RUN_ALL_TESTS();
+}