chore: remove native_mate (Part 7) (#20561)
* refactor: use gin converters in api::Protocol * refactor: convert JS constructor impl to gin * refactor: use InitWithArgs helper * fix: gin_helper::Dictionary should behave the same with mate * fix cpplint warnings * refactor: no more need to patch gin/dictionary.h
This commit is contained in:
Родитель
6c6bff81ac
Коммит
1ecfcc8c70
|
@ -476,7 +476,6 @@ filenames = {
|
||||||
"shell/common/gin_converters/gurl_converter.h",
|
"shell/common/gin_converters/gurl_converter.h",
|
||||||
"shell/common/gin_converters/image_converter.cc",
|
"shell/common/gin_converters/image_converter.cc",
|
||||||
"shell/common/gin_converters/image_converter.h",
|
"shell/common/gin_converters/image_converter.h",
|
||||||
"shell/common/gin_converters/native_mate_handle_converter.h",
|
|
||||||
"shell/common/gin_converters/message_box_converter.cc",
|
"shell/common/gin_converters/message_box_converter.cc",
|
||||||
"shell/common/gin_converters/message_box_converter.h",
|
"shell/common/gin_converters/message_box_converter.h",
|
||||||
"shell/common/gin_converters/native_window_converter.h",
|
"shell/common/gin_converters/native_window_converter.h",
|
||||||
|
|
|
@ -10,6 +10,7 @@ source_set("native_mate") {
|
||||||
"//v8:v8_headers",
|
"//v8:v8_headers",
|
||||||
]
|
]
|
||||||
public_configs = [ ":native_mate_config" ]
|
public_configs = [ ":native_mate_config" ]
|
||||||
|
include_dirs = [ ".." ]
|
||||||
sources = [
|
sources = [
|
||||||
"native_mate/arguments.cc",
|
"native_mate/arguments.cc",
|
||||||
"native_mate/arguments.h",
|
"native_mate/arguments.h",
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
#include "base/bind.h"
|
#include "base/bind.h"
|
||||||
#include "native_mate/function_template.h"
|
#include "native_mate/function_template.h"
|
||||||
|
#include "shell/common/gin_helper/function_template.h"
|
||||||
|
|
||||||
namespace mate {
|
namespace mate {
|
||||||
|
|
||||||
|
@ -30,7 +31,8 @@ inline WrappableBase* InvokeFactory(
|
||||||
Arguments* args,
|
Arguments* args,
|
||||||
const base::Callback<WrappableBase*(P1)>& callback) {
|
const base::Callback<WrappableBase*(P1)>& callback) {
|
||||||
typename CallbackParamTraits<P1>::LocalType a1;
|
typename CallbackParamTraits<P1>::LocalType a1;
|
||||||
if (!GetNextArgument(args, 0, true, &a1))
|
gin::Arguments gin_args(args->info());
|
||||||
|
if (!gin_helper::GetNextArgument(&gin_args, 0, true, &a1))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return callback.Run(a1);
|
return callback.Run(a1);
|
||||||
}
|
}
|
||||||
|
@ -41,8 +43,9 @@ inline WrappableBase* InvokeFactory(
|
||||||
const base::Callback<WrappableBase*(P1, P2)>& callback) {
|
const base::Callback<WrappableBase*(P1, P2)>& callback) {
|
||||||
typename CallbackParamTraits<P1>::LocalType a1;
|
typename CallbackParamTraits<P1>::LocalType a1;
|
||||||
typename CallbackParamTraits<P2>::LocalType a2;
|
typename CallbackParamTraits<P2>::LocalType a2;
|
||||||
if (!GetNextArgument(args, 0, true, &a1) ||
|
gin::Arguments gin_args(args->info());
|
||||||
!GetNextArgument(args, 0, false, &a2))
|
if (!gin_helper::GetNextArgument(&gin_args, 0, true, &a1) ||
|
||||||
|
!gin_helper::GetNextArgument(&gin_args, 0, false, &a2))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return callback.Run(a1, a2);
|
return callback.Run(a1, a2);
|
||||||
}
|
}
|
||||||
|
@ -54,9 +57,10 @@ inline WrappableBase* InvokeFactory(
|
||||||
typename CallbackParamTraits<P1>::LocalType a1;
|
typename CallbackParamTraits<P1>::LocalType a1;
|
||||||
typename CallbackParamTraits<P2>::LocalType a2;
|
typename CallbackParamTraits<P2>::LocalType a2;
|
||||||
typename CallbackParamTraits<P3>::LocalType a3;
|
typename CallbackParamTraits<P3>::LocalType a3;
|
||||||
if (!GetNextArgument(args, 0, true, &a1) ||
|
gin::Arguments gin_args(args->info());
|
||||||
!GetNextArgument(args, 0, false, &a2) ||
|
if (!gin_helper::GetNextArgument(&gin_args, 0, true, &a1) ||
|
||||||
!GetNextArgument(args, 0, false, &a3))
|
!gin_helper::GetNextArgument(&gin_args, 0, false, &a2) ||
|
||||||
|
!gin_helper::GetNextArgument(&gin_args, 0, false, &a3))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return callback.Run(a1, a2, a3);
|
return callback.Run(a1, a2, a3);
|
||||||
}
|
}
|
||||||
|
@ -69,10 +73,11 @@ inline WrappableBase* InvokeFactory(
|
||||||
typename CallbackParamTraits<P2>::LocalType a2;
|
typename CallbackParamTraits<P2>::LocalType a2;
|
||||||
typename CallbackParamTraits<P3>::LocalType a3;
|
typename CallbackParamTraits<P3>::LocalType a3;
|
||||||
typename CallbackParamTraits<P4>::LocalType a4;
|
typename CallbackParamTraits<P4>::LocalType a4;
|
||||||
if (!GetNextArgument(args, 0, true, &a1) ||
|
gin::Arguments gin_args(args->info());
|
||||||
!GetNextArgument(args, 0, false, &a2) ||
|
if (!gin_helper::GetNextArgument(&gin_args, 0, true, &a1) ||
|
||||||
!GetNextArgument(args, 0, false, &a3) ||
|
!gin_helper::GetNextArgument(&gin_args, 0, false, &a2) ||
|
||||||
!GetNextArgument(args, 0, false, &a4))
|
!gin_helper::GetNextArgument(&gin_args, 0, false, &a3) ||
|
||||||
|
!gin_helper::GetNextArgument(&gin_args, 0, false, &a4))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return callback.Run(a1, a2, a3, a4);
|
return callback.Run(a1, a2, a3, a4);
|
||||||
}
|
}
|
||||||
|
@ -86,11 +91,12 @@ inline WrappableBase* InvokeFactory(
|
||||||
typename CallbackParamTraits<P3>::LocalType a3;
|
typename CallbackParamTraits<P3>::LocalType a3;
|
||||||
typename CallbackParamTraits<P4>::LocalType a4;
|
typename CallbackParamTraits<P4>::LocalType a4;
|
||||||
typename CallbackParamTraits<P5>::LocalType a5;
|
typename CallbackParamTraits<P5>::LocalType a5;
|
||||||
if (!GetNextArgument(args, 0, true, &a1) ||
|
gin::Arguments gin_args(args->info());
|
||||||
!GetNextArgument(args, 0, false, &a2) ||
|
if (!gin_helper::GetNextArgument(&gin_args, 0, true, &a1) ||
|
||||||
!GetNextArgument(args, 0, false, &a3) ||
|
!gin_helper::GetNextArgument(&gin_args, 0, false, &a2) ||
|
||||||
!GetNextArgument(args, 0, false, &a4) ||
|
!gin_helper::GetNextArgument(&gin_args, 0, false, &a3) ||
|
||||||
!GetNextArgument(args, 0, false, &a5))
|
!gin_helper::GetNextArgument(&gin_args, 0, false, &a4) ||
|
||||||
|
!gin_helper::GetNextArgument(&gin_args, 0, false, &a5))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return callback.Run(a1, a2, a3, a4, a5);
|
return callback.Run(a1, a2, a3, a4, a5);
|
||||||
}
|
}
|
||||||
|
@ -110,12 +116,13 @@ inline WrappableBase* InvokeFactory(
|
||||||
typename CallbackParamTraits<P4>::LocalType a4;
|
typename CallbackParamTraits<P4>::LocalType a4;
|
||||||
typename CallbackParamTraits<P5>::LocalType a5;
|
typename CallbackParamTraits<P5>::LocalType a5;
|
||||||
typename CallbackParamTraits<P6>::LocalType a6;
|
typename CallbackParamTraits<P6>::LocalType a6;
|
||||||
if (!GetNextArgument(args, 0, true, &a1) ||
|
gin::Arguments gin_args(args->info());
|
||||||
!GetNextArgument(args, 0, false, &a2) ||
|
if (!gin_helper::GetNextArgument(&gin_args, 0, true, &a1) ||
|
||||||
!GetNextArgument(args, 0, false, &a3) ||
|
!gin_helper::GetNextArgument(&gin_args, 0, false, &a2) ||
|
||||||
!GetNextArgument(args, 0, false, &a4) ||
|
!gin_helper::GetNextArgument(&gin_args, 0, false, &a3) ||
|
||||||
!GetNextArgument(args, 0, false, &a5) ||
|
!gin_helper::GetNextArgument(&gin_args, 0, false, &a4) ||
|
||||||
!GetNextArgument(args, 0, false, &a6))
|
!gin_helper::GetNextArgument(&gin_args, 0, false, &a5) ||
|
||||||
|
!gin_helper::GetNextArgument(&gin_args, 0, false, &a6))
|
||||||
return nullptr;
|
return nullptr;
|
||||||
return callback.Run(a1, a2, a3, a4, a5, a6);
|
return callback.Run(a1, a2, a3, a4, a5, a6);
|
||||||
}
|
}
|
||||||
|
|
|
@ -115,4 +115,22 @@ struct Converter<Dictionary> {
|
||||||
|
|
||||||
} // namespace mate
|
} // namespace mate
|
||||||
|
|
||||||
|
namespace gin {
|
||||||
|
|
||||||
|
// Keep compatibility with gin.
|
||||||
|
template <>
|
||||||
|
struct Converter<mate::Dictionary> {
|
||||||
|
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
|
||||||
|
const mate::Dictionary& in) {
|
||||||
|
return mate::ConvertToV8(isolate, in);
|
||||||
|
}
|
||||||
|
static bool FromV8(v8::Isolate* isolate,
|
||||||
|
v8::Local<v8::Value> val,
|
||||||
|
mate::Dictionary* out) {
|
||||||
|
return mate::ConvertFromV8(isolate, val, out);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace gin
|
||||||
|
|
||||||
#endif // NATIVE_MATE_NATIVE_MATE_DICTIONARY_H_
|
#endif // NATIVE_MATE_NATIVE_MATE_DICTIONARY_H_
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
#ifndef NATIVE_MATE_NATIVE_MATE_FUNCTION_TEMPLATE_H_
|
#ifndef NATIVE_MATE_NATIVE_MATE_FUNCTION_TEMPLATE_H_
|
||||||
#define NATIVE_MATE_NATIVE_MATE_FUNCTION_TEMPLATE_H_
|
#define NATIVE_MATE_NATIVE_MATE_FUNCTION_TEMPLATE_H_
|
||||||
|
|
||||||
#include "../shell/common/gin_helper/destroyable.h"
|
|
||||||
#include "../shell/common/gin_helper/error_thrower.h"
|
|
||||||
#include "base/callback.h"
|
#include "base/callback.h"
|
||||||
#include "native_mate/arguments.h"
|
#include "native_mate/arguments.h"
|
||||||
#include "native_mate/wrappable_base.h"
|
#include "native_mate/wrappable_base.h"
|
||||||
|
#include "shell/common/gin_helper/destroyable.h"
|
||||||
|
#include "shell/common/gin_helper/error_thrower.h"
|
||||||
|
|
||||||
// =============================== NOTICE ===============================
|
// =============================== NOTICE ===============================
|
||||||
// Do not add code here, native_mate is being removed. Any new code
|
// Do not add code here, native_mate is being removed. Any new code
|
||||||
|
|
|
@ -69,4 +69,22 @@ mate::Handle<T> CreateHandle(v8::Isolate* isolate, T* object) {
|
||||||
|
|
||||||
} // namespace mate
|
} // namespace mate
|
||||||
|
|
||||||
|
namespace gin {
|
||||||
|
|
||||||
|
// Keep compatibility with gin.
|
||||||
|
template <typename T>
|
||||||
|
struct Converter<mate::Handle<T>> {
|
||||||
|
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
|
||||||
|
const mate::Handle<T>& in) {
|
||||||
|
return mate::ConvertToV8(isolate, in);
|
||||||
|
}
|
||||||
|
static bool FromV8(v8::Isolate* isolate,
|
||||||
|
v8::Local<v8::Value> val,
|
||||||
|
mate::Handle<T>* out) {
|
||||||
|
return mate::ConvertFromV8(isolate, val, out);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace gin
|
||||||
|
|
||||||
#endif // NATIVE_MATE_NATIVE_MATE_HANDLE_H_
|
#endif // NATIVE_MATE_NATIVE_MATE_HANDLE_H_
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "native_mate/wrappable.h"
|
#include "native_mate/wrappable.h"
|
||||||
|
|
||||||
#include "base/logging.h"
|
#include "base/logging.h"
|
||||||
|
#include "gin/arguments.h"
|
||||||
#include "native_mate/dictionary.h"
|
#include "native_mate/dictionary.h"
|
||||||
#include "native_mate/object_template_builder_deprecated.h"
|
#include "native_mate/object_template_builder_deprecated.h"
|
||||||
|
|
||||||
|
@ -37,6 +38,12 @@ v8::MaybeLocal<v8::Object> WrappableBase::GetWrapper(
|
||||||
return v8::MaybeLocal<v8::Object>();
|
return v8::MaybeLocal<v8::Object>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WrappableBase::InitWithArgs(gin::Arguments* args) {
|
||||||
|
v8::Local<v8::Object> holder;
|
||||||
|
args->GetHolder(&holder);
|
||||||
|
InitWith(args->isolate(), holder);
|
||||||
|
}
|
||||||
|
|
||||||
void WrappableBase::InitWith(v8::Isolate* isolate,
|
void WrappableBase::InitWith(v8::Isolate* isolate,
|
||||||
v8::Local<v8::Object> wrapper) {
|
v8::Local<v8::Object> wrapper) {
|
||||||
CHECK(wrapper_.IsEmpty());
|
CHECK(wrapper_.IsEmpty());
|
||||||
|
|
|
@ -97,4 +97,28 @@ struct Converter<T*,
|
||||||
|
|
||||||
} // namespace mate
|
} // namespace mate
|
||||||
|
|
||||||
|
namespace gin {
|
||||||
|
|
||||||
|
// Provides compatibility for gin.
|
||||||
|
template <typename T>
|
||||||
|
struct Converter<
|
||||||
|
T*,
|
||||||
|
typename std::enable_if<
|
||||||
|
std::is_convertible<T*, mate::WrappableBase*>::value>::type> {
|
||||||
|
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate, T* val) {
|
||||||
|
if (val)
|
||||||
|
return val->GetWrapper();
|
||||||
|
else
|
||||||
|
return v8::Null(isolate);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool FromV8(v8::Isolate* isolate, v8::Local<v8::Value> val, T** out) {
|
||||||
|
*out = static_cast<T*>(static_cast<mate::WrappableBase*>(
|
||||||
|
mate::internal::FromV8Impl(isolate, val)));
|
||||||
|
return *out != nullptr;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace gin
|
||||||
|
|
||||||
#endif // NATIVE_MATE_NATIVE_MATE_WRAPPABLE_H_
|
#endif // NATIVE_MATE_NATIVE_MATE_WRAPPABLE_H_
|
||||||
|
|
|
@ -6,8 +6,9 @@
|
||||||
#define NATIVE_MATE_NATIVE_MATE_WRAPPABLE_BASE_H_
|
#define NATIVE_MATE_NATIVE_MATE_WRAPPABLE_BASE_H_
|
||||||
|
|
||||||
namespace gin {
|
namespace gin {
|
||||||
|
class Arguments;
|
||||||
struct Destroyable;
|
struct Destroyable;
|
||||||
}
|
} // namespace gin
|
||||||
|
|
||||||
namespace mate {
|
namespace mate {
|
||||||
|
|
||||||
|
@ -47,6 +48,9 @@ class WrappableBase {
|
||||||
// This method should only be called by classes using Constructor.
|
// This method should only be called by classes using Constructor.
|
||||||
virtual void InitWith(v8::Isolate* isolate, v8::Local<v8::Object> wrapper);
|
virtual void InitWith(v8::Isolate* isolate, v8::Local<v8::Object> wrapper);
|
||||||
|
|
||||||
|
// Helper to migrate from native_mate to gin.
|
||||||
|
void InitWithArgs(gin::Arguments* args);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
friend struct gin::Destroyable;
|
friend struct gin::Destroyable;
|
||||||
|
|
||||||
|
|
|
@ -57,15 +57,9 @@ namespace electron {
|
||||||
|
|
||||||
namespace api {
|
namespace api {
|
||||||
|
|
||||||
BrowserView::BrowserView(v8::Isolate* isolate,
|
BrowserView::BrowserView(gin::Arguments* args,
|
||||||
v8::Local<v8::Object> wrapper,
|
|
||||||
const mate::Dictionary& options) {
|
const mate::Dictionary& options) {
|
||||||
Init(isolate, wrapper, options);
|
v8::Isolate* isolate = args->isolate();
|
||||||
}
|
|
||||||
|
|
||||||
void BrowserView::Init(v8::Isolate* isolate,
|
|
||||||
v8::Local<v8::Object> wrapper,
|
|
||||||
const mate::Dictionary& options) {
|
|
||||||
mate::Dictionary web_preferences = mate::Dictionary::CreateEmpty(isolate);
|
mate::Dictionary web_preferences = mate::Dictionary::CreateEmpty(isolate);
|
||||||
options.Get(options::kWebPreferences, &web_preferences);
|
options.Get(options::kWebPreferences, &web_preferences);
|
||||||
web_preferences.Set("type", "browserView");
|
web_preferences.Set("type", "browserView");
|
||||||
|
@ -79,7 +73,7 @@ void BrowserView::Init(v8::Isolate* isolate,
|
||||||
view_.reset(
|
view_.reset(
|
||||||
NativeBrowserView::Create(api_web_contents_->managed_web_contents()));
|
NativeBrowserView::Create(api_web_contents_->managed_web_contents()));
|
||||||
|
|
||||||
InitWith(isolate, wrapper);
|
InitWithArgs(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
BrowserView::~BrowserView() {
|
BrowserView::~BrowserView() {
|
||||||
|
@ -96,16 +90,17 @@ void BrowserView::WebContentsDestroyed() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
mate::WrappableBase* BrowserView::New(mate::Arguments* args) {
|
mate::WrappableBase* BrowserView::New(gin_helper::ErrorThrower thrower,
|
||||||
|
gin::Arguments* args) {
|
||||||
if (!Browser::Get()->is_ready()) {
|
if (!Browser::Get()->is_ready()) {
|
||||||
args->ThrowError("Cannot create BrowserView before app is ready");
|
thrower.ThrowError("Cannot create BrowserView before app is ready");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
mate::Dictionary options = mate::Dictionary::CreateEmpty(args->isolate());
|
mate::Dictionary options = mate::Dictionary::CreateEmpty(args->isolate());
|
||||||
args->GetNext(&options);
|
args->GetNext(&options);
|
||||||
|
|
||||||
return new BrowserView(args->isolate(), args->GetThis(), options);
|
return new BrowserView(args, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t BrowserView::ID() const {
|
int32_t BrowserView::ID() const {
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "native_mate/handle.h"
|
#include "native_mate/handle.h"
|
||||||
#include "shell/browser/api/trackable_object.h"
|
#include "shell/browser/api/trackable_object.h"
|
||||||
#include "shell/browser/native_browser_view.h"
|
#include "shell/browser/native_browser_view.h"
|
||||||
|
#include "shell/common/gin_helper/error_thrower.h"
|
||||||
|
|
||||||
namespace gfx {
|
namespace gfx {
|
||||||
class Rect;
|
class Rect;
|
||||||
|
@ -33,7 +34,8 @@ class WebContents;
|
||||||
class BrowserView : public mate::TrackableObject<BrowserView>,
|
class BrowserView : public mate::TrackableObject<BrowserView>,
|
||||||
public content::WebContentsObserver {
|
public content::WebContentsObserver {
|
||||||
public:
|
public:
|
||||||
static mate::WrappableBase* New(mate::Arguments* args);
|
static mate::WrappableBase* New(gin_helper::ErrorThrower thrower,
|
||||||
|
gin::Arguments* args);
|
||||||
|
|
||||||
static void BuildPrototype(v8::Isolate* isolate,
|
static void BuildPrototype(v8::Isolate* isolate,
|
||||||
v8::Local<v8::FunctionTemplate> prototype);
|
v8::Local<v8::FunctionTemplate> prototype);
|
||||||
|
@ -44,19 +46,13 @@ class BrowserView : public mate::TrackableObject<BrowserView>,
|
||||||
int32_t ID() const;
|
int32_t ID() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
BrowserView(v8::Isolate* isolate,
|
BrowserView(gin::Arguments* args, const mate::Dictionary& options);
|
||||||
v8::Local<v8::Object> wrapper,
|
|
||||||
const mate::Dictionary& options);
|
|
||||||
~BrowserView() override;
|
~BrowserView() override;
|
||||||
|
|
||||||
// content::WebContentsObserver:
|
// content::WebContentsObserver:
|
||||||
void WebContentsDestroyed() override;
|
void WebContentsDestroyed() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void Init(v8::Isolate* isolate,
|
|
||||||
v8::Local<v8::Object> wrapper,
|
|
||||||
const mate::Dictionary& options);
|
|
||||||
|
|
||||||
void SetAutoResize(AutoResizeFlags flags);
|
void SetAutoResize(AutoResizeFlags flags);
|
||||||
void SetBounds(const gfx::Rect& bounds);
|
void SetBounds(const gfx::Rect& bounds);
|
||||||
gfx::Rect GetBounds();
|
gfx::Rect GetBounds();
|
||||||
|
|
|
@ -29,13 +29,13 @@ namespace electron {
|
||||||
|
|
||||||
namespace api {
|
namespace api {
|
||||||
|
|
||||||
BrowserWindow::BrowserWindow(v8::Isolate* isolate,
|
BrowserWindow::BrowserWindow(gin::Arguments* args,
|
||||||
v8::Local<v8::Object> wrapper,
|
|
||||||
const mate::Dictionary& options)
|
const mate::Dictionary& options)
|
||||||
: TopLevelWindow(isolate, options), weak_factory_(this) {
|
: TopLevelWindow(args->isolate(), options), weak_factory_(this) {
|
||||||
mate::Handle<class WebContents> web_contents;
|
mate::Handle<class WebContents> web_contents;
|
||||||
|
|
||||||
// Use options.webPreferences in WebContents.
|
// Use options.webPreferences in WebContents.
|
||||||
|
v8::Isolate* isolate = args->isolate();
|
||||||
mate::Dictionary web_preferences = mate::Dictionary::CreateEmpty(isolate);
|
mate::Dictionary web_preferences = mate::Dictionary::CreateEmpty(isolate);
|
||||||
options.Get(options::kWebPreferences, &web_preferences);
|
options.Get(options::kWebPreferences, &web_preferences);
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ BrowserWindow::BrowserWindow(v8::Isolate* isolate,
|
||||||
if (host)
|
if (host)
|
||||||
host->GetWidget()->AddInputEventObserver(this);
|
host->GetWidget()->AddInputEventObserver(this);
|
||||||
|
|
||||||
InitWith(isolate, wrapper);
|
InitWithArgs(args);
|
||||||
|
|
||||||
#if defined(OS_MACOSX)
|
#if defined(OS_MACOSX)
|
||||||
OverrideNSWindowContentView(web_contents->managed_web_contents());
|
OverrideNSWindowContentView(web_contents->managed_web_contents());
|
||||||
|
@ -444,9 +444,10 @@ void BrowserWindow::OnWindowHide() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
mate::WrappableBase* BrowserWindow::New(mate::Arguments* args) {
|
mate::WrappableBase* BrowserWindow::New(gin_helper::ErrorThrower thrower,
|
||||||
|
gin::Arguments* args) {
|
||||||
if (!Browser::Get()->is_ready()) {
|
if (!Browser::Get()->is_ready()) {
|
||||||
args->ThrowError("Cannot create BrowserWindow before app is ready");
|
thrower.ThrowError("Cannot create BrowserWindow before app is ready");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -460,7 +461,7 @@ mate::WrappableBase* BrowserWindow::New(mate::Arguments* args) {
|
||||||
options = mate::Dictionary::CreateEmpty(args->isolate());
|
options = mate::Dictionary::CreateEmpty(args->isolate());
|
||||||
}
|
}
|
||||||
|
|
||||||
return new BrowserWindow(args->isolate(), args->GetThis(), options);
|
return new BrowserWindow(args, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include "base/cancelable_callback.h"
|
#include "base/cancelable_callback.h"
|
||||||
#include "shell/browser/api/atom_api_top_level_window.h"
|
#include "shell/browser/api/atom_api_top_level_window.h"
|
||||||
#include "shell/browser/api/atom_api_web_contents.h"
|
#include "shell/browser/api/atom_api_web_contents.h"
|
||||||
|
#include "shell/common/gin_helper/error_thrower.h"
|
||||||
|
|
||||||
namespace electron {
|
namespace electron {
|
||||||
|
|
||||||
|
@ -22,7 +23,8 @@ class BrowserWindow : public TopLevelWindow,
|
||||||
public content::WebContentsObserver,
|
public content::WebContentsObserver,
|
||||||
public ExtendedWebContentsObserver {
|
public ExtendedWebContentsObserver {
|
||||||
public:
|
public:
|
||||||
static mate::WrappableBase* New(mate::Arguments* args);
|
static mate::WrappableBase* New(gin_helper::ErrorThrower thrower,
|
||||||
|
gin::Arguments* args);
|
||||||
|
|
||||||
static void BuildPrototype(v8::Isolate* isolate,
|
static void BuildPrototype(v8::Isolate* isolate,
|
||||||
v8::Local<v8::FunctionTemplate> prototype);
|
v8::Local<v8::FunctionTemplate> prototype);
|
||||||
|
@ -36,9 +38,7 @@ class BrowserWindow : public TopLevelWindow,
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
BrowserWindow(v8::Isolate* isolate,
|
BrowserWindow(gin::Arguments* args, const mate::Dictionary& options);
|
||||||
v8::Local<v8::Object> wrapper,
|
|
||||||
const mate::Dictionary& options);
|
|
||||||
~BrowserWindow() override;
|
~BrowserWindow() override;
|
||||||
|
|
||||||
// content::RenderWidgetHost::InputEventObserver:
|
// content::RenderWidgetHost::InputEventObserver:
|
||||||
|
|
|
@ -28,9 +28,8 @@ namespace electron {
|
||||||
|
|
||||||
namespace api {
|
namespace api {
|
||||||
|
|
||||||
Menu::Menu(v8::Isolate* isolate, v8::Local<v8::Object> wrapper)
|
Menu::Menu(gin::Arguments* args) : model_(new AtomMenuModel(this)) {
|
||||||
: model_(new AtomMenuModel(this)) {
|
InitWithArgs(args);
|
||||||
InitWith(isolate, wrapper);
|
|
||||||
model_->AddObserver(this);
|
model_->AddObserver(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include "base/callback.h"
|
#include "base/callback.h"
|
||||||
|
#include "gin/arguments.h"
|
||||||
#include "shell/browser/api/atom_api_top_level_window.h"
|
#include "shell/browser/api/atom_api_top_level_window.h"
|
||||||
#include "shell/browser/api/trackable_object.h"
|
#include "shell/browser/api/trackable_object.h"
|
||||||
#include "shell/browser/ui/atom_menu_model.h"
|
#include "shell/browser/ui/atom_menu_model.h"
|
||||||
|
@ -21,7 +22,7 @@ class Menu : public mate::TrackableObject<Menu>,
|
||||||
public AtomMenuModel::Delegate,
|
public AtomMenuModel::Delegate,
|
||||||
public AtomMenuModel::Observer {
|
public AtomMenuModel::Observer {
|
||||||
public:
|
public:
|
||||||
static mate::WrappableBase* New(mate::Arguments* args);
|
static mate::WrappableBase* New(gin::Arguments* args);
|
||||||
|
|
||||||
static void BuildPrototype(v8::Isolate* isolate,
|
static void BuildPrototype(v8::Isolate* isolate,
|
||||||
v8::Local<v8::FunctionTemplate> prototype);
|
v8::Local<v8::FunctionTemplate> prototype);
|
||||||
|
@ -37,7 +38,7 @@ class Menu : public mate::TrackableObject<Menu>,
|
||||||
AtomMenuModel* model() const { return model_.get(); }
|
AtomMenuModel* model() const { return model_.get(); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Menu(v8::Isolate* isolate, v8::Local<v8::Object> wrapper);
|
explicit Menu(gin::Arguments* args);
|
||||||
~Menu() override;
|
~Menu() override;
|
||||||
|
|
||||||
// mate::Wrappable:
|
// mate::Wrappable:
|
||||||
|
@ -144,31 +145,4 @@ struct Converter<electron::AtomMenuModel*> {
|
||||||
|
|
||||||
} // namespace mate
|
} // namespace mate
|
||||||
|
|
||||||
namespace gin {
|
|
||||||
|
|
||||||
template <>
|
|
||||||
struct Converter<electron::AtomMenuModel*> {
|
|
||||||
static bool FromV8(v8::Isolate* isolate,
|
|
||||||
v8::Local<v8::Value> val,
|
|
||||||
electron::AtomMenuModel** out) {
|
|
||||||
return mate::ConvertFromV8(isolate, val, out);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// TODO(zcbenz): Remove this after converting Menu to gin::Wrapper.
|
|
||||||
template <>
|
|
||||||
struct Converter<electron::api::Menu*> {
|
|
||||||
static bool FromV8(v8::Isolate* isolate,
|
|
||||||
v8::Local<v8::Value> val,
|
|
||||||
electron::api::Menu** out) {
|
|
||||||
return mate::ConvertFromV8(isolate, val, out);
|
|
||||||
}
|
|
||||||
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
|
|
||||||
electron::api::Menu* in) {
|
|
||||||
return mate::ConvertToV8(isolate, in);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace gin
|
|
||||||
|
|
||||||
#endif // SHELL_BROWSER_API_ATOM_API_MENU_H_
|
#endif // SHELL_BROWSER_API_ATOM_API_MENU_H_
|
||||||
|
|
|
@ -20,7 +20,7 @@ namespace api {
|
||||||
|
|
||||||
class MenuMac : public Menu {
|
class MenuMac : public Menu {
|
||||||
protected:
|
protected:
|
||||||
MenuMac(v8::Isolate* isolate, v8::Local<v8::Object> wrapper);
|
explicit MenuMac(gin::Arguments* args);
|
||||||
~MenuMac() override;
|
~MenuMac() override;
|
||||||
|
|
||||||
void PopupAt(TopLevelWindow* window,
|
void PopupAt(TopLevelWindow* window,
|
||||||
|
|
|
@ -30,8 +30,7 @@ namespace electron {
|
||||||
|
|
||||||
namespace api {
|
namespace api {
|
||||||
|
|
||||||
MenuMac::MenuMac(v8::Isolate* isolate, v8::Local<v8::Object> wrapper)
|
MenuMac::MenuMac(gin::Arguments* args) : Menu(args), weak_factory_(this) {}
|
||||||
: Menu(isolate, wrapper), weak_factory_(this) {}
|
|
||||||
|
|
||||||
MenuMac::~MenuMac() = default;
|
MenuMac::~MenuMac() = default;
|
||||||
|
|
||||||
|
@ -173,8 +172,8 @@ void Menu::SendActionToFirstResponder(const std::string& action) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
mate::WrappableBase* Menu::New(mate::Arguments* args) {
|
mate::WrappableBase* Menu::New(gin::Arguments* args) {
|
||||||
return new MenuMac(args->isolate(), args->GetThis());
|
return new MenuMac(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace api
|
} // namespace api
|
||||||
|
|
|
@ -16,8 +16,7 @@ namespace electron {
|
||||||
|
|
||||||
namespace api {
|
namespace api {
|
||||||
|
|
||||||
MenuViews::MenuViews(v8::Isolate* isolate, v8::Local<v8::Object> wrapper)
|
MenuViews::MenuViews(gin::Arguments* args) : Menu(args), weak_factory_(this) {}
|
||||||
: Menu(isolate, wrapper), weak_factory_(this) {}
|
|
||||||
|
|
||||||
MenuViews::~MenuViews() = default;
|
MenuViews::~MenuViews() = default;
|
||||||
|
|
||||||
|
@ -75,8 +74,8 @@ void MenuViews::OnClosed(int32_t window_id, base::Closure callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
mate::WrappableBase* Menu::New(mate::Arguments* args) {
|
mate::WrappableBase* Menu::New(gin::Arguments* args) {
|
||||||
return new MenuViews(args->isolate(), args->GetThis());
|
return new MenuViews(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace api
|
} // namespace api
|
||||||
|
|
|
@ -19,7 +19,7 @@ namespace api {
|
||||||
|
|
||||||
class MenuViews : public Menu {
|
class MenuViews : public Menu {
|
||||||
public:
|
public:
|
||||||
MenuViews(v8::Isolate* isolate, v8::Local<v8::Object> wrapper);
|
explicit MenuViews(gin::Arguments* args);
|
||||||
~MenuViews() override;
|
~MenuViews() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
|
@ -60,20 +60,6 @@ struct Converter<ui::NativeTheme::ThemeSource> {
|
||||||
ui::NativeTheme::ThemeSource* out);
|
ui::NativeTheme::ThemeSource* out);
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO(zcbenz): Remove this after converting NativeTheme to gin::Wrapper.
|
|
||||||
template <>
|
|
||||||
struct Converter<electron::api::NativeTheme*> {
|
|
||||||
static bool FromV8(v8::Isolate* isolate,
|
|
||||||
v8::Local<v8::Value> val,
|
|
||||||
electron::api::NativeTheme** out) {
|
|
||||||
return mate::ConvertFromV8(isolate, val, out);
|
|
||||||
}
|
|
||||||
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
|
|
||||||
electron::api::NativeTheme* in) {
|
|
||||||
return mate::ConvertToV8(isolate, in);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace gin
|
} // namespace gin
|
||||||
|
|
||||||
#endif // SHELL_BROWSER_API_ATOM_API_NATIVE_THEME_H_
|
#endif // SHELL_BROWSER_API_ATOM_API_NATIVE_THEME_H_
|
||||||
|
|
|
@ -49,9 +49,8 @@ namespace electron {
|
||||||
|
|
||||||
namespace api {
|
namespace api {
|
||||||
|
|
||||||
Notification::Notification(v8::Local<v8::Object> wrapper,
|
Notification::Notification(gin::Arguments* args) {
|
||||||
gin::Arguments* args) {
|
InitWithArgs(args);
|
||||||
InitWith(args->isolate(), wrapper);
|
|
||||||
|
|
||||||
presenter_ = static_cast<AtomBrowserClient*>(AtomBrowserClient::Get())
|
presenter_ = static_cast<AtomBrowserClient*>(AtomBrowserClient::Get())
|
||||||
->GetNotificationPresenter();
|
->GetNotificationPresenter();
|
||||||
|
@ -82,13 +81,13 @@ Notification::~Notification() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
mate::WrappableBase* Notification::New(mate::Arguments* args) {
|
mate::WrappableBase* Notification::New(gin_helper::ErrorThrower thrower,
|
||||||
|
gin::Arguments* args) {
|
||||||
if (!Browser::Get()->is_ready()) {
|
if (!Browser::Get()->is_ready()) {
|
||||||
args->ThrowError("Cannot create Notification before app is ready");
|
thrower.ThrowError("Cannot create Notification before app is ready");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
gin::Arguments gin_args(args->info());
|
return new Notification(args);
|
||||||
return new Notification(args->GetThis(), &gin_args);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Getters
|
// Getters
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include "shell/browser/notifications/notification.h"
|
#include "shell/browser/notifications/notification.h"
|
||||||
#include "shell/browser/notifications/notification_delegate.h"
|
#include "shell/browser/notifications/notification_delegate.h"
|
||||||
#include "shell/browser/notifications/notification_presenter.h"
|
#include "shell/browser/notifications/notification_presenter.h"
|
||||||
|
#include "shell/common/gin_helper/error_thrower.h"
|
||||||
#include "ui/gfx/image/image.h"
|
#include "ui/gfx/image/image.h"
|
||||||
|
|
||||||
namespace gin {
|
namespace gin {
|
||||||
|
@ -27,7 +28,8 @@ namespace api {
|
||||||
class Notification : public mate::TrackableObject<Notification>,
|
class Notification : public mate::TrackableObject<Notification>,
|
||||||
public NotificationDelegate {
|
public NotificationDelegate {
|
||||||
public:
|
public:
|
||||||
static mate::WrappableBase* New(mate::Arguments* args);
|
static mate::WrappableBase* New(gin_helper::ErrorThrower thrower,
|
||||||
|
gin::Arguments* args);
|
||||||
static bool IsSupported();
|
static bool IsSupported();
|
||||||
|
|
||||||
static void BuildPrototype(v8::Isolate* isolate,
|
static void BuildPrototype(v8::Isolate* isolate,
|
||||||
|
@ -42,7 +44,7 @@ class Notification : public mate::TrackableObject<Notification>,
|
||||||
void NotificationClosed() override;
|
void NotificationClosed() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Notification(v8::Local<v8::Object> wrapper, gin::Arguments* args);
|
explicit Notification(gin::Arguments* args);
|
||||||
~Notification() override;
|
~Notification() override;
|
||||||
|
|
||||||
void Show();
|
void Show();
|
||||||
|
@ -101,22 +103,4 @@ class Notification : public mate::TrackableObject<Notification>,
|
||||||
|
|
||||||
} // namespace electron
|
} // namespace electron
|
||||||
|
|
||||||
namespace gin {
|
|
||||||
|
|
||||||
// TODO(zcbenz): Remove this after converting Notification to gin::Wrapper.
|
|
||||||
template <>
|
|
||||||
struct Converter<electron::api::Notification*> {
|
|
||||||
static bool FromV8(v8::Isolate* isolate,
|
|
||||||
v8::Local<v8::Value> val,
|
|
||||||
electron::api::Notification** out) {
|
|
||||||
return mate::ConvertFromV8(isolate, val, out);
|
|
||||||
}
|
|
||||||
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
|
|
||||||
electron::api::Notification* in) {
|
|
||||||
return mate::ConvertToV8(isolate, in);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace gin
|
|
||||||
|
|
||||||
#endif // SHELL_BROWSER_API_ATOM_API_NOTIFICATION_H_
|
#endif // SHELL_BROWSER_API_ATOM_API_NOTIFICATION_H_
|
||||||
|
|
|
@ -13,8 +13,10 @@
|
||||||
#include "shell/browser/atom_browser_context.h"
|
#include "shell/browser/atom_browser_context.h"
|
||||||
#include "shell/browser/browser.h"
|
#include "shell/browser/browser.h"
|
||||||
#include "shell/common/deprecate_util.h"
|
#include "shell/common/deprecate_util.h"
|
||||||
#include "shell/common/native_mate_converters/net_converter.h"
|
#include "shell/common/gin_converters/callback_converter.h"
|
||||||
#include "shell/common/native_mate_converters/once_callback.h"
|
#include "shell/common/gin_converters/net_converter.h"
|
||||||
|
#include "shell/common/gin_helper/dictionary.h"
|
||||||
|
#include "shell/common/gin_helper/object_template_builder.h"
|
||||||
#include "shell/common/options_switches.h"
|
#include "shell/common/options_switches.h"
|
||||||
#include "shell/common/promise_util.h"
|
#include "shell/common/promise_util.h"
|
||||||
|
|
||||||
|
@ -39,19 +41,19 @@ struct CustomScheme {
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
namespace mate {
|
namespace gin {
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct Converter<CustomScheme> {
|
struct Converter<CustomScheme> {
|
||||||
static bool FromV8(v8::Isolate* isolate,
|
static bool FromV8(v8::Isolate* isolate,
|
||||||
v8::Local<v8::Value> val,
|
v8::Local<v8::Value> val,
|
||||||
CustomScheme* out) {
|
CustomScheme* out) {
|
||||||
mate::Dictionary dict;
|
gin::Dictionary dict(isolate);
|
||||||
if (!ConvertFromV8(isolate, val, &dict))
|
if (!ConvertFromV8(isolate, val, &dict))
|
||||||
return false;
|
return false;
|
||||||
if (!dict.Get("scheme", &(out->scheme)))
|
if (!dict.Get("scheme", &(out->scheme)))
|
||||||
return false;
|
return false;
|
||||||
mate::Dictionary opt;
|
gin::Dictionary opt(isolate);
|
||||||
// options are optional. Default values specified in SchemeOptions are used
|
// options are optional. Default values specified in SchemeOptions are used
|
||||||
if (dict.Get("privileges", &opt)) {
|
if (dict.Get("privileges", &opt)) {
|
||||||
opt.Get("standard", &(out->options.standard));
|
opt.Get("standard", &(out->options.standard));
|
||||||
|
@ -66,7 +68,7 @@ struct Converter<CustomScheme> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace mate
|
} // namespace gin
|
||||||
|
|
||||||
namespace electron {
|
namespace electron {
|
||||||
namespace api {
|
namespace api {
|
||||||
|
@ -75,11 +77,11 @@ std::vector<std::string> GetStandardSchemes() {
|
||||||
return g_standard_schemes;
|
return g_standard_schemes;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RegisterSchemesAsPrivileged(v8::Local<v8::Value> val,
|
void RegisterSchemesAsPrivileged(gin_helper::ErrorThrower thrower,
|
||||||
mate::Arguments* args) {
|
v8::Local<v8::Value> val) {
|
||||||
std::vector<CustomScheme> custom_schemes;
|
std::vector<CustomScheme> custom_schemes;
|
||||||
if (!mate::ConvertFromV8(args->isolate(), val, &custom_schemes)) {
|
if (!gin::ConvertFromV8(thrower.isolate(), val, &custom_schemes)) {
|
||||||
args->ThrowError("Argument must be an array of custom schemes.");
|
thrower.ThrowError("Argument must be an array of custom schemes.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -181,7 +183,7 @@ ProtocolError ProtocolNS::RegisterProtocol(ProtocolType type,
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProtocolNS::UnregisterProtocol(const std::string& scheme,
|
void ProtocolNS::UnregisterProtocol(const std::string& scheme,
|
||||||
mate::Arguments* args) {
|
gin::Arguments* args) {
|
||||||
const bool removed = handlers_.erase(scheme) != 0;
|
const bool removed = handlers_.erase(scheme) != 0;
|
||||||
const auto error =
|
const auto error =
|
||||||
removed ? ProtocolError::OK : ProtocolError::NOT_REGISTERED;
|
removed ? ProtocolError::OK : ProtocolError::NOT_REGISTERED;
|
||||||
|
@ -201,7 +203,7 @@ ProtocolError ProtocolNS::InterceptProtocol(ProtocolType type,
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProtocolNS::UninterceptProtocol(const std::string& scheme,
|
void ProtocolNS::UninterceptProtocol(const std::string& scheme,
|
||||||
mate::Arguments* args) {
|
gin::Arguments* args) {
|
||||||
const bool removed = intercept_handlers_.erase(scheme) != 0;
|
const bool removed = intercept_handlers_.erase(scheme) != 0;
|
||||||
const auto error =
|
const auto error =
|
||||||
removed ? ProtocolError::OK : ProtocolError::NOT_INTERCEPTED;
|
removed ? ProtocolError::OK : ProtocolError::NOT_INTERCEPTED;
|
||||||
|
@ -213,7 +215,7 @@ bool ProtocolNS::IsProtocolIntercepted(const std::string& scheme) {
|
||||||
}
|
}
|
||||||
|
|
||||||
v8::Local<v8::Promise> ProtocolNS::IsProtocolHandled(const std::string& scheme,
|
v8::Local<v8::Promise> ProtocolNS::IsProtocolHandled(const std::string& scheme,
|
||||||
mate::Arguments* args) {
|
gin::Arguments* args) {
|
||||||
node::Environment* env = node::Environment::GetCurrent(args->isolate());
|
node::Environment* env = node::Environment::GetCurrent(args->isolate());
|
||||||
EmitDeprecationWarning(
|
EmitDeprecationWarning(
|
||||||
env,
|
env,
|
||||||
|
@ -234,7 +236,7 @@ v8::Local<v8::Promise> ProtocolNS::IsProtocolHandled(const std::string& scheme,
|
||||||
base::Contains(kBuiltinSchemes, scheme));
|
base::Contains(kBuiltinSchemes, scheme));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProtocolNS::HandleOptionalCallback(mate::Arguments* args,
|
void ProtocolNS::HandleOptionalCallback(gin::Arguments* args,
|
||||||
ProtocolError error) {
|
ProtocolError error) {
|
||||||
CompletionCallback callback;
|
CompletionCallback callback;
|
||||||
if (args->GetNext(&callback)) {
|
if (args->GetNext(&callback)) {
|
||||||
|
@ -247,22 +249,22 @@ void ProtocolNS::HandleOptionalCallback(mate::Arguments* args,
|
||||||
callback.Run(v8::Null(args->isolate()));
|
callback.Run(v8::Null(args->isolate()));
|
||||||
else
|
else
|
||||||
callback.Run(v8::Exception::Error(
|
callback.Run(v8::Exception::Error(
|
||||||
mate::StringToV8(isolate(), ErrorCodeToString(error))));
|
gin::StringToV8(isolate(), ErrorCodeToString(error))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
mate::Handle<ProtocolNS> ProtocolNS::Create(
|
gin::Handle<ProtocolNS> ProtocolNS::Create(
|
||||||
v8::Isolate* isolate,
|
v8::Isolate* isolate,
|
||||||
AtomBrowserContext* browser_context) {
|
AtomBrowserContext* browser_context) {
|
||||||
return mate::CreateHandle(isolate, new ProtocolNS(isolate, browser_context));
|
return gin::CreateHandle(isolate, new ProtocolNS(isolate, browser_context));
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
void ProtocolNS::BuildPrototype(v8::Isolate* isolate,
|
void ProtocolNS::BuildPrototype(v8::Isolate* isolate,
|
||||||
v8::Local<v8::FunctionTemplate> prototype) {
|
v8::Local<v8::FunctionTemplate> prototype) {
|
||||||
prototype->SetClassName(mate::StringToV8(isolate, "Protocol"));
|
prototype->SetClassName(gin::StringToV8(isolate, "Protocol"));
|
||||||
mate::ObjectTemplateBuilder(isolate, prototype->PrototypeTemplate())
|
gin_helper::ObjectTemplateBuilder(isolate, prototype->PrototypeTemplate())
|
||||||
.SetMethod("registerStringProtocol",
|
.SetMethod("registerStringProtocol",
|
||||||
&ProtocolNS::RegisterProtocolFor<ProtocolType::kString>)
|
&ProtocolNS::RegisterProtocolFor<ProtocolType::kString>)
|
||||||
.SetMethod("registerBufferProtocol",
|
.SetMethod("registerBufferProtocol",
|
||||||
|
@ -299,16 +301,16 @@ void ProtocolNS::BuildPrototype(v8::Isolate* isolate,
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
void RegisterSchemesAsPrivileged(v8::Local<v8::Value> val,
|
void RegisterSchemesAsPrivileged(gin_helper::ErrorThrower thrower,
|
||||||
mate::Arguments* args) {
|
v8::Local<v8::Value> val) {
|
||||||
if (electron::Browser::Get()->is_ready()) {
|
if (electron::Browser::Get()->is_ready()) {
|
||||||
args->ThrowError(
|
thrower.ThrowError(
|
||||||
"protocol.registerSchemesAsPrivileged should be called before "
|
"protocol.registerSchemesAsPrivileged should be called before "
|
||||||
"app is ready");
|
"app is ready");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
electron::api::RegisterSchemesAsPrivileged(val, args);
|
electron::api::RegisterSchemesAsPrivileged(thrower, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Initialize(v8::Local<v8::Object> exports,
|
void Initialize(v8::Local<v8::Object> exports,
|
||||||
|
@ -316,7 +318,7 @@ void Initialize(v8::Local<v8::Object> exports,
|
||||||
v8::Local<v8::Context> context,
|
v8::Local<v8::Context> context,
|
||||||
void* priv) {
|
void* priv) {
|
||||||
v8::Isolate* isolate = context->GetIsolate();
|
v8::Isolate* isolate = context->GetIsolate();
|
||||||
mate::Dictionary dict(isolate, exports);
|
gin_helper::Dictionary dict(isolate, exports);
|
||||||
dict.SetMethod("registerSchemesAsPrivileged", &RegisterSchemesAsPrivileged);
|
dict.SetMethod("registerSchemesAsPrivileged", &RegisterSchemesAsPrivileged);
|
||||||
dict.SetMethod("getStandardSchemes", &electron::api::GetStandardSchemes);
|
dict.SetMethod("getStandardSchemes", &electron::api::GetStandardSchemes);
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,10 +9,10 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include "content/public/browser/content_browser_client.h"
|
#include "content/public/browser/content_browser_client.h"
|
||||||
#include "native_mate/dictionary.h"
|
#include "gin/handle.h"
|
||||||
#include "native_mate/handle.h"
|
|
||||||
#include "shell/browser/api/trackable_object.h"
|
#include "shell/browser/api/trackable_object.h"
|
||||||
#include "shell/browser/net/atom_url_loader_factory.h"
|
#include "shell/browser/net/atom_url_loader_factory.h"
|
||||||
|
#include "shell/common/gin_helper/dictionary.h"
|
||||||
|
|
||||||
namespace electron {
|
namespace electron {
|
||||||
|
|
||||||
|
@ -22,8 +22,8 @@ namespace api {
|
||||||
|
|
||||||
std::vector<std::string> GetStandardSchemes();
|
std::vector<std::string> GetStandardSchemes();
|
||||||
|
|
||||||
void RegisterSchemesAsPrivileged(v8::Local<v8::Value> val,
|
void RegisterSchemesAsPrivileged(gin_helper::ErrorThrower thrower,
|
||||||
mate::Arguments* args);
|
v8::Local<v8::Value> val);
|
||||||
|
|
||||||
// Possible errors.
|
// Possible errors.
|
||||||
enum class ProtocolError {
|
enum class ProtocolError {
|
||||||
|
@ -37,8 +37,8 @@ enum class ProtocolError {
|
||||||
// Protocol implementation based on network services.
|
// Protocol implementation based on network services.
|
||||||
class ProtocolNS : public mate::TrackableObject<ProtocolNS> {
|
class ProtocolNS : public mate::TrackableObject<ProtocolNS> {
|
||||||
public:
|
public:
|
||||||
static mate::Handle<ProtocolNS> Create(v8::Isolate* isolate,
|
static gin::Handle<ProtocolNS> Create(v8::Isolate* isolate,
|
||||||
AtomBrowserContext* browser_context);
|
AtomBrowserContext* browser_context);
|
||||||
|
|
||||||
static void BuildPrototype(v8::Isolate* isolate,
|
static void BuildPrototype(v8::Isolate* isolate,
|
||||||
v8::Local<v8::FunctionTemplate> prototype);
|
v8::Local<v8::FunctionTemplate> prototype);
|
||||||
|
@ -61,35 +61,35 @@ class ProtocolNS : public mate::TrackableObject<ProtocolNS> {
|
||||||
ProtocolError RegisterProtocol(ProtocolType type,
|
ProtocolError RegisterProtocol(ProtocolType type,
|
||||||
const std::string& scheme,
|
const std::string& scheme,
|
||||||
const ProtocolHandler& handler);
|
const ProtocolHandler& handler);
|
||||||
void UnregisterProtocol(const std::string& scheme, mate::Arguments* args);
|
void UnregisterProtocol(const std::string& scheme, gin::Arguments* args);
|
||||||
bool IsProtocolRegistered(const std::string& scheme);
|
bool IsProtocolRegistered(const std::string& scheme);
|
||||||
|
|
||||||
ProtocolError InterceptProtocol(ProtocolType type,
|
ProtocolError InterceptProtocol(ProtocolType type,
|
||||||
const std::string& scheme,
|
const std::string& scheme,
|
||||||
const ProtocolHandler& handler);
|
const ProtocolHandler& handler);
|
||||||
void UninterceptProtocol(const std::string& scheme, mate::Arguments* args);
|
void UninterceptProtocol(const std::string& scheme, gin::Arguments* args);
|
||||||
bool IsProtocolIntercepted(const std::string& scheme);
|
bool IsProtocolIntercepted(const std::string& scheme);
|
||||||
|
|
||||||
// Old async version of IsProtocolRegistered.
|
// Old async version of IsProtocolRegistered.
|
||||||
v8::Local<v8::Promise> IsProtocolHandled(const std::string& scheme,
|
v8::Local<v8::Promise> IsProtocolHandled(const std::string& scheme,
|
||||||
mate::Arguments* args);
|
gin::Arguments* args);
|
||||||
|
|
||||||
// Helper for converting old registration APIs to new RegisterProtocol API.
|
// Helper for converting old registration APIs to new RegisterProtocol API.
|
||||||
template <ProtocolType type>
|
template <ProtocolType type>
|
||||||
void RegisterProtocolFor(const std::string& scheme,
|
void RegisterProtocolFor(const std::string& scheme,
|
||||||
const ProtocolHandler& handler,
|
const ProtocolHandler& handler,
|
||||||
mate::Arguments* args) {
|
gin::Arguments* args) {
|
||||||
HandleOptionalCallback(args, RegisterProtocol(type, scheme, handler));
|
HandleOptionalCallback(args, RegisterProtocol(type, scheme, handler));
|
||||||
}
|
}
|
||||||
template <ProtocolType type>
|
template <ProtocolType type>
|
||||||
void InterceptProtocolFor(const std::string& scheme,
|
void InterceptProtocolFor(const std::string& scheme,
|
||||||
const ProtocolHandler& handler,
|
const ProtocolHandler& handler,
|
||||||
mate::Arguments* args) {
|
gin::Arguments* args) {
|
||||||
HandleOptionalCallback(args, InterceptProtocol(type, scheme, handler));
|
HandleOptionalCallback(args, InterceptProtocol(type, scheme, handler));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Be compatible with old interface, which accepts optional callback.
|
// Be compatible with old interface, which accepts optional callback.
|
||||||
void HandleOptionalCallback(mate::Arguments* args, ProtocolError error);
|
void HandleOptionalCallback(gin::Arguments* args, ProtocolError error);
|
||||||
|
|
||||||
HandlersMap handlers_;
|
HandlersMap handlers_;
|
||||||
HandlersMap intercept_handlers_;
|
HandlersMap intercept_handlers_;
|
||||||
|
|
|
@ -121,22 +121,4 @@ class Session : public mate::TrackableObject<Session>,
|
||||||
|
|
||||||
} // namespace electron
|
} // namespace electron
|
||||||
|
|
||||||
namespace gin {
|
|
||||||
|
|
||||||
// TODO(zcbenz): Remove this after converting Session to gin::Wrapper.
|
|
||||||
template <>
|
|
||||||
struct Converter<electron::api::Session*> {
|
|
||||||
static bool FromV8(v8::Isolate* isolate,
|
|
||||||
v8::Local<v8::Value> val,
|
|
||||||
electron::api::Session** out) {
|
|
||||||
return mate::ConvertFromV8(isolate, val, out);
|
|
||||||
}
|
|
||||||
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
|
|
||||||
electron::api::Session* in) {
|
|
||||||
return mate::ConvertToV8(isolate, in);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace gin
|
|
||||||
|
|
||||||
#endif // SHELL_BROWSER_API_ATOM_API_SESSION_H_
|
#endif // SHELL_BROWSER_API_ATOM_API_SESSION_H_
|
||||||
|
|
|
@ -108,11 +108,10 @@ TopLevelWindow::TopLevelWindow(v8::Isolate* isolate,
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TopLevelWindow::TopLevelWindow(v8::Isolate* isolate,
|
TopLevelWindow::TopLevelWindow(gin::Arguments* args,
|
||||||
v8::Local<v8::Object> wrapper,
|
|
||||||
const mate::Dictionary& options)
|
const mate::Dictionary& options)
|
||||||
: TopLevelWindow(isolate, options) {
|
: TopLevelWindow(args->isolate(), options) {
|
||||||
InitWith(isolate, wrapper);
|
InitWithArgs(args);
|
||||||
// Init window after everything has been setup.
|
// Init window after everything has been setup.
|
||||||
window()->InitFromOptions(options);
|
window()->InitFromOptions(options);
|
||||||
}
|
}
|
||||||
|
@ -1057,11 +1056,11 @@ void TopLevelWindow::RemoveFromParentChildWindows() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
mate::WrappableBase* TopLevelWindow::New(mate::Arguments* args) {
|
mate::WrappableBase* TopLevelWindow::New(gin::Arguments* args) {
|
||||||
mate::Dictionary options = mate::Dictionary::CreateEmpty(args->isolate());
|
mate::Dictionary options = mate::Dictionary::CreateEmpty(args->isolate());
|
||||||
args->GetNext(&options);
|
args->GetNext(&options);
|
||||||
|
|
||||||
return new TopLevelWindow(args->isolate(), args->GetThis(), options);
|
return new TopLevelWindow(args, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
|
|
|
@ -28,7 +28,7 @@ class View;
|
||||||
class TopLevelWindow : public mate::TrackableObject<TopLevelWindow>,
|
class TopLevelWindow : public mate::TrackableObject<TopLevelWindow>,
|
||||||
public NativeWindowObserver {
|
public NativeWindowObserver {
|
||||||
public:
|
public:
|
||||||
static mate::WrappableBase* New(mate::Arguments* args);
|
static mate::WrappableBase* New(gin::Arguments* args);
|
||||||
|
|
||||||
static void BuildPrototype(v8::Isolate* isolate,
|
static void BuildPrototype(v8::Isolate* isolate,
|
||||||
v8::Local<v8::FunctionTemplate> prototype);
|
v8::Local<v8::FunctionTemplate> prototype);
|
||||||
|
@ -43,9 +43,7 @@ class TopLevelWindow : public mate::TrackableObject<TopLevelWindow>,
|
||||||
// Common constructor.
|
// Common constructor.
|
||||||
TopLevelWindow(v8::Isolate* isolate, const mate::Dictionary& options);
|
TopLevelWindow(v8::Isolate* isolate, const mate::Dictionary& options);
|
||||||
// Creating independent TopLevelWindow instance.
|
// Creating independent TopLevelWindow instance.
|
||||||
TopLevelWindow(v8::Isolate* isolate,
|
TopLevelWindow(gin::Arguments* args, const mate::Dictionary& options);
|
||||||
v8::Local<v8::Object> wrapper,
|
|
||||||
const mate::Dictionary& options);
|
|
||||||
~TopLevelWindow() override;
|
~TopLevelWindow() override;
|
||||||
|
|
||||||
// TrackableObject:
|
// TrackableObject:
|
||||||
|
@ -266,22 +264,4 @@ class TopLevelWindow : public mate::TrackableObject<TopLevelWindow>,
|
||||||
|
|
||||||
} // namespace electron
|
} // namespace electron
|
||||||
|
|
||||||
namespace gin {
|
|
||||||
|
|
||||||
// TODO(zcbenz): Remove this after converting TopLevelWindow to gin::Wrapper.
|
|
||||||
template <>
|
|
||||||
struct Converter<electron::api::TopLevelWindow*> {
|
|
||||||
static bool FromV8(v8::Isolate* isolate,
|
|
||||||
v8::Local<v8::Value> val,
|
|
||||||
electron::api::TopLevelWindow** out) {
|
|
||||||
return mate::ConvertFromV8(isolate, val, out);
|
|
||||||
}
|
|
||||||
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
|
|
||||||
electron::api::TopLevelWindow* in) {
|
|
||||||
return mate::ConvertToV8(isolate, in);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace gin
|
|
||||||
|
|
||||||
#endif // SHELL_BROWSER_API_ATOM_API_TOP_LEVEL_WINDOW_H_
|
#endif // SHELL_BROWSER_API_ATOM_API_TOP_LEVEL_WINDOW_H_
|
||||||
|
|
|
@ -55,26 +55,25 @@ namespace electron {
|
||||||
|
|
||||||
namespace api {
|
namespace api {
|
||||||
|
|
||||||
Tray::Tray(v8::Isolate* isolate,
|
Tray::Tray(mate::Handle<NativeImage> image, gin::Arguments* args)
|
||||||
v8::Local<v8::Object> wrapper,
|
|
||||||
mate::Handle<NativeImage> image)
|
|
||||||
: tray_icon_(TrayIcon::Create()) {
|
: tray_icon_(TrayIcon::Create()) {
|
||||||
SetImage(isolate, image);
|
SetImage(args->isolate(), image);
|
||||||
tray_icon_->AddObserver(this);
|
tray_icon_->AddObserver(this);
|
||||||
|
|
||||||
InitWith(isolate, wrapper);
|
InitWithArgs(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
Tray::~Tray() = default;
|
Tray::~Tray() = default;
|
||||||
|
|
||||||
// static
|
// static
|
||||||
mate::WrappableBase* Tray::New(mate::Handle<NativeImage> image,
|
mate::WrappableBase* Tray::New(gin_helper::ErrorThrower thrower,
|
||||||
mate::Arguments* args) {
|
mate::Handle<NativeImage> image,
|
||||||
|
gin::Arguments* args) {
|
||||||
if (!Browser::Get()->is_ready()) {
|
if (!Browser::Get()->is_ready()) {
|
||||||
args->ThrowError("Cannot create Tray before app is ready");
|
thrower.ThrowError("Cannot create Tray before app is ready");
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
return new Tray(args->isolate(), args->GetThis(), image);
|
return new Tray(image, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tray::OnClicked(const gfx::Rect& bounds,
|
void Tray::OnClicked(const gfx::Rect& bounds,
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include "shell/browser/api/trackable_object.h"
|
#include "shell/browser/api/trackable_object.h"
|
||||||
#include "shell/browser/ui/tray_icon.h"
|
#include "shell/browser/ui/tray_icon.h"
|
||||||
#include "shell/browser/ui/tray_icon_observer.h"
|
#include "shell/browser/ui/tray_icon_observer.h"
|
||||||
|
#include "shell/common/gin_helper/error_thrower.h"
|
||||||
|
|
||||||
namespace gfx {
|
namespace gfx {
|
||||||
class Image;
|
class Image;
|
||||||
|
@ -34,16 +35,15 @@ class NativeImage;
|
||||||
|
|
||||||
class Tray : public mate::TrackableObject<Tray>, public TrayIconObserver {
|
class Tray : public mate::TrackableObject<Tray>, public TrayIconObserver {
|
||||||
public:
|
public:
|
||||||
static mate::WrappableBase* New(mate::Handle<NativeImage> image,
|
static mate::WrappableBase* New(gin_helper::ErrorThrower thrower,
|
||||||
mate::Arguments* args);
|
mate::Handle<NativeImage> image,
|
||||||
|
gin::Arguments* args);
|
||||||
|
|
||||||
static void BuildPrototype(v8::Isolate* isolate,
|
static void BuildPrototype(v8::Isolate* isolate,
|
||||||
v8::Local<v8::FunctionTemplate> prototype);
|
v8::Local<v8::FunctionTemplate> prototype);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Tray(v8::Isolate* isolate,
|
Tray(mate::Handle<NativeImage> image, gin::Arguments* args);
|
||||||
v8::Local<v8::Object> wrapper,
|
|
||||||
mate::Handle<NativeImage> image);
|
|
||||||
~Tray() override;
|
~Tray() override;
|
||||||
|
|
||||||
// TrayIconObserver:
|
// TrayIconObserver:
|
||||||
|
|
|
@ -6,21 +6,22 @@
|
||||||
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
|
#include "gin/handle.h"
|
||||||
#include "mojo/public/cpp/bindings/receiver_set.h"
|
#include "mojo/public/cpp/bindings/receiver_set.h"
|
||||||
#include "mojo/public/cpp/system/string_data_source.h"
|
#include "mojo/public/cpp/system/string_data_source.h"
|
||||||
#include "native_mate/dictionary.h"
|
|
||||||
#include "net/http/http_util.h"
|
#include "net/http/http_util.h"
|
||||||
#include "services/network/public/mojom/chunked_data_pipe_getter.mojom.h"
|
#include "services/network/public/mojom/chunked_data_pipe_getter.mojom.h"
|
||||||
#include "shell/browser/api/atom_api_session.h"
|
#include "shell/browser/api/atom_api_session.h"
|
||||||
#include "shell/browser/atom_browser_context.h"
|
#include "shell/browser/atom_browser_context.h"
|
||||||
|
#include "shell/common/gin_converters/gurl_converter.h"
|
||||||
|
#include "shell/common/gin_converters/net_converter.h"
|
||||||
|
#include "shell/common/gin_helper/dictionary.h"
|
||||||
#include "shell/common/gin_helper/event_emitter_caller.h"
|
#include "shell/common/gin_helper/event_emitter_caller.h"
|
||||||
#include "shell/common/gin_helper/object_template_builder.h"
|
#include "shell/common/gin_helper/object_template_builder.h"
|
||||||
#include "shell/common/native_mate_converters/gurl_converter.h"
|
|
||||||
#include "shell/common/native_mate_converters/net_converter.h"
|
|
||||||
|
|
||||||
#include "shell/common/node_includes.h"
|
#include "shell/common/node_includes.h"
|
||||||
|
|
||||||
namespace mate {
|
namespace gin {
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct Converter<network::mojom::RedirectMode> {
|
struct Converter<network::mojom::RedirectMode> {
|
||||||
|
@ -42,7 +43,7 @@ struct Converter<network::mojom::RedirectMode> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace mate
|
} // namespace gin
|
||||||
|
|
||||||
namespace electron {
|
namespace electron {
|
||||||
|
|
||||||
|
@ -165,9 +166,9 @@ class ChunkedDataPipeGetter : public UploadDataPipeGetter,
|
||||||
mojo::ReceiverSet<network::mojom::ChunkedDataPipeGetter> receiver_set_;
|
mojo::ReceiverSet<network::mojom::ChunkedDataPipeGetter> receiver_set_;
|
||||||
};
|
};
|
||||||
|
|
||||||
URLRequestNS::URLRequestNS(mate::Arguments* args) : weak_factory_(this) {
|
URLRequestNS::URLRequestNS(gin::Arguments* args) : weak_factory_(this) {
|
||||||
request_ = std::make_unique<network::ResourceRequest>();
|
request_ = std::make_unique<network::ResourceRequest>();
|
||||||
mate::Dictionary dict;
|
gin_helper::Dictionary dict;
|
||||||
if (args->GetNext(&dict)) {
|
if (args->GetNext(&dict)) {
|
||||||
dict.Get("method", &request_->method);
|
dict.Get("method", &request_->method);
|
||||||
dict.Get("url", &request_->url);
|
dict.Get("url", &request_->url);
|
||||||
|
@ -186,7 +187,7 @@ URLRequestNS::URLRequestNS(mate::Arguments* args) : weak_factory_(this) {
|
||||||
|
|
||||||
url_loader_factory_ = session->browser_context()->GetURLLoaderFactory();
|
url_loader_factory_ = session->browser_context()->GetURLLoaderFactory();
|
||||||
|
|
||||||
InitWith(args->isolate(), args->GetThis());
|
InitWithArgs(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
URLRequestNS::~URLRequestNS() = default;
|
URLRequestNS::~URLRequestNS() = default;
|
||||||
|
@ -518,7 +519,7 @@ void URLRequestNS::EmitEvent(EventType type, Args... args) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
mate::WrappableBase* URLRequestNS::New(mate::Arguments* args) {
|
mate::WrappableBase* URLRequestNS::New(gin::Arguments* args) {
|
||||||
return new URLRequestNS(args);
|
return new URLRequestNS(args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,13 +28,13 @@ class UploadDataPipeGetter;
|
||||||
class URLRequestNS : public mate::EventEmitter<URLRequestNS>,
|
class URLRequestNS : public mate::EventEmitter<URLRequestNS>,
|
||||||
public network::SimpleURLLoaderStreamConsumer {
|
public network::SimpleURLLoaderStreamConsumer {
|
||||||
public:
|
public:
|
||||||
static mate::WrappableBase* New(mate::Arguments* args);
|
static mate::WrappableBase* New(gin::Arguments* args);
|
||||||
|
|
||||||
static void BuildPrototype(v8::Isolate* isolate,
|
static void BuildPrototype(v8::Isolate* isolate,
|
||||||
v8::Local<v8::FunctionTemplate> prototype);
|
v8::Local<v8::FunctionTemplate> prototype);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
explicit URLRequestNS(mate::Arguments* args);
|
explicit URLRequestNS(gin::Arguments* args);
|
||||||
~URLRequestNS() override;
|
~URLRequestNS() override;
|
||||||
|
|
||||||
bool NotStarted() const;
|
bool NotStarted() const;
|
||||||
|
@ -141,22 +141,4 @@ class URLRequestNS : public mate::EventEmitter<URLRequestNS>,
|
||||||
|
|
||||||
} // namespace electron
|
} // namespace electron
|
||||||
|
|
||||||
namespace gin {
|
|
||||||
|
|
||||||
// TODO(zcbenz): Remove this after converting URLRequestNS to gin::Wrapper.
|
|
||||||
template <>
|
|
||||||
struct Converter<electron::api::URLRequestNS*> {
|
|
||||||
static bool FromV8(v8::Isolate* isolate,
|
|
||||||
v8::Local<v8::Value> val,
|
|
||||||
electron::api::URLRequestNS** out) {
|
|
||||||
return mate::ConvertFromV8(isolate, val, out);
|
|
||||||
}
|
|
||||||
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
|
|
||||||
electron::api::URLRequestNS* in) {
|
|
||||||
return mate::ConvertToV8(isolate, in);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace gin
|
|
||||||
|
|
||||||
#endif // SHELL_BROWSER_API_ATOM_API_URL_REQUEST_NS_H_
|
#endif // SHELL_BROWSER_API_ATOM_API_URL_REQUEST_NS_H_
|
||||||
|
|
|
@ -42,9 +42,9 @@ void View::AddChildViewAt(mate::Handle<View> child, size_t index) {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// static
|
// static
|
||||||
mate::WrappableBase* View::New(mate::Arguments* args) {
|
mate::WrappableBase* View::New(gin::Arguments* args) {
|
||||||
auto* view = new View();
|
auto* view = new View();
|
||||||
view->InitWith(args->isolate(), args->GetThis());
|
view->InitWithArgs(args);
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ namespace api {
|
||||||
|
|
||||||
class View : public mate::TrackableObject<View> {
|
class View : public mate::TrackableObject<View> {
|
||||||
public:
|
public:
|
||||||
static mate::WrappableBase* New(mate::Arguments* args);
|
static mate::WrappableBase* New(gin::Arguments* args);
|
||||||
|
|
||||||
static void BuildPrototype(v8::Isolate* isolate,
|
static void BuildPrototype(v8::Isolate* isolate,
|
||||||
v8::Local<v8::FunctionTemplate> prototype);
|
v8::Local<v8::FunctionTemplate> prototype);
|
||||||
|
|
|
@ -575,22 +575,4 @@ class WebContents : public mate::TrackableObject<WebContents>,
|
||||||
|
|
||||||
} // namespace electron
|
} // namespace electron
|
||||||
|
|
||||||
namespace gin {
|
|
||||||
|
|
||||||
// TODO(zcbenz): Remove this after converting WebContents to gin::Wrapper.
|
|
||||||
template <>
|
|
||||||
struct Converter<electron::api::WebContents*> {
|
|
||||||
static bool FromV8(v8::Isolate* isolate,
|
|
||||||
v8::Local<v8::Value> val,
|
|
||||||
electron::api::WebContents** out) {
|
|
||||||
return mate::ConvertFromV8(isolate, val, out);
|
|
||||||
}
|
|
||||||
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
|
|
||||||
electron::api::WebContents* in) {
|
|
||||||
return mate::ConvertToV8(isolate, in);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace gin
|
|
||||||
|
|
||||||
#endif // SHELL_BROWSER_API_ATOM_API_WEB_CONTENTS_H_
|
#endif // SHELL_BROWSER_API_ATOM_API_WEB_CONTENTS_H_
|
||||||
|
|
|
@ -80,7 +80,7 @@ void WebContentsView::WebContentsDestroyed() {
|
||||||
|
|
||||||
// static
|
// static
|
||||||
mate::WrappableBase* WebContentsView::New(
|
mate::WrappableBase* WebContentsView::New(
|
||||||
mate::Arguments* args,
|
gin::Arguments* args,
|
||||||
mate::Handle<WebContents> web_contents) {
|
mate::Handle<WebContents> web_contents) {
|
||||||
// Currently we only support InspectableWebContents, e.g. the WebContents
|
// Currently we only support InspectableWebContents, e.g. the WebContents
|
||||||
// created by users directly. To support devToolsWebContents we need to create
|
// created by users directly. To support devToolsWebContents we need to create
|
||||||
|
@ -101,7 +101,7 @@ mate::WrappableBase* WebContentsView::New(
|
||||||
// Constructor call.
|
// Constructor call.
|
||||||
auto* view = new WebContentsView(args->isolate(), web_contents,
|
auto* view = new WebContentsView(args->isolate(), web_contents,
|
||||||
web_contents->managed_web_contents());
|
web_contents->managed_web_contents());
|
||||||
view->InitWith(args->isolate(), args->GetThis());
|
view->InitWithArgs(args);
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ class WebContents;
|
||||||
|
|
||||||
class WebContentsView : public View, public content::WebContentsObserver {
|
class WebContentsView : public View, public content::WebContentsObserver {
|
||||||
public:
|
public:
|
||||||
static mate::WrappableBase* New(mate::Arguments* args,
|
static mate::WrappableBase* New(gin::Arguments* args,
|
||||||
mate::Handle<WebContents> web_contents);
|
mate::Handle<WebContents> web_contents);
|
||||||
|
|
||||||
static void BuildPrototype(v8::Isolate* isolate,
|
static void BuildPrototype(v8::Isolate* isolate,
|
||||||
|
|
|
@ -13,8 +13,6 @@
|
||||||
#include "gin/arguments.h"
|
#include "gin/arguments.h"
|
||||||
#include "gin/handle.h"
|
#include "gin/handle.h"
|
||||||
#include "gin/wrappable.h"
|
#include "gin/wrappable.h"
|
||||||
#include "native_mate/dictionary.h"
|
|
||||||
#include "native_mate/handle.h"
|
|
||||||
#include "shell/browser/net/proxying_url_loader_factory.h"
|
#include "shell/browser/net/proxying_url_loader_factory.h"
|
||||||
|
|
||||||
namespace content {
|
namespace content {
|
||||||
|
|
|
@ -23,16 +23,16 @@
|
||||||
#include "shell/browser/net/node_stream_loader.h"
|
#include "shell/browser/net/node_stream_loader.h"
|
||||||
#include "shell/browser/net/url_pipe_loader.h"
|
#include "shell/browser/net/url_pipe_loader.h"
|
||||||
#include "shell/common/atom_constants.h"
|
#include "shell/common/atom_constants.h"
|
||||||
#include "shell/common/native_mate_converters/file_path_converter.h"
|
#include "shell/common/gin_converters/file_path_converter.h"
|
||||||
#include "shell/common/native_mate_converters/gurl_converter.h"
|
#include "shell/common/gin_converters/gurl_converter.h"
|
||||||
#include "shell/common/native_mate_converters/net_converter.h"
|
#include "shell/common/gin_converters/net_converter.h"
|
||||||
#include "shell/common/native_mate_converters/value_converter.h"
|
#include "shell/common/gin_converters/value_converter_gin_adapter.h"
|
||||||
|
|
||||||
#include "shell/common/node_includes.h"
|
#include "shell/common/node_includes.h"
|
||||||
|
|
||||||
using content::BrowserThread;
|
using content::BrowserThread;
|
||||||
|
|
||||||
namespace mate {
|
namespace gin {
|
||||||
|
|
||||||
template <>
|
template <>
|
||||||
struct Converter<electron::ProtocolType> {
|
struct Converter<electron::ProtocolType> {
|
||||||
|
@ -58,7 +58,7 @@ struct Converter<electron::ProtocolType> {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace mate
|
} // namespace gin
|
||||||
|
|
||||||
namespace electron {
|
namespace electron {
|
||||||
|
|
||||||
|
@ -77,17 +77,18 @@ bool ResponseMustBeObject(ProtocolType type) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper to convert value to Dictionary.
|
// Helper to convert value to Dictionary.
|
||||||
mate::Dictionary ToDict(v8::Isolate* isolate, v8::Local<v8::Value> value) {
|
gin::Dictionary ToDict(v8::Isolate* isolate, v8::Local<v8::Value> value) {
|
||||||
if (!value->IsFunction() && value->IsObject())
|
if (!value->IsFunction() && value->IsObject())
|
||||||
return mate::Dictionary(
|
return gin::Dictionary(
|
||||||
isolate,
|
isolate,
|
||||||
value->ToObject(isolate->GetCurrentContext()).ToLocalChecked());
|
value->ToObject(isolate->GetCurrentContext()).ToLocalChecked());
|
||||||
else
|
else
|
||||||
return mate::Dictionary();
|
return gin::Dictionary(isolate);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse headers from response object.
|
// Parse headers from response object.
|
||||||
network::ResourceResponseHead ToResponseHead(const mate::Dictionary& dict) {
|
network::ResourceResponseHead ToResponseHead(
|
||||||
|
const gin_helper::Dictionary& dict) {
|
||||||
network::ResourceResponseHead head;
|
network::ResourceResponseHead head;
|
||||||
head.mime_type = "text/html";
|
head.mime_type = "text/html";
|
||||||
head.charset = "utf-8";
|
head.charset = "utf-8";
|
||||||
|
@ -197,7 +198,7 @@ void AtomURLLoaderFactory::StartLoading(
|
||||||
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
|
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
|
||||||
network::mojom::URLLoaderFactory* proxy_factory,
|
network::mojom::URLLoaderFactory* proxy_factory,
|
||||||
ProtocolType type,
|
ProtocolType type,
|
||||||
mate::Arguments* args) {
|
gin::Arguments* args) {
|
||||||
// Send network error when there is no argument passed.
|
// Send network error when there is no argument passed.
|
||||||
//
|
//
|
||||||
// Note that we should not throw JS error in the callback no matter what is
|
// Note that we should not throw JS error in the callback no matter what is
|
||||||
|
@ -210,7 +211,7 @@ void AtomURLLoaderFactory::StartLoading(
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse {error} object.
|
// Parse {error} object.
|
||||||
mate::Dictionary dict = ToDict(args->isolate(), response);
|
gin_helper::Dictionary dict = ToDict(args->isolate(), response);
|
||||||
if (!dict.IsEmpty()) {
|
if (!dict.IsEmpty()) {
|
||||||
int error_code;
|
int error_code;
|
||||||
if (dict.Get("error", &error_code)) {
|
if (dict.Get("error", &error_code)) {
|
||||||
|
@ -251,7 +252,7 @@ void AtomURLLoaderFactory::StartLoading(
|
||||||
} else {
|
} else {
|
||||||
StartLoadingHttp(std::move(loader), new_request, std::move(client),
|
StartLoadingHttp(std::move(loader), new_request, std::move(client),
|
||||||
traffic_annotation,
|
traffic_annotation,
|
||||||
mate::Dictionary::CreateEmpty(args->isolate()));
|
gin::Dictionary::CreateEmpty(args->isolate()));
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -285,7 +286,7 @@ void AtomURLLoaderFactory::StartLoading(
|
||||||
break;
|
break;
|
||||||
case ProtocolType::kFree:
|
case ProtocolType::kFree:
|
||||||
ProtocolType type;
|
ProtocolType type;
|
||||||
if (!mate::ConvertFromV8(args->isolate(), response, &type)) {
|
if (!gin::ConvertFromV8(args->isolate(), response, &type)) {
|
||||||
client->OnComplete(network::URLLoaderCompletionStatus(net::ERR_FAILED));
|
client->OnComplete(network::URLLoaderCompletionStatus(net::ERR_FAILED));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -300,7 +301,7 @@ void AtomURLLoaderFactory::StartLoading(
|
||||||
void AtomURLLoaderFactory::StartLoadingBuffer(
|
void AtomURLLoaderFactory::StartLoadingBuffer(
|
||||||
network::mojom::URLLoaderClientPtr client,
|
network::mojom::URLLoaderClientPtr client,
|
||||||
network::ResourceResponseHead head,
|
network::ResourceResponseHead head,
|
||||||
const mate::Dictionary& dict) {
|
const gin_helper::Dictionary& dict) {
|
||||||
v8::Local<v8::Value> buffer = dict.GetHandle();
|
v8::Local<v8::Value> buffer = dict.GetHandle();
|
||||||
dict.Get("data", &buffer);
|
dict.Get("data", &buffer);
|
||||||
if (!node::Buffer::HasInstance(buffer)) {
|
if (!node::Buffer::HasInstance(buffer)) {
|
||||||
|
@ -317,7 +318,7 @@ void AtomURLLoaderFactory::StartLoadingBuffer(
|
||||||
void AtomURLLoaderFactory::StartLoadingString(
|
void AtomURLLoaderFactory::StartLoadingString(
|
||||||
network::mojom::URLLoaderClientPtr client,
|
network::mojom::URLLoaderClientPtr client,
|
||||||
network::ResourceResponseHead head,
|
network::ResourceResponseHead head,
|
||||||
const mate::Dictionary& dict,
|
const gin_helper::Dictionary& dict,
|
||||||
v8::Isolate* isolate,
|
v8::Isolate* isolate,
|
||||||
v8::Local<v8::Value> response) {
|
v8::Local<v8::Value> response) {
|
||||||
std::string contents;
|
std::string contents;
|
||||||
|
@ -339,11 +340,11 @@ void AtomURLLoaderFactory::StartLoadingFile(
|
||||||
network::ResourceRequest request,
|
network::ResourceRequest request,
|
||||||
network::mojom::URLLoaderClientPtr client,
|
network::mojom::URLLoaderClientPtr client,
|
||||||
network::ResourceResponseHead head,
|
network::ResourceResponseHead head,
|
||||||
const mate::Dictionary& dict,
|
const gin_helper::Dictionary& dict,
|
||||||
v8::Isolate* isolate,
|
v8::Isolate* isolate,
|
||||||
v8::Local<v8::Value> response) {
|
v8::Local<v8::Value> response) {
|
||||||
base::FilePath path;
|
base::FilePath path;
|
||||||
if (mate::ConvertFromV8(isolate, response, &path)) {
|
if (gin::ConvertFromV8(isolate, response, &path)) {
|
||||||
request.url = net::FilePathToFileURL(path);
|
request.url = net::FilePathToFileURL(path);
|
||||||
} else if (!dict.IsEmpty()) {
|
} else if (!dict.IsEmpty()) {
|
||||||
dict.Get("referrer", &request.referrer);
|
dict.Get("referrer", &request.referrer);
|
||||||
|
@ -366,7 +367,7 @@ void AtomURLLoaderFactory::StartLoadingHttp(
|
||||||
const network::ResourceRequest& original_request,
|
const network::ResourceRequest& original_request,
|
||||||
network::mojom::URLLoaderClientPtr client,
|
network::mojom::URLLoaderClientPtr client,
|
||||||
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
|
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
|
||||||
const mate::Dictionary& dict) {
|
const gin_helper::Dictionary& dict) {
|
||||||
auto request = std::make_unique<network::ResourceRequest>();
|
auto request = std::make_unique<network::ResourceRequest>();
|
||||||
request->headers = original_request.headers;
|
request->headers = original_request.headers;
|
||||||
request->cors_exempt_headers = original_request.cors_exempt_headers;
|
request->cors_exempt_headers = original_request.cors_exempt_headers;
|
||||||
|
@ -407,7 +408,7 @@ void AtomURLLoaderFactory::StartLoadingStream(
|
||||||
network::mojom::URLLoaderRequest loader,
|
network::mojom::URLLoaderRequest loader,
|
||||||
network::mojom::URLLoaderClientPtr client,
|
network::mojom::URLLoaderClientPtr client,
|
||||||
network::ResourceResponseHead head,
|
network::ResourceResponseHead head,
|
||||||
const mate::Dictionary& dict) {
|
const gin_helper::Dictionary& dict) {
|
||||||
v8::Local<v8::Value> stream;
|
v8::Local<v8::Value> stream;
|
||||||
if (!dict.Get("data", &stream)) {
|
if (!dict.Get("data", &stream)) {
|
||||||
// Assume the opts is already a stream.
|
// Assume the opts is already a stream.
|
||||||
|
@ -435,7 +436,7 @@ void AtomURLLoaderFactory::StartLoadingStream(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
mate::Dictionary data = ToDict(dict.isolate(), stream);
|
gin_helper::Dictionary data = ToDict(dict.isolate(), stream);
|
||||||
v8::Local<v8::Value> method;
|
v8::Local<v8::Value> method;
|
||||||
if (!data.Get("on", &method) || !method->IsFunction() ||
|
if (!data.Get("on", &method) || !method->IsFunction() ||
|
||||||
!data.Get("removeListener", &method) || !method->IsFunction()) {
|
!data.Get("removeListener", &method) || !method->IsFunction()) {
|
||||||
|
|
|
@ -10,10 +10,10 @@
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "mojo/public/cpp/bindings/binding_set.h"
|
#include "mojo/public/cpp/bindings/binding_set.h"
|
||||||
#include "native_mate/dictionary.h"
|
|
||||||
#include "net/url_request/url_request_job_factory.h"
|
#include "net/url_request/url_request_job_factory.h"
|
||||||
#include "services/network/public/cpp/resource_response.h"
|
#include "services/network/public/cpp/resource_response.h"
|
||||||
#include "services/network/public/mojom/url_loader_factory.mojom.h"
|
#include "services/network/public/mojom/url_loader_factory.mojom.h"
|
||||||
|
#include "shell/common/gin_helper/dictionary.h"
|
||||||
|
|
||||||
namespace electron {
|
namespace electron {
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ enum class ProtocolType {
|
||||||
kFree, // special type for returning arbitrary type of response.
|
kFree, // special type for returning arbitrary type of response.
|
||||||
};
|
};
|
||||||
|
|
||||||
using StartLoadingCallback = base::OnceCallback<void(mate::Arguments*)>;
|
using StartLoadingCallback = base::OnceCallback<void(gin::Arguments*)>;
|
||||||
using ProtocolHandler =
|
using ProtocolHandler =
|
||||||
base::Callback<void(const network::ResourceRequest&, StartLoadingCallback)>;
|
base::Callback<void(const network::ResourceRequest&, StartLoadingCallback)>;
|
||||||
|
|
||||||
|
@ -62,22 +62,22 @@ class AtomURLLoaderFactory : public network::mojom::URLLoaderFactory {
|
||||||
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
|
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
|
||||||
network::mojom::URLLoaderFactory* proxy_factory,
|
network::mojom::URLLoaderFactory* proxy_factory,
|
||||||
ProtocolType type,
|
ProtocolType type,
|
||||||
mate::Arguments* args);
|
gin::Arguments* args);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void StartLoadingBuffer(network::mojom::URLLoaderClientPtr client,
|
static void StartLoadingBuffer(network::mojom::URLLoaderClientPtr client,
|
||||||
network::ResourceResponseHead head,
|
network::ResourceResponseHead head,
|
||||||
const mate::Dictionary& dict);
|
const gin_helper::Dictionary& dict);
|
||||||
static void StartLoadingString(network::mojom::URLLoaderClientPtr client,
|
static void StartLoadingString(network::mojom::URLLoaderClientPtr client,
|
||||||
network::ResourceResponseHead head,
|
network::ResourceResponseHead head,
|
||||||
const mate::Dictionary& dict,
|
const gin_helper::Dictionary& dict,
|
||||||
v8::Isolate* isolate,
|
v8::Isolate* isolate,
|
||||||
v8::Local<v8::Value> response);
|
v8::Local<v8::Value> response);
|
||||||
static void StartLoadingFile(network::mojom::URLLoaderRequest loader,
|
static void StartLoadingFile(network::mojom::URLLoaderRequest loader,
|
||||||
network::ResourceRequest request,
|
network::ResourceRequest request,
|
||||||
network::mojom::URLLoaderClientPtr client,
|
network::mojom::URLLoaderClientPtr client,
|
||||||
network::ResourceResponseHead head,
|
network::ResourceResponseHead head,
|
||||||
const mate::Dictionary& dict,
|
const gin_helper::Dictionary& dict,
|
||||||
v8::Isolate* isolate,
|
v8::Isolate* isolate,
|
||||||
v8::Local<v8::Value> response);
|
v8::Local<v8::Value> response);
|
||||||
static void StartLoadingHttp(
|
static void StartLoadingHttp(
|
||||||
|
@ -85,11 +85,11 @@ class AtomURLLoaderFactory : public network::mojom::URLLoaderFactory {
|
||||||
const network::ResourceRequest& original_request,
|
const network::ResourceRequest& original_request,
|
||||||
network::mojom::URLLoaderClientPtr client,
|
network::mojom::URLLoaderClientPtr client,
|
||||||
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
|
const net::MutableNetworkTrafficAnnotationTag& traffic_annotation,
|
||||||
const mate::Dictionary& dict);
|
const gin_helper::Dictionary& dict);
|
||||||
static void StartLoadingStream(network::mojom::URLLoaderRequest loader,
|
static void StartLoadingStream(network::mojom::URLLoaderRequest loader,
|
||||||
network::mojom::URLLoaderClientPtr client,
|
network::mojom::URLLoaderClientPtr client,
|
||||||
network::ResourceResponseHead head,
|
network::ResourceResponseHead head,
|
||||||
const mate::Dictionary& dict);
|
const gin_helper::Dictionary& dict);
|
||||||
|
|
||||||
// Helper to send string as response.
|
// Helper to send string as response.
|
||||||
static void SendContents(network::mojom::URLLoaderClientPtr client,
|
static void SendContents(network::mojom::URLLoaderClientPtr client,
|
||||||
|
|
|
@ -61,22 +61,4 @@ class KeyWeakMap : public mate::Wrappable<KeyWeakMap<K>> {
|
||||||
|
|
||||||
} // namespace electron
|
} // namespace electron
|
||||||
|
|
||||||
namespace gin {
|
|
||||||
|
|
||||||
// TODO(zcbenz): Remove this after converting KeyWeakMap to gin::Wrapper.
|
|
||||||
template <typename T>
|
|
||||||
struct Converter<electron::api::KeyWeakMap<T>*> {
|
|
||||||
static bool FromV8(v8::Isolate* isolate,
|
|
||||||
v8::Local<v8::Value> val,
|
|
||||||
electron::api::KeyWeakMap<T>** out) {
|
|
||||||
return mate::ConvertFromV8(isolate, val, out);
|
|
||||||
}
|
|
||||||
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
|
|
||||||
electron::api::KeyWeakMap<T>* in) {
|
|
||||||
return mate::ConvertToV8(isolate, in);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace gin
|
|
||||||
|
|
||||||
#endif // SHELL_COMMON_API_ATOM_API_KEY_WEAK_MAP_H_
|
#endif // SHELL_COMMON_API_ATOM_API_KEY_WEAK_MAP_H_
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
#include "base/hash/hash.h"
|
#include "base/hash/hash.h"
|
||||||
#include "electron/buildflags/buildflags.h"
|
#include "electron/buildflags/buildflags.h"
|
||||||
#include "shell/common/gin_converters/gurl_converter.h"
|
#include "shell/common/gin_converters/gurl_converter.h"
|
||||||
#include "shell/common/gin_converters/native_mate_handle_converter.h"
|
|
||||||
#include "shell/common/gin_helper/dictionary.h"
|
#include "shell/common/gin_helper/dictionary.h"
|
||||||
#include "shell/common/node_includes.h"
|
#include "shell/common/node_includes.h"
|
||||||
#include "url/origin.h"
|
#include "url/origin.h"
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
// Copyright (c) 2019 GitHub, Inc.
|
|
||||||
// Use of this source code is governed by the MIT license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
#ifndef SHELL_COMMON_GIN_CONVERTERS_NATIVE_MATE_HANDLE_CONVERTER_H_
|
|
||||||
#define SHELL_COMMON_GIN_CONVERTERS_NATIVE_MATE_HANDLE_CONVERTER_H_
|
|
||||||
|
|
||||||
#include "gin/converter.h"
|
|
||||||
#include "native_mate/handle.h"
|
|
||||||
|
|
||||||
namespace gin {
|
|
||||||
|
|
||||||
// TODO(zcbenz): Remove this converter after native_mate is removed.
|
|
||||||
|
|
||||||
template <typename T>
|
|
||||||
struct Converter<mate::Handle<T>> {
|
|
||||||
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
|
|
||||||
const mate::Handle<T>& in) {
|
|
||||||
return mate::ConvertToV8(isolate, in);
|
|
||||||
}
|
|
||||||
static bool FromV8(v8::Isolate* isolate,
|
|
||||||
v8::Local<v8::Value> val,
|
|
||||||
mate::Handle<T>* out) {
|
|
||||||
return mate::ConvertFromV8(isolate, val, out);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
} // namespace gin
|
|
||||||
|
|
||||||
#endif // SHELL_COMMON_GIN_CONVERTERS_NATIVE_MATE_HANDLE_CONVERTER_H_
|
|
|
@ -27,6 +27,23 @@ class Dictionary : public gin::Dictionary {
|
||||||
Dictionary(const gin::Dictionary& dict) // NOLINT(runtime/explicit)
|
Dictionary(const gin::Dictionary& dict) // NOLINT(runtime/explicit)
|
||||||
: gin::Dictionary(dict) {}
|
: gin::Dictionary(dict) {}
|
||||||
|
|
||||||
|
// Difference from the Get method in gin::Dictionary:
|
||||||
|
// 1. This is a const method;
|
||||||
|
// 2. It checks whether the key exists before reading.
|
||||||
|
template <typename T>
|
||||||
|
bool Get(base::StringPiece key, T* out) const {
|
||||||
|
// Check for existence before getting, otherwise this method will always
|
||||||
|
// returns true when T == v8::Local<v8::Value>.
|
||||||
|
v8::Local<v8::Context> context = isolate()->GetCurrentContext();
|
||||||
|
v8::Local<v8::String> v8_key = gin::StringToV8(isolate(), key);
|
||||||
|
v8::Local<v8::Value> value;
|
||||||
|
v8::Maybe<bool> result = GetHandle()->Has(context, v8_key);
|
||||||
|
if (result.IsJust() && result.FromJust() &&
|
||||||
|
GetHandle()->Get(context, v8_key).ToLocal(&value))
|
||||||
|
return gin::ConvertFromV8(isolate(), value, out);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
bool GetHidden(base::StringPiece key, T* out) const {
|
bool GetHidden(base::StringPiece key, T* out) const {
|
||||||
v8::Local<v8::Context> context = isolate()->GetCurrentContext();
|
v8::Local<v8::Context> context = isolate()->GetCurrentContext();
|
||||||
|
@ -80,6 +97,8 @@ class Dictionary : public gin::Dictionary {
|
||||||
return !result.IsNothing() && result.FromJust();
|
return !result.IsNothing() && result.FromJust();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsEmpty() const { return isolate() == nullptr || GetHandle().IsEmpty(); }
|
||||||
|
|
||||||
v8::Local<v8::Object> GetHandle() const {
|
v8::Local<v8::Object> GetHandle() const {
|
||||||
return gin::ConvertToV8(isolate(),
|
return gin::ConvertToV8(isolate(),
|
||||||
*static_cast<const gin::Dictionary*>(this))
|
*static_cast<const gin::Dictionary*>(this))
|
||||||
|
|
Загрузка…
Ссылка в новой задаче