Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 24 additions & 18 deletions src/browser.cc
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
#define BUILDING_NODE_EXTENSION
#include <node.h>
#include <node_version.h>

#include "browser.h"
#include "top_v8.h"

Expand All @@ -21,7 +23,7 @@ Browser::~Browser() {
void Browser::Initialize(Handle<Object> target) {
Local<FunctionTemplate> tpl = FunctionTemplate::New(New);
tpl->SetClassName(String::NewSymbol("Browser"));
tpl->InstanceTemplate()->SetInternalFieldCount(1);
tpl->InstanceTemplate()->SetInternalFieldCount(1);

tpl->PrototypeTemplate()->Set(String::NewSymbol("open"), FunctionTemplate::New(Open)->GetFunction());
tpl->PrototypeTemplate()->Set(String::NewSymbol("close"), FunctionTemplate::New(Close)->GetFunction());
Expand Down Expand Up @@ -55,7 +57,11 @@ void AsyncWork(uv_work_t* req) {
work->errorResult = work->chimera->getError();
}

#if NODE_MINOR_VERSION >= 10
void AsyncAfter(uv_work_t* req, int /*status*/) {
#else
void AsyncAfter(uv_work_t* req) {
#endif
HandleScope scope;
BWork* work = static_cast<BWork*>(req->data);

Expand Down Expand Up @@ -101,7 +107,7 @@ Handle<Value> Browser::Cookies(const Arguments& args) {
if (0 != chimera) {
cookies = chimera->getCookies();
}

return scope.Close(top_v8::FromQString(cookies));
}

Expand All @@ -120,7 +126,7 @@ Handle<Value> Browser::SetCookies(const Arguments& args) {
if (0 != chimera) {
chimera->setCookies(top_v8::ToQString(args[0]->ToString()));
}

return scope.Close(Undefined());
}

Expand All @@ -136,50 +142,50 @@ Handle<Value> Browser::SetProxy(const Arguments& args) {
Chimera* chimera = w->getChimera();

if (0 != chimera) {
chimera->setProxy(top_v8::ToQString(args[0]->ToString()), top_v8::ToQString(args[1]->ToString()), args[2]->Int32Value(),
chimera->setProxy(top_v8::ToQString(args[0]->ToString()), top_v8::ToQString(args[1]->ToString()), args[2]->Int32Value(),
top_v8::ToQString(args[3]->ToString()), top_v8::ToQString(args[4]->ToString()));
}

return scope.Close(Undefined());
}


Handle<Value> Browser::Capture(const Arguments& args) {
HandleScope scope;

if (!args[0]->IsString()) {
return ThrowException(Exception::TypeError(
String::New("First argument must be a filename string")));
}

Browser* w = ObjectWrap::Unwrap<Browser>(args.This());
Chimera* chimera = w->getChimera();

if (0 != chimera) {
chimera->capture(top_v8::ToQString(args[0]->ToString()));
}

return scope.Close(Undefined());
}

Handle<Value> Browser::Close(const Arguments& args) {
HandleScope scope;

Browser* w = ObjectWrap::Unwrap<Browser>(args.This());
Chimera* chimera = w->getChimera();

if (0 != chimera) {
chimera->exit(1);
w->setChimera(0);
chimera->deleteLater();
}

return scope.Close(Undefined());
}

Handle<Value> Browser::Open(const Arguments& args) {
HandleScope scope;

if (!args[1]->IsString()) {
return ThrowException(Exception::TypeError(
String::New("Second argument must be a javascript string")));
Expand All @@ -191,15 +197,15 @@ Handle<Value> Browser::Open(const Arguments& args) {
}

Local<Function> callback = Local<Function>::Cast(args[2]);

BWork* work = new BWork();
work->error = false;
work->request.data = work;
work->callback = Persistent<Function>::New(callback);

Browser* w = ObjectWrap::Unwrap<Browser>(args.This());
Chimera* chimera = w->getChimera();

if (0 != chimera) {
work->chimera = chimera;
} else {
Expand All @@ -214,7 +220,7 @@ Handle<Value> Browser::Open(const Arguments& args) {
}

work->chimera->setEmbedScript(top_v8::ToQString(args[1]->ToString()));

if (args[0]->IsString()) {
work->url = top_v8::ToQString(args[0]->ToString());
work->chimera->open(work->url);
Expand All @@ -225,6 +231,6 @@ Handle<Value> Browser::Open(const Arguments& args) {

int status = uv_queue_work(uv_default_loop(), &work->request, AsyncWork, AsyncAfter);
assert(status == 0);

return Undefined();
}