Merge to XFA: Plumb in an externally created v8::Isolate

Origin Review URL:
- https://codereview.chromium.org/1234053003
- https://codereview.chromium.org/1241863004
- https://codereview.chromium.org/1235303003

R=tsepez@chromium.org
BUG=

Review URL: https://codereview.chromium.org/1263963002 .
diff --git a/fpdfsdk/src/javascript/JS_Runtime.cpp b/fpdfsdk/src/javascript/JS_Runtime.cpp
index 346b642..d68b268 100644
--- a/fpdfsdk/src/javascript/JS_Runtime.cpp
+++ b/fpdfsdk/src/javascript/JS_Runtime.cpp
@@ -37,7 +37,11 @@
 {
 	if (!m_bInit)
 	{
-		JS_Initial();
+		unsigned int embedderDataSlot = 0;
+		if (pApp->GetFormFillInfo()->m_pJsPlatform->version >= 2) {
+			embedderDataSlot = pApp->GetFormFillInfo()->m_pJsPlatform->m_v8EmbedderSlot;
+                }
+		JS_Initial(embedderDataSlot);
 		m_bInit = TRUE;
 	}
 	return new CJS_Runtime(pApp);
@@ -107,16 +111,22 @@
 	m_pApp(pApp),
 	m_pDocument(NULL),
 	m_bBlocking(FALSE),
-	m_pFieldEventPath(NULL)
+	m_pFieldEventPath(NULL),
+        m_isolate(NULL)
 {
 	if (CPDFXFA_App::GetInstance()->GetJSERuntime()) {
+		// TODO(tsepez): CPDFXFA_App should also use the embedder provided isolate.
 		m_isolate = (v8::Isolate*)CPDFXFA_App::GetInstance()->GetJSERuntime();
-	} else {
+	} else if (m_pApp->GetFormFillInfo()->m_pJsPlatform->version >= 2) {
+		m_isolate = reinterpret_cast<v8::Isolate*>(m_pApp->GetFormFillInfo()->m_pJsPlatform->m_isolate);
+	}
+	if (!m_isolate) {
 		m_pArrayBufferAllocator.reset(new CJS_ArrayBufferAllocator());
+
 		v8::Isolate::CreateParams params;
 		params.array_buffer_allocator = m_pArrayBufferAllocator.get();
 		m_isolate = v8::Isolate::New(params);
-	}
+        }
 
 	v8::Isolate* isolate = m_isolate;
 	v8::Isolate::Scope isolate_scope(isolate);