'browser/api/atom_api_event_emitter.h',
'browser/api/atom_api_extensions.cc',
'browser/api/atom_api_extensions.h',
+ 'browser/api/atom_api_objects_registry.cc',
+ 'browser/api/atom_api_objects_registry.h',
+ 'browser/api/atom_api_recorded_object.cc',
+ 'browser/api/atom_api_recorded_object.h',
'browser/api/atom_api_window.cc',
'browser/api/atom_api_window.h',
'browser/api/atom_bindings.cc',
namespace api {
-EventEmitter::EventEmitter(v8::Handle<v8::Object> wrapper) {
- Wrap(wrapper);
+EventEmitter::EventEmitter(v8::Handle<v8::Object> wrapper)
+ : RecordedObject(wrapper) {
}
EventEmitter::~EventEmitter() {
#include <iosfwd>
-#include "base/basictypes.h"
-#include "vendor/node/src/node_object_wrap.h"
+#include "browser/api/atom_api_recorded_object.h"
namespace base {
class ListValue;
// Class interiting EventEmitter should assume it's a javascript object which
// interits require('events').EventEmitter, this class provides many helper
// methods to do event processing in C++.
-class EventEmitter : public node::ObjectWrap {
+class EventEmitter : public RecordedObject {
public:
virtual ~EventEmitter();
// Emit an event and returns whether the handler has called preventDefault().
bool Emit(const std::string& name, base::ListValue* args);
- // Small accessor to return handle_, this follows Google C++ Style.
- v8::Persistent<v8::Object>& handle() { return handle_; }
-
protected:
explicit EventEmitter(v8::Handle<v8::Object> wrapper);
--- /dev/null
+// Copyright (c) 2013 GitHub, Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "browser/api/atom_api_objects_registry.h"
+
+namespace atom {
+
+namespace api {
+
+ObjectsRegistry::ObjectsRegistry() {
+}
+
+ObjectsRegistry::~ObjectsRegistry() {
+}
+
+} // namespace api
+
+} // namespace atom
--- /dev/null
+// Copyright (c) 2013 GitHub, Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ATOM_BROWSER_API_ATOM_API_OBJECTS_REGISTRY_H_
+#define ATOM_BROWSER_API_ATOM_API_OBJECTS_REGISTRY_H_
+
+#include "base/id_map.h"
+#include "base/basictypes.h"
+
+namespace atom {
+
+namespace api {
+
+class RecordedObject;
+
+class ObjectsRegistry {
+ public:
+ ObjectsRegistry();
+ virtual ~ObjectsRegistry();
+
+ int Add(RecordedObject* data) { return id_map_.Add(data); }
+ void Remove(int id) { id_map_.Remove(id); }
+ void Clear() { id_map_.Clear(); }
+ RecordedObject* Lookup(int id) const { return id_map_.Lookup(id); }
+
+ private:
+ IDMap<RecordedObject> id_map_;
+
+ DISALLOW_COPY_AND_ASSIGN(ObjectsRegistry);
+};
+
+} // namespace api
+
+} // namespace atom
+
+#endif // ATOM_BROWSER_API_ATOM_API_OBJECTS_REGISTRY_H_
--- /dev/null
+// Copyright (c) 2013 GitHub, Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ATOM_BROWSER_API_ATOM_API_RECORDED_OBJECT_
+#define ATOM_BROWSER_API_ATOM_API_RECORDED_OBJECT_
+
+#include "browser/api/atom_api_recorded_object.h"
+
+#include "base/compiler_specific.h"
+#include "browser/api/atom_api_objects_registry.h"
+#include "browser/atom_browser_context.h"
+
+namespace atom {
+
+namespace api {
+
+RecordedObject::RecordedObject(v8::Handle<v8::Object> wrapper)
+ : ALLOW_THIS_IN_INITIALIZER_LIST(id_(
+ AtomBrowserContext::Get()->objects_registry()->Add(this))) {
+ Wrap(wrapper);
+
+ wrapper->SetAccessor(v8::String::New("id"), IDGetter);
+}
+
+RecordedObject::~RecordedObject() {
+}
+
+// static
+v8::Handle<v8::Value> RecordedObject::IDGetter(v8::Local<v8::String> property,
+ const v8::AccessorInfo& info) {
+ RecordedObject* self = RecordedObject::Unwrap<RecordedObject>(info.This());
+ return v8::Integer::New(self->id_);
+}
+
+} // namespace api
+
+} // namespace atom
+
+#endif // ATOM_BROWSER_API_ATOM_API_RECORDED_OBJECT_
--- /dev/null
+// Copyright (c) 2013 GitHub, Inc. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef ATOM_BROWSER_API_ATOM_API_RECORDED_OBJECT_H_
+#define ATOM_BROWSER_API_ATOM_API_RECORDED_OBJECT_H_
+
+#include "base/basictypes.h"
+#include "vendor/node/src/node_object_wrap.h"
+
+namespace atom {
+
+namespace api {
+
+// Objects of this class will be recorded in C++ and available for RPC from
+// renderer.
+class RecordedObject : public node::ObjectWrap {
+ public:
+ virtual ~RecordedObject();
+
+ // Small accessor to return handle_, this follows Google C++ Style.
+ v8::Persistent<v8::Object>& handle() { return handle_; }
+
+ int id() const { return id_; }
+
+ protected:
+ explicit RecordedObject(v8::Handle<v8::Object> wrapper);
+
+ private:
+ static v8::Handle<v8::Value> IDGetter(v8::Local<v8::String> property,
+ const v8::AccessorInfo& info);
+
+ int id_;
+
+ DISALLOW_COPY_AND_ASSIGN(RecordedObject);
+};
+
+} // namespace api
+
+} // namespace atom
+
+#endif // ATOM_BROWSER_API_ATOM_API_RECORDED_OBJECT_H_
#include "browser/atom_browser_context.h"
+#include "browser/api/atom_api_objects_registry.h"
+
namespace atom {
// static
AtomBrowserContext* AtomBrowserContext::self_;
-AtomBrowserContext::AtomBrowserContext() {
+AtomBrowserContext::AtomBrowserContext()
+ : objects_registry_(new api::ObjectsRegistry) {
DCHECK(!self_);
self_ = this;
#ifndef ATOM_BROWSER_ATOM_BROWSER_CONTEXT_H_
#define ATOM_BROWSER_ATOM_BROWSER_CONTEXT_H_
+#include "base/memory/scoped_ptr.h"
#include "brightray/browser/browser_context.h"
namespace atom {
+namespace api {
+class ObjectsRegistry;
+}
+
class AtomBrowserContext : public brightray::BrowserContext {
public:
AtomBrowserContext();
// We assume there is only one BrowserContext per browser process.
static AtomBrowserContext* Get();
+ api::ObjectsRegistry* objects_registry() const {
+ return objects_registry_.get();
+ }
+
private:
static AtomBrowserContext* self_;
+ scoped_ptr<api::ObjectsRegistry> objects_registry_;
+
DISALLOW_COPY_AND_ASSIGN(AtomBrowserContext);
};
mainWindow = new Window({ width: 800, height: 600 });
mainWindow.url = 'file://' + __dirname + '/index.html';
+ console.log(mainWindow.id);
+
mainWindow.on('page-title-updated', function(event, title) {
event.preventDefault();