js_asker.cc 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. // Copyright (c) 2015 GitHub, Inc.
  2. // Use of this source code is governed by the MIT license that can be
  3. // found in the LICENSE file.
  4. #include "atom/browser/net/js_asker.h"
  5. #include <utility>
  6. #include "atom/common/native_mate_converters/callback.h"
  7. #include "content/public/browser/browser_thread.h"
  8. namespace atom {
  9. JsAsker::JsAsker() = default;
  10. JsAsker::~JsAsker() = default;
  11. void JsAsker::SetHandlerInfo(
  12. v8::Isolate* isolate,
  13. net::URLRequestContextGetter* request_context_getter,
  14. const JavaScriptHandler& handler) {
  15. isolate_ = isolate;
  16. request_context_getter_ = request_context_getter;
  17. handler_ = handler;
  18. }
  19. // static
  20. void JsAsker::AskForOptions(
  21. v8::Isolate* isolate,
  22. const JavaScriptHandler& handler,
  23. std::unique_ptr<base::DictionaryValue> request_details,
  24. const BeforeStartCallback& before_start) {
  25. DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
  26. v8::Locker locker(isolate);
  27. v8::HandleScope handle_scope(isolate);
  28. v8::Local<v8::Context> context = isolate->GetCurrentContext();
  29. v8::Context::Scope context_scope(context);
  30. handler.Run(*(request_details.get()),
  31. mate::ConvertToV8(isolate, before_start));
  32. }
  33. // static
  34. bool JsAsker::IsErrorOptions(base::Value* value, int* error) {
  35. if (value->is_dict()) {
  36. base::DictionaryValue* dict = static_cast<base::DictionaryValue*>(value);
  37. if (dict->GetInteger("error", error))
  38. return true;
  39. } else if (value->is_int()) {
  40. *error = value->GetInt();
  41. return true;
  42. }
  43. return false;
  44. }
  45. } // namespace atom