Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(173)

Unified Diff: extensions/renderer/api_bindings_system_unittest.cc

Issue 2480203002: ui: Cleanup class/struct forward declarations (Closed)
Patch Set: Sync CL to position 430550 Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/renderer/api_bindings_system.cc ('k') | extensions/renderer/api_event_handler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/renderer/api_bindings_system_unittest.cc
diff --git a/extensions/renderer/api_bindings_system_unittest.cc b/extensions/renderer/api_bindings_system_unittest.cc
index 9e0941bd9d6c7c1b6c01ebe0bc346f35d0056d3b..b4e6753a6ab15ee893cc50d23330bd98185d070e 100644
--- a/extensions/renderer/api_bindings_system_unittest.cc
+++ b/extensions/renderer/api_bindings_system_unittest.cc
@@ -53,6 +53,9 @@ const char kAlphaAPISpec[] =
" 'name': 'callback',"
" 'type': 'function'"
" }]"
+ " }],"
+ " 'events': [{"
+ " 'name': 'alphaEvent'"
" }]"
"}";
@@ -93,8 +96,36 @@ class APIBindingsSystemTestBase : public gin::V8Test {
void TearDown() override {
bindings_system_.reset();
+
+ v8::Global<v8::Context> weak_context(instance_->isolate(), context_);
+ weak_context.SetWeak();
+
holder_.reset();
- gin::V8Test::TearDown();
+
+ // NOTE: We explicitly do NOT call gin::V8Test::TearDown() here because we
+ // do intermittent validation by doing a garbage collection after context
+ // destruction and ensuring the context is fully released (which wouldn't
+ // happen in cycles).
+ // TODO(devlin): It might be time to move off V8Test if we're doing this.
+ {
+ v8::HandleScope handle_scope(instance_->isolate());
+ v8::Local<v8::Context>::New(instance_->isolate(), context_)->Exit();
+ context_.Reset();
+ }
+
+ // Garbage collect everything so that we find any issues where we might be
+ // double-freeing.
+ // '5' is a magic number stolen from Blink; arbitrarily large enough to
+ // hopefully clean up all the various paths.
+ for (int i = 0; i < 5; i++) {
+ instance_->isolate()->RequestGarbageCollectionForTesting(
+ v8::Isolate::kFullGarbageCollection);
+ }
+
+ ASSERT_TRUE(weak_context.IsEmpty());
+
+ instance_->isolate()->Exit();
+ instance_.reset();
}
// Checks that |last_request_| exists and was provided with the
@@ -270,6 +301,26 @@ TEST_F(APIBindingsSystemTest, TestInitializationAndCallbacks) {
}
{
+ // Test an event registration -> event occurrence.
+ const char kTestCall[] =
+ "obj.alphaEvent.addListener(function() {\n"
+ " this.eventArguments = Array.from(arguments);\n"
+ "});\n";
+ CallFunctionOnObject(context, alpha_api, kTestCall);
+
+ const char kResponseArgsJson[] = "['response',1,{'key':42}]";
+ std::unique_ptr<base::ListValue> expected_args =
+ ListValueFromString(kResponseArgsJson);
+ bindings_system()->FireEventInContext("alpha.alphaEvent", context,
+ *expected_args);
+
+ std::unique_ptr<base::Value> result = GetBaseValuePropertyFromObject(
+ context->Global(), context, "eventArguments");
+ ASSERT_TRUE(result);
+ EXPECT_EQ(ReplaceSingleQuotes(kResponseArgsJson), ValueToString(*result));
+ }
+
+ {
// Test a call -> response on the second API.
const char kTestCall[] = "obj.simpleFunc(2)";
CallFunctionOnObject(context, beta_api, kTestCall);
@@ -416,6 +467,24 @@ TEST_F(APIBindingsSystemTestWithRealAPI, RealAPIs) {
EXPECT_FALSE(last_request());
reset_last_request(); // Just to not pollute future results.
}
+
+ {
+ const char kTestCall[] =
+ "chrome.idle.onStateChanged.addListener(state => {\n"
+ " this.idleState = state;\n"
+ "});\n";
+ ExecuteScript(context, kTestCall);
+ v8::Local<v8::Value> v8_result =
+ GetPropertyFromObject(context->Global(), context, "idleState");
+ EXPECT_TRUE(v8_result->IsUndefined());
+ bindings_system()->FireEventInContext("idle.onStateChanged", context,
+ *ListValueFromString("['active']"));
+
+ std::unique_ptr<base::Value> result =
+ GetBaseValuePropertyFromObject(context->Global(), context, "idleState");
+ ASSERT_TRUE(result);
+ EXPECT_EQ("\"active\"", ValueToString(*result));
+ }
}
} // namespace extensions
« no previous file with comments | « extensions/renderer/api_bindings_system.cc ('k') | extensions/renderer/api_event_handler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698