No description
Find a file
Samuel Attard 7f3620bee3
Native mate in electron 3 (#13450)
* Initial commit.

* Do not rely on latest base/template_util.

* Enable modifying existing ObjectTemplate.

* Fix compilation error of function_template.

* Add initial Constructor type.

* Fix passing the wrong parameter.

* Make the Constructor accept arbitrary callback.

* Cleanup.

* Constructor should wrap the this pointer.

* Simplify Wrappable API.

* Remove helper typedefs.

* Support function with 7 parameters.

* Enable converting void*.

* Enable setting method in Dictionary.

* Add v8::Handle<v8::String> to converter.

* Make ScopedPersistent do type conversion.

* Add Arguments.Length method.

* Do not wrap an object when it's already wrapped.

* No need to reset wrapper_ when we would run destructor.

* Call object._init if we have one.

* Add object() accessor for Dictionary.

* Add converter for const char*.

* Enable creating empty Dictionary directly.

* Mark Dictionary.Get as const.

* Strictly check for boolean type.

* Add .gitignore.

* Add APIs to match new V8 APIs.

* Bring back ScopedPersistent.SetWeak.

* Some more APIs fixes.

* Reset handle in weak callback.

This doesn't seem to be neccesary, but we had better follow what upstream does.

* Enable converting ScopedPersistent.

* Fix compilation error with node 0.10.

* Fix compilation error of Constructor and ScopedPersistent in node 0.10.

* Use pump to generate source files.

* Add callback converter.

* Make ScopedPersistent's interface consistent with V8.

* Remove unused constructor of Dictionary.

* Add PersistentDictionary.

* Make throwing exception when parsing args easier

* Use NODE_VERSION_AT_LEAST to determine node version

* Don't throw error in Constructor

* Guard against non-constructor call in Constructor::New

* Fix throwing error in constructor

* Fix ignored exception thrown from constructor.

* OVERRIDE => override

* Avoid unnecessary copy in ConvertToV8

* Check internal field before converting

* Remove unneeded helper

* Add AfterInit method for Wrappable

* Add converter for unsigned long

* usigned long is uint64 on Linux

* Don't reset handle before Wrappable is destroyed

It is possible that the user wants to use the V8 object in the destructor.

Fixes atom/atom-shell#1112.

* added std::set converter

* Use Local instead of Handle

* Pass Handle to upper HandleScope when returning a V8 Handle

* Enter context before calling callback

* Allow converting Array

* Remember isolate in Wrappable

* Make isolate() public

* Check for null when converting Wrappable

* Add IsDestroyed method for Wrappable

* Allow specify methods that can be called after object is destroyed

* Use C++11 version of CreateFunctionTemplate

* Remove callback.h

* Remove locker.h

* Add Dictionary::CreateEmpty

* GetNext should have no side effect when failed

* Don't convert Function to Dictionary

* Don't pass callback as const reference

* Add SetHidden for Dictionary

* Use the new SetWeak in Wrappable

* Check whether key exists in Dictionary::Get

* Don't return v8::Maybe for std::vector

* Add Dictionary::Delete

* Do not manually destroy native resources

* isDestroy => isDestroyed

* Fix converter for std::set

* Improve error message for type error

Close atom/electron#4307.

* Clear internal field when Wrapper is destroyed

* basic_types.h => macros.h

* use v8::private symbols as identifiers for object properties

* Make Wrappable a template class

* Leak Wrappable's template

Since it is declared as static variable it will be released
automatically when process exits, which causes crashes in
renderer process because the template will then be released
later than V8 is closed.

This commit simply leaks the template so the crash won't happen,
this leak should be fine since leaking resource on exit is not
a bad thing.

* Handle.ToV8 should return Object

* Add converter for std::map

* Setup v8::MicrotasksScope for callbacks

* Update to API changes of V8 5.2

* CHECK is not needed

* Call the user call Init in Constructor

* Make InitWith virtual

* Turn Wrappable into using FunctionTemplate

* Create objects from InstanceTemplate

* NewOperatorFactory is not used

* Remove the Constructor class

* GetConstructor should init default constructor

* Pass FunctionTemplate in BuildPrototype

* Do not set constructor name in SetConstructor

* Use ToDetailString for processing error message

* Add back empty handle string

* Add README

* create empty handle for null or undefined value

* Support setting read-only property value

* Add Converter<std::map<std::string, T>>::ToV8

* Add CI build through Electron

* Support 5 argument member function

* Use std functions instead of template_util

* Make Wrappable thread safe

* Use gin to manage FunctionTemplate

Sadly there is no way for us to know when V8 is closing, thus it is
impossible for us to clean the FunctionTemplate on exit at the right
time, which is critcal for multi-thread environment.

* add ability to set high memory usage, skipping the second round of GC callbacks

* Fix broken link

* Add a converter for `nullptr_t`

* Upstream Muon changes to avoid crashing

* only mark handle as independent when it's a high memory user

* Remove WrappableBase::GetWrapper() DCHECK

* virtual members need a virtual destructor

* GetWrapper should be const

* Add support for FreeBSD

* Remove usage of MarkIndependent api

https://bugs.chromium.org/p/chromium/issues/detail?id=780749
Use Active/Not Active as indicator whether the Scavenger can drop wrappers

* Address breaking API

* Fix Value::ToDetailString() call

See https://chromium-review.googlesource.com/848782

* Revert "Address breaking API"

This reverts commit e20cf8687e.

* Add mate::Promise

* Update travis settings

Use Node.js 9.7.0 and Xcode 9.3.

* Update appveyor settings

Use Visual Studio 2017.

* Remove mate::TryCatch (#26)

It's not used anywhere. We use v8::TryCatch instead.

* Address breaking API

* Don't copy things on Dictionary::Set

* Remove native_mate/compat.h

* prepare for merging to electron

* remove native_mate submodule

* update paths for native_mate

* move native_mate script to the electron scripts dir

* rename back to expected values

* fix linting
2018-06-27 17:42:20 +10:00
.circleci Use Node.js 10 for CI builds 2018-06-19 11:49:45 +10:00
.github docs: update pr template with checklist (#13270) 2018-06-18 13:58:30 -07:00
atom Revert "Drop support of Mac OS 10.9" (#13350) 2018-06-21 09:37:18 +10:00
brightray Revert "Drop support of Mac OS 10.9" (#13350) 2018-06-21 09:37:18 +10:00
build refactor: [gn] compile node with boringssl (#13285) 2018-06-19 10:39:43 -05:00
chromium_src mark worker thread taskrunner as WithBaseSyncPrimitives 2018-06-19 11:49:46 +10:00
default_app Replace default_app icon 2017-12-07 16:10:45 -05:00
docs Native mate in electron 3 (#13450) 2018-06-27 17:42:20 +10:00
docs-translations update references to renamed i18n repo 2018-03-02 12:05:49 -08:00
lib fix: can't load module error when app is packaged 2018-06-19 10:42:21 -07:00
native_mate Native mate in electron 3 (#13450) 2018-06-27 17:42:20 +10:00
npm feat: upgrade electron-download to 4.x 2018-05-17 23:16:27 -07:00
script Native mate in electron 3 (#13450) 2018-06-27 17:42:20 +10:00
spec fix: do not expose Node's external strings (#13452) 2018-06-27 11:40:44 +09:00
tools update mac symbol dump (#12982) 2018-05-21 10:01:17 +09:00
vendor Native mate in electron 3 (#13450) 2018-06-27 17:42:20 +10:00
.clang-format Add clang-format config file. 2016-10-04 22:42:49 +02:00
.dockerignore Add testing for arm, arm64 and ia32 linux builds 2017-12-20 11:54:52 -05:00
.gitignore Merge pull request #12921 from electron/commit-package-lock 2018-05-16 11:47:21 -04:00
.gitmodules Native mate in electron 3 (#13450) 2018-06-27 17:42:20 +10:00
.remarkrc add remark lint to ensure fenced codeblocks are formatted properly. 2017-11-20 14:05:47 +08:00
.travis.yml Add arm64 task in travis ci 2017-08-22 10:02:51 +09:00
appveyor.yml Skip tests for release build 2018-06-20 18:20:04 -04:00
BUILD.gn chore: [gn] add desktop capturer sources to GN build (#13286) 2018-06-19 10:29:36 -05:00
CODE_OF_CONDUCT.md Change Contact Emails (#12278) 2018-03-15 04:37:40 +09:00
common.gypi Disable node options in node config (#13323) 2018-06-20 17:10:37 +10:00
CONTRIBUTING.md add docs/development/README.md (#12373) 2018-03-20 15:36:48 -04:00
DEPS Roll libchromiumcontent (#13105) 2018-05-29 13:07:14 -07:00
Dockerfile Use Node.js 10 for CI builds 2018-06-19 11:49:45 +10:00
Dockerfile.arm64 Newer CI images (#12188) 2018-03-08 22:07:50 -05:00
Dockerfile.arm64v8 Update CI to use Node 8 2018-03-19 10:19:32 -04:00
Dockerfile.armv7 Update CI to use Node 8 2018-03-19 10:19:32 -04:00
Dockerfile.circleci Use Node.js 10 for CI builds 2018-06-19 11:49:45 +10:00
electron.gyp Native mate in electron 3 (#13450) 2018-06-27 17:42:20 +10:00
features.gypi re-enable desktop capturer 2018-06-19 11:49:46 +10:00
filenames.gypi Create network_converter for services/network/* types 2018-06-19 11:49:42 +10:00
LICENSE Update license year 2018-01-01 00:51:40 +01:00
package-lock.json Fix vulnerabilities both top-level and in spec (#13029) 2018-05-21 21:15:18 -07:00
package.json Bump v3.0.0-beta.1 2018-06-20 12:52:49 -04:00
README.md Update installation instructions 2018-05-14 14:06:22 +03:00
SECURITY.md Change Contact Emails (#12278) 2018-03-15 04:37:40 +09:00
toolchain.gypi chrome style plugin: remove check-auto-raw-pointer option 2018-06-19 11:49:43 +10:00
vsts.yml Fix VSTS config for release builds 2018-06-19 10:19:51 -04:00

Electron Logo

CircleCI Build Status AppVeyor Build Status devDependency Status Join the Electron Community on Slack

📝 Available Translations: 🇨🇳 🇹🇼 🇧🇷 🇪🇸 🇰🇷 🇯🇵 🇷🇺 🇫🇷 🇹🇭 🇳🇱 🇹🇷 🇮🇩 🇺🇦 🇨🇿 🇮🇹. View these docs in other languages at electron/i18n.

The Electron framework lets you write cross-platform desktop applications using JavaScript, HTML and CSS. It is based on Node.js and Chromium and is used by the Atom editor and many other apps.

Follow @ElectronJS on Twitter for important announcements.

This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to coc@electronjs.org.

Installation

To install prebuilt Electron binaries, use npm. The preferred method is to install Electron as a development dependency in your app:

npm install electron --save-dev [--save-exact]

The --save-exact flag is recommended for Electron prior to version 2, as it does not follow semantic versioning. As of version 2.0.0, Electron follows semver, so you don't need --save-exact flag. For info on how to manage Electron versions in your apps, see Electron versioning.

For more installation options and troubleshooting tips, see installation.

Quick start

Clone and run the electron/electron-quick-start repository to see a minimal Electron app in action:

git clone https://github.com/electron/electron-quick-start
cd electron-quick-start
npm install
npm start

Resources for learning Electron

Programmatic usage

Most people use Electron from the command line, but if you require electron inside your Node app (not your Electron app) it will return the file path to the binary. Use this to spawn Electron from Node scripts:

const electron = require('electron')
const proc = require('child_process')

// will print something similar to /Users/maf/.../Electron
console.log(electron)

// spawn Electron
const child = proc.spawn(electron)

Mirrors

Documentation Translations

Find documentation translations in electron/i18n.

Community

Info on reporting bugs, getting help, finding third-party tools and sample apps, and more can be found in the support document.

License

MIT

When using the Electron or other GitHub logos, be sure to follow the GitHub logo guidelines.