forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Gin] Add Arguments::GetHolderCreationContext()
Currently, in order to get at the creation context of the holder, one has to do the following: v8::Local<v8::Object> holder; arguments->GetHolder(&holder); v8::Local<v8::Context> context = holder->CreationContext(); This isn't terrible, but it's a little verbose when all we really want is FunctionCallbackInfo::Holder::CreationContext(). Add a method to get at it directly. BUG=None Review-Url: https://codereview.chromium.org/2765853004 Cr-Commit-Position: refs/heads/master@{#459251}
- Loading branch information
Showing
5 changed files
with
78 additions
and
10 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
// Copyright 2017 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
#include "gin/arguments.h" | ||
|
||
#include "base/bind.h" | ||
#include "gin/converter.h" | ||
#include "gin/object_template_builder.h" | ||
#include "gin/public/isolate_holder.h" | ||
#include "gin/test/v8_test.h" | ||
#include "v8/include/v8.h" | ||
|
||
namespace gin { | ||
|
||
using ArgumentsTest = V8Test; | ||
|
||
// Test that Arguments::GetHolderCreationContext returns the proper context. | ||
TEST_F(ArgumentsTest, TestArgumentsHolderCreationContext) { | ||
v8::Isolate* isolate = instance_->isolate(); | ||
v8::HandleScope handle_scope(isolate); | ||
|
||
v8::Local<v8::Context> creation_context = context_.Get(instance_->isolate()); | ||
|
||
auto check_creation_context = [](v8::Local<v8::Context> expected_context, | ||
gin::Arguments* arguments) { | ||
EXPECT_EQ(expected_context, arguments->GetHolderCreationContext()); | ||
}; | ||
|
||
// Create an object that will compare GetHolderCreationContext() with | ||
// |creation_context|. | ||
v8::Local<v8::ObjectTemplate> object_template = | ||
ObjectTemplateBuilder(isolate) | ||
.SetMethod("checkCreationContext", | ||
base::Bind(check_creation_context, creation_context)) | ||
.Build(); | ||
|
||
v8::Local<v8::Object> object = | ||
object_template->NewInstance(creation_context).ToLocalChecked(); | ||
|
||
// Call checkCreationContext() on the generated object using the passed-in | ||
// context as the current context. | ||
auto test_context = [object, isolate](v8::Local<v8::Context> context) { | ||
v8::Context::Scope context_scope(context); | ||
const char kCallFunction[] = "(function(o) { o.checkCreationContext(); })"; | ||
v8::Local<v8::Script> script = | ||
v8::Script::Compile(context, StringToV8(isolate, kCallFunction)) | ||
.ToLocalChecked(); | ||
v8::Local<v8::Function> function; | ||
ASSERT_TRUE(ConvertFromV8(isolate, script->Run(), &function)); | ||
v8::Local<v8::Value> args[] = {object}; | ||
function->Call(v8::Undefined(isolate), arraysize(args), args); | ||
}; | ||
|
||
// Test calling in the creation context. | ||
test_context(creation_context); | ||
|
||
{ | ||
// Create a second context, and test calling in that. The creation context | ||
// should be the same (even though the current context has changed). | ||
v8::Local<v8::Context> second_context = | ||
v8::Context::New(isolate, nullptr, v8::Local<v8::ObjectTemplate>()); | ||
test_context(second_context); | ||
} | ||
} | ||
|
||
} // namespace gin |