Index: extensions/renderer/script_context_set_unittest.cc |
diff --git a/extensions/renderer/script_context_set_unittest.cc b/extensions/renderer/script_context_set_unittest.cc |
index e795dd9ac8e9985fff57f816f3c9c0ebfc218e06..d4e56ef3ffc6baac740b5bd0b48635cd3bbe7aba 100644 |
--- a/extensions/renderer/script_context_set_unittest.cc |
+++ b/extensions/renderer/script_context_set_unittest.cc |
@@ -2,61 +2,63 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+#include <vector> |
+ |
#include "base/message_loop/message_loop.h" |
#include "extensions/common/extension.h" |
+#include "extensions/common/extension_set.h" |
#include "extensions/common/features/feature.h" |
#include "extensions/renderer/script_context.h" |
#include "extensions/renderer/script_context_set.h" |
#include "gin/public/context_holder.h" |
#include "testing/gtest/include/gtest/gtest.h" |
-#include "third_party/WebKit/public/web/WebFrame.h" |
#include "third_party/WebKit/public/web/WebLocalFrame.h" |
#include "third_party/WebKit/public/web/WebView.h" |
#include "v8/include/v8.h" |
namespace extensions { |
-TEST(ScriptContextSet, Lifecycle) { |
+TEST(ScriptContextSetTest, Lifecycle) { |
base::MessageLoop loop; |
- ScriptContextSet context_set; |
+ blink::WebView* webview = blink::WebView::create(nullptr); |
+ blink::WebLocalFrame* frame = blink::WebLocalFrame::create(nullptr); |
+ webview->setMainFrame(frame); |
+ // Do this after construction of the webview, since it may construct the |
+ // Isolate. |
v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
+ |
v8::HandleScope handle_scope(isolate); |
+ v8::Local<v8::Context> v8_context = v8::Context::New(isolate); |
+ v8::Context::Scope context_scope(v8_context); |
+ // ScriptContext relies on gin, it just doesn't look like it from here. |
gin::ContextHolder context_holder(isolate); |
- context_holder.SetContext(v8::Context::New(isolate)); |
- |
- blink::WebView* webview = blink::WebView::create(nullptr); |
- blink::WebFrame* frame = blink::WebLocalFrame::create(nullptr); |
- webview->setMainFrame(frame); |
- const Extension* extension = NULL; |
- ScriptContext* context = |
- new ScriptContext(context_holder.context(), |
- frame, |
- extension, |
- Feature::BLESSED_EXTENSION_CONTEXT, |
- extension, |
- Feature::BLESSED_EXTENSION_CONTEXT); |
+ context_holder.SetContext(v8_context); |
- context_set.Add(context); |
- EXPECT_EQ(1u, context_set.GetAll().count(context)); |
- EXPECT_EQ(context, context_set.GetByV8Context(context->v8_context())); |
+ ExtensionSet extensions; |
+ ExtensionIdSet active_extensions; |
+ ScriptContextSet context_set(&extensions, &active_extensions); |
+ ScriptContext* context = context_set.Register( |
+ frame, v8_context, 0, 0); // no extension group or world ID |
- // Adding the same item multiple times should be OK and deduped. |
- context_set.Add(context); |
- EXPECT_EQ(1u, context_set.GetAll().count(context)); |
+ // Context is valid and resembles correctness. |
+ EXPECT_TRUE(context->is_valid()); |
+ EXPECT_EQ(frame, context->web_frame()); |
+ EXPECT_EQ(v8_context, context->v8_context()); |
- // GetAll() returns a copy so removing from one should not remove from others. |
- ScriptContextSet::ContextSet set_copy = context_set.GetAll(); |
- EXPECT_EQ(1u, set_copy.count(context)); |
+ // Context has been correctly added. |
+ EXPECT_EQ(1u, context_set.size()); |
+ EXPECT_EQ(context, context_set.GetByV8Context(v8_context)); |
+ // Test context is correctly removed. |
context_set.Remove(context); |
- EXPECT_EQ(0, context_set.size()); |
- EXPECT_FALSE(context_set.GetByV8Context(context->v8_context())); |
- EXPECT_EQ(1u, set_copy.size()); |
+ EXPECT_EQ(0u, context_set.size()); |
+ EXPECT_EQ(nullptr, context_set.GetByV8Context(v8_context)); |
- // After removal, the context should be marked for destruction. |
- EXPECT_FALSE(context->web_frame()); |
+ // After removal, the context should be invalid. |
+ EXPECT_FALSE(context->is_valid()); |
+ EXPECT_EQ(nullptr, context->web_frame()); |
// Run loop to do the actual deletion. |
loop.RunUntilIdle(); |