diff options
author | Tom Sepez <tsepez@chromium.org> | 2016-03-24 11:45:37 -0700 |
---|---|---|
committer | Tom Sepez <tsepez@chromium.org> | 2016-03-24 11:45:37 -0700 |
commit | 9967cc5861fbff894eed8fca40e1e5ed524b04c6 (patch) | |
tree | f4861017bd5a94dcad63df60a07b6206c0d80471 /fpdfsdk/jsapi/fxjs_v8_embeddertest.cpp | |
parent | 676947ce0204914da1d8fb159730432c0fb0a3a2 (diff) | |
download | pdfium-9967cc5861fbff894eed8fca40e1e5ed524b04c6.tar.xz |
Re-land "Preserve m_pDynamicObjsMap until FXJS_PerIsolateData is destroyed.""
Fix the destruction order.
This reverts commit 129a60ec2d4d98ed953beaca629c99a52fb7e9b0.
BUG=594120
TBR=jochen@chromium.org
Review URL: https://codereview.chromium.org/1831723004 .
Diffstat (limited to 'fpdfsdk/jsapi/fxjs_v8_embeddertest.cpp')
-rw-r--r-- | fpdfsdk/jsapi/fxjs_v8_embeddertest.cpp | 74 |
1 files changed, 66 insertions, 8 deletions
diff --git a/fpdfsdk/jsapi/fxjs_v8_embeddertest.cpp b/fpdfsdk/jsapi/fxjs_v8_embeddertest.cpp index b7700c8b60..e89bb28113 100644 --- a/fpdfsdk/jsapi/fxjs_v8_embeddertest.cpp +++ b/fpdfsdk/jsapi/fxjs_v8_embeddertest.cpp @@ -7,11 +7,32 @@ namespace { -const wchar_t kScript[] = L"fred = 7"; +const double kExpected0 = 6.0; +const double kExpected1 = 7.0; +const double kExpected2 = 8.0; + +const wchar_t kScript0[] = L"fred = 6"; +const wchar_t kScript1[] = L"fred = 7"; +const wchar_t kScript2[] = L"fred = 8"; } // namespace -class FXJSV8EmbedderTest : public JSEmbedderTest {}; +class FXJSV8EmbedderTest : public JSEmbedderTest { + public: + void ExecuteInCurrentContext(const wchar_t* script) { + FXJSErr error; + int sts = FXJS_Execute(isolate(), nullptr, script, &error); + EXPECT_EQ(0, sts); + } + void CheckAssignmentInCurrentContext(double expected) { + v8::Local<v8::Object> This = FXJS_GetThisObj(isolate()); + v8::Local<v8::Value> fred = FXJS_GetObjectElement(isolate(), This, L"fred"); + EXPECT_TRUE(fred->IsNumber()); + EXPECT_EQ(expected, fred->ToNumber(isolate()->GetCurrentContext()) + .ToLocalChecked() + ->Value()); + } +}; TEST_F(FXJSV8EmbedderTest, Getters) { v8::Isolate::Scope isolate_scope(isolate()); @@ -21,11 +42,48 @@ TEST_F(FXJSV8EmbedderTest, Getters) { v8::HandleScope handle_scope(isolate()); v8::Context::Scope context_scope(GetV8Context()); - FXJSErr error; - int sts = FXJS_Execute(isolate(), nullptr, kScript, &error); - EXPECT_EQ(0, sts); + ExecuteInCurrentContext(kScript1); + CheckAssignmentInCurrentContext(kExpected1); +} + +TEST_F(FXJSV8EmbedderTest, MultipleRutimes) { + v8::Isolate::Scope isolate_scope(isolate()); +#ifdef PDF_ENABLE_XFA + v8::Locker locker(isolate()); +#endif // PDF_ENABLE_XFA + v8::HandleScope handle_scope(isolate()); + + v8::Global<v8::Context> global_context1; + std::vector<v8::Global<v8::Object>*> static_objects1; + FXJS_InitializeRuntime(isolate(), nullptr, &global_context1, + &static_objects1); + + v8::Global<v8::Context> global_context2; + std::vector<v8::Global<v8::Object>*> static_objects2; + FXJS_InitializeRuntime(isolate(), nullptr, &global_context2, + &static_objects2); + + v8::Context::Scope context_scope(GetV8Context()); + ExecuteInCurrentContext(kScript0); + CheckAssignmentInCurrentContext(kExpected0); + + { + v8::Local<v8::Context> context1 = + v8::Local<v8::Context>::New(isolate(), global_context1); + v8::Context::Scope context_scope(context1); + ExecuteInCurrentContext(kScript1); + CheckAssignmentInCurrentContext(kExpected1); + } + FXJS_ReleaseRuntime(isolate(), &global_context1, &static_objects1); + + { + v8::Local<v8::Context> context2 = + v8::Local<v8::Context>::New(isolate(), global_context2); + v8::Context::Scope context_scope(context2); + ExecuteInCurrentContext(kScript2); + CheckAssignmentInCurrentContext(kExpected2); + } + FXJS_ReleaseRuntime(isolate(), &global_context2, &static_objects2); - v8::Local<v8::Object> This = FXJS_GetThisObj(isolate()); - v8::Local<v8::Value> fred = FXJS_GetObjectElement(isolate(), This, L"fred"); - EXPECT_TRUE(fred->IsNumber()); + CheckAssignmentInCurrentContext(kExpected0); } |