Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "extensions/renderer/api_last_error.h" | 5 #include "extensions/renderer/api_last_error.h" |
| 6 | 6 |
| 7 #include "gin/converter.h" | 7 #include "gin/converter.h" |
| 8 #include "gin/handle.h" | 8 #include "gin/handle.h" |
| 9 #include "gin/object_template_builder.h" | 9 #include "gin/object_template_builder.h" |
| 10 #include "gin/wrappable.h" | 10 #include "gin/wrappable.h" |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 46 std::string error_; | 46 std::string error_; |
| 47 bool accessed_ = false; | 47 bool accessed_ = false; |
| 48 | 48 |
| 49 DISALLOW_COPY_AND_ASSIGN(LastErrorObject); | 49 DISALLOW_COPY_AND_ASSIGN(LastErrorObject); |
| 50 }; | 50 }; |
| 51 | 51 |
| 52 gin::WrapperInfo LastErrorObject::kWrapperInfo = {gin::kEmbedderNativeGin}; | 52 gin::WrapperInfo LastErrorObject::kWrapperInfo = {gin::kEmbedderNativeGin}; |
| 53 | 53 |
| 54 } // namespace | 54 } // namespace |
| 55 | 55 |
| 56 APILastError::APILastError(const GetParent& get_parent) | 56 APILastError::APILastError(const GetParent& get_parent, |
| 57 : get_parent_(get_parent) {} | 57 const AddConsoleError& add_console_error) |
| 58 : get_parent_(get_parent), add_console_error_(add_console_error) {} | |
| 58 APILastError::APILastError(APILastError&& other) = default; | 59 APILastError::APILastError(APILastError&& other) = default; |
| 59 APILastError::~APILastError() = default; | 60 APILastError::~APILastError() = default; |
| 60 | 61 |
| 61 void APILastError::SetError(v8::Local<v8::Context> context, | 62 void APILastError::SetError(v8::Local<v8::Context> context, |
| 62 const std::string& error) { | 63 const std::string& error) { |
| 63 v8::Isolate* isolate = context->GetIsolate(); | 64 v8::Isolate* isolate = context->GetIsolate(); |
| 64 DCHECK(isolate); | 65 DCHECK(isolate); |
| 65 v8::HandleScope handle_scope(isolate); | 66 v8::HandleScope handle_scope(isolate); |
| 66 | 67 |
| 67 // The various accesses/sets on an object could potentially fail if script has | 68 // The various accesses/sets on an object could potentially fail if script has |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 126 v8::Local<v8::Value> error; | 127 v8::Local<v8::Value> error; |
| 127 if (!parent->Get(context, key).ToLocal(&error)) | 128 if (!parent->Get(context, key).ToLocal(&error)) |
| 128 return; | 129 return; |
| 129 if (!gin::Converter<LastErrorObject*>::FromV8(context->GetIsolate(), error, | 130 if (!gin::Converter<LastErrorObject*>::FromV8(context->GetIsolate(), error, |
| 130 &last_error)) { | 131 &last_error)) { |
| 131 return; | 132 return; |
| 132 } | 133 } |
| 133 } | 134 } |
| 134 | 135 |
| 135 if (report_if_unchecked && !last_error->accessed()) { | 136 if (report_if_unchecked && !last_error->accessed()) { |
| 136 isolate->ThrowException( | 137 add_console_error_.Run( |
|
jbroman
2017/04/19 17:45:04
Heh, I'd missed that the original code used consol
lazyboy
2017/04/19 18:45:40
I might be missing something, but
add_console_erro
Devlin
2017/04/19 19:45:33
I don't think it should ever be null for non-test
Devlin
2017/04/19 19:45:33
Clearly, I did too. :)
lazyboy
2017/04/19 20:28:07
Nope. Looking again, I think I misread api_binding
| |
| 137 v8::Exception::Error(gin::StringToV8(isolate, last_error->error()))); | 138 context, "Unchecked runtime.lastError: " + last_error->error()); |
| 138 } | 139 } |
| 139 | 140 |
| 140 // See comment in SetError(). | 141 // See comment in SetError(). |
| 141 v8::TryCatch try_catch(isolate); | 142 v8::TryCatch try_catch(isolate); |
| 142 try_catch.SetVerbose(true); | 143 try_catch.SetVerbose(true); |
| 143 | 144 |
| 144 // This Delete() can fail, but there's nothing to do if it does (the exception | 145 // This Delete() can fail, but there's nothing to do if it does (the exception |
| 145 // will be caught by the TryCatch above). | 146 // will be caught by the TryCatch above). |
| 146 parent->Delete(context, key).ToChecked(); | 147 parent->Delete(context, key).ToChecked(); |
| 147 } | 148 } |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 162 .ToLocal(&error)) { | 163 .ToLocal(&error)) { |
| 163 return false; | 164 return false; |
| 164 } | 165 } |
| 165 | 166 |
| 166 LastErrorObject* last_error = nullptr; | 167 LastErrorObject* last_error = nullptr; |
| 167 return gin::Converter<LastErrorObject*>::FromV8(context->GetIsolate(), error, | 168 return gin::Converter<LastErrorObject*>::FromV8(context->GetIsolate(), error, |
| 168 &last_error); | 169 &last_error); |
| 169 } | 170 } |
| 170 | 171 |
| 171 } // namespace extensions | 172 } // namespace extensions |
| OLD | NEW |