Record all objects created by API in browser.
This commit is contained in:
parent
17a9c2aea5
commit
683087fbc4
10 changed files with 163 additions and 9 deletions
4
atom.gyp
4
atom.gyp
|
@ -19,6 +19,10 @@
|
||||||
'browser/api/atom_api_event_emitter.h',
|
'browser/api/atom_api_event_emitter.h',
|
||||||
'browser/api/atom_api_extensions.cc',
|
'browser/api/atom_api_extensions.cc',
|
||||||
'browser/api/atom_api_extensions.h',
|
'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.cc',
|
||||||
'browser/api/atom_api_window.h',
|
'browser/api/atom_api_window.h',
|
||||||
'browser/api/atom_bindings.cc',
|
'browser/api/atom_bindings.cc',
|
||||||
|
|
|
@ -16,8 +16,8 @@ namespace atom {
|
||||||
|
|
||||||
namespace api {
|
namespace api {
|
||||||
|
|
||||||
EventEmitter::EventEmitter(v8::Handle<v8::Object> wrapper) {
|
EventEmitter::EventEmitter(v8::Handle<v8::Object> wrapper)
|
||||||
Wrap(wrapper);
|
: RecordedObject(wrapper) {
|
||||||
}
|
}
|
||||||
|
|
||||||
EventEmitter::~EventEmitter() {
|
EventEmitter::~EventEmitter() {
|
||||||
|
|
|
@ -7,8 +7,7 @@
|
||||||
|
|
||||||
#include <iosfwd>
|
#include <iosfwd>
|
||||||
|
|
||||||
#include "base/basictypes.h"
|
#include "browser/api/atom_api_recorded_object.h"
|
||||||
#include "vendor/node/src/node_object_wrap.h"
|
|
||||||
|
|
||||||
namespace base {
|
namespace base {
|
||||||
class ListValue;
|
class ListValue;
|
||||||
|
@ -21,16 +20,13 @@ namespace api {
|
||||||
// Class interiting EventEmitter should assume it's a javascript object which
|
// Class interiting EventEmitter should assume it's a javascript object which
|
||||||
// interits require('events').EventEmitter, this class provides many helper
|
// interits require('events').EventEmitter, this class provides many helper
|
||||||
// methods to do event processing in C++.
|
// methods to do event processing in C++.
|
||||||
class EventEmitter : public node::ObjectWrap {
|
class EventEmitter : public RecordedObject {
|
||||||
public:
|
public:
|
||||||
virtual ~EventEmitter();
|
virtual ~EventEmitter();
|
||||||
|
|
||||||
// Emit an event and returns whether the handler has called preventDefault().
|
// Emit an event and returns whether the handler has called preventDefault().
|
||||||
bool Emit(const std::string& name, base::ListValue* args);
|
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:
|
protected:
|
||||||
explicit EventEmitter(v8::Handle<v8::Object> wrapper);
|
explicit EventEmitter(v8::Handle<v8::Object> wrapper);
|
||||||
|
|
||||||
|
|
19
browser/api/atom_api_objects_registry.cc
Normal file
19
browser/api/atom_api_objects_registry.cc
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
// 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
|
37
browser/api/atom_api_objects_registry.h
Normal file
37
browser/api/atom_api_objects_registry.h
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
// 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_
|
40
browser/api/atom_api_recorded_object.cc
Normal file
40
browser/api/atom_api_recorded_object.cc
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
// 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_
|
42
browser/api/atom_api_recorded_object.h
Normal file
42
browser/api/atom_api_recorded_object.h
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
// 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_
|
|
@ -4,12 +4,15 @@
|
||||||
|
|
||||||
#include "browser/atom_browser_context.h"
|
#include "browser/atom_browser_context.h"
|
||||||
|
|
||||||
|
#include "browser/api/atom_api_objects_registry.h"
|
||||||
|
|
||||||
namespace atom {
|
namespace atom {
|
||||||
|
|
||||||
// static
|
// static
|
||||||
AtomBrowserContext* AtomBrowserContext::self_;
|
AtomBrowserContext* AtomBrowserContext::self_;
|
||||||
|
|
||||||
AtomBrowserContext::AtomBrowserContext() {
|
AtomBrowserContext::AtomBrowserContext()
|
||||||
|
: objects_registry_(new api::ObjectsRegistry) {
|
||||||
DCHECK(!self_);
|
DCHECK(!self_);
|
||||||
|
|
||||||
self_ = this;
|
self_ = this;
|
||||||
|
|
|
@ -5,10 +5,15 @@
|
||||||
#ifndef ATOM_BROWSER_ATOM_BROWSER_CONTEXT_H_
|
#ifndef ATOM_BROWSER_ATOM_BROWSER_CONTEXT_H_
|
||||||
#define 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"
|
#include "brightray/browser/browser_context.h"
|
||||||
|
|
||||||
namespace atom {
|
namespace atom {
|
||||||
|
|
||||||
|
namespace api {
|
||||||
|
class ObjectsRegistry;
|
||||||
|
}
|
||||||
|
|
||||||
class AtomBrowserContext : public brightray::BrowserContext {
|
class AtomBrowserContext : public brightray::BrowserContext {
|
||||||
public:
|
public:
|
||||||
AtomBrowserContext();
|
AtomBrowserContext();
|
||||||
|
@ -17,9 +22,15 @@ class AtomBrowserContext : public brightray::BrowserContext {
|
||||||
// We assume there is only one BrowserContext per browser process.
|
// We assume there is only one BrowserContext per browser process.
|
||||||
static AtomBrowserContext* Get();
|
static AtomBrowserContext* Get();
|
||||||
|
|
||||||
|
api::ObjectsRegistry* objects_registry() const {
|
||||||
|
return objects_registry_.get();
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static AtomBrowserContext* self_;
|
static AtomBrowserContext* self_;
|
||||||
|
|
||||||
|
scoped_ptr<api::ObjectsRegistry> objects_registry_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(AtomBrowserContext);
|
DISALLOW_COPY_AND_ASSIGN(AtomBrowserContext);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,8 @@ atom.browserMainParts.preMainMessageLoopRun = function() {
|
||||||
mainWindow = new Window({ width: 800, height: 600 });
|
mainWindow = new Window({ width: 800, height: 600 });
|
||||||
mainWindow.url = 'file://' + __dirname + '/index.html';
|
mainWindow.url = 'file://' + __dirname + '/index.html';
|
||||||
|
|
||||||
|
console.log(mainWindow.id);
|
||||||
|
|
||||||
mainWindow.on('page-title-updated', function(event, title) {
|
mainWindow.on('page-title-updated', function(event, title) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue