| Index: extensions/renderer/api_last_error_unittest.cc
|
| diff --git a/extensions/renderer/api_last_error_unittest.cc b/extensions/renderer/api_last_error_unittest.cc
|
| index 9556dfa0379c38d337bc88675fd8e2522a41d0d1..0ec57e86bc7a8e86e33ef87513d111db9d884971 100644
|
| --- a/extensions/renderer/api_last_error_unittest.cc
|
| +++ b/extensions/renderer/api_last_error_unittest.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "base/bind.h"
|
| #include "base/callback_helpers.h"
|
| +#include "base/optional.h"
|
| #include "extensions/renderer/api_binding_test.h"
|
| #include "extensions/renderer/api_binding_test_util.h"
|
| #include "gin/converter.h"
|
| @@ -15,6 +16,9 @@ namespace extensions {
|
|
|
| namespace {
|
|
|
| +void DoNothingWithError(v8::Local<v8::Context> context,
|
| + const std::string& error) {}
|
| +
|
| std::string GetLastError(v8::Local<v8::Object> parent,
|
| v8::Local<v8::Context> context) {
|
| v8::Local<v8::Value> last_error =
|
| @@ -50,7 +54,8 @@ TEST_F(APILastErrorTest, TestLastError) {
|
| v8::Local<v8::Object> parent_object = v8::Object::New(isolate());
|
|
|
| ParentList parents = {{context, parent_object}};
|
| - APILastError last_error(base::Bind(&GetParent, parents));
|
| + APILastError last_error(base::Bind(&GetParent, parents),
|
| + base::Bind(&DoNothingWithError));
|
|
|
| EXPECT_EQ("undefined", GetLastError(parent_object, context));
|
| // Check that the key isn't present on the object (as opposed to simply being
|
| @@ -75,27 +80,36 @@ TEST_F(APILastErrorTest, ReportIfUnchecked) {
|
| v8::Local<v8::Context> context = MainContext();
|
| v8::Local<v8::Object> parent_object = v8::Object::New(isolate());
|
|
|
| + base::Optional<std::string> console_error;
|
| + auto log_error = [](base::Optional<std::string>* console_error,
|
| + v8::Local<v8::Context> context,
|
| + const std::string& error) { *console_error = error; };
|
| +
|
| ParentList parents = {{context, parent_object}};
|
| - APILastError last_error(base::Bind(&GetParent, parents));
|
| + APILastError last_error(base::Bind(&GetParent, parents),
|
| + base::Bind(log_error, &console_error));
|
|
|
| {
|
| v8::TryCatch try_catch(isolate());
|
| last_error.SetError(context, "foo");
|
| // GetLastError() will count as accessing the error property, so we
|
| - // shouldn't throw an exception.
|
| + // shouldn't log an error.
|
| EXPECT_EQ("\"foo\"", GetLastError(parent_object, context));
|
| last_error.ClearError(context, true);
|
| + EXPECT_FALSE(console_error);
|
| EXPECT_FALSE(try_catch.HasCaught());
|
| }
|
|
|
| {
|
| v8::TryCatch try_catch(isolate());
|
| - // This time, we should throw an exception.
|
| + // This time, we should log an error.
|
| last_error.SetError(context, "A last error");
|
| last_error.ClearError(context, true);
|
| - ASSERT_TRUE(try_catch.HasCaught());
|
| - EXPECT_EQ("Uncaught Error: A last error",
|
| - gin::V8ToString(try_catch.Message()->Get()));
|
| + ASSERT_TRUE(console_error);
|
| + EXPECT_EQ("Unchecked runtime.lastError: A last error", *console_error);
|
| + // We shouldn't have thrown an exception in order to prevent disrupting
|
| + // JS execution.
|
| + EXPECT_FALSE(try_catch.HasCaught());
|
| }
|
| }
|
|
|
| @@ -107,7 +121,8 @@ TEST_F(APILastErrorTest, NonLastErrorObject) {
|
| v8::Local<v8::Object> parent_object = v8::Object::New(isolate());
|
|
|
| ParentList parents = {{context, parent_object}};
|
| - APILastError last_error(base::Bind(&GetParent, parents));
|
| + APILastError last_error(base::Bind(&GetParent, parents),
|
| + base::Bind(&DoNothingWithError));
|
|
|
| auto checked_set = [context](v8::Local<v8::Object> object,
|
| base::StringPiece key,
|
| @@ -143,7 +158,8 @@ TEST_F(APILastErrorTest, MultipleContexts) {
|
| v8::Local<v8::Object> parent_a = v8::Object::New(isolate());
|
| v8::Local<v8::Object> parent_b = v8::Object::New(isolate());
|
| ParentList parents = {{context_a, parent_a}, {context_b, parent_b}};
|
| - APILastError last_error(base::Bind(&GetParent, parents));
|
| + APILastError last_error(base::Bind(&GetParent, parents),
|
| + base::Bind(&DoNothingWithError));
|
|
|
| last_error.SetError(context_a, "Last error a");
|
| EXPECT_EQ("\"Last error a\"", GetLastError(parent_a, context_a));
|
|
|