Enable using custom events when emitting
This commit is contained in:
parent
d42fd6fc7e
commit
625143426a
2 changed files with 33 additions and 8 deletions
|
@ -37,9 +37,8 @@ v8::Local<v8::Object> CreateEventObject(v8::Isolate* isolate) {
|
||||||
EventEmitter::EventEmitter() {
|
EventEmitter::EventEmitter() {
|
||||||
}
|
}
|
||||||
|
|
||||||
v8::Local<v8::Object> EventEmitter::CreateJSEvent(v8::Isolate* isolate,
|
v8::Local<v8::Object> EventEmitter::CreateJSEvent(
|
||||||
content::WebContents* sender,
|
v8::Isolate* isolate, content::WebContents* sender, IPC::Message* message) {
|
||||||
IPC::Message* message) {
|
|
||||||
v8::Local<v8::Object> event;
|
v8::Local<v8::Object> event;
|
||||||
bool use_native_event = sender && message;
|
bool use_native_event = sender && message;
|
||||||
|
|
||||||
|
@ -54,4 +53,12 @@ v8::Local<v8::Object> EventEmitter::CreateJSEvent(v8::Isolate* isolate,
|
||||||
return event;
|
return event;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
v8::Local<v8::Object> EventEmitter::CreateCustomEvent(
|
||||||
|
v8::Isolate* isolate, v8::Local<v8::Object> custom_event) {
|
||||||
|
v8::Local<v8::Object> event = CreateEventObject(isolate);
|
||||||
|
event->SetPrototype(custom_event->CreationContext(), custom_event);
|
||||||
|
mate::Dictionary(isolate, event).Set("sender", GetWrapper(isolate));
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace mate
|
} // namespace mate
|
||||||
|
|
|
@ -25,6 +25,14 @@ class EventEmitter : public Wrappable {
|
||||||
public:
|
public:
|
||||||
typedef std::vector<v8::Local<v8::Value>> ValueArray;
|
typedef std::vector<v8::Local<v8::Value>> ValueArray;
|
||||||
|
|
||||||
|
// this.emit(name, event, args...);
|
||||||
|
template<typename... Args>
|
||||||
|
bool EmitCustomEvent(const base::StringPiece& name,
|
||||||
|
v8::Local<v8::Object> event,
|
||||||
|
const Args&... args) {
|
||||||
|
return EmitWithEvent(name, CreateCustomEvent(isolate(), event), args...);
|
||||||
|
}
|
||||||
|
|
||||||
// this.emit(name, new Event(), args...);
|
// this.emit(name, new Event(), args...);
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
bool Emit(const base::StringPiece& name, const Args&... args) {
|
bool Emit(const base::StringPiece& name, const Args&... args) {
|
||||||
|
@ -37,21 +45,31 @@ class EventEmitter : public Wrappable {
|
||||||
content::WebContents* sender,
|
content::WebContents* sender,
|
||||||
IPC::Message* message,
|
IPC::Message* message,
|
||||||
const Args&... args) {
|
const Args&... args) {
|
||||||
v8::Locker locker(isolate());
|
|
||||||
v8::HandleScope handle_scope(isolate());
|
|
||||||
v8::Local<v8::Object> event = CreateJSEvent(isolate(), sender, message);
|
v8::Local<v8::Object> event = CreateJSEvent(isolate(), sender, message);
|
||||||
EmitEvent(isolate(), GetWrapper(isolate()), name, event, args...);
|
return EmitWithEvent(name, event, args...);
|
||||||
return event->Get(
|
|
||||||
StringToV8(isolate(), "defaultPrevented"))->BooleanValue();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
EventEmitter();
|
EventEmitter();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
// this.emit(name, event, args...);
|
||||||
|
template<typename... Args>
|
||||||
|
bool EmitWithEvent(const base::StringPiece& name,
|
||||||
|
v8::Local<v8::Object> event,
|
||||||
|
const Args&... args) {
|
||||||
|
v8::Locker locker(isolate());
|
||||||
|
v8::HandleScope handle_scope(isolate());
|
||||||
|
EmitEvent(isolate(), GetWrapper(isolate()), name, event, args...);
|
||||||
|
return event->Get(
|
||||||
|
StringToV8(isolate(), "defaultPrevented"))->BooleanValue();
|
||||||
|
}
|
||||||
|
|
||||||
v8::Local<v8::Object> CreateJSEvent(v8::Isolate* isolate,
|
v8::Local<v8::Object> CreateJSEvent(v8::Isolate* isolate,
|
||||||
content::WebContents* sender,
|
content::WebContents* sender,
|
||||||
IPC::Message* message);
|
IPC::Message* message);
|
||||||
|
v8::Local<v8::Object> CreateCustomEvent(
|
||||||
|
v8::Isolate* isolate, v8::Local<v8::Object> event);
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(EventEmitter);
|
DISALLOW_COPY_AND_ASSIGN(EventEmitter);
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue