Compare commits

..

2148 Commits

Author SHA1 Message Date
Cheng Zhao
33978455b8 Bump v0.36.10 2016-03-05 12:00:06 +09:00
Cheng Zhao
2bd167663d Merge pull request #4678 from atom/writable-member-functions
Make remote member functions writable/configurable
2016-03-05 11:56:56 +09:00
Kevin Sawicki
fe9e026f9e getObjectMemebers -> getObjectMembers 2016-03-04 15:57:21 -08:00
Kevin Sawicki
3230927f10 Mention deleting 2016-03-04 15:56:18 -08:00
Kevin Sawicki
f460d81dd0 Allow remote member functions to be deleted 2016-03-04 15:51:17 -08:00
Kevin Sawicki
610a503188 Make member functions writable 2016-03-04 15:49:46 -08:00
Kevin Sawicki
a9e22801e9 Add failing spec for reassigning remote function 2016-03-04 15:44:50 -08:00
Kevin Sawicki
ee1f69062e Merge pull request #4675 from atom/report-error-in-enumerate-devices-spec
Always call done callback in enumerateDevices spec
2016-03-04 14:42:21 -08:00
Kevin Sawicki
20e9a87158 Don't run mediaDevices spec on Linux CI 2016-03-04 13:23:12 -08:00
Kevin Sawicki
a4e04e6083 Always call done callback 2016-03-04 12:29:50 -08:00
Cheng Zhao
b4c48664f8 Merge pull request #4635 from akameco/master
Fix JP docs tranlation
2016-03-03 21:00:46 +09:00
Plusb Preco
b6958e5221 Update as upstream
[ci skip]
2016-03-03 20:56:46 +09:00
Cheng Zhao
46c6233b62 Merge pull request #4630 from preco21/patch-6
Docs: Cleanup docs
2016-03-03 11:37:48 +09:00
Cheng Zhao
d6144d63fb Merge pull request #4629 from RacioN/master
Update docs-translations/jp/README.md tranlation.
2016-03-03 11:32:40 +09:00
akameco
9c7bb0b370 Fix JP docs tranlation 2016-03-01 01:41:46 +09:00
Plusb Preco
24ae9b0ea9 Cleanup docs
* Adjust 80 chars per line
* Line feed after header
2016-02-29 01:38:32 +09:00
RacioN
2d11b1d9eb Update read me tranlation 2016-02-28 20:55:47 +09:00
RacioN
e3dde12c45 Update read me tranlation 2016-02-28 20:50:16 +09:00
RacioN
681a772f5f Add list 2016-02-28 20:42:14 +09:00
Cheng Zhao
5839d7dcd5 Merge pull request #4623 from parro-it/patch-1
Removed duplicate `isDevToolsFocused` entry
2016-02-28 10:41:27 +08:00
Andrea Parodi
fd11b7e7db Removed duplicate isDevToolsFocused entry 2016-02-27 20:34:51 +01:00
Cheng Zhao
7de97a55f7 Merge pull request #4609 from MaxWhere/framesubscriber-fix
🐎 framesubscriber speed and quality improvement
2016-02-26 23:21:42 +08:00
Cheng Zhao
b25c8ca621 Merge pull request #4616 from deepak1556/media_device_enumeration_patch
browser: allow enumeration of media device labels
2016-02-26 22:07:35 +08:00
Cheng Zhao
db46e9c203 Merge pull request #4596 from felixrieseberg/ci-docs
Add Headless CI Tutorial
2016-02-26 21:32:03 +08:00
Cheng Zhao
ebfc127628 Merge pull request #4522 from deepak1556/async_execute_javascript_patch
webContents: provide responses for executeJavscript method
2016-02-26 21:17:47 +08:00
gellert
070772b4b9 Added special key identifiers for OSX and Windows 2016-02-26 20:22:46 +08:00
Cheng Zhao
d9ad51e989 Merge pull request #4607 from rglyall/master
Fix Menu template API example
2016-02-26 20:13:40 +08:00
Robo
fce641aab6 browser: allow enumeration of media device labels 2016-02-26 16:31:20 +05:30
Cheng Zhao
a21e095a59 Merge pull request #4515 from deepak1556/ipc_value_conversion_patch
ipc: allow passing date instances
2016-02-26 16:16:33 +08:00
Cheng Zhao
a67b29d8d2 Bump v0.36.9 2016-02-26 02:18:27 +00:00
Cheng Zhao
795ac86266 Merge pull request #4608 from atom/harfbuzz
Use harfbuzz 1.06
2016-02-26 09:51:13 +08:00
Cheng Zhao
8a744255fa Update libchromiumcontent, use harfbuzz 1.06
Close #4513.
2016-02-26 09:23:39 +08:00
Felix Rieseberg
a3b8e81c21 📝 Add Headless CI Tutorial 2016-02-25 17:14:43 -08:00
Heilig Benedek
4bfa03e5f4 Removed an include no longer needed 2016-02-26 02:13:17 +01:00
Heilig Benedek
3f0d598a59 Merge atom/master 2016-02-26 02:05:57 +01:00
Robo
1235907835 run webframe methods for webview in its context 2016-02-26 05:14:45 +05:30
Heilig Benedek
9a0372b61b Removed size_ since it's not needed anymore 2016-02-25 23:48:58 +01:00
Robert Lyall
6f45678e9c Fix Menu template API example 2016-02-25 18:28:03 +00:00
Cheng Zhao
0ea80f674b Merge pull request #4595 from dongjoon-hyun/rename_function_filter_accelerator
Rename function `FilterAccecelator` to `FilterAccelerator` in `submenu.cc`
2016-02-25 21:18:57 +08:00
Cheng Zhao
316e6850ae Merge pull request #4592 from miniak/fix-url-request-converter-crash
Fix crash in mate::Converter<const net::URLRequest*>::ToV8
2016-02-25 21:11:43 +08:00
Robo
8386baf267 add spec 2016-02-25 11:46:30 +05:30
Robo
a734326907 track async api requests 2016-02-25 11:45:59 +05:30
Robo
2b547bd44a webContents: provide responses for executeJavscript method 2016-02-25 11:45:59 +05:30
Robo
a1a17b7ee8 use v8::Object::Get 2016-02-25 11:21:21 +05:30
Cheng Zhao
d00490271b Merge pull request #4518 from deepak1556/webview_host_window_patch
webview: api to get host browser window
2016-02-25 12:26:53 +08:00
Dongjoon Hyun
fee56df400 Rename function FilterAccecelator to FilterAccelerator in submenu_button.cc. 2016-02-24 11:15:21 -08:00
Milan Burda
d2b48b2aa7 Fix crash in mate::Converter<const net::URLRequest*>::ToV8
The net::URLRequest::url() method calls vector<GURL>::back(), which is undefined when the url_chain is empty
2016-02-24 14:01:26 +01:00
Robo
467870deb6 use builtin method 2016-02-24 16:30:23 +05:30
Robo
6fcc197db8 webview: api to get webcontents and associated host webcontents 2016-02-24 11:55:15 +05:30
Cheng Zhao
f3c7965cea Merge pull request #4588 from atom/fix-protocol-crash
Revert  #4551
2016-02-24 13:48:33 +08:00
Cheng Zhao
8ff30a2abc Revert "protocol: respect requests from partition"
This reverts commit 85800256de.
2016-02-24 13:25:30 +08:00
Cheng Zhao
bb1e4c2208 Revert "add docs"
This reverts commit bdfc19ad20.
2016-02-24 13:25:22 +08:00
Cheng Zhao
820c72af55 Merge pull request #4560 from magicae/magica-translate-docs-to-zh_CN
docs: update zh-CN docs translation [WIP]
2016-02-24 13:06:17 +08:00
Cheng Zhao
a63193c826 Merge pull request #4551 from deepak1556/protocol_session_patch
protocol: respect requests from partition
2016-02-24 12:03:37 +08:00
Cheng Zhao
3a3a95b0a9 Merge pull request #4581 from atom/linux-menu-fix
Notify the global menu bar when window is mapped
2016-02-23 20:41:50 +08:00
Robo
367d12402a ipc: allow passing date instances 2016-02-23 16:23:15 +05:30
Cheng Zhao
49f995925c Notify the global menu bar when window is mapped 2016-02-23 15:43:32 +08:00
Robo
bdfc19ad20 add docs 2016-02-23 12:54:20 +05:30
Cheng Zhao
1b3b35926a Merge pull request #4580 from kanatapple/master
docs: update jp doc ipc-renderer.md
2016-02-23 15:11:07 +08:00
Yasunari Fujieda
23268531ae docs: update jp doc ipc-renderer.md 2016-02-23 15:10:38 +09:00
Cheng Zhao
f47ae3c02f Merge pull request #4579 from jin5354/master
docs: update zh-CN doc debugging-main-process.md
2016-02-23 14:08:46 +08:00
Cheng Zhao
9c6ab6f1e0 Merge pull request #4566 from yamatoya/master
Update as upstream
2016-02-23 13:39:34 +08:00
jin5354
331bc42d57 docs: update zh-CN doc debugging-main-process.md
update zh-CN doc debugging-main-process.md to be up-to-date with
English ver.
2016-02-23 10:00:28 +08:00
Cheng Zhao
537ead8917 Merge pull request #4570 from atom/cleanup-remote
Cleanup code of remote module
2016-02-22 16:10:55 +08:00
Cheng Zhao
96b2705bd3 Fix render-view-deleted being emitted twice 2016-02-22 15:24:19 +08:00
Cheng Zhao
6753fcc1b4 Get rid of the ATOM_BROWSER_RELEASE_RENDER_VIEW event 2016-02-22 15:24:19 +08:00
Cheng Zhao
593a79ce20 Separate renderer functions by renderer process ID
Close #4324.
2016-02-22 15:24:18 +08:00
Cheng Zhao
d4c954870a Remove a few CoffeeScript generated junks 2016-02-22 15:24:18 +08:00
Cheng Zhao
59d6e7d6ef ObjectsRegistry no longer needs to send events 2016-02-22 15:24:18 +08:00
Cheng Zhao
2b04af4349 No longer need to count the references in webContents
All remote objects are now cached in renderer process, so there is
always only one reference to one remote object for each webContents.
2016-02-22 15:24:18 +08:00
Cheng Zhao
fe7462b352 No longer needs cache for methods of remote
Refs #4517.
2016-02-22 13:05:58 +08:00
Cheng Zhao
c65cfadd09 v8Util.createObjectWithName is no longer used 2016-02-22 13:05:58 +08:00
Cheng Zhao
34658473c9 Merge pull request #4568 from atom/remote-proto
Keep prototype chain in remote objects
2016-02-22 13:04:34 +08:00
Cheng Zhao
f610e332b3 spec: Tests for remote ES6 class 2016-02-22 12:35:51 +08:00
Cheng Zhao
67324ce732 Keep the prototype chain in remote objects 2016-02-22 12:35:51 +08:00
Takahito Yamatoya
9e1da8f097 Update as upstream 2016-02-22 00:59:18 +09:00
Cheng Zhao
361b9cad0f Merge pull request #4564 from dongjoon-hyun/rename_const_persist_prefix
Rename constant `PERSIST_PERFIX` to `PERSIST_PREFIX` in `session.js`.
2016-02-21 21:53:41 +08:00
Plusb Preco
f63532fa95 📝 Update as upstream
[ci skip]
2016-02-21 21:15:36 +08:00
Cheng Zhao
4a47deafc2 Merge pull request #4558 from cesine/update/deps
a new version of asar is out 0.10.0
2016-02-21 19:04:06 +08:00
Cheng Zhao
cad26fa606 Merge pull request #4517 from deepak1556/remote_browser_window_patch
remote: return webcontents instance from cache
2016-02-21 17:54:48 +08:00
Dongjoon Hyun
078c7bf8ab Rename constant PERSIST_PERFIX to PERSIST_PREFIX in session.js. 2016-02-21 00:16:53 -08:00
Magica
a05e98f463 Translate auto-updater.md in commit 45739ce434 2016-02-21 14:09:34 +08:00
Magica
f64dc5f57d Translate app.md in commit 45739ce434 2016-02-21 13:49:51 +08:00
Magica
1db72f8010 Translate accelerator.md of 45739ce434 2016-02-20 18:51:04 +08:00
Magica
060d06d396 Translate electron-faq.md#45739ce434ec3c3eb190d35d3948b702b54706cd 2016-02-20 17:00:58 +08:00
Magica
a737e15ddb Update README.md to 45739ce434 2016-02-20 16:09:56 +08:00
cesine
e45e246027 a new version of asar is out 0.10.0 2016-02-19 23:24:56 -05:00
Kevin Sawicki
45739ce434 Merge pull request #4547 from Rafaelgfirmino/master
Translated
2016-02-19 11:22:15 -08:00
Kevin Sawicki
777ff450cf Merge pull request #4543 from baconface/patch-2
Changed session to app to reflect rest of document
2016-02-19 11:21:10 -08:00
Robo
85800256de protocol: respect requests from partition 2016-02-19 19:39:01 +05:30
Cheng Zhao
4b18317e7c Bump v0.36.8 2016-02-19 14:38:36 +08:00
Cheng Zhao
54a7eefa28 Merge pull request #4548 from atom/free-ffmpeg
Provide ffmpeg binaries without proprietary codecs
2016-02-19 14:37:09 +08:00
Lee Dohm
bd2c13527d Merge pull request #4528 from atom/wl-templates
Add issue template
2016-02-18 20:49:42 -08:00
Cheng Zhao
daffb4881e Create and upload free version of ffmpeg 2016-02-19 12:06:48 +08:00
Cheng Zhao
cd30308711 Update libchromiumcontent with free version of ffmpeg 2016-02-19 12:06:48 +08:00
Rafael G Firmino
632c18ab37 Translated 2016-02-18 22:51:23 -02:00
Brad Metcalf
2a6fcf48e5 Changed session to app to reflect rest of document 2016-02-18 13:41:22 -06:00
Kevin Sawicki
d5f4a32435 Merge pull request #4524 from atom/update-default-app-styles
Match default app styles to website styles
2016-02-18 10:47:45 -08:00
Kevin Sawicki
d3c6075841 Use background color as border color 2016-02-18 10:15:44 -08:00
Kevin Sawicki
1c37731065 under -> in 2016-02-18 10:15:44 -08:00
Kevin Sawicki
9b373f2e15 on -> to learn 2016-02-18 10:15:44 -08:00
Kevin Sawicki
4d011057b0 Only change background on hover 2016-02-18 10:15:44 -08:00
Kevin Sawicki
de37de1785 Add docs sentence in new paragraph 2016-02-18 10:15:43 -08:00
Kevin Sawicki
1520b2271a Remove v before version 2016-02-18 10:15:43 -08:00
Kevin Sawicki
793527f82e Update header style 2016-02-18 10:15:43 -08:00
Kevin Sawicki
db1c29f2f9 Remove parens around version 2016-02-18 10:15:43 -08:00
Kevin Sawicki
d48a61fdff Tweak holder styles 2016-02-18 10:15:43 -08:00
Kevin Sawicki
c4859c3dc6 Use colors from Electron site 2016-02-18 10:15:43 -08:00
Lee Dohm
cc6ba0fd10 Remove all but prompts for version numbers 2016-02-18 08:57:31 -08:00
Plusb Preco
8ce3ab1e26 📝 Update as upstream
[ci skip]
2016-02-18 23:35:29 +08:00
Cheng Zhao
68f48c9456 docs: Add note on Chrome version when using widevine
Refs #4519.
2016-02-18 23:28:19 +08:00
Cheng Zhao
aa03a9d0ef Merge pull request #4534 from apoco/menu-documentation
Link to Menu documentation
2016-02-18 20:14:08 +08:00
Robo
0d77fd4a2c remote: return webcontents instance from cache 2016-02-18 17:40:10 +05:30
Cheng Zhao
35815387ab Ship ffmpeg in dist, close #4536 2016-02-18 18:57:31 +08:00
Cheng Zhao
a8cd435e30 Merge pull request #4538 from atom/cmd-tilde
mac: Simulate the behavior of cmd+~ when OS X didn't handle it
2016-02-18 18:57:04 +08:00
Cheng Zhao
0446f07884 Merge pull request #4508 from atom/open-external-without-activation
Allow shell.openExternal to open URLs in the background
2016-02-18 18:40:22 +08:00
Cheng Zhao
12569f2c9d mac: Simulate the behavior of cmd+~ when OS X didn't handle it 2016-02-18 18:32:13 +08:00
Jacob Page
9c9759a683 Link to Menu documentation
Added link to documentation about `Menu` objects
2016-02-17 21:30:01 -08:00
Cheng Zhao
25156dbd53 Merge pull request #4532 from atom/no-drop-capacities
Update libchromiumcontent, fix #3666
2016-02-18 13:01:18 +08:00
Cheng Zhao
1e894df102 Update libchromiumcontent, fix #3666 2016-02-18 12:14:25 +08:00
Cheng Zhao
b13a2fe260 Merge pull request #4531 from atom/fix-win32-specs
spec: Fix failing tests on Windows
2016-02-18 12:12:32 +08:00
Cheng Zhao
651264d098 spec: Fix failing tests on Windows 2016-02-18 11:39:35 +08:00
Cheng Zhao
5f42429af1 Merge pull request #4523 from atom/spec-clean-up
Clean up specs post CoffeeScript conversion
2016-02-18 11:15:37 +08:00
Cheng Zhao
233961ea29 Merge pull request #4530 from atom/shared-ffmpeg
Link with ffmpeg dynamically
2016-02-18 11:13:57 +08:00
Wliu
1f248e6ea6 📝 Move Electron and OS versions above the description
[ci skip]
2016-02-17 21:41:14 -05:00
Wliu
f81f4479b6 Drastically simplify the template
[ci skip]
2016-02-17 21:29:36 -05:00
Heilig Benedek
2610aa60e9 🎨 lint fix 2016-02-18 01:19:41 +01:00
Heilig Benedek
7bf17f2541 Improved frame subscriber - now we only use framesubscription events as an event, and we copy from the backing store directly (instead of accessing it through a videoframe) 2016-02-18 01:15:00 +01:00
Wliu
a252b9b570 Initial ISSUE_TEMPLATE draft 2016-02-17 16:31:26 -05:00
Kevin Sawicki
31028ab636 Update var declarations 2016-02-17 09:27:25 -08:00
Kevin Sawicki
54d7c580bd Remove unneeded returns 2016-02-17 09:08:34 -08:00
Kevin Sawicki
8a9395101e Remove unused results 2016-02-17 09:08:34 -08:00
Kevin Sawicki
12adaa0570 Remove unneeded returns 2016-02-17 09:08:34 -08:00
Kevin Sawicki
e63c3c727a Add newlines between describe/it blocks 2016-02-17 09:08:34 -08:00
Kevin Sawicki
709661156a Use const for requires 2016-02-17 09:08:34 -08:00
Kevin Sawicki
b3ac48cf52 Handle argument parsing in C++ 2016-02-17 09:05:21 -08:00
Kevin Sawicki
3f42909ecf Call OpenExternal with new true default to activate arg 2016-02-17 08:56:59 -08:00
Kevin Sawicki
04517caf36 Add missing semicolon 2016-02-17 08:56:59 -08:00
Kevin Sawicki
5e5313d8b1 Return value from bindings method 2016-02-17 08:56:59 -08:00
Kevin Sawicki
42041cd402 Use markdown list for new options param 2016-02-17 08:56:59 -08:00
Kevin Sawicki
f5bed87199 without_activation -> activate 2016-02-17 08:56:58 -08:00
Ben Gotow
52db43eee5 Fix linter error 2016-02-17 08:56:58 -08:00
Ben Gotow
d8679b3899 Allow openExternal to open URLs in the background #3224 2016-02-17 08:56:58 -08:00
Cheng Zhao
3d3fc18a3a Update libchromiumcontent to use shared ffmpeg 2016-02-17 23:23:36 +08:00
Cheng Zhao
7fece7e9b3 Link with ffmpeg 2016-02-17 22:21:14 +08:00
Cheng Zhao
57f322a818 Merge pull request #4509 from caibirdme/feature-translate-into-Chinese
tanslate file-object.md
2016-02-17 19:38:57 +08:00
deenjun
28635e5f2c remove original English text 2016-02-17 14:54:57 +08:00
Cheng Zhao
723acfa1a1 Merge pull request #4510 from atom/skip-eslint
Skip eslint on our Windows build machine for now
2016-02-17 12:07:51 +08:00
Cheng Zhao
01ede11cb8 Skip eslint on our Windows build machine for now 2016-02-17 10:54:44 +08:00
Cheng Zhao
c02a49a1db Merge pull request #4507 from atom/mb-add-deprecation-handler-api
Add API for custom handling of deprecations
2016-02-17 10:51:30 +08:00
deenjun
baf44c7a41 tanslate file-object.md 2016-02-17 10:42:59 +08:00
Cheng Zhao
7810f4293f Merge pull request #4447 from KevinMartin/patch-3
Add ability to specify v8 flags in package.json
2016-02-17 10:42:29 +08:00
Kevin Jose Martin
ee0cac7d54 Remove command line switches, add v8 flags 2016-02-16 21:23:13 -05:00
Plusb Preco
407bef5727 📝 Update as upstream
[ci skip]
2016-02-17 09:37:09 +08:00
Max Brunsfeld
3e3e593366 👕 Add missing semicolons 2016-02-16 15:28:33 -08:00
Max Brunsfeld
ccef805e9b Add API for custom handling of deprecations 2016-02-16 15:21:32 -08:00
Kevin Sawicki
175449f096 Merge pull request #4503 from x87/master
fixed typo in the russian translation of README.md
2016-02-16 12:52:37 -08:00
Seemann
2346caf6fb fixed typo in the russian translation of README.md 2016-02-16 23:19:20 +03:00
Kevin Sawicki
73518cdc8d Merge pull request #4501 from dmnlk/feature/add_community_jp
add Japanese Elecron Community
2016-02-16 10:45:30 -08:00
dmnlk
959c08a1ec add Japanese Electron Community 2016-02-17 02:28:10 +09:00
Cheng Zhao
0ba86b9716 docs: Make variable names follow previous example 2016-02-16 23:10:05 +08:00
Cheng Zhao
18e7825ff3 Merge pull request #4498 from destan/patch-2
add a new platform definition for linux
2016-02-16 23:08:34 +08:00
Destan Sarpkaya
afacca252e add a new platform definition for linux
On Linux in order for changes made to individual `MenuItem`s to take effect, you have to call `setContextMenu` again

Regarding https://github.com/atom/electron/issues/1473
2016-02-16 16:24:05 +02:00
Cheng Zhao
61a9316f67 Merge pull request #4496 from cesine/update/deps
fix dependencies badge  which shows out of date
2016-02-16 22:18:51 +08:00
Cheng Zhao
e47a815c38 Merge pull request #4482 from lukeapage/patch-7
spelling fixes and americanisms
2016-02-16 20:22:31 +08:00
Cheng Zhao
25ac6f0f37 Merge pull request #4480 from apoco/single-instance-clarification
makeSingleInstance clarification
2016-02-16 20:17:18 +08:00
Cheng Zhao
5b4f29e7ed Merge pull request #4471 from rsezille/master
Docs: Start french translation
2016-02-16 16:22:55 +08:00
Cheng Zhao
aaca93046c spec: Give beginFrameSubscription test more time to run 2016-02-16 16:20:15 +08:00
Cheng Zhao
bce11c8913 Merge commit 'd76f6fe' 2016-02-16 16:15:59 +08:00
Cheng Zhao
44260634af Merge pull request #4364 from atom/launch-url-or-file-directly-from-cli
Launch URL or HTML file directly
2016-02-16 16:13:10 +08:00
Cheng Zhao
7ca09de386 Merge remote-tracking branch 'origin/dont-write-empty-dev-tools-extensions-file' 2016-02-16 12:30:42 +08:00
Cheng Zhao
55642d257d Merge pull request #4494 from pra85/patch-3
docs: fix a minor typo
2016-02-16 12:28:08 +08:00
Plusb Preco
81ffde3c2a 📝 Update as upstream
[ci skip]
2016-02-16 12:20:21 +08:00
Cheng Zhao
95d8716ffa Merge pull request #4497 from atom/docs-revise
Improve the IPC related docs
2016-02-16 12:20:00 +08:00
Cheng Zhao
fded8d80b1 docs: Remove unnecessary "properties: " suffix 2016-02-16 12:11:05 +08:00
Cheng Zhao
2b406ccaf7 Optional => optional 2016-02-16 11:54:41 +08:00
Cheng Zhao
f58bab70c5 docs: Improve the docs on sharing data 2016-02-16 11:52:47 +08:00
Cheng Zhao
b8e8e4c930 docs: Cleanup the IPC docs 2016-02-16 11:34:39 +08:00
cesine
2aff0c47d0 ⬆️ 👕 updated to eslint 2.1.0
Verified migration doc (nothing to be done)
http://eslint.org/docs/user-guide/migrating-to-2.0.0

And made sure the eslint tasks passed
2016-02-15 22:30:29 -05:00
Cheng Zhao
63578f9d2b Merge pull request #4392 from madarche/doc-howto-share-objects
Document different techniques to share objects
2016-02-16 11:18:20 +08:00
Cheng Zhao
40a0a6aa8e Merge pull request #4495 from atom/frame-subscriber
Use weak pointer instead of manual bookkeeping
2016-02-16 11:13:11 +08:00
Cheng Zhao
d035fc2816 Merge pull request #4453 from lukeapage/patch-6
Docs - clarify ipc arguments
2016-02-16 11:08:35 +08:00
Cheng Zhao
3c4043fd39 spec: Skip autoUpdater tests in MAS build 2016-02-16 11:00:36 +08:00
Cheng Zhao
66bb6a8534 Use weak pointer instead of manual bookkeeping 2016-02-16 10:44:10 +08:00
Cheng Zhao
ed1966ac76 spec: Bring back beginFrameSubscription test 2016-02-16 10:30:18 +08:00
Prayag Verma
367a3524b9 docs: fix a minor typo
Remove extra `will`
2016-02-16 07:51:14 +05:30
Cheng Zhao
1232a285e6 Merge pull request #4451 from MaxWhere/framesubscriber-fix
Fixing FrameSubscriber memory issue
2016-02-16 10:20:44 +08:00
Cheng Zhao
f3f6fa958e Merge pull request #4449 from deepak1556/permission_helper_media_patch
browser: handle desktop capture devices in media permission request
2016-02-15 23:12:57 +08:00
Cheng Zhao
08e5c1f6fe Merge branch 'webcontent_invalid_loadurl_patch' of https://github.com/deepak1556/atom-shell into deepak1556-webcontent_invalid_loadurl_patch 2016-02-15 21:14:54 +08:00
Cheng Zhao
e244d0db0c Merge pull request #4421 from atom/dialog-icon-on-mac
Support configurable dialog icon on Mac
2016-02-15 16:48:43 +07:00
Cheng Zhao
7c7e6ffc77 Fix broken links in desktop-environment-integration.md
Close #4404.
2016-02-15 16:36:01 +08:00
Cheng Zhao
18f31d7db9 Merge pull request #4398 from LartSimZ/master
Fix for issue #4369
2016-02-15 15:30:06 +07:00
Luke Page
a141d6b3d4 spelling fixes and americanisms 2016-02-15 06:51:20 +01:00
Luke Page
2c6e5d0464 Clarify arguments sent via ipc 2016-02-15 06:29:52 +01:00
Jacob Page
17603d5dfb makeSingleInstance clarification
Removed callback return value from the sample code for makeSingleInstance because it appears to not be used for anything.
2016-02-14 19:13:11 -08:00
Cheng Zhao
09b658b50a Merge pull request #4361 from ShiningRay/patch-2
translate remote.md into Chinese
2016-02-15 09:13:02 +07:00
Plusb Preco
f63d8b4d5e 📝 Update as upstream
[ci skip]
2016-02-15 10:05:29 +08:00
Remi Sezille
ef290ffcf2 Add styleguide in french
[ci skip]
2016-02-13 19:28:12 +01:00
Remi Sezille
efd25efaf4 Add FAQ
[ci skip]
2016-02-13 18:20:34 +01:00
Remi Sezille
a69341f551 Fix line length wrap
[ci skip]
2016-02-13 18:19:49 +01:00
Remi Sezille
940c325e7f Add french docs link on main README
[ci skip]
2016-02-13 11:32:47 +01:00
Remi Sezille
adf89a1e0e Translate README in french
[ci skip]
2016-02-13 11:29:08 +01:00
Yuya Ochiai
d76f6fe8e0 :memo:🏁 Add icon overlays in taskbar to docs
[ci skip]
2016-02-13 17:34:12 +09:00
Kevin Sawicki
440eccb7ee Merge pull request #4455 from preco21/patch-5
Remove unnecessary line feeds
2016-02-12 09:38:27 -08:00
Plusb Preco
e71eeda73c Remove unnecessary line feeds
[ci skip]
2016-02-12 22:38:08 +09:00
Marc-Aurèle DARCHE
2677dc6844 Fix: add missing fragment in FAQ section URL 2016-02-12 13:50:15 +01:00
Heilig Benedek
f36e2841bf Don't fire callbacks after we end the subscription 2016-02-12 13:30:11 +01:00
Heilig Benedek
91c96559fa Fixing the problem related to FrameSubscriber 2016-02-12 02:18:13 +01:00
Kevin Sawicki
03dd94d2b2 Merge pull request #4450 from HR/patch-1
Fix electron binary relative path
2016-02-11 17:00:05 -08:00
Heilig Benedek
a2b0e30714 Merge pull request #5 from atom/master
update as upstream
2016-02-12 01:57:08 +01:00
Habib Rehman
3adcaa7681 Fix electron binary relative path
The relative path for Electron's binary is Contents/MacOS/Electron
2016-02-12 00:11:02 +00:00
Robo
c09ff40916 browser: handle desktop capture devices in media permission request 2016-02-12 05:07:06 +05:30
Kevin Sawicki
9d6344704e Merge pull request #4382 from atom/throw-explicit-error-when-webview-api-is-unavailable
Throw explicit error when WebView API isn't ready
2016-02-11 13:34:01 -08:00
Kevin Sawicki
042825e8fb emmitted -> emitted 2016-02-11 13:32:34 -08:00
Kevin Sawicki
9609b36b3c Add missing semicolon 2016-02-11 13:28:33 -08:00
Kevin Sawicki
da6ebac742 Use assert.throws 2016-02-11 13:28:33 -08:00
Kevin Sawicki
bad4816976 Expand error message 2016-02-11 13:28:33 -08:00
Kevin Sawicki
674af4211c Use interpolated string 2016-02-11 13:28:33 -08:00
Kevin Sawicki
42a8674cea Add missing semicolon 2016-02-11 13:28:33 -08:00
Kevin Sawicki
8cacd0b931 Throw custom error when WebView API is unavailable 2016-02-11 13:28:33 -08:00
Kevin Sawicki
6bc48ba123 Add failing spec for custom error message 2016-02-11 13:28:33 -08:00
Kevin Sawicki
a4d21cadfa Format webview spec post CoffeeScript conversion 2016-02-11 13:28:33 -08:00
Kevin Sawicki
174a492cdb Merge pull request #4430 from atom/dont-crash-when-missing-ipc-channel
Don't crash when IPC channel is missing
2016-02-11 13:28:08 -08:00
Kevin Sawicki
704bd4d191 Improve error message 2016-02-11 13:25:58 -08:00
Kevin Sawicki
3e399d09d7 Match existing function style 2016-02-11 13:25:58 -08:00
Kevin Sawicki
c94f1fc857 Throw error when IPC channel is missing 2016-02-11 13:25:58 -08:00
Kevin Sawicki
cead84d5d1 Add failing spec 2016-02-11 13:25:57 -08:00
Kevin Sawicki
4828835998 Clean up returns after CoffeeScript migration 2016-02-11 13:25:57 -08:00
Kevin Sawicki
55d4db1387 🎨 2016-02-11 13:25:57 -08:00
Kevin Jose Martin
dbb4e21684 Fix index increment 2016-02-11 15:41:36 -05:00
Kevin Jose Martin
6d2ad5ae58 Add ability to specify command line switches in package.json 2016-02-11 15:34:19 -05:00
Robo
5a8bebc2f8 browser: emit did-fail-load for invalid url 2016-02-12 01:52:42 +05:30
Kevin Sawicki
fd30ed0edd Merge pull request #4439 from atom/add-more-npm-scripts
Add more npm scripts
2016-02-11 11:29:46 -08:00
Kevin Sawicki
a8e6e24e58 Sort scripts keys 2016-02-11 11:28:20 -08:00
Kevin Sawicki
03482a4427 Add build script 2016-02-11 11:28:20 -08:00
Kevin Sawicki
16594d6ed0 Add bootstrap script 2016-02-11 11:28:20 -08:00
Kevin Sawicki
38e8208639 Merge pull request #4350 from atom/dont-use-es6-class-for-auto-updater
Don't use ES6 class for auto updater
2016-02-11 11:27:10 -08:00
Heilig Benedek
f8fd5dc2a3 Merge pull request #4 from atom/master
update as upstream
2016-02-11 02:36:10 +01:00
Kevin Sawicki
3ab14e14e9 Add initial auto updater specs 2016-02-09 14:54:18 -08:00
Kevin Sawicki
7da4c3acf7 Use const for util require 2016-02-09 14:54:18 -08:00
Kevin Sawicki
6617592224 Remove lint errors 2016-02-09 14:54:18 -08:00
Kevin Sawicki
c842ca1f12 Don't use ES6 class for AutoUpdater windows class 2016-02-09 14:54:17 -08:00
Kevin Sawicki
3af20729bd Merge pull request #4363 from Vj3k0/master
Adding support to write RTF to clipboard.
2016-02-09 13:23:47 -08:00
Heilig Benedek
d5bdb17144 Merge pull request #3 from atom/master
update as upstream
2016-02-09 00:52:19 +01:00
Kevin Sawicki
756aeffe03 Set icon on NSAlert when specified 2016-02-08 15:18:05 -08:00
Paul Betts
1d0179b192 Merge pull request #4406 from adam-lynch/patch-4
Docs: app: small process.argv clarification
2016-02-07 22:40:34 +01:00
Adam Lynch
5911c45b54 Docs: app: small process.argv clarification 2016-02-07 17:31:37 +00:00
Michael Vasseur
702455674b Using node::Buffer::Copy() instead of node::Buffer::New() to copy the handle bytes to buffer make the buffer really contains the data. 2016-02-07 10:20:38 +01:00
Marc-Aurèle DARCHE
fa734d7824 Document different techniques to share objects
This has been discussed in
2016-02-06 19:57:21 +01:00
Kevin Sawicki
18631df88b Merge pull request #4378 from markisadesignerd/ipc-renderer-doc-typo
📝 Fixing typo in ipc-renderer
2016-02-05 10:10:26 -08:00
Vjekoslav Ratkajec
d0d336eee7 Merge remote-tracking branch 'upstream/master' 2016-02-05 09:11:24 +01:00
Vjekoslav Ratkajec
252b12be13 Add readRtf feature with appropriate spec test. Docs updated as well. 2016-02-05 09:06:21 +01:00
Kevin Sawicki
027b5345f8 Merge pull request #4367 from atom/remove-resedit
Remove ResEdit link from docs
2016-02-04 13:37:15 -08:00
Kevin Sawicki
bf03be3541 Remove ResEdit links from translations 2016-02-04 13:32:13 -08:00
Kevin Sawicki
45ce16b73f Remove ResEdit 2016-02-04 13:29:32 -08:00
Kevin Sawicki
fa4ad9d95f Tweak help message for new path options 2016-02-04 10:45:52 -08:00
Vjekoslav Ratkajec
acd5d40ab0 Adding support to write RTF to clipboard. 2016-02-04 19:38:47 +01:00
Kevin Sawicki
f482ea4902 loadPackagePath -> loadApplicationPackage 2016-02-04 10:35:17 -08:00
Kevin Sawicki
b74dd43ff5 Support opening file: URLs directly 2016-02-04 10:34:36 -08:00
Kevin Sawicki
312182e0bd Add support for launching HTML files directly 2016-02-04 10:33:22 -08:00
Kevin Sawicki
69687c92e9 Add support for launching http URL directly 2016-02-04 10:26:11 -08:00
Kevin Sawicki
2e96cab6aa Extract helper function to load specified app 2016-02-04 10:07:19 -08:00
Kevin Sawicki
8df3856c8f Use const for fs/path requires 2016-02-04 09:16:40 -08:00
Kevin Sawicki
2b5cbe825a Merge pull request #4356 from chris-ls/patch-1
Clarify overlay description
2016-02-04 09:09:44 -08:00
ShiningRay
55950281e8 translate 2016-02-04 23:07:13 +08:00
ShiningRay
6c8d9a5ccf translate 2016-02-04 23:07:07 +08:00
ShiningRay
e9aa24e340 fix broken link 2016-02-04 18:10:26 +08:00
chris-ls
48c6692311 Clarify overlay description
'16px' is ambiguous and not clear (4 x 4 px? or 16 x 16px)
2016-02-04 15:36:41 +13:00
Kevin Sawicki
00261a5571 Remove lint warnings 2016-02-03 17:17:11 -08:00
Kevin Sawicki
adfa4844d1 Don't return anything from will-quit handler 2016-02-03 17:15:28 -08:00
Kevin Sawicki
6252511b7f Delete extensions file when there are no loaded extensions 2016-02-03 17:12:09 -08:00
Kevin Sawicki
5714ae0b73 Add failing spec for dev tools extensions file 2016-02-03 17:11:12 -08:00
Kevin Sawicki
8bd07af5e5 Correct typo in comment 2016-02-03 16:22:16 -08:00
Mark Potnick
b9e2806042 Fixing typo 2016-02-03 15:15:13 -05:00
Kevin Sawicki
a0792237a0 Merge pull request #4339 from ShiningRay/patch-1
fix typo
2016-02-03 09:56:49 -08:00
Cheng Zhao
ff6bf92ee4 Merge pull request #4329 from atom/reliable-shutdown
Emit exit event reliably in renderer process
2016-02-03 12:07:39 +08:00
Cheng Zhao
5b8b167cbb Merge pull request #4333 from Rafaelgfirmino/master
translation for pt_BR
2016-02-03 11:49:34 +08:00
ShiningRay
86ed7ca725 fix typo
Broswer -> Browser
2016-02-03 11:37:20 +08:00
Rafael Firmino
77d005c5c8 translation for pt_BR 2016-02-02 17:02:43 -02:00
Cheng Zhao
47de3f3f24 Fix failing specs 2016-02-03 00:05:27 +08:00
Cheng Zhao
bc196c016b Do process.emit('exit') in WillReleaseScriptContext 2016-02-02 23:47:19 +08:00
Cheng Zhao
ffcf609de1 Ensure only main frame get notifications 2016-02-02 23:44:33 +08:00
Cheng Zhao
4b67ff9534 Override WillReleaseScriptContext 2016-02-02 23:38:49 +08:00
Cheng Zhao
808b02edda Merge pull request #4325 from atom/download-item-cleanup
Cleanup DownloadItem related code
2016-02-02 20:36:54 +08:00
Cheng Zhao
50d69fd9bb Get rid of SavePathData 2016-02-02 20:11:39 +08:00
Cheng Zhao
eaa60e9c17 Destroy the item once item is downloaded 2016-02-02 19:54:41 +08:00
Cheng Zhao
12d311fd29 Gracefully destroy downloadItem 2016-02-02 19:52:09 +08:00
Cheng Zhao
65cf85808f Calling cancel() should destroy the downloadItem 2016-02-02 19:05:58 +08:00
Cheng Zhao
f1f91828ba Rely on OnDownloadDestroyed to destroy downloadItem 2016-02-02 18:49:43 +08:00
Cheng Zhao
f624800881 Merge pull request #4314 from deepak1556/download_cancel_patch
fix crash when default download is canceled
2016-02-02 18:40:44 +08:00
Robo
2819af9586 fix lifetime of downloadItem class when defaultdownload canceled 2016-02-02 15:54:51 +05:30
Cheng Zhao
fabd897d49 Merge pull request #4320 from runinspring/patch-1
Update app.md
2016-02-02 14:34:34 +08:00
ZhangYu
c69971c381 Update app.md 2016-02-02 13:59:02 +08:00
Cheng Zhao
b2d44a94ce Merge pull request #4312 from deepak1556/host_resolver_cache_clear_patch
session: api to clear host resolver cache
2016-02-02 13:49:35 +08:00
Rafael Dantas
aadb131bc7 Update Portuguse docs translation 2016-02-02 10:23:07 +08:00
Plusb Preco
683f9745ad 📝 Update as upstream
[ci skip]
2016-02-02 10:12:42 +08:00
Cheng Zhao
1a3c01efca Update native-mate for #4307 2016-02-02 10:11:04 +08:00
Robo
ce2ea963b9 session: api to clear host resolver cache 2016-02-02 02:06:49 +05:30
Kevin Sawicki
9341f9a6bc Merge pull request #4309 from diracdeltas/fix/use-strict
Fix 'user strict' typo
2016-02-01 12:36:24 -08:00
yan
035c1dd5a1 Fix 'user strict' typo 2016-02-01 11:46:02 -08:00
Robo
045e42a10c fix crash when default download is canceled 2016-02-02 00:26:37 +05:30
Cheng Zhao
a575192c5f Merge pull request #4305 from atom/remove-unnecessary-methods
Remove a few unneeded overrides
2016-02-01 21:37:24 +08:00
Cheng Zhao
7d68ca21c8 No need of DefaultWebContentsDelegate 2016-02-01 21:09:12 +08:00
Cheng Zhao
159fb857f4 No need to override RequestToLockMouse in CommonWebContentsDelegate 2016-02-01 21:05:29 +08:00
Cheng Zhao
69f93a7528 Merge pull request #4223 from deepak1556/notification_disable_patch
session: add setPermissionRequestHandler api
2016-02-01 20:51:22 +08:00
Robo
ff5fb512b8 use mediastreamdevicescontroller from brightray to enumerate available devices 2016-02-01 17:45:53 +05:30
Robo
b575cd0ef9 add fullscreen permission type 2016-02-01 16:22:05 +05:30
Cheng Zhao
9d2cc4f2cc Merge pull request #4302 from pra85/patch-1
docs: fix minor typo
2016-02-01 18:46:42 +08:00
Cheng Zhao
6c282775a9 Merge pull request #4301 from ragingwind/set-icon-crash
Fix type cast of sharedApplication
2016-02-01 18:46:20 +08:00
Robo
45eada306f add pointerlock permission type 2016-02-01 15:13:49 +05:30
Prayag Verma
d8086b6532 docs: fix minor typo
Replace `an` with `a`
2016-02-01 14:40:36 +05:30
Cheng Zhao
e450d1586e Merge pull request #4288 from MaxWhere/master
Adding cursor-changed event to webContents
2016-02-01 17:03:16 +08:00
ragingwind
d2ec311c55 Fix type cast of sharedApplication 2016-02-01 17:17:22 +09:00
Robo
db26dcaf4c expose handler from session and remove permission-request event 2016-02-01 12:23:51 +05:30
Heilig Benedek
745253a369 Quick fix for the memory leak + docs 2016-02-01 07:17:58 +01:00
Cheng Zhao
7fdff522d6 Merge pull request #4292 from be5invis/patch-1
Add link to BrowserWindow::setMenu in docs/api/menu.md
2016-02-01 13:19:59 +08:00
Cheng Zhao
e16154889a Merge pull request #4291 from yamatoya/master
📝 Update as upstream
2016-02-01 13:11:01 +08:00
Cheng Zhao
ea2f170b7d Merge pull request #4289 from wgrafael/patch-1
PT/BR Docs Translation: update the "janelas" to "windows"
2016-02-01 13:10:26 +08:00
Plusb Preco
d471952adf 📝 Update as upstream
[ci skip]
2016-02-01 12:56:24 +08:00
Cheng Zhao
457c7f55e6 Merge pull request #4271 from thingsinjars/master
🍎 Add 'Hide' to App API for OS X only
2016-02-01 12:54:07 +08:00
Robo
04c3e083fb remove unnecessary getter 2016-02-01 00:43:29 +05:30
Belleve Invis
1d629640bf Add link to BrowserWindow::setMenu 2016-02-01 00:28:44 +08:00
Heilig Benedek
066c189249 Renamed some cursor types to their CSS names and added a way to handle custom cursors properly. 2016-01-31 17:00:14 +01:00
Takahito Yamatoya
0f539adab9 📝 Update as upstream
[ci skip]
2016-02-01 00:20:36 +09:00
wgrafael
07721c28b6 update the "janelas" to "windows"
System Operation windows and not literal windows!
2016-01-31 00:02:06 -02:00
Heilig Benedek
61e0219e91 Added documentation, restructured the files to fit better with electron's style and fixed a typo in keyboard_util's name. 2016-01-31 02:27:14 +01:00
Simon Madine
f9efdc4435 🍎 Add Show to API for OS X 2016-01-30 22:30:38 +01:00
Robo
f7556de9fb add spec for new permissions 2016-01-30 19:10:52 +05:30
Cheng Zhao
0aa0efa439 Do not print warning for FILE_ERROR_NOT_FOUND
Close #4282.
2016-01-30 20:49:35 +08:00
Robo
2a278ceb8f delegate to permission manager for other permissions 2016-01-30 16:49:18 +05:30
Heilig Benedek
0c9174bc7c Introduced the cursor-changed event with one parameter - the name of the cursor type 2016-01-30 06:33:55 +01:00
Cheng Zhao
9d8e23c822 Bump v0.36.7 2016-01-30 13:20:46 +08:00
Cheng Zhao
11e2058136 Merge pull request #4281 from atom/fix-object-destroyed
Fix the occasional `Object has been destroyed` exception in the main process
2016-01-30 13:20:09 +08:00
Cheng Zhao
d2c757e2a5 Merge pull request #4277 from lukeadams/osx-min-version-bump
OS X min version bump (10.8=>10.9)
2016-01-30 13:02:24 +08:00
Cheng Zhao
3f68b2f227 Check whether sender is destroyed before calling sender.send
Fix #4279.
2016-01-30 12:58:21 +08:00
Cheng Zhao
5d16257c2d Fix "Object has been destroyed" error in "page-title-updated" event
Close #4249.
2016-01-30 12:20:28 +08:00
Cheng Zhao
899294a040 win: Don't close the handle since we already closed the fd
Fix #4266.
2016-01-30 11:47:22 +08:00
Heilig Benedek
e22cb0ca9f Merge pull request #1 from atom/master
update as upstream
2016-01-30 00:14:40 +01:00
Simon Madine
6a643ec3c8 Only add Hide if OS_X is defined 2016-01-29 22:51:06 +01:00
Kevin Sawicki
d89bda5c68 Merge pull request #4274 from petrfelzmann/doc-bullets-formatting
fix bullets formatting in documentation
2016-01-29 13:08:13 -08:00
Kevin Sawicki
2194640d20 Merge pull request #4275 from baconface/patch-1
Added missing angle bracket to replace() method
2016-01-29 13:07:29 -08:00
Luke Adams
1002d0de74 Bump minimum OSX version to 10.9 (documentation) 2016-01-29 14:03:49 -06:00
Luke Adams
839612c9ae Bump minimum OSX version to 10.9 2016-01-29 13:57:48 -06:00
Brad Metcalf
bdc2b2559c Added missing angle bracket to replace() method 2016-01-29 13:27:47 -06:00
Petr Felzmann
0169f31feb fix bullets formatting in documentation 2016-01-29 20:10:18 +01:00
Simon Madine
7a370ccd0f 🍎 Add 'Hide' to App API for OS X only 2016-01-29 16:09:54 +01:00
Robo
f32bf08eb3 add spec 2016-01-29 15:23:28 +05:30
Robo
85e13333c3 webview: add permission-request event 2016-01-29 15:23:28 +05:30
Cheng Zhao
30b35644f6 Bump v0.36.6 2016-01-29 12:43:35 +08:00
Cheng Zhao
a26cbf640c docs: cryptographic algorithms used by Electron
Fix #3995.
2016-01-29 12:38:50 +08:00
Cheng Zhao
367590a32f Merge pull request #4264 from atom/revert-3918
Revert "renderer: dont fork the process when there is server redirect"
2016-01-29 12:17:52 +08:00
Cheng Zhao
77cf30f758 Revert "renderer: dont fork the process when there is server redirect"
This reverts commit ab9d1bf97e.
2016-01-29 11:52:31 +08:00
Plusb Preco
0fe829cff7 📝 Update as upstream
[ci skip]
2016-01-29 09:17:34 +08:00
Cheng Zhao
8348910483 Merge pull request #4260 from fbukevin/master
Finished current entries translation of Guides part into zh-TW
2016-01-29 09:14:14 +08:00
fbukevin
8309e38ce9 translate zh-TW tutorial using-pepper-flash-plugin.md 2016-01-28 23:37:16 +08:00
fbukevin
15ce59be64 translate zh-TW tutorial devtools-extension.md 2016-01-28 23:23:19 +08:00
fbukevin
93f268cbd1 translate zh-TW tutorial using-selenium-and-webdriver.md 2016-01-28 22:52:57 +08:00
fbukevin
3b9fb6f9e6 translate zh-TW tutorial debugging-main-process.md 2016-01-28 22:40:13 +08:00
Cheng Zhao
516b01e398 win: Call _close before close file handle
Fix #4258.
2016-01-28 22:38:53 +08:00
fbukevin
7d54bb54cd translate zh-TW tutorial using-native-node-modules.md 2016-01-28 22:17:48 +08:00
fbukevin
4305e98fcb translate zh-TW tutorial mac-app-store-submission-guide.md 2016-01-28 21:16:59 +08:00
Paul Betts
05aeceeb52 Always fall back to OpenFolderViaShell when trying to reveal a file
We should always fallback to OpenFolderViaShell when revealing a file fails,
since this API seems to be highly subject to Random Bad Things happening to
you.
2016-01-28 19:05:16 +08:00
Cheng Zhao
d195cc3796 docs: uploadData is optional 2016-01-28 18:59:58 +08:00
Cheng Zhao
f820b0db83 docs: Revise the webRequest and protocol docs 2016-01-28 18:59:07 +08:00
Cheng Zhao
30ff18ac64 Merge branch 'webrequest_upload_data_patch' of https://github.com/deepak1556/atom-shell into deepak1556-webrequest_upload_data_patch 2016-01-28 18:41:39 +08:00
fbukevin
223b440bc8 prepare for retaining "Guides" pages 2016-01-28 18:20:39 +08:00
Veck Hsiao
3c9e08faf1 finished translate application-packaging.md 2016-01-28 18:15:44 +08:00
fbukevin
1da13625d1 WIP: docs-translations/zh-TW/tutorial/application-packaging.md 2016-01-28 16:46:28 +08:00
fbukevin
e6fbb0adfa translate zh-TW tutorial application-distribution.md 2016-01-28 14:20:35 +08:00
Plusb Preco
172fc91768 📝 Update as upstream
[ci skip]
2016-01-28 10:44:45 +08:00
Cheng Zhao
e9d00b1fc0 Merge pull request #4247 from deepak1556/common_exports_patch
common: export hideInternalModules
2016-01-27 23:20:59 +08:00
Cheng Zhao
c4df96df67 Update brightray to fix compilation error 2016-01-27 23:19:22 +08:00
Robo
a6bcc5d110 common: export hideInternalModules 2016-01-27 18:44:47 +05:30
Robo
dc0151099c session: provide uploadData with webrequest api when available 2016-01-27 18:39:40 +05:30
Cheng Zhao
3ca941a949 Update brightray for #4223 2016-01-27 21:03:23 +08:00
Cheng Zhao
ab96150016 Merge pull request #4246 from fbukevin/master
Add Traditional Chinese Translation Page
2016-01-27 20:12:41 +08:00
Cheng Zhao
f32a486441 Merge pull request #4245 from yamatoya/master
Add Japanes translated docs.
2016-01-27 20:12:14 +08:00
Cheng Zhao
3a5949d66a Merge pull request #4244 from vaenow/patch-1
Update application-distribution.md
2016-01-27 20:11:45 +08:00
Cheng Zhao
1ce85a69b9 Merge pull request #4235 from Bipsync/master
Autoupdate: Fixed crash after update is downloaded on windows
2016-01-27 20:03:51 +08:00
Veck Hsiao
8011578e8c Add Traditional Chinese Translation Page
supported-platforms.md
2016-01-27 14:48:06 +08:00
Takahito Yamatoya
4ab6846123 :memo:Add Japanes translated docs.
[ci skip]
2016-01-27 15:17:24 +09:00
Wen Luo
b01d677086 Update application-distribution.md
Remove duplicated words.
2016-01-27 11:41:03 +08:00
Paul P
cbf11f38ca remove unused variable 2016-01-26 14:55:31 +00:00
Paul P
864449db89 prevent assignment to constant variable (url) 2016-01-26 14:44:46 +00:00
Cheng Zhao
2c7717d98e Merge pull request #4233 from atom/update-node
Ignore errors happened in Node's stdout/stdin stream
2016-01-26 20:50:23 +08:00
Cheng Zhao
f87edba7fb Merge pull request #4231 from yamatoya/master
:memo:Add Japanes translated docs.
2016-01-26 20:32:01 +08:00
Cheng Zhao
d0587a9c52 spec: process.stdout.write 2016-01-26 20:26:42 +08:00
Cheng Zhao
205b2455f2 Update node 2016-01-26 20:23:32 +08:00
Takahito Yamatoya
ab8e6650bd :memo:Add Japanes translated docs.
[ci skip]
2016-01-26 18:17:42 +09:00
Cheng Zhao
4c43be2148 docs: Add more on the "electron.xxx" undefined question 2016-01-26 17:00:12 +08:00
Plusb Preco
2af7c37d13 📝 Update as upstream
[ci skip]
2016-01-26 11:29:19 +08:00
Cheng Zhao
b461969114 docs: Add "require('electron').xxx is undefined." to FAQ 2016-01-25 18:47:46 +08:00
Cheng Zhao
a34618866f Merge pull request #4221 from yamatoya/master
Add Japanes translated docs.
2016-01-25 18:21:46 +08:00
Takahito Yamatoya
d8c8214f33 Add Japanes translated docs. 2016-01-25 18:10:34 +09:00
Cheng Zhao
a83aee90e5 No need to use scoped_nsobject for id 2016-01-25 15:15:58 +08:00
Cheng Zhao
059d97e1aa Merge pull request #4181 from bengotow/scroll-touch-events
Extend NativeWindow to track touch-based scroll events on OS X
2016-01-25 14:47:54 +08:00
Cheng Zhao
58127e3d52 Merge pull request #4217 from yamatoya/master
Add Japanes translated docs, improve a doc style.
2016-01-24 22:42:51 +08:00
Cheng Zhao
253a4f226f Merge pull request #4211 from ragingwind/dock-seticon
Add app.dock.setIcon to change icon of dock
2016-01-24 22:36:28 +08:00
Cheng Zhao
93cdc91f1a Merge pull request #4206 from ragingwind/paramter-consistency
Update name of paramter for consistency
2016-01-24 22:11:01 +08:00
Cheng Zhao
e1e58b642e Merge pull request #4182 from deepak1556/debugger_api_patch
browser: add webContents.debugger api
2016-01-24 21:43:18 +08:00
Cheng Zhao
7761815339 Merge branch 'bg-color-pr' of https://github.com/evgenyzinoviev/electron 2016-01-24 21:33:53 +08:00
Takahito Yamatoya
42493a7ed3 Add Japanes translated docs, improve a doc style. 2016-01-24 19:47:12 +09:00
Cheng Zhao
45798d1933 Merge pull request #4215 from atom/fix-fullscreenable
Add tests for "-able" options and methods
2016-01-24 15:20:16 +08:00
Cheng Zhao
cc560a3900 spec: Fix failing tests on Windows 2016-01-24 14:31:37 +08:00
Cheng Zhao
8239f69139 spec: hasShadow state 2016-01-24 14:31:37 +08:00
Cheng Zhao
c33e8de676 spec: Improve the test for resizable 2016-01-24 14:31:37 +08:00
Cheng Zhao
c41de501cb spec: Test the -able methods 2016-01-24 14:31:37 +08:00
Cheng Zhao
010cc3276a Simplify the setStyleMask calls 2016-01-24 14:31:37 +08:00
Cheng Zhao
239bfe970c Make hasShadow work on Windows/Linux 2016-01-24 14:31:37 +08:00
Cheng Zhao
d704b3f7ba Reorgnize how attributes work 2016-01-24 14:31:37 +08:00
Cheng Zhao
ae7e96f181 Fix fullscreenable on EL Capitan 2016-01-24 14:31:36 +08:00
Cheng Zhao
5372b6cd91 Fullscreenable => FullScreenable 2016-01-24 14:31:36 +08:00
Plusb Preco
d6f2b7c982 📝 Update as upstream
* Update as upstream
* Fix typos
* Improve grammar
[ci skip]
2016-01-24 14:31:23 +08:00
Cheng Zhao
6ab236f9c0 Merge pull request #4204 from yamatoya/master
Add Japanes translated docs.
2016-01-24 14:28:59 +08:00
ragingwind
7229d2462a Add app.dock.setIcon to change icon of dock 2016-01-24 08:30:14 +09:00
ragingwind
09966aec38 Update name of paramter for consistency 2016-01-23 22:59:05 +09:00
Takahito Yamatoya
85df3157c7 Add Japanes translated docs. 2016-01-23 20:03:10 +09:00
Cheng Zhao
31624995bc Merge pull request #4202 from evgenyzinoviev/shadow-pr
Added hasShadow option to BrowserWindow on OS X
2016-01-22 23:56:38 -08:00
Cheng Zhao
8cabe0f008 Merge pull request #4156 from evgenyzinoviev/windows-pr
Improvements in BrowserWindow
2016-01-22 23:42:41 -08:00
Robo
d938dd68b0 wrap debugger for lazy initialization 2016-01-23 09:32:21 +05:30
evgenyzinoviev
000af78d41 doc fix 2016-01-23 01:37:18 +01:00
evgenyzinoviev
e071e4f310 doc updated 2016-01-23 01:20:42 +01:00
evgenyzinoviev
ff41b4a267 added hasShadow option to BrowserWindow (osx) 2016-01-23 01:16:08 +01:00
evgenyzinoviev
2fcd3ce7cd Support alpha in backgroundColor 2016-01-23 00:55:08 +01:00
evgenyzinoviev
85991d312a mac: SetResizable fix 2016-01-22 23:44:17 +01:00
evgenyzinoviev
3182504969 maximizable, fullscreenable docs 2016-01-22 23:32:09 +01:00
evgenyzinoviev
ef51e4e108 maximizable and fullscreenable 2016-01-22 23:21:46 +01:00
Cheng Zhao
9b28b0e943 Merge pull request #4198 from atom/default-popup-x-y
Cleanup the Menu::popup code
2016-01-22 13:33:14 -07:00
Cheng Zhao
984462be44 Remove Menu::Popup 2016-01-22 11:59:08 -07:00
Cheng Zhao
d1051b55cc docs: Default value of positioningItem 2016-01-22 11:32:14 -07:00
Cheng Zhao
2d8e5e3a16 docs: Default parameter for Menu.popup 2016-01-22 11:29:26 -07:00
Cheng Zhao
ca77c95c6d No more need to override Menu::Popup 2016-01-22 11:27:17 -07:00
Cheng Zhao
0e3a3d0748 views: Remove PopupAtPoint 2016-01-22 11:25:16 -07:00
Cheng Zhao
5f195a789a mac: Remove duplicate code of Popup 2016-01-22 11:17:12 -07:00
Cheng Zhao
360266ba5b positioningItem => positioning_item 2016-01-22 10:51:51 -07:00
Cheng Zhao
ea9b0cfed0 Merge pull request #4192 from evgenyzinoviev/menu-pr
Menu.popup: specify positioning item (OS X)
2016-01-22 10:49:17 -07:00
Cheng Zhao
985131d25e Merge pull request #4190 from ragingwind/strict-compare
Using strict comparation
2016-01-22 09:48:40 -07:00
Robo
3a60ab386c add spec 2016-01-22 19:10:48 +05:30
Robo
df5bad3f89 fix api and docs 2016-01-22 10:27:25 +05:30
evgenyzinoviev
072ab0ddea specify positioning item for popup menus 2016-01-22 03:18:27 +01:00
Ben Gotow
d186dceb4b Add correct window check for wheel events. See description
Tested that with two windows, events are fired on the correct BrowserWindow instance and not both, and that scrolling a window which is in the background works properly.
2016-01-21 16:36:48 -08:00
Ben Gotow
e96e674201 Properly clean up NSEvent monitor 2016-01-21 16:31:31 -08:00
Ben Gotow
d492ff45d5 Rename up/down => begin/end 2016-01-21 16:31:09 -08:00
ragingwind
63ae73b281 Using strict comparation 2016-01-22 09:04:59 +09:00
Cheng Zhao
a230a89de4 Bump v0.36.5 2016-01-21 17:04:38 -07:00
Cheng Zhao
b039741c6b Merge pull request #3902 from bengotow/asar-perf
Add env var to export a hint file to optimize ASAR ordering
2016-01-21 16:46:49 -07:00
Jessica Lord
b614c484dc Merge pull request #4189 from atom/update-accelerator
Use Alt in OS X 'Hide Others' menu item accelerator
2016-01-21 16:14:14 -07:00
Jessica Lord
980bc7bf32 Use Alt in accelerator 2016-01-21 15:48:06 -07:00
Ben Gotow
ed34e33fbf Fix typos in environment-variables.md 2016-01-21 14:46:08 -08:00
Ben Gotow
b9d62d2cab Turn on logging via a command line env var 2016-01-21 14:46:08 -08:00
Jessica Lord
1b8200ea34 Merge pull request #4188 from Rosey/update-menu-doc
📝 Use correct shortcut for 'Hide Others' menu item example
2016-01-21 15:45:49 -07:00
Ben Gotow
a3b6f69772 Log ASAR file access to build ordering hint file
This is a work in progress—need to make this behavior optional via a new flag.
2016-01-21 14:45:22 -08:00
Cheng Zhao
21f5e27a5e Merge pull request #4161 from gabriel/master
Support backgroundColor for window on mac
2016-01-21 15:42:21 -07:00
Rose Robertson
859d9763e9 📝 Use correct shortcut for 'Hide Others' menu item example
As per https://support.apple.com/en-gb/HT201236, the correct keyboard shortcut
for hiding all but the current window is Command-Option(Alt)-H.
2016-01-21 14:31:18 -08:00
Plusb Preco
4b02a8ead0 📝 Update as upstream
[ci skip]
2016-01-21 15:23:07 -07:00
Cheng Zhao
bbf622187c Merge pull request #4178 from deepak1556/webview_blinkfeatures_attributes_patch
webview: add blinkfeatures attribute
2016-01-21 15:03:33 -07:00
Cheng Zhao
a98d576b48 Merge pull request #4177 from deepak1556/default_download_dir_patch
browser: change location of default download dir
2016-01-21 14:54:21 -07:00
Cheng Zhao
56e8ddbdaf Merge pull request #4186 from CharlieHess/webview-load-url
Expose loadURL for the webview tag.
2016-01-21 14:53:32 -07:00
Cheng Zhao
000625e23f Merge pull request #4163 from deepak1556/web_preferences_fonts_patch
browser: add font related settings to webpreferences
2016-01-21 14:35:30 -07:00
Charlie Hess
7192a8517b Expose loadURL for the webview tag. 2016-01-21 13:31:35 -08:00
Cheng Zhao
4cf5982e92 Update brightray for #4169 2016-01-21 14:08:10 -07:00
Gabriel Handford
239baa3e9a Support backgroundColor for window on mac 2016-01-21 11:07:33 -08:00
Robo
0e2323c9c8 browser: add webContents.debugger api 2016-01-21 23:52:23 +05:30
Ben Gotow
bd2252ea55 Extend NativeWindow to track touch-based scroll events on OS X
In N1, we want to implement the famous "swipe to archive" action on threads in the user's inbox. Chrome exposes `scroll` and `wheel` events, but these aren't sufficient to implement the interaction because the element needs to "snap" when the user lifts their fingers from the trackpad, not when they / we stop receiving `wheel` / `scroll` events. These events may stop before the user lifts their fingers, or continue after the user has lifted their fingers if they had enough momentum for the gesture to continue.

This exposes BrowserWindow `scroll-touch-down` and `scroll-touch-up`, which fire immeditaely when the user touches two fingers to the trackpad, and again when the user lifts their fingers. Combined with the existing wheel event should allow for "swipe-to-archive" and other similar interactions.

Note: This is only implemented on Mac OS X and the events don't fire unless you're using a trackpad!

Related: #1486, #2683, https://github.com/nylas/N1/issues/541
2016-01-21 09:40:21 -08:00
Kevin Sawicki
fda480d1aa Merge pull request #4172 from atom/enable-eslint-rules
Enable more eslint rules
2016-01-21 09:56:07 -07:00
Kevin Sawicki
3a55647ae3 Add WebView to globals 2016-01-21 09:32:22 -07:00
Kevin Sawicki
b46d8ec91b Enable no-undef eslint rule 2016-01-21 09:32:22 -07:00
Kevin Sawicki
e9b3a51703 Add missing fs require 2016-01-21 09:32:22 -07:00
Kevin Sawicki
669b815758 Add missing semicolons 2016-01-21 09:32:22 -07:00
Kevin Sawicki
b5cf352312 Add globals to eslint config 2016-01-21 09:32:22 -07:00
Kevin Sawicki
b399455808 Run cpplint from lint npm script 2016-01-21 09:32:21 -07:00
Kevin Sawicki
16b4b58de1 e -> error 2016-01-21 09:32:21 -07:00
Kevin Sawicki
b1f679ff6d Clean up semicolon lint errors 2016-01-21 09:32:21 -07:00
Kevin Sawicki
70bcb0ac5a Clean up no-unused-vars lint errors 2016-01-21 09:32:21 -07:00
Kevin Sawicki
ccce284a5b Clean up no-empty lint errors 2016-01-21 09:32:21 -07:00
Kevin Sawicki
4f4456bde8 Clean up indent eslint errors 2016-01-21 09:32:21 -07:00
Kevin Sawicki
45ddbb6d67 Clean up no-unreachable lint errors 2016-01-21 09:32:21 -07:00
Kevin Sawicki
fbfbf2158a Add npm run lint script 2016-01-21 09:32:21 -07:00
Robo
fab34b400e webview: add blinkfeatures attribute 2016-01-21 15:43:41 +05:30
Robo
c14dd71df1 browser: change location of default download dir 2016-01-21 13:51:37 +05:30
Robo
8a00406862 browser: add font related settings to webpreferences 2016-01-21 13:30:05 +05:30
Cheng Zhao
2e8a2c3a7f Merge pull request #4170 from arniu/patch-1
Update coding-style.md
2016-01-20 15:47:32 -07:00
Cheng Zhao
2fba39d719 Merge pull request #4166 from ragingwind/patch-1
Add Korean community
2016-01-20 15:34:31 -07:00
Cheng Zhao
40557083f0 Merge pull request #4164 from deepak1556/menu_toggle_crash_patch
browser: fix crash when switching to sibling menu from submenus
2016-01-20 15:32:53 -07:00
Cheng Zhao
ee2d2cc532 Merge pull request #4165 from yamatoya/master
Add Japanes translated docs.
2016-01-20 15:28:17 -07:00
Kevin Sawicki
cac8466fb1 Merge pull request #4168 from atom/cpplint-utility-folder
Run cpplint on utility folder
2016-01-20 10:00:50 -07:00
Cheng Zhao
5bd2d4b08d docs: win.destroy() is safe 2016-01-20 09:46:38 -07:00
Kevin Sawicki
8140adb6bc Remove trailing whitespace 2016-01-20 09:43:32 -07:00
Kevin Sawicki
5d249e2a94 Run cpplint on utility folder 2016-01-20 09:43:32 -07:00
Cheng Zhao
54b5369215 Merge pull request #4158 from atom/desktop-capturer-error-message
Fix error calling desktopCapturer.getSources twice
2016-01-20 09:42:51 -07:00
Hailin Tseng
f1ef24b359 Update coding-style.md 2016-01-21 00:03:41 +08:00
Jimmy Moon
9a82c5a1c0 Add Korean community 2016-01-20 19:05:35 +09:00
Takahito Yamatoya
a874abd5a8 Add Japanes translated docs. 2016-01-20 16:09:01 +09:00
Robo
65325dc63f browser: fix crash when switching to sibling menu from submenus 2016-01-20 10:54:12 +05:30
Cheng Zhao
af3def91f2 Merge pull request #4146 from yamatoya/master
Add Japanes translated docs.
2016-01-19 12:12:41 -08:00
Kevin Sawicki
b014eea8d3 Tweak spec description 2016-01-19 11:05:57 -08:00
Kevin Sawicki
517dce443b Remove unused errorMessage reference 2016-01-19 11:02:12 -08:00
Kevin Sawicki
c719b252cb Add failing spec 2016-01-19 10:57:18 -08:00
Kevin Sawicki
fb3ab9e1f1 Use const and remove extra returns 2016-01-19 10:54:12 -08:00
Kevin Sawicki
01e1d0dfef Merge pull request #4153 from sunaiwen/patch-1
Update debugging-main-process.md
2016-01-19 10:12:26 -08:00
Kevin Sawicki
d3186a9665 Merge pull request #4150 from hamxiaoz/patch-1
Fix a broken link
2016-01-19 10:10:17 -08:00
evgenyzinoviev
fd5c249cb8 fix for windows 2016-01-19 16:58:19 +01:00
evgenyzinoviev
0a79204abb IsMovable to return true on Linux 2016-01-19 16:44:04 +01:00
evgenyzinoviev
c3049e1e99 docs updated 2016-01-19 16:14:59 +01:00
evgenyzinoviev
2a554cb138 added or/and improved closable, minimizable, movable, resizable features for windows on os x and windows 2016-01-19 16:14:57 +01:00
Takahito Yamatoya
140bc4effc Add Japanes translated docs. 2016-01-19 17:23:17 +09:00
Niven Su
b9c9da3f4e Update debugging-main-process.md
fix doc typo
2016-01-19 13:49:49 +08:00
Andrew Zheng
b4aaaed843 Fix a broken link
The reference-style link uses a relative path, which doesn't work well on the main site http://electron.atom.io/.
2016-01-18 13:50:33 -08:00
Takahito Yamatoya
fc42e97144 Add Japanes translated docs. 2016-01-18 23:38:44 +09:00
Cheng Zhao
7842a657d0 Merge pull request #4142 from Rokt33r/patch-2
Update frameless-window.md
2016-01-18 18:33:03 +08:00
Dick Choi
2907c4f068 Update frameless-window.md
`-title-bar-style` => `titleBarStyle“

https://github.com/atom/electron/blob/master/docs/api/browser-window.md#class-browserwindow
2016-01-18 18:35:14 +09:00
Cheng Zhao
307add22b2 Merge pull request #4138 from yamatoya/master
Add Japanes translated docs.
2016-01-18 15:37:07 +08:00
Takahito Yamatoya
def1477466 Add Japanes translated docs. 2016-01-18 01:00:28 +09:00
Cheng Zhao
40a93f1374 Merge pull request #4135 from atom/add-npm-start
Add npm start script
2016-01-17 14:33:28 +08:00
Kevin Sawicki
4e183df997 Add npm start script 2016-01-16 12:31:09 -08:00
Cheng Zhao
6f1fe2e478 Merge pull request #4133 from yamatoya/master
Update Japanese translated docs.
2016-01-17 00:11:52 +08:00
Takahito Yamatoya
6ecacd18be Update Japanese translated docs. 2016-01-17 01:02:02 +09:00
Cheng Zhao
3b62ce7fa6 modules.exports => module.exports 2016-01-16 14:26:01 +08:00
Cheng Zhao
775e475d5c Merge pull request #4131 from etiktin/add_is_DWM_enabled
Add API for checking if DWM composition (Aero Glass) is enabled
2016-01-16 14:16:22 +08:00
Cheng Zhao
5a83f94524 Merge pull request #4126 from atom/add-eslint
Run eslint on CI
2016-01-16 13:26:07 +08:00
Cheng Zhao
25afcf2673 Merge pull request #4121 from atom/format-coffee-helpers
Format leftover CoffeeScript helpers
2016-01-16 13:24:26 +08:00
Eran Tiktin
f42d283fcd Add documentation 2016-01-16 07:18:20 +02:00
Eran Tiktin
83b36ce40b Add API for checking if AeroGlass/DWM is enabled
Resolves #1020
2016-01-16 06:27:44 +02:00
Cheng Zhao
712f11a9a3 Merge pull request #4112 from evgenyzinoviev/resize-animate-pr
Animate window resizing on OS X
2016-01-16 12:12:00 +08:00
Cheng Zhao
b132c0dde8 Update brightray, close #4124 2016-01-16 11:43:46 +08:00
Cheng Zhao
d779f8d898 Merge pull request #4129 from etiktin/fix_4127
Fix freeing asar fd on Windows
2016-01-16 11:41:28 +08:00
Eran Tiktin
85449e953e Fix Windows crash when trying to free asar fd 2016-01-16 03:48:07 +02:00
Kevin Sawicki
0fe539f2c3 Remove unneeded semicolon 2016-01-15 15:30:07 -08:00
Kevin Sawicki
ae20292322 Add missing { 2016-01-15 15:30:07 -08:00
Kevin Sawicki
f830af49c2 Use ES6 style class 2016-01-15 15:30:01 -08:00
Kevin Sawicki
503cd04c75 Disable linebreak-style rule 2016-01-15 14:58:46 -08:00
Kevin Sawicki
da120d8874 Lint entire atom folder 2016-01-15 14:43:23 -08:00
Kevin Sawicki
2869869a99 Combine duplicate eslint keys 2016-01-15 14:40:37 -08:00
Kevin Sawicki
1d3e7dc6e4 Run eslint on CI 2016-01-15 14:38:07 -08:00
Kevin Sawicki
b87599a6a2 Rename eslintrc-src to eslintrc-base 2016-01-15 14:37:51 -08:00
Kevin Sawicki
5fc671f522 Add back v8Util binding 2016-01-15 14:29:36 -08:00
Kevin Sawicki
aab2821122 Use ES6 style class 2016-01-15 14:28:12 -08:00
Kevin Sawicki
aab1568682 Use ES6 style class 2016-01-15 14:16:38 -08:00
Kevin Sawicki
02f055b784 Use ES6 style class 2016-01-15 14:12:57 -08:00
Kevin Sawicki
756f8039e5 Lint spec js files 2016-01-15 14:02:05 -08:00
Kevin Sawicki
0a3331a07c Add eslint dev dependency 2016-01-15 13:52:42 -08:00
Kevin Sawicki
4db4d409a7 Add initial eslint script 2016-01-15 13:52:18 -08:00
Kevin Sawicki
ad3376b9dc Add initial eslint config 2016-01-15 13:37:03 -08:00
Kevin Sawicki
caf7cf5582 Use const instead of var 2016-01-15 11:46:52 -08:00
Eran Tiktin
b9789ef191 Merge pull request #11 from atom/master
Update from upstream
2016-01-15 21:00:37 +02:00
Kevin Sawicki
79f1029d59 Remove unneeded .constructor segments 2016-01-15 10:29:00 -08:00
Kevin Sawicki
34030d7b2b Use util.inherits instead of CoffeeScript's extend function 2016-01-15 10:17:45 -08:00
Kevin Sawicki
2b95aeba3c Declare vars one per line 2016-01-15 10:17:45 -08:00
Kevin Sawicki
2833db78ad Use [].inclues where appropriate 2016-01-15 10:17:45 -08:00
Kevin Sawicki
c2d473cf65 Remove unneeded [].indexOf fallback 2016-01-15 10:17:45 -08:00
Kevin Sawicki
1b0da44f38 Merge pull request #4122 from atom/remove-cpp-lint-warning
Fix lint errors in archive.cc
2016-01-15 10:17:16 -08:00
Kevin Sawicki
741d148776 Add missing semicolon 2016-01-15 10:09:19 -08:00
Kevin Sawicki
b119704ea9 Use 2 space indent instead of 3 2016-01-15 10:05:35 -08:00
evgenyzinoviev
64f310168c code style fix 2016-01-15 17:40:42 +01:00
evgenyzinoviev
b75dccb0be arguments handing rewritten, doc updated 2016-01-15 17:31:31 +01:00
Cheng Zhao
63278aeec2 Merge pull request #4118 from Ivshti/patch-1
Ensure we close FD on Windows
2016-01-15 23:58:57 +08:00
Cheng Zhao
d6e2db22b3 Merge pull request #4116 from 0b61d29/patch-1
Spelling: bellow → below
2016-01-15 23:33:25 +08:00
Cheng Zhao
7e7175b6a5 Merge pull request #4113 from importcjj/master
fix incorrect markdown tag
2016-01-15 23:32:39 +08:00
Cheng Zhao
0937144849 Merge pull request #4111 from evgenyzinoviev/movable
Added an option to prevent a window from being moved on OS X
2016-01-15 23:24:22 +08:00
evgenyzinoviev
4b0119f996 added a note that this option is only implemented on osx 2016-01-15 16:02:23 +01:00
Ivo Georgiev
7586078d0a Ensure we close FD on Windows 2016-01-15 16:54:29 +02:00
Florian Hämmerle
187cb54c25 spelling: bellow -> below 2016-01-15 13:43:44 +01:00
Cheng Zhao
233e2d7288 Merge pull request #4082 from atom/web-contents-lifetime
Fix some junk output when running tests
2016-01-15 17:24:47 +08:00
Cheng Zhao
9ccc7ee30d Small ajustments on lifetime of webContents 2016-01-15 16:36:35 +08:00
Cheng Zhao
63c646242a spec: Group session.cookies tests 2016-01-15 16:36:35 +08:00
Cheng Zhao
60d44b3b04 spec: Remove annoying outputs from savePage test 2016-01-15 16:36:35 +08:00
Cheng Zhao
c10c419f1d No need to call sender.callbacks.remove
The IDWeakMap automatically removes the key when object is garbage
collected.
2016-01-15 16:36:35 +08:00
Cheng Zhao
3875b30fcf Merge pull request #4109 from atom/const
[WIP] Use `const` for requires
2016-01-15 16:32:07 +08:00
Importcjj
a5cc105311 fix incorrect markdown tag 2016-01-15 15:26:16 +08:00
Cheng Zhao
39225ac5ec Bump v0.36.4 2016-01-15 14:27:19 +08:00
evgenyzinoviev
f93d890874 Fix doc 2016-01-15 06:00:06 +01:00
evgenyzinoviev
2598b00b41 Animate window resizing on OS X 2016-01-15 05:59:58 +01:00
evgenyzinoviev
cda88db77c Added option to prevent a window from being moved on OS X 2016-01-15 03:58:57 +01:00
Jessica Lord
003de0debe Clean up variable declarations 2016-01-14 18:07:29 -08:00
Kevin Sawicki
d4b8c65017 Merge pull request #4110 from atom/add-missing-spec-suffix
Add missing spec suffix to desktopCapturer spec filename
2016-01-14 17:50:02 -08:00
Kevin Sawicki
572f53dc5e Expand spec description 2016-01-14 17:20:44 -08:00
Jessica Lord
5a4a8e1fa7 🔥 stray ref 2016-01-14 17:03:55 -08:00
Kevin Sawicki
047975609d Add missing -spec suffix to desktop capturer spec 2016-01-14 17:03:51 -08:00
Jessica Lord
2be7f6c693 Merge pull request #4102 from Mingling94/documentation
Styled the removeListener & removeAllListeners
2016-01-14 15:48:09 -08:00
Jessica Lord
ae2893ceaa Inline var 2016-01-14 15:44:33 -08:00
Jessica Lord
5412ecdcc1 Use const 2016-01-14 14:52:05 -08:00
Jessica Lord
ab8908a4af Use const 2016-01-14 14:41:46 -08:00
Jessica Lord
1779701445 Use const 2016-01-14 14:40:12 -08:00
Jessica Lord
3a0fb42737 Use const 2016-01-14 14:33:45 -08:00
Jessica Lord
9103253f62 Use const 2016-01-14 14:26:10 -08:00
Kevin Sawicki
f31289c735 Merge pull request #4106 from atom/clean-up-comments
Clean up comments from CoffeeScript migration
2016-01-14 14:10:26 -08:00
Kevin Sawicki
030d2a843c Remove extra newlines around comments 2016-01-14 11:10:12 -08:00
Kevin Sawicki
990dc30e8d Use // for multi-line comments 2016-01-14 10:44:21 -08:00
Kevin Sawicki
f4af744519 Use // for single line comments 2016-01-14 10:35:29 -08:00
Ming Luo
ad9c254730 Styled the removeListener & removeAllListeners
They were previously not written with the same style as other parts of
the doc. Also there was a couple grammar errors
2016-01-14 09:27:24 -05:00
Cheng Zhao
26350f4ccb GetHttpCacheInIO => DoCacheActionInIO 2016-01-14 20:48:14 +08:00
Cheng Zhao
f93b4e76cb Merge pull request #4098 from deepak1556/session_cache_size_patch
session: api to get current cache size
2016-01-14 20:18:21 +08:00
Robo
10e4698baa session: api to get current cache size 2016-01-14 17:15:45 +05:30
Cheng Zhao
88725d4fd7 Merge pull request #4091 from deepak1556/webview_attributes_patch
webview: respect properties provided during webview creation
2016-01-14 12:22:57 +08:00
Cheng Zhao
bc699a9dbe Merge pull request #4088 from Mingling94/documentation
Detail ipc.removeListener & ipc.removeAllListeners
2016-01-14 12:19:47 +08:00
Plusb Preco
918825cb58 📝 Update as upstream
[ci skip]
2016-01-14 09:56:28 +08:00
Cheng Zhao
463bc8738a Merge pull request #4089 from yamatoya/master
Add  Japanese translated docs.
2016-01-14 09:48:18 +08:00
Robo
8b38bbcf18 webview: respect properties provided during webview creation 2016-01-13 22:40:55 +05:30
Kevin Sawicki
9bfc8c9bd0 Merge pull request #4090 from lukeapage/patch-5
docs - fix typo leading to bad link
2016-01-13 09:00:17 -08:00
Luke Page
edbf1994dd docs - fix typo leading to bad link 2016-01-13 16:52:07 +00:00
大和屋 貴仁
b373fbc552 Add Japanese translated docs. 2016-01-14 01:33:06 +09:00
Ming Luo
a82ecfda06 Detail ipc.removeListener & ipc.removeAllListeners 2016-01-13 10:18:12 -05:00
Cheng Zhao
489539d62e Merge pull request #4071 from deepak1556/session_flush_data_patch
session: api to flush DOMStorage data
2016-01-13 16:18:37 +08:00
Cheng Zhao
884a8a753f Merge pull request #4080 from atom/insert-text
Add insertText API for webFrame, webContents and webview tag
2016-01-13 16:17:49 +08:00
Cheng Zhao
8ae836d82d Unlisten the zoom-level-changed event when webview is detached 2016-01-13 14:58:16 +08:00
Cheng Zhao
44b8343585 Fix crash when closing page with webview 2016-01-13 14:47:39 +08:00
Cheng Zhao
af02739c4e Change webview's zoom level on JavaScript side 2016-01-13 12:50:02 +08:00
Cheng Zhao
118924ba7a docs: webFrame.executeJavaScript 2016-01-13 12:20:49 +08:00
Cheng Zhao
350c572a8c Handle default parameter of executeJavaScript in C++ 2016-01-13 12:17:56 +08:00
Cheng Zhao
55dfddba77 Handle executeJavaScript in JavaScript 2016-01-13 12:11:46 +08:00
Cheng Zhao
5b7d1a9890 Add insertText to WebContents 2016-01-13 11:55:49 +08:00
Robo
8433d94cac session: api to flush DOMStorage data 2016-01-13 08:56:00 +05:30
Cheng Zhao
5567baf335 Add webFrame.insertText API 2016-01-13 11:21:16 +08:00
Cheng Zhao
d9d821cea5 Merge pull request #4065 from atom/coffee-to-js
[WIP] Convert from CoffeeScript to JavaScript
2016-01-13 11:13:04 +08:00
Cheng Zhao
640ad65cc2 Merge pull request #4075 from j5a/japanese-translation-patch
Add and update Japanese translated docs.
2016-01-13 09:57:52 +08:00
Kevin Sawicki
b547a38b3f Add wrapper functions to mirror old CoffeeScript 2016-01-12 16:24:06 -08:00
Kevin Sawicki
78aff6a39f 🎨 2016-01-12 16:24:06 -08:00
Kevin Sawicki
ab73f4c94a Copy JS files to tempdir before packing asar 2016-01-12 16:24:06 -08:00
Kevin Sawicki
ed63441688 Remove coffee compile script 2016-01-12 16:24:06 -08:00
Kevin Sawicki
61af98cf94 Remove CoffeeScript register in specs 2016-01-12 16:24:06 -08:00
Kevin Sawicki
dd902c61fa Expect .js specs 2016-01-12 16:24:06 -08:00
Kevin Sawicki
088a39ea9d Convert gyp targets to use JavaScript 2016-01-12 16:24:06 -08:00
Kevin Sawicki
ddfe4809e7 Remove unused dependencies 2016-01-12 16:24:06 -08:00
Kevin Sawicki
714e544b51 Remove coffeelint usage 2016-01-12 16:24:06 -08:00
Kevin Sawicki
1f9691ae13 Convert all source files to JavaScript 2016-01-12 16:24:06 -08:00
Kevin Sawicki
403870a27e Migrate to block comments 2016-01-12 16:22:34 -08:00
Joe Naha
1fd1ae9694 📝 Add and update Japanese translated docs.
[ci skip]
2016-01-13 08:46:14 +09:00
Cheng Zhao
630cd091a0 Merge pull request #4070 from atom/flash-drm
Respond to GetDeviceID message from pepper plugin
2016-01-12 23:45:59 +08:00
Cheng Zhao
57da8908b2 Use volume serial number as device id 2016-01-12 23:17:07 +08:00
Cheng Zhao
8832d7b77b Import PepperFlashDRMHost class 2016-01-12 22:17:24 +08:00
Cheng Zhao
c2f6f64e6a Merge pull request #4069 from atom/destroyed-webcontents-methods
Destroy the native class when webContents is destroyed
2016-01-12 21:40:18 +08:00
Cheng Zhao
d674db6606 spec: Calling methods of destroyed webContents should not crash 2016-01-12 21:15:12 +08:00
Cheng Zhao
eb63e6b9a7 Destroy the native class when webContents is destroyed 2016-01-12 21:10:24 +08:00
Cheng Zhao
554575b029 Upgrade to Chrome 47.0.2526.110 2016-01-12 20:46:47 +08:00
Cheng Zhao
6d850ea61f docs: Mention the session object 2016-01-12 10:59:45 +08:00
Cheng Zhao
1242fe04a8 Merge pull request #4062 from j5a/master
Update some Japanese translated docs.
2016-01-12 10:07:45 +08:00
Kevin Sawicki
17be978ced Merge pull request #4064 from weiway/patch-1
missing "var" in line 201 menu.md
2016-01-11 10:52:33 -08:00
Wei Wang
7333e403b7 missing "var" in line 201 menu.md
in line 201 at menu.md, 
should be ```var menu = Menu.buildFromTemplate(template);```
2016-01-11 10:47:32 -08:00
Joe Naha
4702b3e0c7 📝 Update some Japanese translated docs.
[ci skip]
2016-01-12 02:58:50 +09:00
Cheng Zhao
c7a89b6e29 Merge pull request #4058 from kyku/master
Pass --touch-devices to chromium contents under X11
2016-01-11 22:57:00 +08:00
Cheng Zhao
9e82334b67 Merge pull request #4057 from princejwesley/browser-window
Return null for no focused window when calling BrowserWindow.getFocusedWindow
2016-01-11 22:53:38 +08:00
Cheng Zhao
192fa4c86b Cleanup docs and code of setProxy 2016-01-11 22:45:34 +08:00
Cheng Zhao
34c9279fc5 Merge pull request #4046 from deepak1556/session_proxy_patch
session: allow user to isolate pac script and proxy bypass rules
2016-01-11 21:49:15 +08:00
Cheng Zhao
a1da3c278b Merge pull request #4056 from cdaringe/patch-1
Specify enumerable property accessibility
2016-01-11 21:42:54 +08:00
Cheng Zhao
b25435c465 Merge pull request #4054 from yamatoya/master
Add Japanese translation documentation for faq and tutorial
2016-01-11 21:42:10 +08:00
Cheng Zhao
26bd97d6cf Fix style issues of #4029 2016-01-11 21:12:07 +08:00
Cheng Zhao
edcd34d4ce Merge pull request #4029 from leethomas/show-message-box-default-button
Show message box default button
2016-01-11 20:58:03 +08:00
Cheng Zhao
e3d3cd1198 docs: Update link of VS Community
Also fix the version of VS requried.

Close #3962.
2016-01-11 20:52:32 +08:00
Krzysztof
440c588a33 Pass --touch-devices to chromium contents under X11 2016-01-11 12:23:53 +01:00
Cheng Zhao
91ca84d106 Merge pull request #4050 from etiktin/cosmetic
Remove unneeded extra semicolons (;; -> ;)
2016-01-11 15:41:06 +08:00
Cheng Zhao
fe45a4ac98 Merge pull request #4048 from etiktin/fix_win_failing_test
Fix failing test on Windows
2016-01-11 15:40:08 +08:00
Prince J Wesley
018ae5189b Return null for no focused window when calling BrowserWindow.getFocusedWindow() 2016-01-11 12:58:44 +05:30
Robo
8557cd223c maintain api compatibility 2016-01-11 12:24:01 +05:30
Cheng Zhao
33b7b774c1 docs: Notification on Windows can use http:// icon now 2016-01-11 14:41:38 +08:00
Cheng Zhao
1944472c2f docs: Make win.getNativeWindowHandle more clear 2016-01-11 13:43:24 +08:00
Cheng Zhao
54e1d7b3bf Merge pull request #4023 from omrilitov/master
Added getNativeWindowHandle method
2016-01-11 13:32:29 +08:00
Cheng Zhao
76a34a27ea Merge pull request #4055 from atom/backport-1500713003
Backport https://codereview.chromium.org/1500713003
2016-01-11 13:24:55 +08:00
大和屋 貴仁
630819e1d6 Merge branch 'master' of https://github.com/atom/electron 2016-01-11 14:12:43 +09:00
Christopher Dieringer
12f5e5072d Specify enumerable property accessibility 2016-01-10 21:02:07 -08:00
Cheng Zhao
1de9cfd4eb Backport https://codereview.chromium.org/1500713003 2016-01-11 12:59:02 +08:00
大和屋 貴仁
4f1be903c4 Fix a document 2016-01-11 13:19:14 +09:00
Cheng Zhao
20a92d7d1e Merge pull request #4044 from j5a/translate_docs_into_japanese
Update docs-translations/jp/tutorial/quick-start.md
2016-01-11 12:06:39 +08:00
Cheng Zhao
7bec597ea0 Merge pull request #4042 from ZhangYueqiu/patch-1
Update supported-platforms.md
2016-01-11 12:06:16 +08:00
Plusb Preco
373bed33c5 📝 Update as upstream
[ci skip]
2016-01-11 12:04:48 +08:00
大和屋 貴仁
595a3469d9 Add Japanese translation documentation for faq and tutorial 2016-01-11 13:03:37 +09:00
Cheng Zhao
1ee565ab81 Merge pull request #4030 from lukeapage/patch-4
Correct misleading sentence on progress for transparent click through
2016-01-11 11:21:18 +08:00
leethomas
fee301e768 follow style guidelines 2016-01-10 19:15:40 -08:00
Cheng Zhao
0f2c35e2b8 Merge pull request #4052 from atom/right-way-to-fix-path
Change brightray's PATH_START to 11000
2016-01-11 11:04:06 +08:00
Cheng Zhao
adcdf123af Change brightray's PATH_START to 11000 2016-01-11 10:40:45 +08:00
Cheng Zhao
da52017d82 Revert "fix chrome app and user path conflicts"
This reverts commit 25aaafde45.
2016-01-11 10:30:17 +08:00
Eran Tiktin
29939dc0b7 Remove unneeded extra semicolons (;; -> ;) 2016-01-11 02:11:40 +02:00
leethomas
803b06b7de 🏁 support defaultId for dialog boxes on Windows 2016-01-10 15:55:26 -08:00
leethomas
ae5c6add11 rename all references to default_button_index -> default_id to keep consistent with cancel_id 2016-01-10 15:33:27 -08:00
Eran Tiktin
f1d388fb36 Fix failing test on Windows
The exit code tests include an assert on the output we get from a
spawned electron process. This doesn't currently work on Windows, so we
skip it for now
2016-01-11 01:33:22 +02:00
Robo
be50ca2653 session: allow user to isolate pac script and proxy bypass rules 2016-01-11 03:55:56 +05:30
Joe Naha
8b07918650 📝 Update to follow the latest version.
[ci skip]
2016-01-11 04:00:03 +09:00
ZhangYueqiu
56d1235bbd Update supported-platforms.md
Change a wrong word
2016-01-10 15:43:25 +08:00
Eran Tiktin
c5dee6a3d8 Merge pull request #10 from atom/master
Update from upstream
2016-01-10 01:46:26 +02:00
Omri Litov
a4636ba18c Update browser-window.md 2016-01-08 20:53:59 +02:00
leethomas
dfce803045 🏁 update windows message_box function signatures to accept default_button_index....and do nothing with it 2016-01-08 08:23:06 -08:00
leethomas
c4c145ef6a 📝 add defaultButtonIndex to dialog docs 2016-01-08 08:22:11 -08:00
leethomas
22c455175a 🐧 add default button index for linux/gtk 2016-01-08 08:22:10 -08:00
leethomas
f1edd5f26f 🍎 add default button index for osx 2016-01-08 08:21:54 -08:00
Luke Page
6728d9291d Correct misleading sentence on progress for transparent click through 2016-01-08 10:56:51 +00:00
Cheng Zhao
df27cda36c Bump v0.36.3 2016-01-08 13:40:47 +08:00
Cheng Zhao
9a707b7c69 Merge pull request #4027 from atom/fix-locale
Fix loading locale on OS X
2016-01-08 13:32:53 +08:00
Cheng Zhao
5514e89276 Copy locales in Cocoa format 2016-01-08 12:38:00 +08:00
Cheng Zhao
ec4c5e58ff Initialize resource bundle on browser process separately 2016-01-08 12:06:06 +08:00
Cheng Zhao
5f6a8a7c24 Merge pull request #4009 from atom/remove-getobject-handler
Remove custom WM_GETOBJECT handler
2016-01-08 09:55:24 +08:00
Omri Litov
943e46f3bd Fix linux and mac build errors 2016-01-08 00:27:53 +02:00
Omri Litov
224955d6ac Update browser-window.md 2016-01-07 23:17:23 +02:00
Omri Litov
3f0c007578 Added getNativeWindowHandle 2016-01-07 22:38:35 +02:00
Cheng Zhao
9e254821bb docs: Mention the limitation of globalShortcut
Close #3816.
2016-01-07 21:28:14 +08:00
Cheng Zhao
0d799601d7 Merge pull request #4018 from imiuka/faq-link
update faq link
2016-01-07 20:34:13 +08:00
Cheng Zhao
3d908f1483 docs: Mention third party packing tools
Fix #1723.
2016-01-07 20:32:57 +08:00
Cheng Zhao
04d626f0b0 docs: Document the display object
Fix #3571.
2016-01-07 20:21:11 +08:00
foxy
e323c6dad9 update faq link 2016-01-07 22:26:21 +11:00
Cheng Zhao
3a32dc5da7 Fix "name" of Error object not serialized
Close #3364.
2016-01-07 16:35:05 +08:00
Cheng Zhao
24779a8589 Merge pull request #4016 from atom/el-capitan-fullscreen
Fix hiding fullscreen button on EL Capitan
2016-01-07 16:24:35 +08:00
Cheng Zhao
10f663d017 Fix hiding fullscreen button on EL Capitan 2016-01-07 15:46:40 +08:00
Cheng Zhao
ae6c2d46b8 Merge pull request #4014 from atom/blink-features
Add blinkFeatures option
2016-01-07 14:58:10 +08:00
Cheng Zhao
c0e728ab6a docs: Orgnize the options of BrowserWindow 2016-01-07 14:23:21 +08:00
Cheng Zhao
3f2b26ddb7 Add blinkFeatures option 2016-01-07 14:10:18 +08:00
Cheng Zhao
bd20b3f32a Rely on content switches for implementing experimental features 2016-01-07 12:49:00 +08:00
Cheng Zhao
16d23bbda5 Remove pageVisibility option
The original purpose of this option is not working anymore, also adds
docs on the current way to disable process backgrounding.
2016-01-07 12:28:20 +08:00
Cheng Zhao
c6e03f8390 Remove overlayScrollbars and sharedWorker options
They are already enabled by default.
2016-01-07 12:17:19 +08:00
Paul Betts
705001a50e Remove custom WM_GETOBJECT
As of Chromium 47 this seems to be handled automatically, nvda still reports
elements and the typing lag issue described in #4001 is fixed
2016-01-06 10:37:12 -08:00
Cheng Zhao
3ca5b0ce23 win: Don't change transparent window's style
Close #1952.
2016-01-06 23:02:33 +08:00
Cheng Zhao
0c287d0424 Merge pull request #4007 from atom/fix-offiline-protocol
Fix crash when request failed
2016-01-06 22:21:52 +08:00
Cheng Zhao
e6b9b0e5dc Merge pull request #4006 from DerNivel/patch-1
Update debugging-main-process.md
2016-01-06 22:11:11 +08:00
Levin Rickert
062253bdfc Update debugging-main-process.md 2016-01-06 14:43:13 +01:00
Levin Rickert
aaf5f3331a Update debugging-main-process.md 2016-01-06 14:41:51 +01:00
Cheng Zhao
89fccb7eb2 Fix crash when request failed 2016-01-06 21:07:07 +08:00
Cheng Zhao
aefddc0146 Merge pull request #4004 from lukeapage/patch-3
Add info on how to debug from 0.30 onwards
2016-01-06 20:37:27 +08:00
Luke Page
3259664637 Add info on how to debug from 0.30 onwards 2016-01-06 07:13:25 +00:00
Cheng Zhao
4401991e15 Merge pull request #4003 from atom/asar-mkdir
Throw ENOTDIR when calling mkdir inside asar archive
2016-01-06 13:10:24 +08:00
Cheng Zhao
9a55021609 spec: Fix failing specs on Windows 2016-01-06 12:27:12 +08:00
Cheng Zhao
c4071a7f66 Throw ENOTDIR when calling mkdir inside asar archive 2016-01-06 12:04:16 +08:00
Cheng Zhao
ace7c62e5e Merge pull request #3997 from leethomas/fix-tray-icon-toggle
:apple:🐛 make displaying alternate tray image depend on mouse dow…
2016-01-06 11:04:40 +08:00
Plusb Preco
bf327cf5f0 📝 Update as upstream
[ci skip]
2016-01-06 10:52:46 +08:00
Cheng Zhao
99e2871be1 Merge pull request #3992 from atom/faqs
Add FAQ
2016-01-06 10:40:51 +08:00
leethomas
59eda67ba4 :apple:🐛 make displaying alternate tray image depend on mouse down event instead of highlight state 2016-01-05 09:49:27 -08:00
Cheng Zhao
554bb69101 Add FAQ 2016-01-05 19:57:15 +08:00
Cheng Zhao
5f0be5636a Merge pull request #3987 from atom/dialog
Do not write our own filter code
2016-01-05 14:13:28 +08:00
Cheng Zhao
2b6ac966c0 Do not write our own filter code
The Win32 API has done everything for us, there is no need to do this
oursevles.
2016-01-05 13:45:34 +08:00
Cheng Zhao
96c8bd677b Merge pull request #3986 from atom/fix-menu
Fix problems of window menu bar
2016-01-05 12:38:24 +08:00
Cheng Zhao
698700716b Show menu by clicking the menu button 2016-01-05 12:05:27 +08:00
Cheng Zhao
43bfce26a7 Do not behave like bookmarkbar menu 2016-01-05 11:57:58 +08:00
Cheng Zhao
48451032e3 Update brightray to fix menu not loading resources 2016-01-05 10:22:42 +08:00
Cheng Zhao
88ba4fb36a Merge pull request #3983 from atom/fix-capture-page
Fix distorted image when calling `capturePage` with no rect
2016-01-04 20:52:17 +08:00
Cheng Zhao
0df03a23a3 Pass origin in capturePage 2016-01-04 20:06:36 +08:00
Cheng Zhao
7a1717156e Revert "browser: dont lose coordinates in capturepage src rect"
This reverts commit 3c5e5053e3.
2016-01-04 19:37:25 +08:00
Cheng Zhao
9f40309487 Merge pull request #3981 from atom/did-navigate
Rename did-navigate-to-different-page to did-navigate
2016-01-04 12:32:59 +08:00
Cheng Zhao
4844e68ba1 Rename did-navigate-to-different-page to did-navigate 2016-01-04 12:09:11 +08:00
Cheng Zhao
941232a76b Merge pull request #3975 from leethomas/add-webview-navigation-events
Add webview navigation events
2016-01-04 11:24:27 +08:00
Cheng Zhao
cf09e7cb51 Update libchromiumcontent for #3958 2016-01-04 10:59:52 +08:00
Cheng Zhao
6ff79eddb4 Merge pull request #3958 from deepak1556/content_strings_localzation_patch
browser: provide localized string from resourcebundle
2016-01-04 10:59:09 +08:00
Cheng Zhao
14db4a1946 Add isDevToolsFocused to webview 2016-01-04 10:46:30 +08:00
Cheng Zhao
4cdee5547f Merge pull request #3974 from leethomas/fix-devtools-api
Fix devtools api
2016-01-04 10:41:33 +08:00
Plusb Preco
ef58c6d36b 📝 Update as upstream
* Update as upstream
* Add `using-widevine-cdm-plugin.md`
2016-01-04 10:25:33 +08:00
leethomas
ce733e5927 add tests to insure window.location.hash changes & window.history.replaceState cause 'did-navigate-in-page' to fire 2016-01-01 18:51:47 -08:00
leethomas
26397d9155 add tests for will-navigate, did-navigate-to-different-page, did-navigate-in-page events in webview 2016-01-01 18:13:07 -08:00
leethomas
9e2b76361f 📝 add 'did-navigate-in-page', 'did-navigate-to-different-page', 'will-navigate' to docs 2016-01-01 17:22:25 -08:00
leethomas
911e60b507 add did-navigate-in-page event to webview & webcontents (triggers on hash/ref changes, anchor links...), pass url into events 2016-01-01 17:13:39 -08:00
leethomas
9f6319dd71 add will-navigate, did-navigate-to-different-page events to webview 2016-01-01 13:36:35 -08:00
leethomas
54c8c3e3fc 📝 update webview docs to include devtools-* events 2016-01-01 04:49:34 -08:00
leethomas
8857eb9cba add tests for webview devtools-* events 2016-01-01 04:49:29 -08:00
leethomas
96d68b9285 🐛 add isDevToolsFocused to WebContents to fix #3928, add devtools-[focused|open|close] events to WebView to fix #3783. 2015-12-31 22:21:54 -08:00
Cheng Zhao
8aced2c31e Add comment on why checking empty set 2015-12-31 18:58:16 +08:00
Cheng Zhao
b308cd6f96 Merge pull request #3967 from leethomas/fix-osx-crash-when-extensions-empty
🍎 fix #3864 where saving a file causes a crash if file extensio…
2015-12-31 18:51:55 +08:00
Cheng Zhao
be2f900d93 Merge pull request #3968 from leethomas/fix-window-submenu-crashes
🍎 only add sub menus to Window when they actually have menu ite…
2015-12-31 18:51:45 +08:00
Cheng Zhao
af5e76f6ae Merge pull request #3959 from deepak1556/remote_object_patch
remote: support arguments of type Date
2015-12-31 18:46:22 +08:00
leethomas
eac2f6fec3 🍎 only add sub menus to Window when they actually have menu items. fixes #3873 2015-12-30 19:38:14 -08:00
leethomas
ba26a4b4e6 🍎 fix #3864 where saving a file causes a crash if file extension array is empty 2015-12-30 13:26:38 -08:00
Cheng Zhao
d4de4505b8 Merge pull request #3961 from atom/widevine-docs
Add documentation for using Widevine plugin
2015-12-30 16:46:31 +08:00
Cheng Zhao
b3832629a2 Update libchromiumcontent: component_updater is not needed 2015-12-30 16:14:50 +08:00
Cheng Zhao
fe87570876 docs: Using Widevine CDM Plugin 2015-12-30 16:10:00 +08:00
Robo
1585a7a0ad browser: provide localized string from resourcebundle 2015-12-30 10:58:46 +05:30
Cheng Zhao
cb5d79e0df Merge pull request #3957 from atom/widevine
Merge #3830
2015-12-30 12:46:19 +08:00
Cheng Zhao
82a293a132 Merge pull request #3955 from nishanths/feature/osx-clear-recent-docs
osx: Implement clear recent documents
2015-12-30 12:07:41 +08:00
Cheng Zhao
d8d3a56c25 Merge pull request #3926 from adam-lynch/patch-3
Fixing link to web contents from ipcMain
2015-12-30 12:00:35 +08:00
Plusb Preco
1f7d72bcc0 📝 Update as upstream
[ci skip]
2015-12-30 11:57:57 +08:00
Cheng Zhao
c5238bb8f0 Update brightray and libchromiumcontent with widevine support 2015-12-30 11:45:39 +08:00
Nishanth Shanmugham
20d03b10d9 osx: Implement clear recent documents
Fixes #3932
2015-12-29 18:36:16 -06:00
Robo
72374b6e31 remote: support arguments of type Date 2015-12-30 01:41:31 +05:30
Adam Lynch
4fd08cccb4 Fixing link to web contents from ipcMain 2015-12-29 16:30:00 +00:00
Cheng Zhao
c47aebaeb4 Do not ship widevine plugin 2015-12-29 21:38:01 +08:00
Cheng Zhao
c0f0685296 Merge pull request #3944 from nishanths/feature/tray-file-drop-osx-dock
tray: Support file-drop from OS X Dock
2015-12-29 19:59:24 +08:00
Cheng Zhao
b392aeb16a Merge pull request #3945 from deepak1556/web_frame_api_patch
webFrame: support fetch api for schemes that are privileged.
2015-12-29 19:48:50 +08:00
Cheng Zhao
c76db0ba1d Fix coding styles 2015-12-29 18:59:27 +08:00
Robo
2e78aba090 webFrame: support fetch api for schemes that are privileged. 2015-12-29 15:57:59 +05:30
Nishanth Shanmugham
2bbf86c524 tray: Support file-drop from OS X Dock
A long-standing Apple bug does not call `prepareForDragOperation:sender`
for file drag-and-drop operations from the Dock. So we manually
call our custom `handleDrop:sender` for all drag-and-drop cases (that
is, from the Dock and from Finder).

References to the bug in question:
- http://stackoverflow.com/q/9534543/3309046
- http://openradar.appspot.com/radar?id=1745403

However, we still need to return YES from `prepareForDragOperation:sender`,
otherwise the "drag failed" animation occurs. For the same reason, we also
return YES from `performDragOperation:sender`.
2015-12-29 03:27:59 -06:00
Cheng Zhao
8ca1bea58b Do not link with unnecessary libraries 2015-12-29 15:45:34 +08:00
Cheng Zhao
38adaf5b3c Remove hacky build settings 2015-12-29 14:51:00 +08:00
Cheng Zhao
19ab68abfb Update libchromiumcontent to include widevine libraries 2015-12-29 14:51:00 +08:00
Cyrille Lebeaupin
9d878ad6b2 Add widevine third party
Add 2 new command options to use widevine:
- widevine-cdm-path: Path to widevine plugin
- widevine-cdm-version: Version of the widevine plugin
2015-12-29 14:50:59 +08:00
Cheng Zhao
5f3c6107d5 Merge pull request #3942 from atom/remote-memory-leak
Fix memory leak in remote module
2015-12-29 11:03:34 +08:00
Cheng Zhao
2294a5ce69 Leak FunctionTemplateHandle
They are cached through the app's lifetime, and freeing them at the
right time is complicate, so just leak them.
2015-12-29 10:40:10 +08:00
Cheng Zhao
d8d963b780 Cache function templates created by CreateObjectWithName 2015-12-29 10:29:48 +08:00
Cheng Zhao
ffc2870ccb Fix circular reference caused by Object.defineProperty 2015-12-29 10:17:35 +08:00
Cheng Zhao
3d2163230b Optimize the case when creating plain object 2015-12-28 22:51:40 +08:00
Cheng Zhao
6785870dde Variables are not shadowed in inline class 2015-12-28 22:51:40 +08:00
Cheng Zhao
b5fd491c2d Fix circular reference caused by RemoteMemberFunction 2015-12-28 22:51:40 +08:00
Cheng Zhao
6fe39e79f4 Merge pull request #3931 from leftstick/master
add zh-CN translation for devtools
2015-12-28 19:22:57 +08:00
Howard.Zuo
6e43be99d7 add zh-CN translation for devtools 2015-12-28 13:10:15 +08:00
Cheng Zhao
dad2586a8a Merge pull request #3920 from flaub/patch-1
s/Phrase/Phase
2015-12-28 09:58:40 +08:00
Frank Laub
ab53e04a80 s/Phrase/Phase 2015-12-24 23:04:44 -08:00
Cheng Zhao
9ffe502fb1 Bump v0.36.2 2015-12-25 13:45:07 +08:00
Cheng Zhao
fb032b03b0 Merge pull request #3918 from deepak1556/renderer_process_fork_patch
renderer: dont fork the process when there is server redirect
2015-12-25 13:43:34 +08:00
Plusb Preco
2f99a1ac8e 📝 Update as upstream
[ci skip]
2015-12-25 12:20:08 +08:00
Cheng Zhao
26f9f83cfd Upgrade brightray for atom/brightray#188 2015-12-25 11:57:35 +08:00
Robo
ab9d1bf97e renderer: dont fork the process when there is server redirect 2015-12-25 02:19:56 +05:30
Cheng Zhao
f5a093db58 Merge pull request #3915 from juanpaulo/master
Removed unnecessary backtick
2015-12-24 20:11:59 +08:00
Cheng Zhao
673c6e6917 Upgrade brightray for #3866 2015-12-24 20:08:16 +08:00
Juan Paulo Gutierrez
67e19cac85 Removed unnecessary backtick. 2015-12-24 20:22:22 +09:00
Cheng Zhao
7f02e0a716 spec: Surppess did-change-theme-color test
It is too flaky.
2015-12-24 19:05:28 +08:00
Cheng Zhao
405aadc7d8 Merge pull request #3914 from atom/fix-remvoe-headers
onBeforeSendHeaders should reset the whole headers
2015-12-24 18:39:04 +08:00
Cheng Zhao
c36ae86fab spec: Increase timeout for window.open 2015-12-24 17:08:32 +08:00
Cheng Zhao
2b5c91bbb5 spec: onBeforeSendHeaders should reset the whole headers 2015-12-24 17:02:30 +08:00
Cheng Zhao
e96f89133c Reset whole headers when requestHeaders is set 2015-12-24 16:59:13 +08:00
Cheng Zhao
6aa3464aad Merge pull request #3912 from tylergibson/FixingMoveItemToTrash-Windows7
Adding check for Windows version and alternate flags for Windows Vista/7
2015-12-24 15:32:09 +08:00
Tyler Gibson
2d0e1c313a Adding check for Windows version and alternate flags for Windows Vista/7 2015-12-24 06:08:43 +00:00
Cheng Zhao
e41dad5153 Merge pull request #3913 from atom/fix-nsurl
Fix converting string to NSURL
2015-12-24 13:06:08 +08:00
Cheng Zhao
7bd9f2e5d0 Fix converting string to NSURL 2015-12-24 12:43:07 +08:00
Cheng Zhao
aa85258d56 Merge pull request #3911 from atom/fix-alt
linux: Fix pressing Alt not toggling window menu bar
2015-12-24 12:10:07 +08:00
Cheng Zhao
d3d8ab7c66 linux: Fix pressing Alt not toggling window menu bar 2015-12-24 11:43:14 +08:00
Cheng Zhao
c9fafc0c3a Merge pull request #3910 from atom/no-ship-libnotify
No longer need to ship with libnotify.so
2015-12-24 11:37:52 +08:00
Cheng Zhao
8b88c99685 No longer need to ship with libnotify.so 2015-12-24 11:17:32 +08:00
Cheng Zhao
046839cb56 Update brightray for #2294 2015-12-24 11:16:46 +08:00
Cheng Zhao
9e9d74a5a4 Merge pull request #3905 from fscherwi/patch-2
upgrade asar
2015-12-24 10:14:16 +08:00
fscherwi
3cdd5dd418 ⬆️ asar 2015-12-23 19:08:51 +01:00
Cheng Zhao
a6074f89a3 Merge pull request #3900 from bbondy/theme-color
Theme color
2015-12-23 16:09:57 +08:00
Cheng Zhao
7f1081a594 Merge pull request #3904 from atom/hidden-inset-no-visual-artifacts
Fix visual artifacts of hidden-inset window
2015-12-23 13:14:50 +08:00
Cheng Zhao
e90435e236 Remove visual artifacts of hidden-inset window 2015-12-23 12:38:11 +08:00
Brian R. Bondy
29b00ae0d6 Add tests for did-change-theme-color event 2015-12-22 23:05:03 -05:00
Cheng Zhao
79b507bda6 Merge pull request #3890 from jaanus/hidden-inset-fullscreen-fix
Fixes #2810: correct look of hidden-inset windows in full screen.
2015-12-23 11:26:06 +08:00
Cheng Zhao
a1936ecf82 Merge pull request #3903 from atom/fix-webrequest-crash
Fix crash when using webRequest API
2015-12-23 10:44:19 +08:00
Cheng Zhao
3e1edfc9d0 Cancel callback in OnComplete event 2015-12-23 10:20:59 +08:00
Brian R. Bondy
11b2015535 Add did-change-theme-color event to webview 2015-12-22 17:28:22 -05:00
jaanus
aa2f7aaf3a Fixes #2810: correct look of hidden-inset windows in full screen.
`hidden` and `hidden-inset` windows differ only by the hidden-inset window having a toolbar. Yet, the toolbar yields an incorrect look in fullscreen mode. So, we hide and recreate the toolbar for such windows when going to/from fullscreen.

There are some visible artifacts during the fullscreen animations, as the toolbar gets created and destroyed. When entering fullscreen, you see a toolbar that then disappears. When going back to normal window, you see the traffic light buttons jump around a little bit. Yet, this is definitely better than the current broken fullscreen look.
2015-12-22 20:31:55 +02:00
Cheng Zhao
c8c4381085 Cancel callback when URLRequest is destroyed 2015-12-22 23:35:23 +08:00
Cheng Zhao
e14d472934 Merge pull request #3892 from jasssonpet/patch-1
Formatting app.md
2015-12-22 19:16:04 +08:00
Plusb Preco
9aa37580e3 📝 Update as upstream
[ci skip]
2015-12-22 19:11:29 +08:00
Cheng Zhao
c4931bb2d1 Merge pull request #3865 from deepak1556/visibility_api_patch
browser: fix document.hidden value
2015-12-22 19:04:23 +08:00
Cheng Zhao
8ca42e9d9f Merge pull request #3855 from deepak1556/find_api_patch
webContents: adding findInPage api
2015-12-22 19:01:39 +08:00
Jason Zhekov
2f732a7c0f Formatting app.md
This looks a bit odd on the site: http://electron.atom.io/docs/v0.36.0/api/app/#app-setusertasks-tasks-windows
2015-12-22 09:04:36 +02:00
Robo
61004f0e46 fix cpplint warning 2015-12-21 19:16:02 +05:30
Robo
cc7040d75f add test 2015-12-21 18:47:52 +05:30
Robo
ff51e4033a browser: fix value of document.hidden 2015-12-21 17:43:46 +05:30
Robo
d162180196 add api to webview 2015-12-21 17:13:23 +05:30
Robo
39e615ed87 webContents: adding findInPage api 2015-12-21 17:09:56 +05:30
Cheng Zhao
c68e38f480 Merge pull request #3882 from deepak1556/chromium_spec_patch
spec: serviceWorker registration with file scheme
2015-12-21 18:39:18 +08:00
Cheng Zhao
144b73c267 Merge pull request #3877 from bbondy/master
Add media play events to webview
2015-12-21 18:22:30 +08:00
Cheng Zhao
fa8d251370 Merge pull request #3875 from deepak1556/history_navigation_patch
navigaton: handle history operations from renderer
2015-12-21 18:18:45 +08:00
Cheng Zhao
b269485d37 Merge pull request #3867 from WenryXu/master
docs: Fix markdown code language
2015-12-21 14:38:41 +08:00
Cheng Zhao
d08b7fdb5d Merge pull request #3880 from adam-lynch/patch-1
Desktop Environment Integration: typo
2015-12-21 11:33:21 +08:00
Cheng Zhao
3fcfe24b82 Merge pull request #3881 from adam-lynch/patch-2
Desktop Environment Integration: rearranged sentence
2015-12-21 11:33:14 +08:00
Plusb Preco
6c26aa8d05 📝 Update as upstream
[ci skip]
2015-12-21 11:31:38 +08:00
Cheng Zhao
99a661e2d2 Code cleanup of browser_mac.mm 2015-12-21 10:52:49 +08:00
Cheng Zhao
8d094d99da Merge pull request #3853 from jrehbein/fix-issue-3739-mac-dockshow
DockShow workaround for issue #3739
2015-12-21 10:38:52 +08:00
Cheng Zhao
3b3c5a0edb Update brightray for #3831 2015-12-21 10:09:20 +08:00
Robo
68733eb8df spec: serviceWorker registration with file scheme 2015-12-21 01:32:08 +05:30
Adam Lynch
520b537362 Desktop Environment Integration: rearranged sentence 2015-12-20 18:34:57 +00:00
Adam Lynch
da9c202d86 Desktop Environment Integration: typo 2015-12-20 18:34:05 +00:00
Brian R. Bondy
fed0c43970 Add media play events to webview 2015-12-19 22:37:51 -05:00
Robo
7b03ac6d61 navigaton: handle history operations from renderer 2015-12-20 01:23:47 +05:30
WenryXu
7e0775f9d7 docs: Fix markdown code language 2015-12-19 14:27:47 +08:00
Cheng Zhao
bff2861311 Bump v0.36.1 2015-12-18 13:16:30 +08:00
Cheng Zhao
7d66b37901 Merge pull request #3859 from atom/phantom-callback
Update node: Use phantom callback in CallbackInfo
2015-12-18 13:15:56 +08:00
Cheng Zhao
62c4a471d9 Merge pull request #3854 from deepak1556/browser_client_crash_patch
browser: check for rvh existence
2015-12-18 12:10:41 +08:00
Cheng Zhao
cefce45ffa Update node: Use phantom callback in CallbackInfo 2015-12-18 12:00:10 +08:00
Cheng Zhao
4ad79b2a8c docs: Standarize the "(**required**)" 2015-12-18 11:12:48 +08:00
Cheng Zhao
d5168f09d6 docs: Use "(optional)" instead of "__optional__" 2015-12-18 11:12:48 +08:00
Cheng Zhao
d7946b9c41 Merge pull request #3851 from preco21/master
Update as upstream
2015-12-18 09:53:45 +08:00
Cheng Zhao
7d000807c5 Merge pull request #3849 from herrmannplatz/improvement/escape-url-openexternal
escape url string
2015-12-18 09:45:39 +08:00
Cheng Zhao
177cfd9958 Revert "Upgrade node to fix crash in Buffer"
This reverts commit fe9c09ef64.
2015-12-18 09:19:13 +08:00
Robo
836c13b330 browser: check for rvh existence 2015-12-18 04:45:32 +05:30
Jeff Rehbein
a39834740c DockShow workaround
Implemented workaround in DockShow for TransformProcessType bugginess
based on discussion at http://stackoverflow.com/questions/7596643/
2015-12-17 14:00:04 -06:00
Plusb Preco
ac92917353 📝 Update as upstream
[ci skip]
2015-12-18 03:10:08 +09:00
rehez
9eb797296c escape url string 2015-12-17 16:23:30 +01:00
Cheng Zhao
fe016d393f Merge pull request #3848 from atom/no-sync-message-on-start
Remove usages of synchronous messages on startup
2015-12-17 22:31:33 +08:00
Cheng Zhao
353f08e477 Remove sync call in remote module 2015-12-17 22:03:16 +08:00
Cheng Zhao
0282d424bf Pass opener ID in command line 2015-12-17 21:27:14 +08:00
Cheng Zhao
c7bfd5f09d Upgrade libchromiumcontent: enable sending sync message to UI thread 2015-12-17 20:12:05 +08:00
Cheng Zhao
afedce0b18 docs: |options| is not optional
Close #3845.
2015-12-17 18:40:52 +08:00
Cheng Zhao
19835cf346 Merge pull request #3844 from atom/fix-node-crash
Upgrade node to fix crash in Buffer
2015-12-17 15:04:03 +08:00
Cheng Zhao
fe9c09ef64 Upgrade node to fix crash in Buffer 2015-12-17 13:07:41 +08:00
Cheng Zhao
b7cbc49c01 Merge pull request #3833 from atom/no-renderer-pump
Don't pump message loop when sending sync msg
2015-12-16 23:38:43 +08:00
Cheng Zhao
71303d4804 Fix context menu not working in devtools 2015-12-16 22:57:03 +08:00
Cheng Zhao
c6634b1ea5 Don't pump message loop when sending sync msg
In old days sending sync message to browser process requires pumping
message loop in the renderer process, but now in Chrome 47 it is not
true anymore. And even when we do it, the Send method may fail
sometimes, so this change seems to be required for the Chrome 47
upgrade.
2015-12-16 22:38:04 +08:00
Cheng Zhao
349f401476 Merge pull request #3829 from atom/remote-xpc-call
Update libchromiumcontent
2015-12-16 19:42:04 +08:00
Cheng Zhao
a29abf1e34 Update libchromiumcontent
Remove usages of private xpc_ APIs, fix #3823.
2015-12-16 18:06:47 +08:00
Cheng Zhao
2b4e6080a8 Merge pull request #3826 from atom/remote-crash-reporting-defaults
Require submitURL and companyName options to crashReporter.start
2015-12-16 12:02:28 +08:00
Cheng Zhao
c39a6c49de Merge pull request #3825 from atom/maxogden-patch-1
mention getUserMedia options in desktop-capturer docs
2015-12-16 11:30:05 +08:00
Cheng Zhao
bc33b4e594 Merge pull request #3822 from hashedhyphen/support-strict-mode
🐛 Support strict mode on Tutorial
2015-12-16 11:13:26 +08:00
Kevin Sawicki
d863fd5c6c Set process.throwDeprecation as early as possible 2015-12-15 17:02:33 -08:00
Kevin Sawicki
5fb5526b06 Improve spec description 2015-12-15 16:49:19 -08:00
Kevin Sawicki
67c0de36a3 📝 Add missing period 2015-12-15 16:47:19 -08:00
Kevin Sawicki
d44a9d1fcc 🎨 Remove parens 2015-12-15 16:46:53 -08:00
Kevin Sawicki
aedfd3bf0e Add specs for companyName/submitURL being required 2015-12-15 16:44:38 -08:00
Kevin Sawicki
80e9631220 Use better signature match in deprecation message 2015-12-15 16:27:01 -08:00
Kevin Sawicki
4718c726f6 Remove starting crash reporter from quick start 2015-12-15 16:24:24 -08:00
Kevin Sawicki
524649797f Make companyName and submitURL required options 2015-12-15 16:22:31 -08:00
Kevin Sawicki
dcc99dd5cb Remove duplicate start calls 2015-12-15 16:10:04 -08:00
Kevin Sawicki
58106e53c8 Mark companyName and submitURL as required 2015-12-15 16:09:01 -08:00
=^._.^=
c98db82668 mention getUserMedia options in desktop-capturer docs 2015-12-15 14:07:55 -08:00
Hashed Hyphen
e729104d00 🐛 Support strict mode on Tutorial
[ci skip]
2015-12-16 00:52:14 +09:00
Cheng Zhao
063231cf0c Merge pull request #3819 from preco21/master
Update as upstream
2015-12-15 22:40:09 +08:00
Cheng Zhao
8d2a41a987 Merge pull request #3818 from atom/fix-add-recent-document-crash
Fix crash when passing invalid path to addRecentDocument
2015-12-15 18:28:04 +08:00
Plusb Preco
2470ff1b14 📝 Update as upstream
[ci skip]
2015-12-15 18:45:13 +09:00
Cheng Zhao
d0962b1a93 Fix crash when passing empty path to addRecentDocument 2015-12-15 17:17:24 +08:00
Cheng Zhao
02e0c169a2 Merge pull request #3815 from bjrmatos/master
Add A5 Page Size to printToPDF
2015-12-15 16:55:17 +08:00
Cheng Zhao
dcd71cb835 Merge pull request #3817 from atom/fix-node-crash
Upgrade node, fix #3786
2015-12-15 16:54:24 +08:00
Cheng Zhao
6347f0e321 Upgrade node, fix #3786 2015-12-15 16:25:44 +08:00
Cheng Zhao
8ddf4da9ad Merge pull request #3809 from deepak1556/capture_page_api_patch
browser: dont lose coordinates in capturepage src rect
2015-12-15 15:33:02 +08:00
Cheng Zhao
e7090887d9 Merge pull request #3812 from atom/make-opener-a-proxy
Make window.opener a BrowserWindowProxy
2015-12-15 15:01:28 +08:00
BJR Matos
86bf7341b7 Add A5 Page Size to printToPDF 2015-12-14 23:28:25 -05:00
Kevin Sawicki
aa9c7662a3 Inline JSON message response 2015-12-14 17:09:31 -08:00
Kevin Sawicki
d1989b3624 Mention source in spec description 2015-12-14 17:02:58 -08:00
Kevin Sawicki
b8de1bd9de Assert that source id matches opener 2015-12-14 17:02:36 -08:00
Kevin Sawicki
d133553c6a Remove unused ipc event handler 2015-12-14 16:58:32 -08:00
Kevin Sawicki
c5936a024d Remove unneeded custom postMessage on window.opener 2015-12-14 16:54:26 -08:00
Kevin Sawicki
184b11be4c Use id from source window when building proxy for event source 2015-12-14 16:47:33 -08:00
Kevin Sawicki
0ef0ce7345 Add comment about window.opener tweaks 2015-12-14 14:57:38 -08:00
Kevin Sawicki
574eec3e74 Make window.opener a BrowserWindowProxy 2015-12-14 14:55:48 -08:00
Plusb Preco
4fa6d4aead 📝 Update as upstream
[ci skip]
2015-12-15 05:40:13 +09:00
Cheng Zhao
606fb0615f Merge pull request #3805 from andela-earinde/patch-1
Remove typo in auto-updater doc
2015-12-14 20:01:22 +08:00
Plusb Preco
bd1b6fdc74 📝 Update as upstream
[ci skip]
2015-12-14 19:18:27 +08:00
Cheng Zhao
551f07860d Merge pull request #3799 from bbondy/patch-1
Indicate that Update 5 is required for VS2013
2015-12-14 19:11:49 +08:00
Sean Francis N. Ballais
2d2ad0d33b Addeda versionin package.json. 2015-12-14 18:17:04 +08:00
Cheng Zhao
2fa7088fd1 Upgrade brightray for atom/brightray#184 2015-12-14 18:11:01 +08:00
Arinde Eniola
f48c28f22b Update auto-updater.md 2015-12-14 01:02:30 +01:00
Robo
3c5e5053e3 browser: dont lose coordinates in capturepage src rect 2015-12-14 00:52:05 +05:30
Plusb Preco
582fb6f519 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-12-13 16:37:26 +09:00
Plusb Preco
d0fe2ac904 📝 Fix confused translation
[ci skip]
2015-12-13 16:33:27 +09:00
Plusb Preco
db73647d07 Revert "📝 Update as upstream"
This reverts commit efac12ed89.
2015-12-13 16:29:18 +09:00
Brian R. Bondy
8ae99ebd1f Indicate that Update 5 is required for VS2013 2015-12-12 22:25:45 -05:00
Cheng Zhao
550830c4d9 Merge pull request #3792 from atom/backport-v8-patch
Backport https://codereview.chromium.org/1406133003
2015-12-12 22:44:10 +08:00
Cheng Zhao
0df9eeb2dd Backport https://codereview.chromium.org/1406133003 2015-12-12 22:16:28 +08:00
Plusb Preco
c6085f5178 📝 Update as upstream
[ci skip]
2015-12-12 21:41:17 +09:00
Cheng Zhao
84cea1b494 Merge pull request #3789 from atom/template-web-request
Cleanup the webRequest and cookies code
2015-12-12 16:34:10 +08:00
Cheng Zhao
10cad5d9ec Passing '' to fromPartiion should return default partition 2015-12-12 15:47:15 +08:00
Cheng Zhao
56c1f04a51 docs: Update webRequest API 2015-12-12 15:45:02 +08:00
Cheng Zhao
ab14a4466d docs: Improve the cookies docs 2015-12-12 15:41:04 +08:00
Cheng Zhao
4d1e223044 Cleanup the cookies code 2015-12-12 15:33:51 +08:00
Cheng Zhao
3c48198c3c spec: Suppress navigator.webkitGetUserMedia test
It is stressing the whole test case.
2015-12-12 15:32:49 +08:00
Cheng Zhao
9438d42322 Use generic function to handle events 2015-12-12 13:49:58 +08:00
Cheng Zhao
f976e1eda3 Add generic version for FillDetailsObject 2015-12-12 13:20:53 +08:00
Cheng Zhao
d3e723557e spec: Add test cases for webRequest 2015-12-12 11:31:19 +08:00
Cheng Zhao
fed94aada0 Make the webRequest listener asynchronous 2015-12-12 00:09:03 +08:00
Cheng Zhao
d3c8363450 EventType can not be OR'ed 2015-12-11 21:22:23 +08:00
Cheng Zhao
15cc8164b8 Use lower case for getters 2015-12-11 21:21:02 +08:00
Cheng Zhao
67886cf513 Parse filters in API code 2015-12-11 21:14:13 +08:00
Cheng Zhao
79a627014c Unify how listeners are handled 2015-12-11 21:02:44 +08:00
Cheng Zhao
9d406b695f Simpily the code that fills |details| 2015-12-11 20:40:39 +08:00
Cheng Zhao
e295eb0de7 Fix memory leak 2015-12-11 20:11:59 +08:00
Cheng Zhao
467e3b25b2 EvenTypes => EventType 2015-12-11 20:11:22 +08:00
Cheng Zhao
62f4b25cf9 Allow passing null to webRequest 2015-12-11 19:13:56 +08:00
Cheng Zhao
b7fce578d5 docs: Improve the webRequets docs 2015-12-11 19:02:56 +08:00
Cheng Zhao
98ba1a24db Merge pull request #3640 from deepak1556/webrequest_api_patch
session: add webrequest api
2015-12-11 16:56:00 +08:00
Plusb Preco
efac12ed89 📝 Update as upstream
[ci skip]
2015-12-11 14:26:01 +09:00
Cheng Zhao
9495392a1a Bump v0.36.0 2015-12-11 11:49:01 +08:00
Cheng Zhao
ced6aae6df Merge pull request #3762 from atom/run-specs-with-grep
Allow running specs with --grep option from command line
2015-12-11 11:21:57 +08:00
Laekh
fdef3d56b8 Update browser-window.md
Made it more clear on how to define BrowserWindow (outside of the main process, specifically)
2015-12-11 11:20:44 +08:00
Cheng Zhao
a6976b7d83 Merge pull request #3768 from atom/window-post-message-origin
Fix window.postMessage event.origin value
2015-12-11 11:18:37 +08:00
Cheng Zhao
6351e28f00 Merge pull request #3769 from atom/reuse-browser-window-proxies
Reuse BrowserWindowProxy objects across events
2015-12-11 11:16:42 +08:00
Kevin Sawicki
8401ece537 removeWindow -> remove 2015-12-10 17:22:05 -08:00
Kevin Sawicki
49ca7509c7 Reuse BrowserWindowProxy instances 2015-12-10 17:20:10 -08:00
Kevin Sawicki
7dfca3c293 Expect event source and opened window to be equal 2015-12-10 17:04:36 -08:00
Kevin Sawicki
dd01466f3c sequnce -> sequence 2015-12-10 17:02:35 -08:00
Kevin Sawicki
9bc7c62588 Use source origin in window.postMessage event 2015-12-10 16:52:39 -08:00
Kevin Sawicki
2cb752e3de Add failing spec for event origin 2015-12-10 16:49:23 -08:00
Kevin Sawicki
afd736d9f9 Guard against null guest or embedder
Uncaught exceptions would occur when these were null and
the target origin was '*'
2015-12-10 15:51:15 -08:00
Robo
053c77d6f4 default session should be persistent 2015-12-11 00:27:15 +05:30
Robo
658accab94 fix pointer usage 2015-12-11 00:25:25 +05:30
Kevin Sawicki
49b6e5bcac Add npm test script 2015-12-10 10:44:11 -08:00
Kevin Sawicki
065887e712 Pass through mocha invert option from test CLI 2015-12-10 10:42:07 -08:00
Kevin Sawicki
69c0a33c85 Pass mocha grep command line option through to spec app 2015-12-10 10:33:43 -08:00
Kevin Sawicki
a42fa5d5c2 Parse spec arguments using yargs library 2015-12-10 10:33:18 -08:00
Cheng Zhao
1683dd6197 Merge pull request #3759 from preco21/master
Update as upstream
2015-12-10 23:28:28 +08:00
Plusb Preco
ec16c6a146 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-12-10 23:30:55 +09:00
Plusb Preco
5f75bc36d9 📝 Update as upstream
[ci skip]
2015-12-10 23:19:50 +09:00
Cheng Zhao
a05aa81570 Merge pull request #3701 from deepak1556/protocol_post_data_patch
protocol: provide upload data when available
2015-12-10 19:38:35 +08:00
Cheng Zhao
991c8b1aa6 Merge pull request #3733 from deepak1556/service_worker_scheme_patch
protocol: api to register schemes that can handle service worker
2015-12-10 19:29:51 +08:00
Cheng Zhao
b42695a0b5 win: Don't attach console for third party terms
Close #3692.
2015-12-10 14:37:09 +08:00
Cheng Zhao
150250f3d9 Merge pull request #3752 from atom/appveyor
Run tests on Appveyor
2015-12-10 13:38:12 +08:00
Cheng Zhao
bf5c3bc9dd Avoid duplicate building for PR 2015-12-10 13:18:23 +08:00
Cheng Zhao
5cf369086c Also disable test phase 2015-12-10 13:16:22 +08:00
Cheng Zhao
f11f408420 Do not automatically build everything 2015-12-10 12:48:10 +08:00
Cheng Zhao
8c31148f7d Remove unneeded things 2015-12-10 12:35:22 +08:00
Cheng Zhao
cb806aa362 Use default node 0.12.7
Otherwise we would spend some time reinstalling node.
2015-12-10 12:23:39 +08:00
Cheng Zhao
33db4a6ac1 Run cibuild 2015-12-10 12:22:35 +08:00
Plusb Preco
966bc8408e 📝 Update as upstream
[ci skip]
2015-12-10 13:21:08 +09:00
Cheng Zhao
aa8efd90cc Bring back AppVeyor 2015-12-10 12:09:46 +08:00
Cheng Zhao
f4f4b9428d Merge pull request #3750 from atom/fullscreen-menu-item
Don't add the "Enter Full Screen" menu item automatically
2015-12-10 11:54:26 +08:00
Cheng Zhao
c180607ef6 Merge pull request #3721 from atom/emit-process-exit-event-with-code
Emit process exit event with app exit code
2015-12-10 11:39:14 +08:00
Cheng Zhao
2d940b7df7 Don't add the "Enter Full Screen" menu item automatically 2015-12-10 11:27:41 +08:00
Cheng Zhao
388a18b265 Don't emit will-quit event when calling app.exit 2015-12-10 11:22:55 +08:00
Kevin Sawicki
f5774e3fb2 Exit from a setImmediate callback 2015-12-09 18:40:10 -08:00
Kevin Sawicki
516ff0644c Just include exit code in spec output 2015-12-09 18:24:24 -08:00
Kevin Sawicki
e1654ee334 📝 Document quit event includes exit code 2015-12-09 18:22:54 -08:00
Kevin Sawicki
ea1479a651 Revert comment tweak 2015-12-09 18:20:53 -08:00
Kevin Sawicki
3e5caf7e54 Get exit code from within App::OnQuit 2015-12-09 18:19:51 -08:00
Kevin Sawicki
c4389ad70f Remove grep value setting 2015-12-09 18:12:19 -08:00
Kevin Sawicki
fc724b51e8 Move event forwarding back to init 2015-12-09 18:11:38 -08:00
Kevin Sawicki
92433be888 Include exit code with quit event 2015-12-09 18:09:59 -08:00
Kevin Sawicki
aa82eddca8 Add spec for exit code on event 2015-12-09 14:40:53 -08:00
Kevin Sawicki
63c0095efb Emit process exit event with app exit code 2015-12-09 14:40:53 -08:00
Robo
461ee49988 fix response headers modification 2015-12-09 20:14:18 +05:30
Robo
c5b5bbbeb2 add documentation 2015-12-09 20:14:18 +05:30
Robo
29f32c5ec7 support filtering event with url regex 2015-12-09 20:14:18 +05:30
Robo
13b5cab738 session: add webrequest api 2015-12-09 20:14:18 +05:30
Robo
e80a95dc37 add test 2015-12-09 20:10:57 +05:30
deepak1556
fbb5091f94 provide option to set content for POST request with url_fetcher 2015-12-09 20:10:57 +05:30
deepak1556
940289639e protocol: provide upload data when available 2015-12-09 20:10:57 +05:30
Cheng Zhao
d2e63dfc64 Use HTTPS for libchromiumcontent's URL
Without using the subdomain we should be able to work around the domain
license problem of python.
2015-12-09 18:14:37 +08:00
Cheng Zhao
f3c67586dc Merge pull request #3743 from preco21/master
Update as upstream
2015-12-09 18:10:48 +08:00
Plusb Preco
4943414274 Update as upstream
[ci skip]
2015-12-09 17:16:54 +09:00
Plusb Preco
a190b964c8 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-12-09 16:41:23 +09:00
Cheng Zhao
f7b7b3407c Update brightray for #3720 2015-12-09 12:34:10 +08:00
Cheng Zhao
0a81697116 Merge pull request #3732 from deepak1556/path_config_patch
fix chrome app and user path conflicts
2015-12-09 12:25:54 +08:00
Cheng Zhao
d4355a0533 Merge pull request #3729 from preco21/master
Update as upstream
2015-12-09 12:15:40 +08:00
Cheng Zhao
8aee0f52e9 Merge pull request #3715 from atom/do-not-edit-menu-template
Do not modify the specified menu template
2015-12-09 12:13:07 +08:00
Cheng Zhao
7bb3bf0f48 docs: win.setIgnoreMouseEvents 2015-12-09 12:05:47 +08:00
Cheng Zhao
774ba2a235 Merge pull request #3706 from billyct/master
support an api with SetIgnoreMouseEvents for osx
2015-12-09 12:00:16 +08:00
Cheng Zhao
3db78202da Merge pull request #3705 from arturts/pt-br-linux-build-instructions
📝 [ci skip] translation build instructions
2015-12-09 11:56:01 +08:00
Cheng Zhao
445b4a1834 Merge pull request #3704 from leftstick/master
add ZH-CN translation for using-selenium-and-webdriver
2015-12-09 11:43:26 +08:00
Cheng Zhao
9df0fd53a6 Merge pull request #3703 from Cfeusier/patch-1
Fix broken link in Docs > Synopsis
2015-12-09 11:43:07 +08:00
Cheng Zhao
5be45dc268 Merge pull request #3700 from arturts/pt-br-browser-window
📝 [ci skip] browser window translation
2015-12-09 11:38:39 +08:00
Cheng Zhao
2f0e732351 Merge pull request #3698 from lukeapage/patch-2
Docs: Fix link to webcontents send channel
2015-12-09 11:38:05 +08:00
Andriy Tsok
48d07423f9 Ukrainian translation (uk-UA) 2015-12-09 11:30:04 +08:00
Robo
855d49100f protocol: api to register schemes that can handle service worker 2015-12-09 03:11:58 +05:30
Robo
f77bb44952 fix chrome app and user path conflicts 2015-12-08 23:00:08 +05:30
Kevin Sawicki
8cdddcd562 Merge pull request #3726 from acburdine/patch-1
Fix grammatical error in desktop notification docs
2015-12-08 08:21:14 -08:00
Cheng Zhao
5e9aca4524 Merge pull request #3727 from atom/desktop-capture-api-continue
Merge the desktopCapturer API
2015-12-08 19:46:01 +08:00
Cheng Zhao
505193e239 Link with libyuv_neon.a on ARM 2015-12-08 18:15:01 +08:00
Cheng Zhao
9daeafbace Install libxtst-dev on travis ci 2015-12-08 17:32:42 +08:00
Cheng Zhao
9548a3801b Update brightray: Link a few more X libraries 2015-12-08 17:03:10 +08:00
Cheng Zhao
640b4c3c66 Update brightray for various linking problems 2015-12-08 16:56:20 +08:00
Cheng Zhao
98169032fd Update libchromiumcontent and brightray 2015-12-08 14:49:13 +08:00
Plusb Preco
54b62a2f31 Update as upstream
[ci skip]
2015-12-08 15:39:58 +09:00
Plusb Preco
ea2054c516 Revert "Update as upstream"
This reverts commit 06acc8b208.
2015-12-08 15:39:01 +09:00
Plusb Preco
06acc8b208 Update as upstream 2015-12-08 15:38:10 +09:00
Cheng Zhao
9eb5627225 Update clang to the same version with Chrome 47 2015-12-08 14:21:23 +08:00
Cheng Zhao
836a8b1794 Simplify the desktopCapturer code 2015-12-08 13:49:26 +08:00
Cheng Zhao
f6c9000f5f spec: Add a simple test case for desktopCapturer 2015-12-08 13:49:11 +08:00
Austin Burdine
468dd9e7c8 📝 fix grammatical error in desktop notification docs [ci skip] 2015-12-07 23:13:45 -06:00
Cheng Zhao
b517b0c598 docs: Improve docs of desktopCapturer 2015-12-08 13:09:36 +08:00
Cheng Zhao
51368952a2 Remove deprecated API usages 2015-12-08 12:58:39 +08:00
Cheng Zhao
785bc2986b Update brightray and libchromium for desktopCapturer 2015-12-08 12:47:07 +08:00
Cheng Zhao
d458b24945 Add desktopCapturer to electron 2015-12-08 12:44:55 +08:00
Cheng Zhao
04f7ceab73 Merge branch 'master' into desktop-capture-api 2015-12-08 12:43:44 +08:00
Cheng Zhao
ed2c18c724 Merge pull request #3724 from atom/node5
Upgrade to Node v5.1.1
2015-12-08 12:26:24 +08:00
Cheng Zhao
407e88cbad Update brightray 2015-12-08 12:08:33 +08:00
Cheng Zhao
da208b5155 We are now on 0.36.0 2015-12-08 11:41:47 +08:00
Cheng Zhao
0f2f9b5543 No need to use CommandDispatcher 2015-12-08 11:20:07 +08:00
Cheng Zhao
4af2190890 Upgrade to Node v5.1.1 2015-12-08 11:14:30 +08:00
Cheng Zhao
c1673eb666 Merge pull request #3714 from atom/chrome47
Upgrade to Chrome 47
2015-12-08 10:48:04 +08:00
Cheng Zhao
c63a8c944b Fix release title 2015-12-08 10:42:51 +08:00
Cheng Zhao
c3f7f2447c Update the libspeechd_loader 2015-12-08 10:26:32 +08:00
Cheng Zhao
e8b5a6dedf Merge pull request #3718 from atom/chrome47-linux
Port Chrome47 on Linux
2015-12-08 10:14:27 +08:00
Cheng Zhao
e78a02806e Make it safe to use sendSync 2015-12-08 10:07:47 +08:00
Cheng Zhao
ac2e500cf7 Merge pull request #3716 from atom/chrome47-win
Port Chrome47 on Windows
2015-12-08 09:52:50 +08:00
Paul Betts
9a0cecf943 Rig GlobalMenuBarRegistrarX11 for Atom 2015-12-07 14:30:26 -08:00
Paul Betts
fe86239a9c Update to Chrome47 version of tts_linux 2015-12-07 14:28:42 -08:00
Paul Betts
4a8d58f914 Update to Chrome47 version of GlobalMenuBarRegistrarX11 2015-12-07 14:25:52 -08:00
Paul Betts
8d5c153e9b Update to Chrome 47 version of tts_win 2015-12-07 14:23:01 -08:00
Paul Betts
af28900189 Fix up Chrome47 changes 2015-12-07 13:27:05 -08:00
Kevin Sawicki
68d937ed47 🎨 2015-12-07 11:20:15 -08:00
Kevin Sawicki
96ef09742c Directly assign submenu when constructor is Menu 2015-12-07 11:16:36 -08:00
Kevin Sawicki
83c69b56a4 Use ipc eval in spec 2015-12-07 11:12:55 -08:00
Paul Betts
3931ebb7ef Fix up Windows build errors 2015-12-07 10:02:06 -08:00
Kevin Sawicki
e62092ebb2 Move ipc handler to be near others 2015-12-07 09:47:15 -08:00
Kevin Sawicki
a139a62ebf Mention conversion using Menu.buildFromTemplate 2015-12-07 09:36:21 -08:00
Kevin Sawicki
d5c740957f 🎨 2015-12-07 09:29:03 -08:00
Kevin Sawicki
26ac86c95c Convert submenu when non-Menu is passed into MenuItem ctor 2015-12-07 09:28:48 -08:00
Kevin Sawicki
f178787737 Add failing spec for Menu.buildFromTemplate 2015-12-07 09:28:17 -08:00
Cheng Zhao
d0be6c7411 Fix cppling warning 2015-12-07 22:44:35 +08:00
Cheng Zhao
27dd233820 spec: Make the "remote listeners" test more reliable 2015-12-07 21:28:58 +08:00
Cheng Zhao
647f151906 Fix the failing sendSync 2015-12-07 21:25:19 +08:00
Cheng Zhao
95e7c796ec V8 now checks strictly when callin Neuter() 2015-12-07 20:48:39 +08:00
Cheng Zhao
73e7773d84 Update to API changes of Chrome 47 2015-12-07 19:56:23 +08:00
Cheng Zhao
766bbfcb05 Chrome 47.0.2526.73 2015-12-07 15:14:31 +08:00
billyct
5f092a6c65 support an api with SetIgnoreMouseEvents, and worked fine with osx 2015-12-06 10:14:54 +08:00
Artur de Oliveira Tsuda
e6adf36d98 📝 [ci skip] translation build instructions 2015-12-05 10:39:03 -02:00
howard.zuo
a1154ad816 add ZH-CN translation for using-selenium-and-webdriver 2015-12-05 14:49:01 +08:00
Clark Feusier
c6167bdf0a Fix broken link in Docs > Synopsis 2015-12-04 21:51:33 -08:00
Artur de Oliveira Tsuda
dcfbd294bb 📝 [ci skip] browser window translation 2015-12-04 21:55:03 -02:00
Luke Page
220d05a398 Docs: Fix link to webcontents send channel 2015-12-04 21:07:33 +00:00
Cheng Zhao
e1d7ef7e24 Bump v0.35.4 2015-12-04 19:23:48 +08:00
Cheng Zhao
d14f15c33a Update native_mate: isDestroy => isDestroyed 2015-12-04 19:23:30 +08:00
Cheng Zhao
af2eee603c Merge pull request #3690 from leftstick/master
add translation of using-native-node-modules for ZH-CN
2015-12-04 18:46:56 +08:00
Cheng Zhao
427a2642a9 Merge pull request #3688 from preco21/master
Update as upstream
2015-12-04 18:46:33 +08:00
Cheng Zhao
c8e2be7b28 Bump v0.35.3 2015-12-04 16:43:23 +08:00
Howard.Zuo
c4f2d946e1 add translation of using-native-node-modules for ZH-CN 2015-12-04 15:18:55 +08:00
Cheng Zhao
ec541b2a18 Merge pull request #3686 from atom/fix-flaky-tests
Fix a few flaky tests
2015-12-04 13:53:07 +08:00
Cheng Zhao
7c1ea0b0f4 spec: Suppress flaky tests on Travis 2015-12-04 13:17:36 +08:00
Plusb Preco
0bcc23d8fe Update as upstream
[ci skip]
2015-12-04 13:52:03 +09:00
Plusb Preco
01f9107f00 Update as upstream
[ci skip]
2015-12-04 13:48:38 +09:00
Plusb Preco
4a2bfa0b06 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-12-04 13:38:21 +09:00
Cheng Zhao
1cb35cd172 Merge pull request #3664 from clevertonh/master
Add electron-br
2015-12-04 12:10:00 +08:00
Cheng Zhao
13c737823b spec: Suppress execFileSync test
It somehow makes the test flaky after refresh.
2015-12-04 11:52:34 +08:00
Cheng Zhao
5e5ae81c53 'key of' is better than Object.keys 2015-12-04 11:40:35 +08:00
Cheng Zhao
973ae06f21 Destroy the native window in next tick
It fixes a possible crash when native code is iterating all windows
while the JavaScript code decides to destroy a window.
2015-12-04 11:35:04 +08:00
Cheng Zhao
2c6d232254 Don't add too much listeners in BrowserWindowProxy 2015-12-04 11:12:36 +08:00
Cheng Zhao
504d3d3088 Merge pull request #3670 from mixmaxhq/jeff/fix_window_open
Fix `window.open` not respecting the features string
2015-12-04 10:55:51 +08:00
Cheng Zhao
f6dbc3001e Merge pull request #3683 from zeke/coc
add Contributor Covenant 1.3 code of conduct
2015-12-04 10:52:44 +08:00
Cheng Zhao
afa8f8b166 Merge pull request #3672 from CharlieHess/web-contents-download-url
DownloadURL from webContents
2015-12-04 10:52:11 +08:00
Plusb Preco
06a9ad3984 Add contributing guide
[ci skip]
2015-12-04 10:06:37 +09:00
Zeke Sikelianos
53350d26ae add placeholder CoC content to Korean README 2015-12-03 18:08:10 -06:00
Zeke Sikelianos
7951226f5c link to CoC from README and CONTRIBUTING 2015-12-03 18:06:58 -06:00
Zeke Sikelianos
149859c97b add CODE_OF_CONDUCT.md 2015-12-03 18:06:18 -06:00
Plusb Preco
d583cf7d8c Update as upstream
[ci skip]
2015-12-04 07:54:09 +09:00
Jessica Lord
37bcdfdd45 Merge pull request #3680 from atom/newline-before-code-block
Add newline before example code block
2015-12-03 12:16:32 -08:00
Charlie Hess
c412b9b892 Revert accidental change to this submodule. 2015-12-03 12:14:08 -08:00
Charlie Hess
f2797d2eab Merge commit '58567834c7cb9c290ef48c9e8f54ae37246ef665' into web-contents-download-url
Conflicts:
	atom/browser/api/atom_api_web_contents.cc
2015-12-03 10:31:51 -08:00
Kevin Sawicki
dec714bda4 Add newline before example code block 2015-12-03 08:40:47 -08:00
Cheng Zhao
58567834c7 Merge pull request #3663 from preco21/master
Update as upstream
2015-12-03 21:44:54 +08:00
Cheng Zhao
f3645c6661 Merge pull request #3676 from atom/callback-race-condition
Make sure V8 handles are deleted on UI thread
2015-12-03 18:06:34 +08:00
Cheng Zhao
48a11bd237 Weak map only needs to be deleted for once 2015-12-03 17:10:14 +08:00
Cheng Zhao
eb8426269f Remove itself from the cleanup list when it is destroyed 2015-12-03 17:04:40 +08:00
Cheng Zhao
1e7c8c9fda It is fine to leak a V8 handle on exit 2015-12-03 16:33:57 +08:00
Cheng Zhao
117b7462de window.id is no longer available when window is closed 2015-12-03 16:17:10 +08:00
Cheng Zhao
a15f9fab5b Use BuildPrototype to build prototype
This saves the step of manually keeping the global template object,
which is easy to forget then leak.
2015-12-03 16:04:46 +08:00
Cheng Zhao
6795bd1d96 Do not manually manage native resources
We should rely on the destructor to cleanup everything, instead of
putting them in the Destroy method.
2015-12-03 15:38:43 +08:00
Cheng Zhao
e5358d405a Make sure V8 Function passed to native code are destroyed on UI thread 2015-12-03 11:24:33 +08:00
Charlie Hess
b1391270ed This spec is a little unreliable; up the timeout. 2015-12-02 18:40:57 -08:00
Charlie Hess
b369d4991e Write a spec for downloading from the webview tag. 2015-12-02 18:40:39 -08:00
Charlie Hess
0d30a8d70c Make downloadURL available on the webview tag. 2015-12-02 18:40:02 -08:00
Charlie Hess
5839df66e4 Document the new method. 2015-12-02 13:49:42 -08:00
Charlie Hess
c311c6cf1b Add a DownloadURL method on WebContents. 2015-12-02 13:49:30 -08:00
Jeff Wear
225fe72d03 Ensure that window.open does not override the child options
Fixes https://github.com/atom/electron/issues/3652.
2015-12-02 12:00:51 -08:00
Jeff Wear
32e949efed Read window size properly in window.open test
`BrowserWindow#getSize` returns `[width, height]`, not `{width, height}`.
2015-12-02 11:50:44 -08:00
Cléverton Heming
0553b9c672 Add electron-br 2015-12-02 15:27:23 +00:00
Plusb Preco
75c28ff993 Update as upstream 2015-12-03 00:21:34 +09:00
Plusb Preco
cc841242b5 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-12-03 00:21:28 +09:00
Cheng Zhao
4252c17db0 Merge pull request #3660 from atom/tray-custom-menu
Add `menu` parameter for Tray.popUpContextMenu
2015-12-02 20:55:02 +08:00
Cheng Zhao
47b74ff820 Merge pull request #3659 from lukeapage/patch-1
Update debugging-main-process.md
2015-12-02 19:59:43 +08:00
Cheng Zhao
615ce45849 win: Implement menu parameter 2015-12-02 19:58:10 +08:00
Cheng Zhao
3cdd0f35c7 mac: Implement menu parameter 2015-12-02 19:05:22 +08:00
Cheng Zhao
2fba05b5e7 Add menu parameter for Tray.popUpContextMenu 2015-12-02 18:43:11 +08:00
Luke Page
9567599698 Update debugging-main-process.md 2015-12-02 10:23:21 +00:00
Cheng Zhao
202475f5a9 Deprecating a property with method of same name causes trouble
Close #3511.
2015-12-02 17:29:58 +08:00
Cheng Zhao
c493bec089 Make sure temp file will be cleaned up when base::Move fails 2015-12-02 11:36:29 +08:00
Cheng Zhao
c3645e3f95 Don't call Move if there is no need to move 2015-12-02 11:07:48 +08:00
Cheng Zhao
c691094aa1 spec: Fix failing tests on win32 2015-12-02 11:00:28 +08:00
Cheng Zhao
0d50e08ed1 Merge pull request #3648 from jviotti/jviotti/fix/exec-file-asar-bat
🏁 Preserve file extension when extracting from asar
2015-12-02 10:45:24 +08:00
Cheng Zhao
17f4bf2ce8 Merge pull request #3650 from arturts/patch-5
📝 [ci skip] Update to match english docs, fix typos
2015-12-02 10:21:10 +08:00
Cheng Zhao
8122d63cd2 Merge pull request #3649 from arturts/pt-BR-auto-updater
📝 [ci skip] Add translation to auto-updater, change links
2015-12-02 10:20:58 +08:00
Artur de Oliveira Tsuda
5cae8397cc 📝 [ci skip] fix more typos 2015-12-01 21:57:07 -02:00
Artur de Oliveira Tsuda
9a93ecc3cf 📝 [ci skip] fix typos 2015-12-01 21:46:13 -02:00
Artur de Oliveira Tsuda
d76e21853b Change header 2015-12-01 21:38:25 -02:00
Artur de Oliveira Tsuda
229dc02a41 📝 [ci skip] Update to match english docs, fix typos 2015-12-01 21:34:35 -02:00
Artur de Oliveira Tsuda
1b1c4bec4e 📝 [ci skip] Add translation to auto-updater, change links 2015-12-01 21:09:20 -02:00
Juan Cruz Viotti
a99c193cf2 🏁 Preserve file extension when extracting from asar
Currently, when calling `copyFileOut`, the original extension from the
file is lost, and a generic `*.tmp` is added instead.

This becomes problematic in the scenario where we use
`child_process.execFile` on a Windows Batch script that lives inside the
`asar` package.

Windows relies on the extension being present in order to interpret the
script accordingly, which results in the following bug because the
operating system doesn't know what do to with this `*.tmp` file:

```
Error: spawn UNKNOWN
```

Steps to reproduce:

1. Create a dummy batch script (test.bat):

```
@echo off
echo "Hello world"
```

2. Create an electron app that attemps to call this script with
`child_process.execFile`:

```js
var child_process = require('child_process');
var path = require('path');

child_process.execFile(path.join(__dirname, 'test.bat'), function(error, stdout) {
    if (error) throw error;
    console.log(stdout);
});
```

3. Package this small application as an asar archive:

```sh
> asar pack mytestapp app.asar
```

4. Execute the application:

```sh
> electron.exe app.asar
```
2015-12-01 14:55:58 -04:00
Cheng Zhao
85b7aa6933 Merge pull request #3645 from atom/fix-page-title-set
Delay the page-title-updated event to next tick
2015-12-01 19:12:34 +08:00
Cheng Zhao
e5974e44ed Deprecate the page-title-set event
We have two names for the same event, page-title-updated wins.
2015-12-01 18:50:56 +08:00
Cheng Zhao
c95117fb22 Delay the page-title-set event to next tick 2015-12-01 18:34:58 +08:00
Cheng Zhao
83ee78451a Emit event when title becomes empty 2015-12-01 17:53:13 +08:00
Cheng Zhao
8d20dda6d7 No need to override TitleWasSet in NativeWindow 2015-12-01 17:51:09 +08:00
Cheng Zhao
782af41c7c Merge pull request #3643 from atom/fix-did-fail-load-crash
Delay the did-fail-provisional-load event to next tick
2015-12-01 17:19:52 +08:00
Cheng Zhao
1b3eb1cc5d Delay the did-fail-provisional-load event to next tick
Chrome is doing some stuff after the DidFailProvisionalLoad event, if we
call LoadURL at this time crash would happen.
2015-12-01 17:00:42 +08:00
Cheng Zhao
0f17a0163d Put common constants in atom_constants 2015-12-01 16:21:15 +08:00
Cheng Zhao
a2f1390b0d Merge pull request #3641 from atom/process-no-asar
Add process.noAsar to toggle asar support
2015-12-01 14:40:37 +08:00
Cheng Zhao
165b464a15 docs: process.noAsar 2015-12-01 13:43:52 +08:00
Cheng Zhao
900dc78a47 spec: process.noAsar 2015-12-01 13:09:50 +08:00
Cheng Zhao
e3ec1fe8ab Add process.noAsar to turn off asar support 2015-12-01 13:09:37 +08:00
Cheng Zhao
757b644909 Merge pull request #3567 from atom/cors
Enable all origins via CORS header for custom schemes
2015-12-01 12:43:38 +08:00
Paul Betts
7fd1db192b Lint harder 2015-11-30 18:12:00 -08:00
Cheng Zhao
bd5d52f825 Merge pull request #3638 from arturts/pt-br-translation
📝 [ci skip] Add translation to app.md
2015-12-01 10:06:55 +08:00
Cheng Zhao
dd0b2bc8d5 Merge pull request #3636 from arturts/patch-4
📝 [ci skip] Update to match english docs.
2015-12-01 10:06:38 +08:00
Cheng Zhao
290c0c37f4 Merge pull request #3635 from arturts/patch-3
📝 [ci skip] Fix typos
2015-12-01 10:06:13 +08:00
Artur de Oliveira Tsuda
7da78a9fa8 📝 [ci skip] Add translation to app.md 2015-11-30 21:56:19 -02:00
Artur de Oliveira Tsuda
97f535251b 📝 [ci skip] Update to match english docs. 2015-11-30 19:43:19 -02:00
Artur de Oliveira Tsuda
c83976dfdc 📝 [ci skip] Fix typos 2015-11-30 19:14:33 -02:00
Paul Betts
549da7fd91 Linting 2015-11-30 11:10:18 -08:00
Paul Betts
15b8d7680e Add tests to verify behavior 2015-11-30 11:08:45 -08:00
Paul Betts
7cce3987eb Add CORS header to file jobs 2015-11-30 11:08:45 -08:00
Paul Betts
65cb1488b0 Fix CORS header code to be cleaner 2015-11-30 11:08:44 -08:00
Paul Betts
7622bb40a9 Enable all origins via CORS header for custom schemes
This PR disables CORS for custom schemes, which allows you to serve Font
resources from custom schemes after using registerCustomSchemeAsSecure
2015-11-30 11:08:43 -08:00
Cheng Zhao
f931e165d5 Merge pull request #3634 from atom/fix-crash-on-exit
Delete BridgeTaskRunner when main message loop is ready
2015-11-30 22:40:48 +08:00
Cheng Zhao
44e24ebf7a Delete BridgeTaskRunner when main message loop is ready 2015-11-30 22:29:01 +08:00
Cheng Zhao
a7dd6596f1 Merge pull request #3628 from lovemyliwu/patch-1
🎨 add miss charactor
2015-11-30 18:26:04 +08:00
Smite Chow
4d5028fb4c 🎨 add miss charactor 2015-11-30 17:16:35 +08:00
Plusb Preco
9fa6527460 Update as upstream 2015-11-30 17:24:43 +09:00
Cheng Zhao
dbdfac1133 Merge pull request #3626 from arturts/patch-2
Update 'Estilo de código' link.
2015-11-30 16:01:05 +08:00
Cheng Zhao
b9c6f719f3 Merge pull request #3625 from arturts/patch-1
Remove 'Google Translator'-like translation
2015-11-30 16:01:01 +08:00
Cheng Zhao
f30a7f5636 Merge pull request #3622 from atom/wl-docs-skip-ci
Suggest [ci skip] in documentation-only commits
2015-11-30 15:33:49 +08:00
Cheng Zhao
bf4b94561e docs: Mention submitting to MAC costs money
Close #3617.
2015-11-30 15:21:39 +08:00
Cheng Zhao
91395102cf Merge pull request #3618 from preco21/master
Update as upstream
2015-11-30 15:01:08 +08:00
Cheng Zhao
23560ff570 Merge pull request #3616 from leftstick/master
add packaging translation for ZH-CN
2015-11-30 15:00:33 +08:00
Cheng Zhao
8ba02fb899 Merge pull request #3612 from gunmetal313/translate_to_ru
init russian lang docs
2015-11-30 14:57:16 +08:00
Artur de Oliveira Tsuda
45e9ed5f0c Update 'Estilo de código' link.
'Estilo de código' in 'Desenvolvimento' section now points to the translated coding-style.md
2015-11-29 23:25:16 -02:00
Artur de Oliveira Tsuda
7d827c2f3e Remove 'Google Translator'-like translation 2015-11-29 22:56:34 -02:00
Paul Betts
b67e70334a Merge pull request #3621 from lukewestby/patch-1
fix misspelling in "rotation" string
2015-11-29 15:33:55 -08:00
Wliu
9c0afcd901 Wrap [ci skip] in backticks 2015-11-29 14:57:48 -05:00
Wliu
c7420e17ab Suggest [ci skip] in documentation-only commits 2015-11-29 14:04:57 -05:00
Luke Westby
df9ecefe01 fix typo in "rotation" string 2015-11-29 12:22:53 -06:00
Plusb Preco
22dbf5e9fc Small fixes 2015-11-29 23:06:01 +09:00
Plusb Preco
dab7058aa2 Update as upstream 2015-11-29 23:03:31 +09:00
Plusb Preco
9fbe2e6c0f Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-29 18:46:01 +09:00
howard.zuo
5bbc46930f add packaging translation for ZH-CN 2015-11-29 12:14:49 +08:00
Ivan Kulikov
eeb1143deb init russian lang docs 2015-11-27 22:32:45 +03:00
Cheng Zhao
62add3abcc Bump v0.35.2 2015-11-27 22:23:19 +08:00
Cheng Zhao
b529efcd8e Merge pull request #3608 from atom/cp-execfile
Add docs and tests for child_process.execFile
2015-11-27 22:21:33 +08:00
Cheng Zhao
cfdcfcbd80 Add executable permission in CopyFileOut 2015-11-27 22:06:37 +08:00
Cheng Zhao
6ef6a83042 spec: Test execFile and execFileSync 2015-11-27 21:38:43 +08:00
Cheng Zhao
a1fdc701ee docs: Add notes on spawn and exec 2015-11-27 21:29:31 +08:00
Cheng Zhao
6fb944c842 Merge pull request #3604 from niedzielski/patch-2
Update docs for webContents.addWorkSpace
2015-11-27 18:39:11 +08:00
Cheng Zhao
8472528909 Merge pull request #3603 from niedzielski/patch-1
Update docs for globalShortcut.register
2015-11-27 18:38:39 +08:00
Cheng Zhao
628ee93b0b Merge pull request #3606 from preco21/master
Update as upstream
2015-11-27 18:38:13 +08:00
Plusb Preco
a96c408df5 Update as upstream 2015-11-27 17:28:09 +09:00
Plusb Preco
8a7aa0171b Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-27 17:27:58 +09:00
Stephen Niedzielski
62c65280a1 Update docs for webContents.addWorkSpace
Specify that webContents.addWorkSpace cannot be called before DevTools
creation and include example.

Fix: #3536
2015-11-26 23:16:00 -07:00
Stephen Niedzielski
0b245b96e4 Update docs for globalShortcut.register
Document return value for globalShortcut.register and common failure scenario.

Fix: #3600
2015-11-26 22:38:47 -07:00
Cheng Zhao
42454b07d0 Merge pull request #3595 from jviotti/jviotti/fix/3512/execFile-override-exec-permissions
🐛 Fix missing execution permission bit in execFile override
2015-11-27 11:39:45 +08:00
Juan Cruz Viotti
585ff9062c 🐛 Fix missing execution permission bit in execFile override
Consider an electron application that uses `execFile` to run a script
that lives within the application code base:

```coffee
child_process = require 'child_process'
child_process.execFile __dirname + '/script.sh', (error) ->
  throw error if error?
```

An application like this will fail when being packaged in an `asar` with
an following error:

```
Error: spawn EACCES
```

Electron overrides certain `fs` functions to make them work within an
`asar` package. In the case of `execFile`, the file to be executed is
extracted from the `asar` package into a temporary file and ran from
there.

The problem is that during the extraction, the original permissions of
the file are lost.

We workaround this by:

1. Extending `asar.stat` to return whether a file is executable or not,
  which is information that's already saved in the `asar` header.

2. Setting execution permissions on the extracted file if the above
  property holds true.

Fixes: https://github.com/atom/electron/issues/3512
2015-11-26 23:30:23 -04:00
Plusb Preco
43b73a0ced Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-27 12:19:47 +09:00
Cheng Zhao
932cd92bf6 Fix wrong deprecation wrappers of BrowserWindow 2015-11-27 10:30:51 +08:00
Cheng Zhao
ed866900e7 Merge pull request #3594 from atom/public-env
Add ELECTRON_RUN_AS_NODE environment variable
2015-11-26 21:51:35 +08:00
Cheng Zhao
59402eb23f Add ELECTRON_NO_ATTACH_CONSOLE env var
Close #1556.
2015-11-26 21:11:28 +08:00
Cheng Zhao
682b48095a docs: Add example 2015-11-26 20:44:07 +08:00
Cheng Zhao
6534a0e616 docs: Add Environment Variables 2015-11-26 20:37:48 +08:00
Cheng Zhao
b1e6d4f64c Check ELECTRON_RUN_AS_NODE env var 2015-11-26 20:37:21 +08:00
Cheng Zhao
5ee9e61445 Update brightray for #1369 2015-11-26 19:10:43 +08:00
Cheng Zhao
a551b8eaaa Merge pull request #3590 from vQuagliaro/doc-windows-open-file
[doc] open-file and open-url events are only available on OS X
2015-11-26 18:34:12 +08:00
Vincent Quagliaro
fe4638ef33 📝 open-file and open-url events are only available on OS X 2015-11-26 09:09:45 +01:00
Cheng Zhao
086734cb57 Merge pull request #3588 from atom/fix-fullscreen-crash
Clears the delegate when window is going to be closed
2015-11-26 14:10:17 +08:00
Cheng Zhao
b0d4aa211d Fix compatibility with activate-with-no-open-windows event 2015-11-26 13:57:48 +08:00
Cheng Zhao
6c1878d15b mac: Clears the delegate when window is going to be closed
Since EL Capitan it is possible that the methods of delegate would get
called after the window has been closed.

Refs atom/atom#9584.
2015-11-26 13:56:56 +08:00
Cheng Zhao
8ce19d8059 Merge pull request #3586 from atom/ipc-fasterer
Ensure calling webview.send will not block the renderer
2015-11-26 13:15:08 +08:00
Cheng Zhao
9c62be8fc9 Improve the deprecation notice for ipc module
Close #3577.
2015-11-26 11:06:56 +08:00
Cheng Zhao
873bfd0538 Merge pull request #3574 from preco21/master
Update as upstream
2015-11-26 11:02:01 +08:00
Cheng Zhao
ec88567683 Merge pull request #3573 from rprichard/fix_3565
Fix https://github.com/atom/electron/issues/3565 by adding a typeof
2015-11-26 11:00:29 +08:00
Paul Betts
789380dfad Ensure calling webview.send will not block the renderer
When the browser process is busy, calling webview.send (a method that appears
on its face to be non-blocking) will actually block, because most webview methods
are remoted to a guest view instance in the browser. Instead, define a few methods
which will instead send its call over an async IPC message.
2015-11-25 15:54:30 -08:00
Plusb Preco
34aecc9327 Update as upstream 2015-11-25 08:55:04 +09:00
Ryan Prichard
0f5a3baff4 Fix https://github.com/atom/electron/issues/3565 by adding a typeof 2015-11-24 16:49:52 -06:00
Cheng Zhao
bf5e9e4f4d Merge pull request #3568 from laiso/fix_docs
docs: s/loadUrl/loadURL/g in docs-translations/
2015-11-24 22:03:46 +08:00
laiso
4acbd3e03f s/loadUrl/loadURL/g in docs-translations/ 2015-11-24 21:02:14 +09:00
Cheng Zhao
b9fd095b04 docs: Mark code blocks 2015-11-24 18:40:50 +08:00
Cheng Zhao
24e892dd17 Update brightray for #3550 2015-11-24 18:39:16 +08:00
Cheng Zhao
bab603d33a Merge pull request #3550 from etiktin/support_proxy_bypass_list
Add support for --proxy-bypass-list command line argument
2015-11-24 18:38:33 +08:00
Cheng Zhao
fe88cb01fc Merge pull request #3531 from deepak1556/fetch_job_nocontent_patch
protocol: handle http responses with no content
2015-11-24 15:45:07 +08:00
Cheng Zhao
a4a14a5f0e Update brightray for #3458 2015-11-24 15:14:48 +08:00
Cheng Zhao
e634dc567e Merge pull request #3561 from preco21/master
Update as upstream
2015-11-24 13:40:16 +08:00
Plusb Preco
6e6cee3ac6 Small fixes 2015-11-24 10:23:52 +09:00
Plusb Preco
6636effb1d Update as upstream
* Update as upstream
* Add caution of translation version
2015-11-24 10:21:30 +09:00
Plusb Preco
d353a3a204 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-23 20:34:00 +09:00
Cheng Zhao
c2197d8a05 Merge pull request #3554 from meowlab/docs-fix
docs: Fix deprecated usage tips
2015-11-23 18:19:37 +08:00
Cheng Zhao
9e74b10825 Merge pull request #3548 from dongjoon-hyun/fix_typos_in_koKR_api_ipc_main
Fix typos in Korean api/ipc-main.md
2015-11-23 17:45:48 +08:00
Cheng Zhao
422e40d08c Merge pull request #3544 from dongjoon-hyun/fix_typo
Fix a typo in Korean quick-start tutotial
2015-11-23 17:45:44 +08:00
Cheng Zhao
e98d4c4a2e Merge pull request #3549 from bengotow/fix-hide-others
Remove trailing colons from default menu roles
2015-11-23 17:44:06 +08:00
Plusb Preco
54f16a5568 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-23 18:23:15 +09:00
Cheng Zhao
360a747acf Merge pull request #3542 from etiktin/fix_menu_item_using_deprcated_api
Fix menu-item using deprecated API
2015-11-23 17:11:44 +08:00
Cheng Zhao
ba8b448c36 docs: Add indent for items in list
Some markdown renderers require it to be able to render the list
correctly.
2015-11-23 16:59:15 +08:00
Cheng Zhao
634fef2508 Merge pull request #3537 from etiktin/make_BrowserWindow_options_optional
Make BrowserWindow options argument optional
2015-11-23 16:56:30 +08:00
Cheng Zhao
812e105d4f Merge pull request #3535 from etiktin/use_the_correct_docs_version
Use the correct docs version
2015-11-23 16:45:26 +08:00
Cheng Zhao
1a1d5aba94 Merge pull request #3533 from preco21/master
Update as upstream
2015-11-23 16:41:02 +08:00
Sunny
6d46c3a75e docs: Fix deprecated usage tips 2015-11-23 13:40:23 +08:00
Eran Tiktin
baab0486f0 Add documentation for --proxy-bypass-list
Depends on atom/brightray#179
2015-11-22 23:44:20 +02:00
Robo
167f11e797 protocol: handle http responses with no content 2015-11-23 01:07:14 +05:30
Ben Gotow
fbdef9e112 Remove trailing colons from default menu roles
`hideothers` and `unhide` had trailing colons which prevented them from being enabled / working in the default app. #3543
2015-11-22 09:08:35 -08:00
Dongjoon Hyun
df570269e3 Fix typos in Korean api/ipc-main.md 2015-11-22 23:16:56 +09:00
Dongjoon Hyun
10a7ecee46 Add space, too 2015-11-22 19:55:36 +09:00
Dongjoon Hyun
b406774055 Fix a typo in Korean quick-start tutotial 2015-11-22 19:50:52 +09:00
Eran Tiktin
6db6842c14 Fix menu-item using deprecated API
Some of the roles in menu-item use methods on BrowserWindow instead of
WebContents which outputs a deprecation warning.
I changed it to use the correct methods.
2015-11-22 01:13:57 +02:00
Eran Tiktin
651254424d Expand the descriptions of options with defaults
Resolves #3367
2015-11-21 21:50:23 +02:00
Eran Tiktin
4027d04662 Add test 2015-11-21 06:58:17 +02:00
Eran Tiktin
ab693ca571 Update docs 2015-11-21 06:42:40 +02:00
Eran Tiktin
18de28c3ff Make BrowserWindow options argument optional
Resolves #3473
2015-11-21 06:22:19 +02:00
Plusb Preco
1cf3216f50 Add missed translation 2015-11-21 13:15:37 +09:00
Eran Tiktin
df8cc85d2c Rephrased the note 2015-11-21 04:22:16 +02:00
Eran Tiktin
5730d588d0 Add a note to readme about docs versioning
Added a note to readme about using the correct docs version. Hopefully
this will reduce users confusion.
2015-11-21 03:31:52 +02:00
Eran Tiktin
4d4bb0a73e Added ctags cache files to .gitignore 2015-11-21 02:32:53 +02:00
Eran Tiktin
9341b9d640 Make links to docs, point to the correct version
- Links to docs in the default app, pointed to the docs in the master
branch. I changed them to point to the docs that match Electron's
version.
- Added Electron's version to the header of the default app, so it will
be easier to figure out what version is currently running.
2015-11-21 02:26:59 +02:00
Plusb Preco
ecdce2b214 Update as upstream 2015-11-21 07:51:52 +09:00
Eran Tiktin
f374508a61 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-20 19:25:23 +02:00
Eran Tiktin
50083017bc Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-20 18:44:51 +02:00
Cheng Zhao
29052b0498 Bump v0.35.1 2015-11-20 13:36:59 +08:00
Cheng Zhao
153c751fd7 Update brightray for #3493 2015-11-20 13:33:42 +08:00
Cheng Zhao
8e2faba8f7 Small style fix 2015-11-20 13:06:42 +08:00
Cheng Zhao
c1d6d68783 Merge pull request #3509 from bengotow/macosx-desktop-window
Support the "desktop" window type on Mac OS X
2015-11-20 13:02:05 +08:00
Cheng Zhao
866cff8b9c Merge pull request #3519 from preco21/master
Update as upstream, some cleanups
2015-11-20 10:52:53 +08:00
Cheng Zhao
784d2633a9 Make child_process.execFileSync support asar 2015-11-20 10:33:57 +08:00
Cheng Zhao
eec93665b7 Merge pull request #3514 from atom/session
Add session module
2015-11-20 10:23:38 +08:00
Plusb Preco
79397abbeb Update as upstream 2015-11-20 04:58:51 +09:00
Plusb Preco
80dfa4bf09 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-20 04:46:07 +09:00
Plusb Preco
962134c612 Cleanup docs
* Adjust line wrap to 80
* Fix typos
* Improve grammar
2015-11-20 04:46:05 +09:00
Ben Gotow
65c823407d Address feedback 2015-11-19 10:14:14 -08:00
Plusb Preco
eca98b85fc Cleanup docs, fix typos 2015-11-20 02:25:44 +09:00
Cheng Zhao
026a1f9a4f Merge pull request #3515 from sotayamashita/japanese-localization
Format structure
2015-11-19 22:23:14 +08:00
Sota Yamashita
fd3b8ad623 Rename: READE.md -> README.md 2015-11-19 22:54:40 +09:00
Sota Yamashita
bee1af3264 Create README.md 2015-11-19 22:54:01 +09:00
Sota Yamashita
f2472274b7 Rename quick-start.md -> tutorial/quick-start.md 2015-11-19 22:52:37 +09:00
Cheng Zhao
1b464c82e1 docs: Put webContents.session under Properties 2015-11-19 21:48:45 +08:00
Cheng Zhao
611f87d17f spec: Use session.defaultSession in tests 2015-11-19 21:42:22 +08:00
Cheng Zhao
08c13cf446 Deprecate app.resolveProxy
There is now a public API to get default session, this helper is no
longer necessary.
2015-11-19 21:32:46 +08:00
Cheng Zhao
44c562ebd9 docs: New session methods 2015-11-19 21:31:39 +08:00
Cheng Zhao
dd8ef33e42 docs: webContents.savePage is placed at wrong place 2015-11-19 21:10:50 +08:00
Cheng Zhao
1392873cbc Add session.defaultSession and remove app.defaultSession
The latter has never been a public API, no need to keep it.
2015-11-19 21:03:42 +08:00
Cheng Zhao
47d7d49d19 Add session module 2015-11-19 20:47:11 +08:00
Cheng Zhao
b9ddb0c268 Merge pull request #3510 from atom/is-destroyed
Add "isDestroyed" method for objects with "destroy" method
2015-11-19 17:28:59 +08:00
Cheng Zhao
9a20b33d97 Add isDestroyed method for classes with destroy method 2015-11-19 17:08:16 +08:00
Ben Gotow
d427ae1030 Support the "desktop" window type on Mac OS X
Adds the desktop window type referenced in https://github.com/atom/electron/issues/2899 for compatiblity with the linux version. Note that on Mac OS X, the desktop window cannot receive input events (seems to be a limitation of being behind the desktop).

In this diff I also removed the `standardWindow` option from the docs, in favor of an additional `textured` value for window `type` on Mac OS X. The old `standardWindow` option continues to work, but seemed more confusing. If this seems like a bad idea, I can revert that change.
2015-11-19 00:39:45 -08:00
Cheng Zhao
ed1f9989b0 Merge pull request #3507 from atom/upload-dsym
Upload the dSYM symbols
2015-11-19 16:38:58 +08:00
Cheng Zhao
2c06afad6a Upload the dSYM symbols 2015-11-19 15:10:33 +08:00
Cheng Zhao
52e34ca0f9 Merge pull request #3506 from atom/linux-dpi
Update libchromiumcontent
2015-11-19 14:45:30 +08:00
Cheng Zhao
c63121c2f6 Update libchromiumcontent
Backport https://codereview.chromium.org/1324513002.
2015-11-19 13:50:54 +08:00
Cheng Zhao
69388e185c Merge pull request #3504 from KevinRamsunder/patch-1
mac-app-store-submission-guide.md: typo correction
2015-11-19 11:00:43 +08:00
Cheng Zhao
2affc44000 Merge pull request #3503 from etiktin/patch-2
Update ipc-renderer.md
2015-11-19 11:00:13 +08:00
Cheng Zhao
afbceab2ab Merge pull request #3496 from preco21/master
Update as upstream and some fixes
2015-11-19 10:57:21 +08:00
Cheng Zhao
e9b8e66f2b Merge pull request #3497 from etiktin/patch-1
Update browser-window.md
2015-11-19 10:54:32 +08:00
Cheng Zhao
8900d67c67 Merge pull request #3492 from vitorgalvao/patch-2
web-view-tag.md: small typo correction ('the' position swap)
2015-11-19 10:44:15 +08:00
Kevin Ramsunder
ba5f8aa096 mac-app-store-submission-guide.md: typo correction 2015-11-18 20:04:16 -05:00
Plusb Preco
0232b77ce3 Cleanup docs, Improve grammar 2015-11-19 09:32:44 +09:00
Eran Tiktin
b7ae9d3337 Update ipc-renderer.md
Removed duplication.
2015-11-19 02:11:32 +02:00
Plusb Preco
e4803e6f97 Translate docs 2015-11-19 05:12:38 +09:00
Eran Tiktin
f581730516 Update browser-window.md
Changed the description of the preload key to make it clear you need to provide an absolute file path and not a file url.
Also mentioned that it's possible to reintroduce Node globals when node integration is off and referenced the example from process.md (related to https://github.com/atom/electron/issues/254#issuecomment-157769756).
2015-11-18 21:06:06 +02:00
Plusb Preco
ef64a211a2 Standardize platform labels 2015-11-19 04:01:50 +09:00
Plusb Preco
82e2da1d9a Translate docs 2015-11-19 03:53:10 +09:00
Vítor Galvão
e2cd0578f3 web-view-tag.md: small typo correction ('the' position swap) 2015-11-18 18:13:48 +00:00
Plusb Preco
70c7abbbfe Small changes 2015-11-19 02:51:27 +09:00
Plusb Preco
f0d2bc87e8 Add translation, improve grammar 2015-11-19 02:50:04 +09:00
Plusb Preco
cc5a4f1dfe Update as upstream 2015-11-18 23:42:03 +09:00
Plusb Preco
9db4af4cf3 Fix platform label to uppercase (ko) 2015-11-18 23:36:20 +09:00
Plusb Preco
0c2d769b8a Fix platform label to uppercase 2015-11-18 23:35:36 +09:00
Plusb Preco
6058c7e14d Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-18 23:33:38 +09:00
Plusb Preco
250575719d Translate docs 2015-11-18 23:32:47 +09:00
Plusb Preco
6892f0d2d4 Add missed translation 2015-11-18 22:14:24 +09:00
Cheng Zhao
87546bd4f8 Merge pull request #3479 from bengotow/tray-resizing
Fix sizing of Mac OS X tray icon after image change
2015-11-18 18:49:15 +08:00
Cheng Zhao
1ee69540b0 Merge pull request #3484 from bengotow/remote-errors
Improve exception messages from remote calls
2015-11-18 18:21:02 +08:00
Cheng Zhao
151f8e7f8a Merge pull request #3485 from leftstick/master
[Doc update]: Use loadURL since loadUrl is deprecated
2015-11-18 18:12:09 +08:00
Cheng Zhao
a3460e8e19 Merge pull request #3483 from preco21/patch-4
'app-command' event is only available in Windows
2015-11-18 18:11:37 +08:00
Cheng Zhao
bcdd0952f8 docs: Fix typo 2015-11-18 17:56:50 +08:00
Cheng Zhao
9e67dc385b Merge pull request #3476 from preco21/master
Update as upstream, add new translation and some fixes
2015-11-18 13:18:44 +08:00
Cheng Zhao
45e3d4ea6b Merge pull request #3487 from atom/certificate-api
Rework of the certificate API
2015-11-18 12:06:52 +08:00
Plusb Preco
25e5c38556 Small changes 2015-11-18 12:45:33 +09:00
Cheng Zhao
47d7f2c050 Fix cpplint warning 2015-11-18 11:45:15 +08:00
Cheng Zhao
9ca022c98a docs: Update the certificate APIs 2015-11-18 11:35:26 +08:00
Cheng Zhao
c5bfac1969 Add session.setCertificateVerifyProc 2015-11-18 11:17:08 +08:00
Plusb Preco
3af4a40860 Translation docs 2015-11-18 11:43:16 +09:00
Cheng Zhao
e432abfb42 Add certificate-error event 2015-11-18 10:39:25 +08:00
Plusb Preco
74e8c8d6a5 Translate docs, small changes 2015-11-18 11:28:03 +09:00
Cheng Zhao
341341bf28 Rename select-certificate to select-client-certificate 2015-11-18 10:10:21 +08:00
Cheng Zhao
9a0dc3bfd7 Add Delegate for AtomBrowserClient 2015-11-18 10:07:03 +08:00
Howard.Zuo
c2eddb20f7 use loadURL since loadUrl is deprecated 2015-11-18 09:37:45 +08:00
Ben Gotow
1022179a1f Improve exception messages from remote calls
Spent a while tracking down `Error processing argument -1`, caused by a missing param (`app.exit()` now takes an exit code.) Improve the rpc-server so that it prints the function name when possible, so it's much easier to identify which remote call is causing the error.
2015-11-17 17:36:37 -08:00
Plusb Preco
d129aa9085 Update as upstream 2015-11-18 09:50:14 +09:00
Plusb Preco
0e8ab0688d Fix wrong markdown 2015-11-18 09:43:28 +09:00
Plusb Preco
0dd14ad204 'app-command' event is only available in Windows 2015-11-18 09:36:14 +09:00
Plusb Preco
7cc965b178 Translate docs 2015-11-18 09:21:49 +09:00
Plusb Preco
57aecbc415 Small changes 2015-11-18 07:09:10 +09:00
Ben Gotow
9c69416e32 Fix sizing of Mac OS X tray icon after image change
- Consolidate logic that applies view dimensions into a function
- Use `NSVariableStatusItemLength` instead of trying to sync status item width
- Use modern Obj-C syntax `@[], @{}` in a few places
- Recompute view bounds after updating image in `setImage:`
2015-11-17 13:43:55 -08:00
Plusb Preco
c21d7b537a Update as upstream 2015-11-18 03:40:58 +09:00
Plusb Preco
78dac21b84 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-18 03:10:18 +09:00
Plusb Preco
b4eca40d07 Improve grammar
* Improve grammar
* Standardize docs
* Fix typos
2015-11-18 03:09:51 +09:00
Plusb Preco
456154a6a2 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-18 02:13:01 +09:00
Plusb Preco
247a0a8ae2 Add BrowserWindow translation 2015-11-18 02:12:40 +09:00
Cheng Zhao
ab54fedc9a Merge pull request #3469 from atom/cleanup-verify-certificate
Emit verify-certificate only when default verifier fails
2015-11-17 21:57:58 +08:00
Cheng Zhao
961ee5a4d9 Rename verify-certificate to untrusted-certificate 2015-11-17 21:41:36 +08:00
Cheng Zhao
ebe66daa56 Emit verify-certificate only when default verifier fails 2015-11-17 21:36:36 +08:00
Cheng Zhao
e3517b701e Create a new CertVerifierRequest for each request
It greatly simplifies the code.
2015-11-17 19:44:55 +08:00
Cheng Zhao
ea1e4160ea Move AtomSSLConfigService to atom/browser/net 2015-11-17 19:05:38 +08:00
Cheng Zhao
37f355724a Move AtomCertVerifier to atom/browser/net 2015-11-17 19:03:09 +08:00
Cheng Zhao
217311ef21 No need to use weak reference
Ref-counting manages everything.
2015-11-17 19:00:33 +08:00
Cheng Zhao
24f573eceb Merge pull request #3344 from deepak1556/certificate_verifier_api_patch
session: api to allow handling certificate verification
2015-11-17 18:53:35 +08:00
Moises lopes ferreira
855c1ead00 Portuguese translation of coding-style.md 2015-11-17 18:42:03 +08:00
Cheng Zhao
9a9f912f24 Merge pull request #3464 from dongjoon-hyun/add_missing_translations_in_menu_items
Add missing Korean translations in menu-item.md
2015-11-17 18:20:17 +08:00
Dongjoon Hyun
5995451366 Add missing translations 2015-11-17 16:49:08 +09:00
tom
099da729c7 Added korean translations for webContents 2015-11-17 11:58:37 +08:00
Cheng Zhao
69a6e80ab8 Merge pull request #3462 from atom/absolut-url-docs
docs: Use absolute URLs
2015-11-17 11:50:19 +08:00
Cheng Zhao
68099a71b0 docs: Use absolute URLs
Relative paths in GitHub's repo do not work very well, and our docs site
can not recognize them.
2015-11-17 11:47:57 +08:00
Cheng Zhao
b4d3c8f248 Merge pull request #3460 from preco21/master
Small fixes, add translation
2015-11-17 11:42:57 +08:00
Cheng Zhao
3b826ed1a5 Update brightray: fix #3458 2015-11-17 11:22:14 +08:00
Plusb Preco
ee12dc3d17 Improve grammar 2015-11-17 11:22:05 +09:00
Plusb Preco
83dfef2e66 Fix missed changes 2015-11-17 10:53:24 +09:00
Plusb Preco
5b8e94ca28 Improve grammar 2015-11-17 10:50:06 +09:00
Plusb Preco
7ef347e69e Small changes 2015-11-17 10:44:30 +09:00
Plusb Preco
d05def1e3e Small changes 2015-11-17 05:17:24 +09:00
Plusb Preco
f312a4e6ec Change the translation encoding 2015-11-17 05:09:27 +09:00
Plusb Preco
66816ea2e0 Add Mac App Store guide translation 2015-11-17 05:05:11 +09:00
Robo
92c3ee8e16 use delegate to notify verification requests 2015-11-16 20:45:49 +05:30
Plusb Preco
62e6332366 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-16 23:55:46 +09:00
Plusb Preco
7dcc537359 Update as upstream 2015-11-16 23:47:09 +09:00
Cheng Zhao
202d2eeb8a Merge pull request #3454 from brenca/keyboard-pr
Adding further options to specify the character being sent with sendInputEvent (keyboard)
2015-11-16 22:13:09 +08:00
Heilig Benedek
14740eeb8a Merging keyCode and keyIdentifier and adjusting the docs accordingly 2015-11-16 14:51:26 +01:00
Cheng Zhao
1d800d5e26 Merge pull request #3432 from deepak1556/navigation_patch
browser: fix reloadignoringcache api
2015-11-16 20:55:16 +08:00
Cheng Zhao
9e70d35afa Bump v0.35.0 2015-11-16 16:48:51 +08:00
Cheng Zhao
728a5db3b4 Update brightray: fix building on Windows 2015-11-16 16:47:51 +08:00
Cheng Zhao
feedd0c43d Merge pull request #3456 from meowlab/improve-translation-zh-CN
Fix a dead link and add a new Chinese document translation
2015-11-16 16:29:09 +08:00
Cheng Zhao
3f0f1a2ce9 Update brightray 2015-11-16 16:18:57 +08:00
Cheng Zhao
2a9a66144c Merge pull request #3453 from preco21/master
Update as upstream
2015-11-16 16:11:51 +08:00
Cheng Zhao
0f89573719 Merge pull request #3441 from brenca/master
Fixing memory leak in FrameSubscriber
2015-11-16 16:03:58 +08:00
Sunny
c27c7b05fe Add Simplified Chinese translation for source code structure 2015-11-16 13:06:14 +08:00
Plusb Preco
ceee820d4a Fix typos in download-item.md 2015-11-16 13:44:25 +09:00
Plusb Preco
266c22903b Small fixes 2015-11-16 13:43:16 +09:00
Plusb Preco
c5e706bc30 Add download-item.md translation 2015-11-16 13:41:47 +09:00
Plusb Preco
19a2c24927 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-16 13:41:29 +09:00
Heilig Benedek
5fff06d2c2 Added documentation for the changes in KeyboardEvent and added missing mouseMove event type 2015-11-16 04:54:48 +01:00
Heilig Benedek
bb6d7d1498 Added the option to KeyboardEvent to specify the sent character by it's name (if it can't be sent via the keyCode parameter) 2015-11-16 04:54:21 +01:00
Cheng Zhao
abba83397b Merge pull request #3450 from eddiezane/patch-1
Fix typo in notifications example docs
2015-11-16 11:17:41 +08:00
Plusb Preco
1254331c5e Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-16 12:15:38 +09:00
Plusb Preco
e12e119381 Update as upstream
* Update as upstream
* Fix typos
* Improve grammar
2015-11-16 12:15:21 +09:00
Plusb Preco
ad776887da Update README.md 2015-11-16 08:34:41 +09:00
Plusb Preco
42a3771f98 Small change 2015-11-16 08:30:08 +09:00
Eddie Zaneski
c1373d7480 Fix typo in notifications example docs 2015-11-15 10:48:09 -05:00
Heilig Benedek
9f9436d6dc Moved scope creation before the allocation of the buffer in FrameSubscriber 2015-11-14 23:59:38 +01:00
Plusb Preco
78542ab54c Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-15 07:58:21 +09:00
Heilig Benedek
9987082de5 Merge pull request #3 from atom/master
Update from original
2015-11-14 21:11:26 +01:00
Robo
e2959ed3fc add docs 2015-11-14 12:09:18 +05:30
Robo
2a7f874373 browser: fix reloadignoringcache api 2015-11-14 02:25:23 +05:30
Cheng Zhao
fe214e0806 Merge pull request #3428 from atom/remote-enhance
Make it easier to use browser side modules
2015-11-14 00:26:03 +08:00
Cheng Zhao
5cacf79bc5 docs: Document the new style of remote module 2015-11-13 22:34:00 +08:00
Cheng Zhao
94e24abb99 Use the new style remote module in Electron 2015-11-13 22:22:25 +08:00
Cheng Zhao
b925ac0056 Send sync message to get list of modules 2015-11-13 22:15:16 +08:00
Cheng Zhao
099278855c Simplify how remote.require('electron') is optimized 2015-11-13 21:54:56 +08:00
Cheng Zhao
9bf0a8647e Make it easier to use remote 2015-11-13 21:52:27 +08:00
Cheng Zhao
e76a7f7b7d Fix typo, tray => Tray 2015-11-13 21:52:05 +08:00
Cheng Zhao
5d52ff76ab Merge pull request #3425 from atom/tray-api
Rename the "clicked" event to "click" in Tray
2015-11-13 18:52:56 +08:00
Cheng Zhao
e8ffd24e4e Rename the "clicked" event to "click" in Tray 2015-11-13 16:41:33 +08:00
Cheng Zhao
52f1431bde Merge pull request #3424 from atom/api-rename
Replace "Url" in API names with "URL"
2015-11-13 16:27:38 +08:00
Cheng Zhao
fbb8e61958 Replace "Url" in API names with "URL" 2015-11-13 16:03:40 +08:00
Sunny
9ac87e844a Fix node_bindings link in Simplified Chinese document translation 2015-11-13 15:41:20 +08:00
Cheng Zhao
8f56387bd9 Merge pull request #3422 from atom/windows-fix
Separate options from switches
2015-11-13 15:04:51 +08:00
Cheng Zhao
860c46b3c1 Separate options from switches
On Windows the case sensitivity of command line switches are ignored, so
--nodeIntegraion will become --nodeintegration.

We should separate options from switches so we use "nodeIntegraion" in
options, while passing "--node-integration" in command line.
2015-11-13 14:05:49 +08:00
Cheng Zhao
0f23d6faa9 Merge pull request #3421 from atom/chrome-paths
Add a few more paths for app.getPath
2015-11-13 13:53:55 +08:00
Cheng Zhao
fdc19f2d3a Fix building on Windows 2015-11-13 13:23:13 +08:00
Cheng Zhao
d3caea91b0 Add paths from chrome_paths 2015-11-13 13:05:16 +08:00
Cheng Zhao
05d2e431de Fix building on OS X 2015-11-13 13:03:00 +08:00
Cheng Zhao
83ae9f8d71 Import the chrome_paths code 2015-11-13 12:45:02 +08:00
Cheng Zhao
996a3c2a35 Merge branch 'content_tracing_patch' of https://github.com/deepak1556/atom-shell into deepak1556-content_tracing_patch 2015-11-13 12:29:18 +08:00
Cheng Zhao
78934dceb9 Cleanup and docs for the --js-flags 2015-11-13 12:22:08 +08:00
Cheng Zhao
0321a77a94 Merge pull request #3412 from skhameneh/master
Add --js-flags support for main thread.
2015-11-13 12:10:59 +08:00
Cheng Zhao
3a5160f799 Merge pull request #3415 from atom/exports-electron
Move all public APIs to "electron" module
2015-11-13 11:21:45 +08:00
Cheng Zhao
f2439cefd0 linux: Don't throw error when using autoUpdater
Fix #3194.
2015-11-13 10:58:10 +08:00
Robo
bfaa50a79e retrieve download directory using on linux 2015-11-13 07:44:05 +05:30
Cheng Zhao
852500e5fa Fix a few places using old style require 2015-11-13 09:38:22 +08:00
Robo
37e6e6fab7 emit verify-certificate event for handling verification 2015-11-13 06:44:49 +05:30
Robo
bb439c5f1c browser: check window liveness before setting title 2015-11-13 02:43:21 +05:30
Robo
3d5437e0a4 tracing: fix docs and allow null values in file path conversion fromv8 2015-11-13 02:36:38 +05:30
Robo
d072e61282 session: api to allow handling certificate verification 2015-11-13 01:27:30 +05:30
Cheng Zhao
ce6a7c7d08 spec: Disable old APIs in tests 2015-11-12 23:02:39 +08:00
Cheng Zhao
edd807d227 Fix a typo 2015-11-12 22:56:18 +08:00
Cheng Zhao
c5913c3149 docs: Add notes on old APIs 2015-11-12 22:24:11 +08:00
Cheng Zhao
2ca5a33d28 Add electron.hideInternalModules 2015-11-12 21:46:03 +08:00
Cheng Zhao
c649c4cf4f Rename the env to ELECTRON_HIDE_INTERNAL_MODULES 2015-11-12 21:37:44 +08:00
Cheng Zhao
eac2e7cc61 docs: Update codes in docs to use require('electron') 2015-11-12 21:20:09 +08:00
Cheng Zhao
8b2942c279 Optimize remote.require('electron') 2015-11-12 20:30:40 +08:00
Cheng Zhao
1d1f911b09 Use require('electron') in Electron's code 2015-11-12 20:29:30 +08:00
Shawn K
fb5beb9af5 Add --js-flags support for main thread.
Allow use of flags that must be set before V8 is initialized, such as
"--harmony_proxies", e.g. --js-flags="--harmony_proxies
--harmony_collections"
2015-11-12 01:48:23 -08:00
Cheng Zhao
f9d7e7ce55 Add ELECTRON_DISABLE_OLD_STYLE_MODULES env 2015-11-12 17:02:04 +08:00
Cheng Zhao
c2c09daa23 Add "electron" module 2015-11-12 16:40:27 +08:00
Cheng Zhao
ce0167756e Update node for atom/node#13 2015-11-12 16:27:28 +08:00
Cheng Zhao
cb1dc6b2e2 Merge pull request #3409 from preco21/master
Update as upstream
2015-11-12 12:49:51 +08:00
Plusb Preco
020214ff95 Update as upstream 2015-11-12 12:24:28 +09:00
Cheng Zhao
ca49ddc95d Update brightray 2015-11-12 09:49:15 +08:00
Heilig Benedek
c571776da6 Merge pull request #2 from atom/master
Update from original
2015-11-12 01:20:33 +01:00
Cheng Zhao
28db51ad83 docs: Update BrowserWindow's options 2015-11-11 23:56:17 +08:00
Cheng Zhao
f08bd721f3 Merge pull request #3392 from Mingling94/master
Suggest adding arguments when running webdriver
2015-11-11 22:57:30 +08:00
Cheng Zhao
0e9415a256 docs: More notes on --proxy-server, close #3390 2015-11-11 22:55:32 +08:00
Cheng Zhao
0a5b234e3d Merge pull request #3354 from nishanths/master
Add drag-entered and drag-exited events to Tray
2015-11-11 22:44:05 +08:00
Cheng Zhao
e41cf8111a Merge pull request #3400 from atom/browser-window-options
Remove the "-" in BrowserWindow's option names
2015-11-11 11:29:02 +08:00
Cheng Zhao
f63a4a05b7 spec: Make the crash-reporter test more reliable 2015-11-11 10:37:34 +08:00
Cheng Zhao
60ec1ca3f7 Use new styles of browserWindow options 2015-11-11 10:37:34 +08:00
Cheng Zhao
ba457681b2 Avoid storing unrelated things in WebContentsPreferences 2015-11-11 10:37:34 +08:00
Cheng Zhao
b807685453 Deep copy the options
Otherwise a window's options is possible to be affected by others.
2015-11-11 10:37:34 +08:00
Cheng Zhao
960d325a58 Be compatible with old BrowserWindow options 2015-11-11 10:37:34 +08:00
Cheng Zhao
5cca947f4d Remove unneeded override code 2015-11-11 10:37:34 +08:00
Cheng Zhao
737e22b003 Use minWidth style for options instead of min-width 2015-11-11 10:37:34 +08:00
Cheng Zhao
d37aa8bed9 Reorder switches 2015-11-11 10:37:34 +08:00
Cheng Zhao
961e06ba6c Merge pull request #3398 from preco21/master
Update as upstream
2015-11-11 10:06:47 +08:00
Cheng Zhao
3af1d907d8 Merge pull request #3397 from preco21/patch-2
Standardize the webContents object names
2015-11-11 10:06:12 +08:00
Plusb Preco
319acc1e8a Update as upstream 2015-11-11 09:44:33 +09:00
Plusb Preco
b611154f43 Standardize the webContents object name 2015-11-11 09:03:49 +09:00
Plusb Preco
8774e7cf8d Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-11 07:57:59 +09:00
Ming Luo
916671d4d2 Suggest adding arguments when running webdriver 2015-11-10 14:58:38 -05:00
Nishanth Shanmugham
ed179ecf03 docs: Update tray docs with drop and drag-end events 2015-11-10 10:14:55 -06:00
Nishanth Shanmugham
d1e8e71e3f Tray: Add drag-end and drop events 2015-11-10 10:02:50 -06:00
Nishanth Shanmugham
f98147ea01 Tray: Rename events to drag-enter and drag-leave
Previously, the names were drag-entered and drag-exited. The new names mirror the HTML Drag and Drop event names
2015-11-10 09:27:39 -06:00
Cheng Zhao
f6a0e5ad31 Update brightray for atom/brightray#167 2015-11-10 20:32:16 +08:00
Cheng Zhao
6c7acd8aa5 Merge pull request #3385 from DerNivel/patch-1
Fix typo
2015-11-10 20:25:48 +08:00
Levin Rickert
08e245e3dc Fix typo 2015-11-10 12:42:05 +01:00
Cheng Zhao
1f01a4535a Fix compilation error of brightray 2015-11-10 18:04:59 +08:00
Cheng Zhao
d582ddf790 Update brightray for win7 crash of using notification 2015-11-10 17:44:14 +08:00
Cheng Zhao
682433028c docs: Clean up the desktop-environment-integration.md 2015-11-10 17:43:29 +08:00
Cheng Zhao
20c8637810 Merge pull request #3382 from felixrieseberg/notifications
Document Notifications
2015-11-10 17:30:08 +08:00
Cheng Zhao
0af1308ad7 Merge pull request #3384 from atom/ipc-renderer
Use different names for "ipc" module in main and renderer processes
2015-11-10 17:29:07 +08:00
Cheng Zhao
d234f10177 Implement event.sender for ipcRenderer 2015-11-10 16:59:08 +08:00
Cheng Zhao
90a7d4a906 docs: Update with new IPC modules 2015-11-10 16:48:24 +08:00
Cheng Zhao
05611f5e60 spec: Use multiparty instead of formidable
The latter is buggy and affects our specs.
2015-11-10 16:21:08 +08:00
Cheng Zhao
751af25f37 Use ipcMain in Electron's code 2015-11-10 16:04:34 +08:00
Cheng Zhao
844cea8f21 Deprecate ipc module for ipcMain 2015-11-10 15:41:24 +08:00
Cheng Zhao
6515a445a0 Use ipcRenderer in Electron's code 2015-11-10 15:29:43 +08:00
Felix Rieseberg
765cfb1094 Document Notifications 2015-11-10 08:28:14 +01:00
Cheng Zhao
828d911ed1 Deprecate ipc module for ipcRenderer 2015-11-10 15:12:07 +08:00
Cheng Zhao
5d1f7ed029 Update brightray for atom/brightray#161 2015-11-09 22:56:12 +08:00
Cheng Zhao
bd1f6e2edf Merge pull request #3372 from atom/deprecation-notice
Show warnings for deprecated APIs
2015-11-09 22:40:36 +08:00
Cheng Zhao
91c4ed26fc Print warnings for deprecated APIs 2015-11-09 21:51:30 +08:00
Cheng Zhao
f0bd28ca8d Do not turn off deprecation notice by default
It is v4 now, people should be punished if they are still using
deprecated Node.js APIs.
2015-11-09 21:19:16 +08:00
Cheng Zhao
89ff62b1b5 Add "deprecate" module 2015-11-09 21:19:16 +08:00
Cheng Zhao
a23ffd7a1b Rely on "download" script for argument verification 2015-11-09 18:24:32 +08:00
Cheng Zhao
13b917dd95 Update brightray for atom/electron#3310 2015-11-09 16:38:51 +08:00
Cheng Zhao
dd8fb9739d Merge pull request #3368 from tejaspathak/master
Add option to build local libchromiumcontent
2015-11-09 16:37:00 +08:00
Cheng Zhao
5e3b8d51e4 docs: Fix typo 2015-11-09 11:42:37 +08:00
Plusb Preco
91c7043a1b Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-09 08:17:12 +09:00
Plusb Preco
429723c8a9 Update as upstream 2015-11-09 07:48:40 +09:00
tejaspathak
ae2b004db7 Fix pylint errors 2015-11-08 17:41:16 +09:00
tejaspathak
09169ed402 Add option to build local libchromiumcontent
- Currently libchromiumcontent is downloaded by default.
- Now developer can choose to provide local libchromiumcontent src, shared and static path
2015-11-08 16:18:22 +09:00
Cheng Zhao
3465095c49 Update brightray for #3357 2015-11-07 12:12:17 +08:00
Cheng Zhao
312a79165b Bump v0.34.3 2015-11-06 21:37:37 +08:00
Cheng Zhao
829c396efe Merge pull request #3356 from atom/process-exit
Make process.exit() quit program gracefully
2015-11-06 21:25:27 +08:00
Cheng Zhao
c4ee8c1b1f spec: Fix refreshing on Windows 2015-11-06 21:00:38 +08:00
Cheng Zhao
d70706f876 Make sure handles of callbacks are releases on exit
Some callbacks are stored in native resources that not managed by
JavaScript, so when those resources are destroyed the JavaScript context
may already be destroyed, and releasing callbacks then would result in
crash.
2015-11-06 21:00:32 +08:00
Cheng Zhao
acf4372cf7 win: Add ELECTRON_DEFAULT_ERROR_MODE env
It is useful to help debugging crashes without opening debugger.
2015-11-06 20:25:20 +08:00
Cheng Zhao
863199348f Make process.exit() quit gracefully
Instead of abrupting the whole program immediately, we should close all
windows and release all native resources gracefully on exit. This avoids
possible crashes.

Fix #3350.
2015-11-06 20:25:20 +08:00
Cheng Zhao
c10c74b23a Merge pull request #3355 from preco21/master
Update as upstream
2015-11-06 11:31:44 +08:00
Plusb Preco
0e950e6d26 Update as upstream 2015-11-06 10:52:55 +09:00
Nishanth Shanmugham
8a296f82a0 Tray: Remove extra qualification in header 2015-11-05 19:02:24 -06:00
Nishanth Shanmugham
ee783a13ad docs: Add Tray drag-entered and drag-exited events 2015-11-05 18:49:34 -06:00
Nishanth Shanmugham
818892d474 Tray: Add drag-entered and drag-exited events 2015-11-05 18:46:49 -06:00
Cheng Zhao
5b0ea5bd46 Merge pull request #3343 from atom/fix-crash-of-crash-reporter
win: Guard against failure of RtlAddFunctionTable
2015-11-05 22:41:52 +08:00
Cheng Zhao
2505ebb9a6 win: Guard against failure of RtlAddFunctionTable
On some machines this call will fail and CHECK will abort the
application.
2015-11-05 22:00:40 +08:00
Cheng Zhao
47649ffd17 win: Fix calling showItemInFolder in renderer process 2015-11-05 20:47:27 +08:00
Tyler Gibson
4ff5ce4d6d Fixing MoveItemToTrash behavior in Windows
Modifying MoveItemToTrash for Windows to actually verify file can be
moved to a drive's recycle bin before attempting to delete it.

PR: #3337.
2015-11-05 20:42:30 +08:00
Ryan Molden
4ce840d8e6 Re-enable accessibility in Electron on Windows
In conjunction with commit 7c41f0e.
2015-11-05 19:49:48 +08:00
Cheng Zhao
fbe1200dc7 Merge pull request #3313 from kevinsimper/patch-1
Update devtools-extension with a note about it not working
2015-11-05 10:12:03 +08:00
Kevin Simper
e4f74bb87e Update devtools-extension with a note about it not working 2015-11-04 15:21:02 +01:00
Cheng Zhao
9f536f4783 Merge pull request #3328 from atom/wrapper-cleanup
Clean up native resources on exit
2015-11-04 19:24:32 +08:00
Cheng Zhao
d56b34de3b Make sure all native resources get freed on exit 2015-11-04 18:21:03 +08:00
Cheng Zhao
07c55f321f Destroy JS env immediately after running destruction callbacks 2015-11-04 17:31:10 +08:00
Cheng Zhao
84410a7e1c mac: Destroy the app delegate before running destruction callbacks
Otherwise users might be able to access wrapper functions after they are
destroyed.
2015-11-04 17:23:27 +08:00
Cheng Zhao
323abef362 Merge pull request #3326 from preco21/master
Update as upstream
2015-11-04 17:13:14 +08:00
Cheng Zhao
75f49477ca Cleanup wrapper function when app has done quitting
The app may still do something when quitting, we need to make sure the
wrapper function is still there at that time.
2015-11-04 16:54:36 +08:00
Cheng Zhao
441cc3e57e Style fix 2015-11-04 16:50:19 +08:00
Plusb Preco
96cc5485cb Update as upstream 2015-11-04 17:47:14 +09:00
Plusb Preco
526b2083c4 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-04 17:47:03 +09:00
mgarciaisaia
4013b652ff :checkered_flag:🐛 Buffer overflows in tooltips
Fixes #3290.
2015-11-04 15:34:58 +08:00
Cheng Zhao
28abc8defe Merge pull request #3323 from joaomoreno/win-keyboard-accessibility
Enable Windows keyboard accessibility
2015-11-04 15:14:36 +08:00
Cheng Zhao
1ad77da9d6 Merge pull request #3308 from frankenbot/master
Update redirects
2015-11-04 10:08:13 +08:00
Plusb Preco
df5a3d4e68 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-11-04 10:50:33 +09:00
Joao Moreno
7c41f0e0e3 remove kDisableLegacyIntermediateWindow switch set 2015-11-03 16:12:01 -08:00
frankenbot
8c989c4630 Update nodejs url 2015-11-03 09:13:48 -08:00
Cheng Zhao
053cd3dad0 Merge pull request #3309 from atom/app-model-id
Fix a few problems around Application User Model ID
2015-11-03 17:58:03 +08:00
Cheng Zhao
1b165559f5 win: Use electron.app.$1 as default user model id
This is to keep compatibility with old apps that don't set app user
model id explicitly.
2015-11-03 15:50:43 +08:00
Cheng Zhao
726910df39 docs: app.setAppUserModelId 2015-11-03 15:36:44 +08:00
Cheng Zhao
8a3268b70c docs: Add notes for working together with Squirrel 2015-11-03 15:30:54 +08:00
Cheng Zhao
7b47b70c9e Fix building on POSIX 2015-11-03 15:30:37 +08:00
Cheng Zhao
9047f81835 win: Set app user model ID in one place
Fix #3297.
Fix #2573.
2015-11-03 15:09:31 +08:00
Cheng Zhao
7c7a7b96de win: Do not set app user model id by default
When user drags exe file into taskbar directly the pinned icon will not
has an app user model id, so if we set app user model id in the
application two icons will show in the taskbar.

For apps installed with a installer it is not a problem since the
shortcut icon will be created with app user model id, but we should also
keep the ability to make portable apps work out of box.

Fix #3303.
2015-11-03 14:55:43 +08:00
frankenbot
d332f2ab1c Update redirects 2015-11-02 21:16:12 -08:00
Cheng Zhao
9236adfbf5 Translate menu template directly in C++ 2015-11-02 23:31:44 +08:00
Cheng Zhao
56e6b28370 Merge pull request #3288 from deepak1556/flash_context_menu_pathc
browser: handle flash context menu request
2015-11-02 21:20:44 +08:00
Cheng Zhao
f7c0418bd8 Ignore case for type of savePage 2015-11-02 21:19:00 +08:00
Cheng Zhao
4804d6b79b Update native-mate 2015-11-02 21:08:29 +08:00
Cheng Zhao
b5f7c433c6 Merge pull request #3292 from ggamel/patch-2
Update auto-updater.md to improve readability
2015-11-02 20:30:47 +08:00
Cheng Zhao
647a0c4e2b Code cleanup for remote module 2015-11-02 20:28:01 +08:00
Cheng Zhao
88fc4e9d05 Merge pull request #3291 from maxcnunes/better-error-handling
Improve error handling from remote
2015-11-02 19:10:50 +08:00
Cheng Zhao
72d7fb7b8a Merge pull request #3281 from MrSurly/patch-1
Update dialog.md
2015-11-02 19:08:47 +08:00
Cheng Zhao
c763cbe298 Merge pull request #3282 from bureken/master
Replace Mac with OS X
2015-11-02 18:33:27 +08:00
Jesus David Rojas
f7108af36b Spanish translations of the documents 2015-11-02 12:41:42 +08:00
Greg Gamel
d097082baf Update auto-updater.md to improve readability
Fix minor grammatical mistakes, correct sentence structures, and improve readability.
2015-10-31 21:25:07 -05:00
Max Claus Nunes
bbb5aef5d2 Improve error handling from remote
This way copy all properties available in the error object and keep the real stack trace
2015-10-31 21:20:54 -02:00
Eric Poulsen
5b49655d1f Update dialog.md 2015-10-31 16:04:01 -07:00
Robo
c969052f12 browser: handle flash context menu 2015-11-01 01:13:17 +05:30
Paul Betts
6a02586176 Add Windows version of running cmd 2015-10-31 08:57:04 -07:00
Cheng Zhao
cb91d4487b Clean up the code handling renderer callback 2015-10-31 15:00:06 +08:00
Cheng Zhao
323ab92299 Merge pull request #3251 from deepak1556/remote_callback_patch
remote: track listeners on browser side
2015-10-31 14:18:58 +08:00
Jesus David Rojas
db3cd1af36 Translate "Diferencias Técnicas con NW.js" 2015-10-31 14:10:24 +08:00
bureken
a957ea1ed9 Replace Mac with OS X 2015-10-31 05:30:18 +03:00
Eric Poulsen
aa98720356 Update dialog.md
Clarification of showErrorBox behavior on Linux if called before app `ready` event.
2015-10-30 14:46:18 -07:00
Robo
2c59f4567e use webcontents id to identify callbacks 2015-10-30 19:51:19 +05:30
Cheng Zhao
d223faa9f4 Merge pull request #3275 from atom/as-optimize-fs-read-file-sync
Allow v8 to optimize fs.readFileSync
2015-10-30 20:02:34 +08:00
Cheng Zhao
58595a23fe Merge pull request #3278 from michaelzoidl/patch-1
Update autoUpdater api docs
2015-10-30 19:52:03 +08:00
Michael J. Zoidl
95ef73ebc1 Update autoUpdater api docs
The event `quitAndUpdate` event changed to `quitAndInstall`
2015-10-30 12:17:30 +01:00
Antonio Scandurra
9c69877421 Allow v8 to optimize fs.readFileSync 2015-10-30 10:30:27 +01:00
Cheng Zhao
21a7c459d8 Bump v0.34.2 2015-10-30 14:50:57 +08:00
Thomas Johansen
aeeada546f Merge pull request #3272 from sk2/patch-1
fix capital I -> i in isDocumentEdited
2015-10-30 07:41:52 +01:00
Simon Knight
8cd8495df7 fix capital I -> i in isDocumentEdited
Uncaught Exception:
TypeError: mainWindow.IsDocumentEdited is not a function
2015-10-30 16:10:46 +10:30
Cheng Zhao
28fb0d0e92 Merge pull request #3270 from preco21/master
Update as upstream
2015-10-30 10:24:48 +08:00
Robo
3a154ab8ea add line and column values to callback id 2015-10-29 21:21:30 +05:30
Robo
ac4df34ecd create binding to idweakmap 2015-10-29 17:51:56 +05:30
Robo
eae7c840b7 use idweakmap for holding callbacks in browser 2015-10-29 17:51:56 +05:30
Robo
62d15953ff remote: track listeners for browser side 2015-10-29 17:51:56 +05:30
Cheng Zhao
386325915b Merge pull request #3261 from preco21/patch-1
Remove extra spaces
2015-10-29 13:53:02 +08:00
Plusb Preco
72e8660245 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-10-29 14:23:21 +09:00
Plusb Preco
b8cc2e1649 Remove extra spaces 2015-10-29 14:22:00 +09:00
Plusb Preco
c7372f8f93 Update as upstream 2015-10-29 14:18:07 +09:00
Cheng Zhao
917b33dbe7 Small code cleanup 2015-10-29 10:55:08 +08:00
Cheng Zhao
0f89f67a84 Merge pull request #3254 from templateK/master
Fix remove boolean parameter at IsSwitchEnabled function
2015-10-29 10:54:56 +08:00
Cheng Zhao
bf9e6ba11e Merge pull request #3256 from omrilitov/master
Use WPARAM as uint64_t and LPARAM as int64_t
2015-10-29 10:41:11 +08:00
Cheng Zhao
f13a02e4fa Merge pull request #3250 from atom/basic-auth
Add support for basic auth
2015-10-29 10:20:51 +08:00
Omri Litov
ef038257d1 Returns buffer instead of WPARAM and LPARAM 2015-10-29 03:00:44 +02:00
Omri Litov
f22837523f Use WPARAM as uint64_t and LPARAM as int64_t 2015-10-28 21:54:50 +02:00
Omri Litov
2ac40cc28e Added .idea to .gitignore 2015-10-28 21:30:52 +02:00
taemu
16eafdb0ce Fix remove boolean parameter at IsSwitchEnabled function 2015-10-29 03:22:08 +09:00
Jessica Lord
2384c9f493 Merge pull request #3249 from antoinepairet/patch-1
Fix documentation for module types available in the renderer process
2015-10-28 09:58:22 -07:00
Antoine Pairet
4efff08007 Fix comments from @jlord 2015-10-28 17:55:18 +01:00
Antoine Pairet
974b5005bc Update from @jlord 2015-10-28 14:28:30 +01:00
Cheng Zhao
51ba37440d Guard against multiple calls of auth 2015-10-28 21:20:08 +08:00
Cheng Zhao
862c3187f5 docs: login event 2015-10-28 21:14:00 +08:00
Cheng Zhao
569e87035a Also emit "login" on WebContents 2015-10-28 21:00:39 +08:00
Cheng Zhao
f40a3f72d7 Converted callback can only be called for once 2015-10-28 20:44:46 +08:00
Cheng Zhao
4eac6b31b1 Also pass "webContents" in "login" event 2015-10-28 20:23:18 +08:00
Cheng Zhao
131531219e Pass auth_info and request in "login" event 2015-10-28 20:13:06 +08:00
Cheng Zhao
d05255179a Add login event for "app" module 2015-10-28 19:54:59 +08:00
Cheng Zhao
54dad72d92 Don't leak TranslaterHolder 2015-10-28 19:54:59 +08:00
Cheng Zhao
9847747736 Use the callback converter in JsAsker 2015-10-28 19:54:59 +08:00
Cheng Zhao
5d8a31c140 spec: Return early on error 2015-10-28 19:54:59 +08:00
Cheng Zhao
3881ad1c4b Don't leak FunctionTemplate when converting C++ callback 2015-10-28 19:54:59 +08:00
Cheng Zhao
9df89cf79b Add dummy LoginHandler 2015-10-28 19:54:59 +08:00
Cheng Zhao
b86267aa3b Use uint64_t instead of LPARAM
LPARAM is defined to differnt types on differnt machines with different
SDKs, so there is no way to represent it on all platforms safely, using
uint64_t seems to be the only safe choice.
2015-10-28 19:51:24 +08:00
Cheng Zhao
5fd310c75f Add converter for LPARAM 2015-10-28 19:43:05 +08:00
Antoine Pairet
0c5fe03999 Fix module types available in the renderer process
The doc previously stated `only GUI-unrelated` modules are available to the renderer process. I think it should be `only GUI-related`
2015-10-28 11:40:01 +01:00
Cheng Zhao
079796de26 Merge pull request #3247 from matiasinsaurralde/master
+supported-platforms.md (spanish version)
2015-10-28 14:52:30 +08:00
Matias Insaurralde
e90961ac4f Creating supported-platforms.md 2015-10-28 03:19:19 -03:00
Cheng Zhao
c9b53a6e8b Merge pull request #3240 from atom/reland-win-remove-wildcard-extension
Reland win remove wildcard extension
2015-10-27 20:52:43 +08:00
Cheng Zhao
142f380376 Merge pull request #3231 from omrilitov/master
Hooking windows messages
2015-10-27 20:48:19 +08:00
Haojian Wu
f69bafd48a Win: Fix adding '.*' to filename in callback. 2015-10-27 20:15:43 +08:00
Haojian Wu
fa24e15d8b Win: Remove adding '*.*' to file name in a save dialog. 2015-10-27 20:15:20 +08:00
Omri Litov
e355532d27 Change windows messages api to hook instead of emitter 2015-10-27 14:00:08 +02:00
Cheng Zhao
b4d9b92ecb Merge pull request #3236 from atom/mas-fix
Update libchromiumcontent: fix private API call
2015-10-27 15:05:11 +08:00
Cheng Zhao
dacd921a04 Revert "Win: Remove adding default file filter(*.*) in a save dialog."
This reverts commit 00493f64b7.
2015-10-27 14:58:44 +08:00
Cheng Zhao
9b17241f6f Merge pull request #3235 from sitdh/master
Translate docs to Thai
2015-10-27 14:31:01 +08:00
Cheng Zhao
3042f604cc Merge pull request #3234 from atom/win-remove-default-filter
Win: Remove adding default file filter(*.*) in a save dialog.
2015-10-27 14:30:35 +08:00
Cheng Zhao
2a85bd3360 Update libchromiumcontent: fix private API call 2015-10-27 14:25:42 +08:00
Sitdhibong Laokok
f1fad96b56 Fix missing spell 2015-10-27 12:36:43 +07:00
Sitdhibong Laokok
a84f4dc3e6 Remove original msg 2015-10-27 12:20:54 +07:00
Haojian Wu
00493f64b7 Win: Remove adding default file filter(*.*) in a save dialog. 2015-10-27 13:10:34 +08:00
Sitdhibong Laokok
2e3a5f5a3e Translate README.md 2015-10-27 12:09:49 +07:00
Cheng Zhao
d1c5d07451 Merge pull request #3227 from nekuz0r/load-url-headers
Add extra headers option to webContents.loadUrl
2015-10-27 11:37:27 +08:00
Omri Litov
edbebf84b9 Added browser-window event 'message' 2015-10-27 03:12:01 +02:00
Gohy Leandre
b29a8c94b9 Add extra headers option to webContents.loadUrl 2015-10-26 22:18:16 +01:00
Cheng Zhao
65ece4b1ca Merge pull request #3215 from atom/fix-remote-call
Fix calling showItemInFolder in renderer
2015-10-26 17:13:20 +08:00
Cheng Zhao
f399f50e9e Fix calling showItemInFolder in renderer
The remote method always assumes the existence of the remote object but
doesn't keep a reference to it, so if we only keep the reference of a
remote method we will get into troubles once the remote object is
garbage collected.

We should probably fix this in remote module, but since most things are
already working quite good, I'm using the work-around for now.

Fix #3139.
2015-10-26 16:48:27 +08:00
Cheng Zhao
e6f54f447c Merge pull request #3213 from rubixware/source-code-directory-structure-translation
Add source code directory structure spanish translation
2015-10-26 16:17:48 +08:00
Cheng Zhao
adb11225d2 Ship LICENSES.chromium.html in zip archive 2015-10-26 16:16:50 +08:00
Cheng Zhao
c973357752 Merge pull request #3198 from deepak1556/callback_patch
nativemate: use maybe version of v8::Function::call to avoid unhandled exceptions
2015-10-26 16:15:58 +08:00
Everardo Medina
b71ec748ad 📝 Add source code directory structure spanish translation 2015-10-26 00:04:11 -06:00
Robo
70fe169b0f nativemate: use maybe version of v8::Function::Call to avoid exceptions 2015-10-26 10:59:40 +05:30
Cheng Zhao
8976708e67 Merge pull request #3212 from rubixware/coding-style-translation
Add coding style spanish translation
2015-10-26 13:01:37 +08:00
Everardo Medina
da82eaefa7 📝 Add coding style spanish translation 2015-10-25 22:37:06 -06:00
Cheng Zhao
3dd6425592 Merge pull request #3203 from etiktin/patch-1
Update web-contents.md
2015-10-26 10:34:13 +08:00
Cheng Zhao
37240c2235 Merge pull request #3200 from jhen0409/patch-3
Sync zh-TW docs from upstream
2015-10-26 09:19:50 +08:00
Paul Betts
d528704bd6 Merge pull request #3207 from diegowifi/patch-1
Remove english words in description
2015-10-25 13:29:34 -07:00
Diego Ponce
fd94ff97e7 Remove english words in description 2015-10-25 14:04:03 -06:00
Eran Tiktin
9b36abc816 Update web-contents.md
The `did-fail-load` event returns an error code and error description. The error description is at least sometimes empty (e.g. when the error code is -102 on Windows), so you're left with an error code without knowing what happened. So I add a link to Chromium's net_error_list.h.
2015-10-25 17:00:29 +02:00
Jhen
8e5c1a505e Update tutorial/quick-start.md for zh-TW docs 2015-10-25 01:34:17 +08:00
Cheng Zhao
2effe6eff5 Merge pull request #3192 from preco21/master
Update as upstream
2015-10-24 15:46:59 +08:00
Plusb Preco
8555aea40f Update as upstream 2015-10-24 05:57:37 +09:00
Cheng Zhao
30ec7fdeed Bump v0.34.1 2015-10-23 20:32:02 +08:00
Cheng Zhao
0e3e1be85c Merge pull request #3186 from atom/auto-updater-fix
Clean up the code of auto-updater
2015-10-23 20:31:20 +08:00
Cheng Zhao
df9ea104c2 Merge pull request #3188 from alexandrubau/master
Updated docs
2015-10-23 20:13:00 +08:00
Cheng Zhao
88b05cff3e docs: auto-updater on Windows 2015-10-23 20:11:59 +08:00
Cheng Zhao
fae2c7bc7a win: Make auto-updater really work
Apparently that PR was never tested.
2015-10-23 19:41:54 +08:00
Alexandru Bau
96130dd4c2 Updated docs
Updated docs to better understand how to use electron-rebuild on all
platforms
2015-10-23 14:15:39 +03:00
Alexandru Bau
79e593aca6 Updated docs
Updated docs to better understand how to use electron-rebuild on Windows
2015-10-23 11:37:51 +03:00
Cheng Zhao
aeafc46ded Keep compatibility with old API style 2015-10-23 15:50:55 +08:00
Cheng Zhao
f89d28a63e Simplify the auto-updater implementations
We used to use Sparkle on OS X, and the design was reserved to be
extended to all platforms, which are all wrong now.
2015-10-23 15:40:56 +08:00
Cheng Zhao
d74ef5c078 Move implementation of auto-updater on OS X to another file 2015-10-23 15:13:24 +08:00
Cheng Zhao
85c84a0eb0 Emit Date object in C++ directly 2015-10-23 14:58:19 +08:00
Cheng Zhao
a3f62da615 Fix passing Date object in remote
Close #2017.
2015-10-23 14:51:41 +08:00
Cheng Zhao
95fe4beda8 Pass real Error object in error event 2015-10-23 14:37:35 +08:00
Cheng Zhao
d5c964c68c Fix passing Error object in remote
Closes #3089
2015-10-23 14:37:28 +08:00
Cheng Zhao
07adbc8e8a Merge pull request #1984 from patrickdet/windows-auto-updater
Windows Auto Updater
2015-10-23 13:54:29 +08:00
Cheng Zhao
90e3f726e4 Merge pull request #3184 from atom/windows-background-color
Make background-color work on Windows
2015-10-23 13:53:12 +08:00
Cheng Zhao
83ef23ff8d docs: background-color on Windows 2015-10-23 13:32:04 +08:00
Cheng Zhao
e36d455d51 Add setBackgroundColor method 2015-10-23 11:35:33 +08:00
Cheng Zhao
4a6134f3f7 win: Set native window's background color 2015-10-23 11:17:14 +08:00
Cheng Zhao
6182e4ce81 Merge pull request #3179 from deepak1556/session_api_patch
session: allow setproxy to use external pac script
2015-10-23 10:36:37 +08:00
Cheng Zhao
79d4d52172 Merge pull request #3178 from deepak1556/node_debugger_patch
debugger: expose v8debug
2015-10-23 10:36:06 +08:00
Cheng Zhao
e3ce1b50ec Merge pull request #3175 from atom/improve-make-single-instance
Fix some problems of makeSingleInstance
2015-10-23 09:13:57 +08:00
Robo
e9a5d05b27 session: allow setproxy to use external pac script 2015-10-22 23:03:47 +05:30
Cheng Zhao
61f07307cb docs: New behaviors of makeSingleInstance 2015-10-22 19:26:05 +08:00
Cheng Zhao
6bfe06ec4e Pass original argv in callback 2015-10-22 19:02:21 +08:00
Robo
7b5a1b06ba debugger: expose v8debug 2015-10-22 16:20:48 +05:30
Cheng Zhao
d52ef50b01 win: Pass original command line 2015-10-22 17:52:06 +08:00
Cheng Zhao
93a3a946f3 posix: Pass original command line 2015-10-22 17:43:55 +08:00
Cheng Zhao
afc1fff792 Remove the need for ProcessSingletonStartupLock 2015-10-22 17:12:09 +08:00
Cheng Zhao
70e74d05e0 Revert "app.makeSingleInstance is not available on OS X"
This reverts commit bcb78ebc00.
2015-10-22 17:03:18 +08:00
Cheng Zhao
f9d797d1ea win: Fix compiler warning 2015-10-22 16:55:54 +08:00
Cheng Zhao
e14fd62f46 Correctly handle notification callback when shutting down
When returning false in the notification callback the ProcessSingleton
will assume current process is quitting, we should met its expectation.
2015-10-22 16:24:35 +08:00
Cheng Zhao
ca876e424b Fix crash when calling app.quit() before app is ready 2015-10-22 16:06:37 +08:00
Cheng Zhao
230f2760e7 linux: Delay creating watcher until message loop is ready 2015-10-22 15:57:37 +08:00
Cheng Zhao
f01e84a418 linux: Delay listening to socket until message loop is ready 2015-10-22 15:54:58 +08:00
Cheng Zhao
05c6300329 Don't discard tasks in BridgeTaskRunner 2015-10-22 15:54:27 +08:00
Cheng Zhao
bcb78ebc00 app.makeSingleInstance is not available on OS X 2015-10-22 15:02:32 +08:00
Cheng Zhao
310954713f Simplify the usage of singleton 2015-10-22 14:59:12 +08:00
Cheng Zhao
acb2c099f6 Make sure current task runner is available
When calling makeSingleInstance we have to ensure current task runnder
is available, otherwise crash may happen.
2015-10-22 14:56:57 +08:00
Cheng Zhao
63cc2ec369 docs: Make code more JS-style 2015-10-22 14:24:09 +08:00
Cheng Zhao
04d3eed60e Merge pull request #3145 from atom/single-instance
Implement Single-Instance for Windows / Linux
2015-10-22 14:18:31 +08:00
Cheng Zhao
f7840e7379 docs: background-color is Linux-only for now 2015-10-22 14:16:17 +08:00
Cheng Zhao
15e0248d82 Merge pull request #3168 from deepak1556/window_background_color_patch
browser: option to set window background color
2015-10-22 14:13:37 +08:00
Robo
9411508d3e browser: option to set window background color 2015-10-22 09:54:29 +05:30
Cheng Zhao
f5659cd9a9 Merge pull request #3173 from tommoor/patch-5
Update crash-reporter.md
2015-10-22 11:10:30 +08:00
Cheng Zhao
803b3c8d5b Merge pull request #3172 from thomasjfox1/master
quick fix removing excess character
2015-10-22 11:08:30 +08:00
Tom Moor
bac3d2e372 Update crash-reporter.md 2015-10-21 17:07:36 -07:00
Paul Betts
759b6a1534 📝 for makeSingleInstance 2015-10-21 13:52:17 -07:00
Paul Betts
de66888051 Remove atom_process_singleton, just use the Chrome classes directly 2015-10-21 13:38:39 -07:00
Paul Betts
d020a7dc86 cpplinting 2015-10-21 13:17:56 -07:00
Paul Betts
938d68eb36 Move all the browser.cc code over to atom_api_app.cc 2015-10-21 13:04:50 -07:00
Thomas J Fox
b61c2e6ff7 quick fix removing excess character 2015-10-21 15:03:12 -05:00
Paul Betts
658a9872fb Only cleanup if we are the main process 2015-10-21 12:29:21 -07:00
Paul Betts
a160891a27 If a user calls makeSingleInstance more than once, just ignore it 2015-10-21 12:29:00 -07:00
Plusb Preco
acbd7d7541 Update as upstream 2015-10-22 03:36:14 +09:00
Paul Betts
38d6ff79c8 Need to free this early or get a SIGSEGV on Linux 2015-10-21 11:06:42 -07:00
Plusb Preco
bca88c1fb9 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-10-22 02:58:07 +09:00
Cheng Zhao
73f4aa1113 Merge pull request #3169 from atom/fix-node-buffer
Fix memory corruption when cleaning timer
2015-10-21 21:23:25 +08:00
Cheng Zhao
444f461269 Fix memory corruption when cleaning timer 2015-10-21 20:46:16 +08:00
Cheng Zhao
2d410ede48 Initialize things in the same sequence with main process 2015-10-21 16:24:54 +08:00
Cheng Zhao
ed9579a2f7 Merge pull request #3165 from roadev/master
Grammatical corrections for spanish translations at api, styleguide a…
2015-10-21 13:28:48 +08:00
Cheng Zhao
567d8e7434 Merge pull request #3163 from atom/fix-osx-app-region
osx: Implement draggable region with mouseDownCanMoveWindow
2015-10-21 09:53:02 +08:00
Cheng Zhao
d092c6acc9 osx: Implement draggable region with mouseDownCanMoveWindow
Previously we implemented draggable region by tracking mouse position,
it is buggy and causing some problems. But it is interesting that until
this didn't cause troubles until recently.
2015-10-21 08:54:46 +08:00
Paul Betts
99c496471b Allow WM_COPYDATA from all processes 2015-10-20 17:36:05 -07:00
Paul Betts
e5094fff3e Since setting up process_singleton is now conditional, its cleanup / unlock must be too 2015-10-20 17:27:28 -07:00
Juan Roa
fe25f3e747 grammatical corrections for spanish translations at api, styleguide and README 2015-10-20 18:10:08 -05:00
Cheng Zhao
b6859cab91 Merge pull request #3158 from ngoldman/patch-1
use webContents.openDevTools for quick start guide
2015-10-21 06:58:16 +08:00
Cheng Zhao
26d922d18d Merge pull request #3156 from preco21/master
Update as upstream
2015-10-21 06:52:10 +08:00
Paul Betts
15f00db1bf I don't think we need this 2015-10-20 15:03:59 -07:00
Paul Betts
4a7a09aae1 Infinite Linting 2015-10-20 15:00:10 -07:00
Paul Betts
f759471e01 Update to use Chromium sources 2015-10-20 14:36:01 -07:00
Paul Betts
4bc54ac5e3 Fix up filenames to include Chrome source 2015-10-20 14:33:34 -07:00
Paul Betts
5886398f22 Port our changes over 2015-10-20 14:24:45 -07:00
Paul Betts
7491d5cfb5 Copy back the original versions of Chromium files in 2015-10-20 14:05:07 -07:00
Paul Betts
b6f1729acd Move initialization of Single Instance into MakeSingleInstance call 2015-10-20 13:38:57 -07:00
Paul Betts
5d4c29a1e3 Ditch double-callback, just use mate directly 2015-10-20 13:27:34 -07:00
Paul Betts
a2eedcc027 Wire up the final callback to JS 2015-10-20 13:17:26 -07:00
Paul Betts
63417bc975 I am not good at C++ at all 2015-10-20 13:17:25 -07:00
Paul Betts
4a4b829cfc Fix callback handle usage 2015-10-20 13:17:25 -07:00
Paul Betts
50fab0733b At Browser ctor time, DIR_USER_DATA is unset, wait 2015-10-20 13:16:49 -07:00
Paul Betts
b02f89e63b Typo 2015-10-20 13:16:49 -07:00
Paul Betts
cdd51fa96d Wire everything up 2015-10-20 13:16:48 -07:00
Paul Betts
c38f2fcf75 Add a native mate converter for command lines 2015-10-20 13:15:12 -07:00
Paul Betts
7491ae4000 Set up Browser to create the process singleton 2015-10-20 13:15:12 -07:00
Paul Betts
4d5495a0a0 Bring in chrome_process_singleton but nuke the active dialog bits 2015-10-20 13:15:11 -07:00
Paul Betts
717aba9631 Create a dummy method in app that we'll twerk 2015-10-20 13:15:11 -07:00
Paul Betts
8288a22458 Fix build against old OneShotTimer 2015-10-20 13:14:08 -07:00
Paul Betts
88dd1480cc Get POSIX mostly compiling 2015-10-20 13:14:08 -07:00
Paul Betts
c46579b1ac Remove a bunch of stuff we don't need in process_singleton_win 2015-10-20 13:14:07 -07:00
Paul Betts
1b3363c811 Get process finder working 2015-10-20 13:14:07 -07:00
Paul Betts
daa65a138b Come Correct with headers 2015-10-20 13:14:06 -07:00
Paul Betts
d3b23a2032 Renames to avoid confusion, add file 2015-10-20 13:14:06 -07:00
Paul Betts
05b22b9372 Import process_finder verbatim 2015-10-20 13:14:05 -07:00
Paul Betts
ff2d9759d5 Start to remove / rearrange some header files 2015-10-20 13:14:05 -07:00
Paul Betts
90b997ef08 Add the files to filenames.gypi 2015-10-20 13:14:05 -07:00
Paul Betts
27fa5d880a Copy some relevant files over from Chromium 2015-10-20 13:14:04 -07:00
Paul Betts
285a4789b3 Update app.md 2015-10-20 12:35:56 -07:00
Nate Goldman
da7161d5a7 use webContents.openDevTools
https://github.com/atom/electron/issues/3125#issuecomment-148975593
2015-10-20 10:44:02 -07:00
Patrick Detlefsen
db3bc28937 PR feedback adressed 2015-10-20 19:25:03 +02:00
Jessica Lord
a0e2af6fac Merge pull request #3157 from IonicaBizauKitchen/doc-improvements
Doc improvements
2015-10-20 10:20:11 -07:00
Ionică Bizău
1ad979f9bd Add some missing words ("be" and "the") 2015-10-20 19:44:01 +03:00
Plusb Preco
f7a9b02c63 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-10-21 00:26:30 +09:00
Plusb Preco
7a0db35d91 Update as upstream 2015-10-21 00:25:24 +09:00
Cheng Zhao
c928894627 docs: app.allowNTLMCredentialsForAllDomains 2015-10-20 13:56:31 +08:00
Cheng Zhao
a7a399dcd8 Code cleanup 2015-10-20 13:52:39 +08:00
Cheng Zhao
14e2bbe4c7 Update brightray for #3120 2015-10-20 13:50:19 +08:00
Cheng Zhao
370cb5b5e1 Merge pull request #3120 from atom/ntlm-part-two
Optionally allow NTLM authentication for all domains
2015-10-20 13:48:12 +08:00
Cheng Zhao
78261973fb Merge pull request #3153 from atom/development-env
Add a few environment variables helpful for debugging
2015-10-20 13:47:17 +08:00
Cheng Zhao
be36a17dbf docs: Mention the ELECTRON_ENABLE_LOGGING env 2015-10-20 13:06:41 +08:00
Cheng Zhao
fb8ca33d5d Add ELECTRON_ENABLE_STACK_DUMPING env
It enables in-process stack dumping, which is convenient for debugging.
2015-10-20 13:02:48 +08:00
Cheng Zhao
2c4a24d26b Add ELECTRON_ENABLE_LOGGING env
It is the same with --enable-logging.
2015-10-20 13:00:28 +08:00
Cheng Zhao
4005e65e28 Merge pull request #3150 from atom/jl-upadate-qs
Update Quick Start HTML
2015-10-20 11:17:30 +08:00
Cheng Zhao
86327fb4bb Merge pull request #3149 from atom/jl-add-quick-start-repo
Add links to electron-quick-start Repository
2015-10-20 11:17:23 +08:00
Cheng Zhao
5a46147e9b Update brightray for atom/brightray#158 2015-10-20 10:34:33 +08:00
Cheng Zhao
bb8bb3dbea Merge pull request #3147 from deepak1556/cipher_suite_disable_patch
browser: flag to disable specified cipher suites
2015-10-20 10:29:49 +08:00
Jessica Lord
d09b09b744 Match the electron-quick-start repo 2015-10-19 16:37:18 -07:00
Jessica Lord
bc7c7da799 Add links to electron-quick-start 2015-10-19 15:52:02 -07:00
Robo
9f8479e9d8 browser: flag to diable specified cipher suites 2015-10-20 02:51:56 +05:30
Paul Betts
e3535d664b Fixed linter issues but now the code looks awful 2015-10-19 13:12:17 -07:00
Paul Betts
b3c7e2bf33 Plumb the method back 2015-10-19 13:07:14 -07:00
Paul Betts
489090fcf8 Set up our browser context to use new delegate-based API 2015-10-19 13:03:20 -07:00
Cheng Zhao
0afefe13f6 Merge pull request #3141 from jhen0409/patch-2
Sync recently updated docs to zh-TW docs-translations
2015-10-19 22:09:06 +08:00
Jhen
7f15d63552 Update README.md for zh-TW docs-translations 2015-10-19 21:54:29 +08:00
Jhen
09ee24514e Replace Mac with OS X for zh-TW docs translation 2015-10-19 21:49:57 +08:00
Jhen
d9c7401d0b Replace io.js with node.js for zh-TW docs translation 2015-10-19 21:29:10 +08:00
Cheng Zhao
de3e16ce60 Merge pull request #3129 from brandoncash/fix-tray-notify-typo
Fix: tray NotfiyDropFiles typo
2015-10-19 19:11:26 +08:00
Haojian Wu
9c861b9ad3 Fix always passing the first result to renderer when the API is called multiple
time at once.
2015-10-19 18:07:35 +08:00
Cheng Zhao
72e0da069c Merge pull request #3132 from princejwesley/issue-readFileSync
Fix: honor fs.readFileSync contract for empty packed asar file
2015-10-19 16:59:47 +08:00
Cheng Zhao
0d9e0a38c0 Merge pull request #3128 from atom/fix-save-page-position
Fix: 'savePage API' saves external resources in a wrong directory.
2015-10-19 16:40:45 +08:00
Prince J Wesley
810af2f95d 🐛 Honor fs.readFileSync contract for empty packed asar file 2015-10-19 08:43:50 +05:30
Haojian Wu
fb4efec55d Add options check.
This patch avoids main process never response back to renderer if the options is
invalid.
2015-10-19 11:06:56 +08:00
Plusb Preco
0aefa98e5a Small fix in README 2015-10-19 11:34:13 +09:00
Cheng Zhao
0e50b00fdf Merge pull request #3111 from preco21/master
Add app.md translation into ko-KR, some fixes
2015-10-18 21:45:25 +08:00
Brandon Cash
60b14d03e9 Fix: tray NotfiyDropFiles typo 2015-10-18 00:32:13 -05:00
Haojian Wu
49d25d0069 Fix: savePage API saves external resources in a wrong directory. 2015-10-18 11:28:05 +08:00
Plusb Preco
82e6058607 Update as upstream 2015-10-18 03:30:37 +09:00
Plusb Preco
c46ed897dd Update translation progress in README.md 2015-10-18 03:22:35 +09:00
Haojian Wu
214f8477b3 Fix some typos. 2015-10-17 19:28:14 +08:00
Ivan Žužak
c7d9352972 Merge pull request #3118 from learningjs/thcm
[Tiny correction of misspelling]
2015-10-17 10:10:06 +02:00
Jessica Lord
cd2f924db8 Merge pull request #3117 from ggamel/patch-1
Update MAS tutorial to improve readability
2015-10-16 17:56:32 -07:00
Paul Betts
b958982d99 Rollback submodule change 2015-10-16 17:00:31 -07:00
Paul Betts
a3fc25110e Linter fixes 2015-10-16 16:55:28 -07:00
Paul Betts
5ae6bd2ef4 Wire it up 2015-10-16 16:46:05 -07:00
Paul Betts
7ac643d5f8 Create a new method on App to override URL Security Manager's decisions wrt NTLM 2015-10-16 16:45:54 -07:00
Greg Gamel
5e7a30deea Additional updates to adhere to styleguide
Per @jlord's recommendations.
2015-10-16 18:25:30 -05:00
max_devjs
72078f7b02 [truly humble correction of a misspelling]
Substituting webp with web in frameless-window.md .
2015-10-16 19:56:45 -03:00
Greg Gamel
b5478eaef7 Update MAS tutorial to improve readability
Adjusted tutorial body copy and headings to improve readability, clarify sentences, and fix some (minor) grammatical missteps.
2015-10-16 17:50:41 -05:00
Jessica Lord
1ae4be7571 Merge pull request #3115 from romankl/doc-osx
replace Mac with OS X
2015-10-16 14:21:54 -07:00
Roman Klauke
32523ae352 replace Mac with OS X
Commit 691d8dd replaced "Mac" with "OS X". This commit replaces some
other occurrences.
2015-10-16 22:03:47 +02:00
Eran Tiktin
f0c4c806b5 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-10-16 22:30:18 +03:00
Plusb Preco
c0ee8f4e60 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-10-16 22:36:01 +09:00
Plusb Preco
edd6032ed0 Improve grammar for more readability 2015-10-16 22:26:27 +09:00
Plusb Preco
f05fc3c0ea Improve grammar, some fixes
* Improve grammar
* Fix typos
* Fix some mistranslations
* Fix quotes (' to `)
2015-10-16 22:23:31 +09:00
Cheng Zhao
f0825bf7ef Merge pull request #3109 from fplucas/master
Translation of debugging-main-process to pt-br.
2015-10-16 20:28:34 +08:00
Cheng Zhao
d9fdfb711f Clean up CallbackRegistry
There were some ancient code there.
2015-10-16 20:25:30 +08:00
Cheng Zhao
94f64c755d spec: Load url after event listener is set up 2015-10-16 20:22:04 +08:00
Cheng Zhao
4871ea715c Merge pull request #3103 from bengotow/bengotow/debug-release
Allow "released callback" errors to be traced to remote calls
2015-10-16 20:21:46 +08:00
Cheng Zhao
115bb31ab4 docs: Small fix on mas guide 2015-10-16 20:21:06 +08:00
Lucas
2725068a0c Updating README.md 2015-10-16 09:11:30 -03:00
Lucas Pugliesi
5e5caf2e86 Translation of debugging-main-process to pt-br. 2015-10-16 09:09:24 -03:00
Cheng Zhao
22e9c2f4eb Bump v0.34.0 2015-10-16 18:53:25 +08:00
Cheng Zhao
c371c713a9 Merge pull request #3108 from atom/mas-build
Prepare for MAS build and add a guide
2015-10-16 18:51:45 +08:00
Cheng Zhao
776077c8de Bump v0.33.9 2015-10-16 17:42:55 +08:00
Cheng Zhao
16b9f8995d Revert "Go back to using node's console.* and std*.write"
This reverts commit 4e8db2c3be.

It seems that we still have problems with Node.js's console.* calls, I'm
reverting this for now unitl we get a solution.

Fixes #3100.
2015-10-16 17:38:11 +08:00
Cheng Zhao
18fd126c64 docs: Mac App Store Submission Guide 2015-10-16 17:16:12 +08:00
Cheng Zhao
7bdbe45c91 subpixel-font-scaling option is removed 2015-10-16 15:01:28 +08:00
Cheng Zhao
fb99e72484 Update libchromiumcontent to have mas build 2015-10-16 15:01:28 +08:00
Cheng Zhao
0e94ccb72b Merge pull request #3080 from atom/save-page-api
Implement webContents.savePage API.
2015-10-16 09:52:43 +08:00
Ben Gotow
aeb24b784d Allow "released callback" errors to be traced to remote calls 2015-10-15 18:46:59 -07:00
Cheng Zhao
125444df15 Merge pull request #3101 from fplucas/master
Translation of using-pepper-flash-plugin to pt-br.
2015-10-16 09:25:34 +08:00
Haojian Wu
facd0fbc08 Implement webContents.savePage API. 2015-10-16 09:23:08 +08:00
Lucas Pugliesi
3dba56c335 Translation of using-pepper-flash-plugin to pt-br. 2015-10-15 17:16:48 -03:00
Cheng Zhao
89527ec232 Merge pull request #3097 from fplucas/master
Translation of using-native-node-modules to pt-br.
2015-10-15 23:14:30 +08:00
Lucas Pugliesi
904f3c2564 Translation of using-native-node-modules to pt-br. 2015-10-15 10:52:30 -03:00
Cheng Zhao
d2b3d6d129 Merge pull request #3092 from atom/crash-reporter
Fix problems of crash-reporter on Windows
2015-10-15 19:29:29 +08:00
Cheng Zhao
909779babf spec: Bring back crash-reporter spec on x64 Windows 2015-10-15 18:25:34 +08:00
Cheng Zhao
f5c25d6277 win: Only install breakpad hook when crash-reporter is used 2015-10-15 18:25:07 +08:00
Cheng Zhao
d90b598125 win: Hook up V8 to breakpad
This fixes the crashes happens from V8 not caught by the crash reporter,
for more context, see http://code.google.com/p/v8/issues/detail?id=3597.

Fix #2365.
2015-10-15 16:36:30 +08:00
Cheng Zhao
55d5660ddb win: Make the event in crash service signaled by default
Otherwise it seems to block the crash client on some machines.

Fix #2769.
2015-10-15 16:36:29 +08:00
Cheng Zhao
11a49bba35 win: Fix "enable-larger-than-screen" option spec 2015-10-15 16:36:29 +08:00
Cheng Zhao
6aec8b092c views: Fix crash when setSizeConstrains is called early 2015-10-15 16:36:28 +08:00
Cheng Zhao
f52c4af605 win: Don't output newline except for main process 2015-10-15 12:44:55 +08:00
Plusb Preco
b61baacfe1 Merge pull request #1 from ibocon/translateIntoKR
Add `app.md` translation
2015-10-15 07:59:25 +09:00
Yegun Kim
79311af8eb translate "/docs-translations/ko-KR/api/app.md" 2015-10-15 16:26:24 -05:00
Jessica Lord
7a6ef0ec6e Merge pull request #3084 from kokdemo/master
translate the debugging-main-process.md
2015-10-14 13:58:27 -07:00
kokdemo
4270eba438 translate the debugging-main-process.md 2015-10-15 00:00:52 +08:00
Thomas Johansen
d14b59c754 Merge pull request #3082 from nikarc/patch-1
Update application-distribution.md
2015-10-14 12:42:18 +02:00
Nicholas Arcuri
95c4847d60 Update application-distribution.md
Fix typo on line 38
2015-10-14 06:28:27 -04:00
Cheng Zhao
74d389b2b0 Bump v0.33.8 2015-10-14 12:36:03 +08:00
Cheng Zhao
eb344f3f04 Merge pull request #2920 from atom/mas
Add MAS build
2015-10-14 12:34:46 +08:00
Cheng Zhao
b47076231c mas: Do not link with QTKit for mas build 2015-10-14 11:57:01 +08:00
Cheng Zhao
51335934c1 mac: Set CFBundleExecutable for Electron Framework 2015-10-14 11:54:59 +08:00
Cheng Zhao
d6842751bb mac: Don't specify CFBundleExecutable in framework 2015-10-14 11:54:59 +08:00
Cheng Zhao
96c15f19e3 mac: Set LSApplicationCategoryType in Info.plist 2015-10-14 11:54:58 +08:00
Cheng Zhao
9e51ff2b4b mac: Set CFBundleShortVersionString in Info.plist 2015-10-14 11:54:26 +08:00
Cheng Zhao
48faf74f7f mas: Use mas as platform name in dist 2015-10-14 11:53:53 +08:00
Cheng Zhao
df7a9b80b1 Fix linking error 2015-10-14 11:53:53 +08:00
Cheng Zhao
3afc9c4ebe spec: Disable crash reporter test for MAS build 2015-10-14 11:53:53 +08:00
Cheng Zhao
7b57a945f8 mac: Set process.mas to true for MAS build 2015-10-14 11:53:52 +08:00
Cheng Zhao
b62e3554dc mac: Disable auto updater in MAS build 2015-10-14 11:53:52 +08:00
Cheng Zhao
a9f5667899 mac: Disable crash reporter for MAS build 2015-10-14 11:53:52 +08:00
Cheng Zhao
644af0800c Update brightray for atom/brightray#156 2015-10-14 09:47:46 +08:00
Cheng Zhao
699dafc5db Merge pull request #3076 from kokdemo/master
translate the supported-platforms.md and update the README.md
2015-10-14 09:15:41 +08:00
kokdemo
d152b25fb6 translate the supported-platforms.md and update the README.md 2015-10-14 00:27:17 +08:00
Plusb Preco
af8049941e Update as upstream 2015-10-13 20:53:04 +09:00
Cheng Zhao
d9a4a41293 Merge pull request #3073 from wangdashuaihenshuai/master
doc-translations-zh-CN
2015-10-13 16:13:36 +08:00
Cheng Zhao
ddea2fced4 Merge pull request #3071 from alex-sherwin/patch-1
Fixing "tile" -> "title" typo
2015-10-13 09:32:22 +08:00
Cheng Zhao
34d49441b1 Merge pull request #3070 from deepak1556/v8_value_converter_patch
nativemate: handle binary types in v8 value conversion
2015-10-13 09:05:14 +08:00
Cheng Zhao
b9b25180f8 Update brightray for #2903 2015-10-13 09:04:10 +08:00
Alex Sherwin
b9d838975d Fixing "tile" -> "title" typo 2015-10-12 20:17:06 -04:00
Robo
5ff97c686a nativemate: handle binary types in v8 value conversion 2015-10-13 01:13:59 +05:30
Cheng Zhao
460adfa1bc Merge branch 'master' of https://github.com/preco21/electron into preco21-master 2015-10-12 09:42:10 +08:00
Cheng Zhao
ff9846da48 Merge pull request #3062 from kokdemo/master
translate the application-distrubution.md
2015-10-12 09:39:16 +08:00
Plusb Preco
9de9d2ecc1 Add missing paragraphs 2015-10-12 08:23:30 +09:00
Plusb Preco
799748cc5d Update as upstream, improve grammar 2015-10-12 08:19:44 +09:00
kokdemo
ab1f39589a Merge remote-tracking branch 'atom/master' 2015-10-11 22:28:44 +08:00
kokdemo
9419a2ec2c translate the application-distrubution.md 2015-10-11 22:26:14 +08:00
Cheng Zhao
c58ca76cac Merge pull request #3061 from flying-sheep/patch-1
fixed devtools instructions
2015-10-11 21:45:36 +08:00
Philipp A.
36bbf5d51f fixed devtools instructions 2015-10-11 15:18:27 +02:00
Cheng Zhao
8012792457 Merge pull request #3060 from etiktin/output_fixes
Output to console fixes
2015-10-11 15:19:07 +08:00
Cheng Zhao
2820fa8fd4 Merge pull request #3059 from osanyin/docs-translation
Some docs translated to pt-BR
2015-10-11 15:18:35 +08:00
jinhai.wang
bd95be23f3 fix docs-translations/zh-CN/api ipc-main-process.md '' -> bug 2015-10-11 14:56:23 +08:00
jinhai.wang
6ec184a2ce add new file: ipc-main-process.md 2015-10-11 13:52:06 +08:00
Eran Tiktin
cb903a09c0 Block all internal logs when running without --enable-logging 2015-10-10 20:44:22 +03:00
Eran Tiktin
4e8db2c3be Go back to using node's console.* and std*.write
It seems that whatever issues we had with using the original
implementation of node for `console.*` calls and for
`process.std*.write` on Windows were solved.
So I removed the patch.

Tested it with cmd, cygwin and used spawn and exec and everything seems
to work (except for colors/ansi escape codes, but that didn't work
before anyway).
2015-10-10 20:17:08 +03:00
Rafael Guimarães
692816f9d2 online-offline-events.md translated to pt-BR 2015-10-10 14:01:55 -03:00
Rafael Guimarães
0cd1195eea online-offline-events.md translated to pt-BR 2015-10-10 13:41:32 -03:00
Eran Tiktin
71fdb91f5c Merge remote-tracking branch 'refs/remotes/atom/master' 2015-10-10 18:16:55 +03:00
Cheng Zhao
6d20d37101 Bump v0.33.7 2015-10-10 17:43:56 +08:00
Cheng Zhao
df12f181a4 Can not print string16 in wcout on POSIX 2015-10-10 17:43:56 +08:00
Cheng Zhao
be5f1b09f4 Merge pull request #3056 from etiktin/fix_console_windows
Fix console.* calls on Windows
2015-10-10 17:32:15 +08:00
Plusb Preco
b5b6e30c8b Update as upstream 2015-10-10 15:10:34 +09:00
Plusb Preco
ccd17f060d Merge remote-tracking branch 'atom/master' 2015-10-10 15:10:24 +09:00
Eran Tiktin
c71efc8ca5 Fix process.std*.write
- Support printing Buffer
- Don't add '\n' at the end the chunk
2015-10-10 08:13:27 +03:00
Cheng Zhao
8278ee533d Merge pull request #3055 from kokdemo/master
add translate of app.md in zh-CN
2015-10-10 12:25:48 +08:00
Rafael Guimarães
b6cfa6f967 Copying online-offline-events.md file 2015-10-10 01:20:42 -03:00
Eran Tiktin
1896deb10e Fix console.* calls on Windows
- Calls for console.* on browser process are printed with no need for
--enable-logging
- The output is without the logging prefix
- The cursor in the terminal is always after the last output
- The first output starts on a new line and not at the prompt
- console.* from renderer are not printed to cmd
- Added a missing '\n' in the default_app help output
2015-10-10 06:39:02 +03:00
kokdemo
095b2e6047 add translate of app.md in zh-CN 2015-10-10 11:33:14 +08:00
Eran Tiktin
e682dc7544 Merge remote-tracking branch 'refs/remotes/atom/master' 2015-10-10 06:01:01 +03:00
Rafael Guimarães
4392f1d77c Some fixes 2015-10-09 22:47:07 -03:00
Rafael Guimarães
288572f08e README.md updated 2015-10-09 22:17:21 -03:00
Rafael Guimarães
6cbbce544f Translation to pt-BR of the desktop-environment-integration.md file 2015-10-09 22:15:14 -03:00
Cheng Zhao
8127bbc992 Merge pull request #3046 from mariozaizar/better-translations
Missing translations for ES lang.
2015-10-10 09:13:53 +08:00
Mario Zaizar
9fd46ac4db Revert vendor/ changes added by mistake. 2015-10-09 09:17:54 -07:00
Mario Zaizar
1e13159157 Merge branch 'master' of https://github.com/atom/electron into better-translations 2015-10-09 08:58:07 -07:00
Cheng Zhao
215ca78c7f Update brightray for #3048 2015-10-09 21:08:00 +08:00
Cheng Zhao
0404cc850b Merge pull request #3048 from deepak1556/accept_language_patch
browser: get accept-language header from system locale
2015-10-09 21:05:57 +08:00
Robo
fb5260eb30 browser: get accept-language header from system locale 2015-10-09 13:18:37 +05:30
Mario Zaizar
28b3678159 Removing "Rebranding", "Empaquetamiento" and other minor changes to es/tutorial/application-distribution.md 2015-10-08 23:55:32 -07:00
Mario Zaizar
965471d9f8 Merge branch 'master' of https://github.com/atom/electron into better-translations 2015-10-08 23:24:23 -07:00
Mario Zaizar
d7c67d795b Merge remote-tracking branch 'atom/master' into better-translations 2015-10-08 23:19:32 -07:00
Mario Zaizar
841407a619 Breakdown a super long line inside styleguide.md 2015-10-08 23:19:16 -07:00
Mario Zaizar
1759a71814 Adding /docs-translations/es/styleguide.md 2015-10-08 23:16:15 -07:00
Mario Zaizar
d61bec0fb8 Adding missing links to /docs-translations/es/README.md and improving some texts. 2015-10-08 22:56:11 -07:00
Cheng Zhao
442db4c5ba Merge branch 'xcode-7' of https://github.com/joshaber/electron into joshaber-xcode-7 2015-10-09 12:29:45 +08:00
Cheng Zhao
922fce1892 Merge pull request #3040 from theojulienne/accessibility-fixes
Fix Text to Speech on OS X 10.11
2015-10-09 12:25:11 +08:00
Cheng Zhao
38b27bbd66 Merge pull request #3036 from renatoalencar/master
Add pt-BR translation for quick-start guide
2015-10-09 10:17:02 +08:00
Theo Julienne
6bc59cf2d7 Enable accessibility tree only when VoiceOver enabled, fixes atom/atom#3288. 2015-10-08 15:56:26 -07:00
Theo Julienne
957de56343 NSWorkspace selectFile:inFileViewerRootedAtPath: requires a non-null second argument. 2015-10-08 11:25:05 -07:00
Renato Alencar
1a2b5834ed Merge branch 'master' of https://www.github.com/atom/electron 2015-10-08 12:41:56 -03:00
Cheng Zhao
59b43a6571 Merge pull request #3025 from janwiemers/master
add a --app parameter to the default_app
2015-10-08 16:26:05 +08:00
Jan Wiemers
1a55cd3efe remove the --app option from the default_app documentation 2015-10-08 10:22:37 +02:00
Cheng Zhao
c8122392de Merge pull request #3033 from deepak1556/response_headers_patch
webcontents: dont modify response header value
2015-10-08 16:16:23 +08:00
Cheng Zhao
8b7d2b5ce3 Update brightray and crashpad for XCode 7 fixes 2015-10-08 16:09:22 +08:00
Robo
d9c6cf7b75 webcontents: dont modify response header value 2015-10-08 11:31:41 +05:30
Cheng Zhao
e1318ffb34 Merge pull request #3010 from deepak1556/guest_zoom_level_patch
webcontents: notify guests of embedders' zoom level change
2015-10-08 13:52:22 +08:00
Robo
7756bb6762 webcontents: notify guests of embedders' zoom level change 2015-10-08 10:38:22 +05:30
Cheng Zhao
d9cf9a7cbc docs: Fix wrong level for API titles 2015-10-08 11:14:04 +08:00
Cheng Zhao
87faae1b13 Merge pull request #3027 from stevekinney/minor-style-update-global-shortcut
Minor style update to the global-shortcut documentation
2015-10-08 10:47:39 +08:00
Cheng Zhao
051548aa69 Merge pull request #3024 from preco21/master
Improve grammar, fix small typos
2015-10-08 10:47:00 +08:00
Cheng Zhao
9dd714f056 Fix postMessage not working for windows opened by window.open 2015-10-08 10:44:30 +08:00
Cheng Zhao
fe4d86925b Merge pull request #3020 from atom/fix-switch-path
Fix a wrong usage of switch commandline.
2015-10-08 10:37:09 +08:00
Cheng Zhao
617892400f Merge pull request #3030 from atom/fix-xcode-6
Fix building with Xcode 6
2015-10-08 10:31:41 +08:00
Cheng Zhao
73ab6d409b Fix building with Xcode 6 2015-10-08 10:19:24 +08:00
Cheng Zhao
55715bec23 Merge pull request #3017 from Meyito/API-es
Translations of some of the Electron docs API in Spanish
2015-10-08 09:37:21 +08:00
Cheng Zhao
115526424a Move native modules to optionalDependencies
Fixes #3016.
2015-10-08 09:25:31 +08:00
Renato Alencar
aebc1d0650 grammar and corrections 2015-10-07 18:57:43 -03:00
Jan Wiemers
c7dc901607 add --app parameter and update the example usage in the default_app #1877 2015-10-07 23:22:00 +02:00
Renato Alencar
b1ae60a639 grammar corrections 2015-10-07 14:24:09 -03:00
Renato Alencar
7e7b6df72b Merge branch 'master' of https://github.com/renatoalencar/electron 2015-10-07 14:13:27 -03:00
Renato Alencar
05f0b5a8a4 add quick-start guide pt-BR translation 2015-10-07 14:11:58 -03:00
Steve Kinney
2978beaeb7 💄 Add preposition to globalShortcut.unregisterAll() 2015-10-07 09:03:46 -07:00
Steve Kinney
6f61832a34 💄 Add semicolon to global-shortcut code example
This keeps this line consistent with the rest of the documentation.
2015-10-07 09:03:11 -07:00
Plusb Preco
63c1fdd22a Improve grammar
* Improve the `auto-updater.md` content grammar.
2015-10-07 20:46:57 +09:00
Plusb Preco
3966441d21 Fix small typos 2015-10-07 20:20:34 +09:00
Plusb Preco
579f253340 Fix small typo 2015-10-07 20:19:37 +09:00
Haojian Wu
821005e6b4 Fix a wrong usage of switch commandline.
We should not always save switch path as ascii string, which will not be
handled well on Windows.
2015-10-07 12:17:49 +08:00
Haojian Wu
dcb457e76e Refine API design: desktopCapturer.getSources. 2015-10-07 11:10:35 +08:00
Meyito
871571c65e Translations of some of the Electron docs API in Spanish 2015-10-06 22:09:57 -05:00
joshaber
326af3cbe3 Use Xcode 7. 2015-10-06 16:34:20 -04:00
joshaber
4c3fd38774 This now has to be non-nil. 2015-10-06 16:15:03 -04:00
joshaber
74be1d5b25 ++brightray 2015-10-06 16:14:49 -04:00
joshaber
cab466f999 ++crashpad 2015-10-06 16:14:44 -04:00
joshaber
4cb3e2ecb5 Merge remote-tracking branch 'atom/master' 2015-10-06 14:24:05 -04:00
Eran Tiktin
cb22b88e6a Merge pull request #9 from atom/master
Update from original
2015-10-06 19:26:36 +03:00
Cheng Zhao
5bdc077b48 Update brightray for #2855 2015-10-06 22:45:00 +08:00
Cheng Zhao
927c3f34c3 Guard against undefined, fix #2995
In theory this should never happen, seems like some object is garbage
collected after the JavaScript context has been destroyed.
2015-10-06 22:25:55 +08:00
Cheng Zhao
c916baa939 Update brightray, fix #2315 2015-10-06 21:40:08 +08:00
Cheng Zhao
3a97439fe9 Merge pull request #3005 from preco21/master
Update as upstream
2015-10-06 21:27:50 +08:00
Plusb Preco
c6d5a92d34 Update as upstream 2015-10-06 19:53:35 +09:00
Cheng Zhao
2d802d6f1e Merge branch 'master' into no-vistas-no-problem 2015-10-06 17:02:08 +08:00
Cheng Zhao
fa59ea3bc5 Merge pull request #2998 from brenca/master
Minor fixes to sendInputEvent API.
2015-10-06 16:56:26 +08:00
Cheng Zhao
804cf5e8ba Merge pull request #2994 from etiktin/update_native_modules_doc
Update native modules doc
2015-10-06 16:55:25 +08:00
Cheng Zhao
fc0153f0bc Merge pull request #2993 from etiktin/update_screen_doc
Update screen.md
2015-10-06 16:55:16 +08:00
Cheng Zhao
c823e31904 Merge pull request #2992 from etiktin/update_process_doc
Update process.md
2015-10-06 16:55:10 +08:00
Cheng Zhao
2ef66cb660 Merge pull request #2997 from atom/size-constraints
Improve how we handle min/max sizes
2015-10-06 16:54:45 +08:00
Cheng Zhao
f607e81fac views: Make size constraints work immediately after set 2015-10-06 16:16:02 +08:00
Cheng Zhao
e06778178a linux: Restore size constraints when became sizable 2015-10-06 16:09:03 +08:00
Cheng Zhao
f6327de7f7 spec: Increase timeout for window.open specs 2015-10-06 16:08:32 +08:00
Cheng Zhao
8e40947938 spec: Make window.open specs more reliable 2015-10-06 15:43:36 +08:00
Cheng Zhao
898db4d6bd osx: Set resizable flag when creating window
Setting resizable for frameless window before it is shown will change
its size.
2015-10-06 15:23:23 +08:00
Cheng Zhao
6fea6cf58a osx: Fix setting size constraints for frameless window 2015-10-06 15:15:23 +08:00
Cheng Zhao
428c5b6d01 Setting "x" and "y" should not change window size 2015-10-06 14:50:18 +08:00
Plusb Preco
3f37439da3 Merge remote-tracking branch 'atom/master' 2015-10-06 13:55:06 +09:00
Plusb Preco
db46c1b925 Update as upstream 2015-10-06 13:48:39 +09:00
Eran Tiktin
c3cd438d34 Replace io.js references with node.js references 2015-10-05 21:12:29 +03:00
Heilig Benedek
ccf4ed907a Fix some minor bugs related to KeyboardEvent sending 2015-10-05 19:11:20 +02:00
Cheng Zhao
b70e7c6a4c Remove default definition of ContentSizeToWindowSize 2015-10-06 00:39:16 +08:00
Heilig Benedek
4d302956d3 Merge pull request #1 from atom/master
update
2015-10-05 18:32:04 +02:00
Cheng Zhao
c8723238f8 win: Fix building on Windows 2015-10-06 00:21:37 +08:00
Cheng Zhao
60fb406c61 views: Fix content size constraints in window with menubar 2015-10-06 00:15:47 +08:00
Cheng Zhao
bb49515145 Separate Windows specific code of NativeWindow to another file 2015-10-06 00:13:57 +08:00
Eran Tiktin
87e0c812e9 Update native modules doc 2015-10-05 17:48:48 +03:00
Eran Tiktin
ea3e84e7ff Update screen.md
Removed a trailing comma.
2015-10-05 16:56:36 +03:00
Eran Tiktin
239b97cde1 Update process.md
Fixed the `loaded` example according to
[this](https://github.com/atom/electron/issues/2984#issuecomment-145465907)
comment.
2015-10-05 16:51:49 +03:00
Eran Tiktin
c22ffd863b Merge pull request #8 from atom/master
Update from original
2015-10-05 16:41:30 +03:00
Cheng Zhao
857acd2574 win: Fix GetContentSize for minimized window 2015-10-05 21:06:57 +08:00
Cheng Zhao
3b1ee994e2 views: Remove hack on setting min/max size for frameless window 2015-10-05 20:37:08 +08:00
Cheng Zhao
e675407552 Make min/max size respect use-content-size 2015-10-05 20:36:28 +08:00
Cheng Zhao
d19ead1907 osx: Call setContentMinSize in SetContentSizeConstraints 2015-10-05 20:09:29 +08:00
Cheng Zhao
a9b0111c3e views: Use the quicker way of return content size
Converting content size to window size on high DPI systems will lose
percise and have 1px offset sometimes.
2015-10-05 20:07:20 +08:00
Cheng Zhao
279407f7a3 osx: Fix converting size for frameless window 2015-10-05 20:07:20 +08:00
Cheng Zhao
a76ea00249 views: Implement NativeWindow::SetSizeConstraints 2015-10-05 20:07:20 +08:00
Cheng Zhao
8577f2b52f osx: Add NativeWindow::SetSizeConstraints 2015-10-05 20:07:20 +08:00
Cheng Zhao
526cee7ec3 Merge tag 'v0.33.6' 2015-10-05 19:58:47 +08:00
Cheng Zhao
2d676770b1 Bump v0.33.6 2015-10-05 19:57:30 +08:00
Cheng Zhao
7de3aa3cc1 Fix typo, closes #2990 2015-10-05 19:57:14 +08:00
Cheng Zhao
2b9b4c6789 Merge pull request #2979 from etiktin/fix_calculating_min_max_4_frameless
Fix calculating min/max size in frameless view
2015-10-05 15:10:27 +08:00
Cheng Zhao
de24ed7cea Merge pull request #2985 from etiktin/fix_restore_size_windows
[Windows] Fix restore/unmaximize wrong window size
2015-10-05 15:09:24 +08:00
Haojian Wu
36c0ad7fda Refine more about desktop capturer API.
* Simplify the coffeescript code.
* Add more options in desktopCapturer.startUpdating.
2015-10-05 12:47:01 +08:00
Cheng Zhao
ec0a8a1321 Bump v0.33.5 2015-10-05 11:42:43 +08:00
Cheng Zhao
ad8e727ba2 docs: "loaded" event of "process" 2015-10-05 11:41:36 +08:00
Cheng Zhao
46c69cc3e5 docs: Removed unneeded changes from PR 2015-10-05 11:41:06 +08:00
hansrwindhoff
69140af083 example code didn't run 2015-10-04 20:14:52 -06:00
Eran Tiktin
c34c123b33 Make it work only on Windows
Limiting the solution to Windows only.
2015-10-05 04:01:25 +03:00
Eran Tiktin
4d02fc58fa Fix restore/unmaximize wrong window size
This resolves #2498.
2015-10-05 03:29:02 +03:00
Cheng Zhao
ca6f688013 Update brightray for #877 2015-10-04 22:19:44 +08:00
Haojian Wu
1e69ef79de Refine: make desktop-capturer as a renderer module. 2015-10-04 22:04:41 +08:00
Cheng Zhao
3d4318e15e docs: Remove cache and userCache dir
Closes #1404.
2015-10-04 21:20:05 +08:00
Cheng Zhao
367a61d234 Merge pull request #2982 from atom/ctrl-c
Quit gracefully when Ctrl-C is pressed
2015-10-04 20:48:27 +08:00
Cheng Zhao
d4bfeff6ad Fix crashing on Linux 2015-10-04 20:08:19 +08:00
Cheng Zhao
a2a4970f5f Fix cpplint warnings 2015-10-04 19:36:41 +08:00
Cheng Zhao
0e131f760b Quit gracefully when Ctrl-C is pressed 2015-10-04 19:21:36 +08:00
Cheng Zhao
bdd2f91913 Make Browser::Quit more robust 2015-10-04 19:20:52 +08:00
Cheng Zhao
eb7ed5b456 Merge pull request #2980 from atom/linux-fix-dpi
Do not manually read DPI settings on Linux
2015-10-04 17:18:35 +08:00
Cheng Zhao
74b76102a8 linux: No longer needs to manually read DPI settings
It is now done in brightray by reading the value from GTK+.
2015-10-04 16:53:20 +08:00
Cheng Zhao
add9c38023 linux: Enable force showing menubar
This is for debugging purpose.
2015-10-04 16:33:03 +08:00
Cheng Zhao
791f988aba linux: Fix pressing Alt not showing menubar 2015-10-04 16:32:08 +08:00
Cheng Zhao
5d7cfa1b3a Update brightray for atom/brightray#149 2015-10-04 15:53:09 +08:00
Thomas Johansen
9e880f8d8f Merge pull request #2978 from chriswmercer/patch-1
Minor grammar correction
2015-10-03 22:19:57 +02:00
Eran Tiktin
aea1f8aebb Fix calculating min/max size in frameless views
The minimum and maximum size that frameless windows had used, was
incorrect. It included the border, so when it was called it actually
added that to the size, so window increased in size. The fix makes sure
that the view will use the frameless size.

This fixes #2945 and partially fixes #1806 (it also refers to some other
issues with hidpi which might still exist).
2015-10-03 22:09:57 +03:00
chriswmercer
b4ec7c5aaf Minor grammar correction 2015-10-03 18:03:49 +01:00
Paul Betts
bb938b02d8 Remove Vista as possibly working
Vista crashes on startup because Win7 touch APIs aren't present - this is fine, but we want to tell people out of the gate that it won't work
2015-10-03 09:02:50 -07:00
Cheng Zhao
9a2e2b365d Merge pull request #2976 from atom/node_modules_paths
Prevent Node from adding paths outside the app to search paths
2015-10-03 21:20:19 +08:00
Cheng Zhao
01d2765e4b Prevent Node from adding paths outside this app to search paths 2015-10-03 20:38:39 +08:00
Cheng Zhao
12f46ab533 Merge pull request #2975 from preco21/master
Update as upstream
2015-10-03 20:18:59 +08:00
Cheng Zhao
9fe326ebeb Clear node's global search paths 2015-10-03 19:55:59 +08:00
Cheng Zhao
021ee20400 No need to add "app" to search paths 2015-10-03 17:52:46 +08:00
Plusb Preco
b78bb84424 Update as upstream 2015-10-03 17:54:05 +09:00
Plusb Preco
77fa02e93e Merge remote-tracking branch 'atom/master' 2015-10-03 17:37:05 +09:00
Cheng Zhao
3ca4678705 Merge pull request #2974 from atom/disable-logging
Disable logging unless --enable-logging is specified
2015-10-03 16:15:44 +08:00
Cheng Zhao
55acdcb1ad docs: --enable-logging 2015-10-03 15:43:26 +08:00
Cheng Zhao
3503b62ff2 Disable logging unless --enable-logging is specified 2015-10-03 15:33:55 +08:00
Cheng Zhao
0f9f8e62fc docs: No leading slash in --url-base
Fixes #2968.
2015-10-03 13:54:05 +08:00
Cheng Zhao
651009a1dc docs: Add "Supported Platforms" 2015-10-03 13:42:34 +08:00
Haojian Wu
48fbd47416 Make desktop capture API work on Windows. 2015-10-03 10:51:02 +08:00
Raphael
64640afc20 supported operating system list
Proposed fix for issue #2964
2015-10-02 17:41:57 -07:00
Eran Tiktin
8c31c7fb59 Merge pull request #7 from atom/master
Update from original
2015-10-03 01:25:23 +03:00
Cheng Zhao
24518d13d5 Merge pull request #2965 from jhen0409/patch-1
Fix typo for docs/api/menu-item.md
2015-10-03 01:15:33 +08:00
Jhen
0ecf077590 Fix typo for docs/api/menu-item.md 2015-10-02 21:53:55 +08:00
Haojian Wu
c9fbde321c Implement desktop capture API on OS X. 2015-10-02 19:17:28 +08:00
Cheng Zhao
9eb7c3ac2d Bump v0.33.4 2015-10-02 13:41:50 +08:00
Cheng Zhao
8385a73d69 Merge pull request #2960 from preco21/master
Update as upstream, improve grammar
2015-10-02 12:33:43 +08:00
Plusb Preco
c1fba9b4a5 Update as upstream 2015-10-02 12:46:42 +09:00
Cheng Zhao
f9300e0912 Merge pull request #2950 from atom/revert-2879
Fix the regression of outerHeight and outerWidth being set to 0 in hidden window
2015-10-01 21:01:51 +08:00
Cheng Zhao
5d9e4fc8fd Override document.hidden 2015-10-01 18:39:35 +08:00
Cheng Zhao
8d61531f4e Revert #2879 2015-10-01 17:46:11 +08:00
Cheng Zhao
63c065299a Update brightray for atom/brightray#147 2015-10-01 17:32:20 +08:00
Cheng Zhao
6082b83a65 Update brightray for #2851 2015-10-01 17:03:45 +08:00
Cheng Zhao
e2345163a1 Merge pull request #2948 from atom/devtools-popup-menu
Move devtools methods to WebContents
2015-10-01 16:55:12 +08:00
Cheng Zhao
af971a46bd docs: Move devtools methods to WebContents 2015-10-01 16:30:31 +08:00
Cheng Zhao
ef4014e14b Don't show open dialog as sheet in devtools 2015-10-01 14:46:33 +08:00
Cheng Zhao
ca40ea8e2f Inherit owner window in devtools 2015-10-01 14:41:01 +08:00
Cheng Zhao
1045bbc861 Do not enumerate windows in remote.getCurrentWindow 2015-10-01 14:08:33 +08:00
Cheng Zhao
f2c7943d42 Add WebContents.getOwnerBrowserWindow 2015-10-01 13:45:59 +08:00
Cheng Zhao
83c514001e Move devtools API to WebContents 2015-10-01 11:25:31 +08:00
Cheng Zhao
0fb68e8130 Make Menu.popup accept no parameter 2015-09-30 23:41:23 +08:00
Cheng Zhao
e5e4749eb3 Merge pull request #2942 from arusakov/docs_update_0.33
Update docs v0.33
2015-09-30 22:55:25 +08:00
Alexander Rusakov
d5f81357b6 remove required width and height BrowserWindowOptions 2015-09-30 17:13:20 +03:00
Cheng Zhao
8c3116851d Exit the process when unable to find a valid app
Fixes #2583.
2015-09-30 17:30:28 +08:00
Cheng Zhao
8b65d37861 Merge pull request #2939 from atom/webview-cache-webcontents
Cache remote WebContents object of webview
2015-09-30 17:30:16 +08:00
Cheng Zhao
4fdf6ceb51 Cache remote WebContents object of webview 2015-09-30 16:58:37 +08:00
Cheng Zhao
21f7316a18 Code cleanup 2015-09-30 10:56:42 +08:00
Cheng Zhao
fd2bc76bc9 Merge pull request #2933 from deepak1556/external_protocol_patch
protocol: allowing default clients to handle external unhandled protocols
2015-09-30 10:43:08 +08:00
Plusb Preco
79112288b8 Merge remote-tracking branch 'atom/master' 2015-09-30 11:01:08 +09:00
Plusb Preco
93f58925aa Improve grammar 2015-09-30 10:54:18 +09:00
Robo
464134a31a protocol: allowing default clients to handle external unhandled protocols 2015-09-29 17:52:58 +05:30
Cheng Zhao
17483147eb Merge pull request #2930 from bitdop/patch-1
Grammar modifications/fixes
2015-09-29 13:58:37 +08:00
My-khael Pierce
a0dcfc57b2 Update quick-start.md 2015-09-28 23:09:13 -04:00
Cheng Zhao
d848c1344d Merge pull request #2929 from etiktin/fix_win_state_events
Fix window state events on Windows
2015-09-29 09:37:10 +08:00
Cheng Zhao
305d98abc5 Merge pull request #2926 from brenca/master
Add more detailed documentation about the format of frameBuffer (FrameSubscription API)
2015-09-29 09:25:51 +08:00
Eran Tiktin
ee0f0f6cfc Fix window state events on Windows
This commit fixes the issue we had with window state events not firing
when triggered through Aero Snap.
Instead of listening to command from the system menu (SC_MAXIMIZE etc.),
we use the WM_SIZE event.

This resolves #1381.
2015-09-29 02:20:09 +03:00
Plusb Preco
fa95d32475 Update as upstream, small changes 2015-09-29 05:35:33 +09:00
Heilig Benedek
8734395358 Detalied documentation about frameBuffer's format. 2015-09-28 22:33:43 +02:00
Eran Tiktin
7f1cb9f90a Merge pull request #6 from atom/master
Update from original
2015-09-28 20:33:24 +03:00
Cheng Zhao
a987715222 Merge pull request #2914 from deepak1556/network_emulation_api_patch
session: api to emulate network conditions
2015-09-28 17:02:23 +08:00
Cheng Zhao
1b18a4dfad Update node, fixes #2916 2015-09-28 15:34:52 +08:00
Robo
db0732b35b add examples 2015-09-28 12:52:50 +05:30
Robo
442c79abe0 update brightray 2015-09-28 12:39:55 +05:30
Cheng Zhao
82bb790530 Style fix for #2918 2015-09-28 12:48:33 +08:00
Cheng Zhao
11af4b63ac Merge pull request #2918 from brenca/master
Option to specify button on a MouseEvent and text on a KeyboardEvent when using sendInputEvent
2015-09-28 12:47:22 +08:00
Cheng Zhao
c18fa63db6 Merge pull request #2917 from etiktin/win_dialog_set_default_ex
Set default extension for Windows file dialogs
2015-09-28 12:17:05 +08:00
Heilig Benedek
44ee74a9b1 Style fix 2015-09-28 03:05:08 +02:00
Heilig Benedek
21cd4c1431 Added documentation about the changes 2015-09-28 02:52:16 +02:00
Heilig Benedek
70bdfedabf Added text and unmodifiedtext setting when sending char type keyboard events, and made the type of the character read char16, so I can simulate char events from non-english origins. 2015-09-28 02:41:06 +02:00
Eran Tiktin
6dcc752f67 Set default extension in Windows file dialog
On Windows when you open the save dialog and switch the filter, the
extension is supposed to change accordingly. It didn't happen with the
existing code, since the existing code didn't set the default extension
(should be set to the first filter).

This resolves #2915.
2015-09-28 02:12:47 +03:00
Eran Tiktin
fd9eadd1fa Merge pull request #5 from atom/master
Update from original
2015-09-27 21:33:37 +03:00
Cheng Zhao
6c3a1040aa Merge pull request #2912 from fscherwi/master
standardize package.json
2015-09-27 22:40:46 +08:00
Cheng Zhao
cc912fb7fe Merge pull request #2910 from nekuz0r/module-preload-option
Add ability to preload modules (--require, -r)
2015-09-27 22:32:12 +08:00
Cheng Zhao
0fb0808c7b Merge pull request #2913 from preco21/master
Update as upstream, update example variable name prefix
2015-09-27 22:23:31 +08:00
Robo
fc7f4ae24b session: api to emulate network conditions 2015-09-27 18:55:26 +05:30
Plusb Preco
7923e19553 Merge remote-tracking branch 'atom/master' 2015-09-27 22:20:51 +09:00
Plusb Preco
397fbeae28 Update example variable name prefix (atom to electron)
* Update variable name prefix as `atom` to `electron`
2015-09-27 22:20:35 +09:00
fscherwi
457147365a standardize package.json 2015-09-27 14:44:28 +02:00
Gohy Leandre
9f30e5f526 Add ability to preload modules (--require, -r) 2015-09-26 17:25:07 +02:00
Cheng Zhao
690f859a78 Bump v0.33.3 2015-09-26 22:06:01 +08:00
Cheng Zhao
9c44f6ac9f Merge pull request #2905 from atom/bump-external-binaries
Bump the external binaries version
2015-09-26 21:30:03 +08:00
Plusb Preco
56520159f7 Update as upstream, fix small typo 2015-09-26 10:36:26 +09:00
Josh Abernathy
775c90b733 Use 0.8.0.
This picks up the fix for https://github.com/atom/atom/issues/7061.
2015-09-25 11:37:30 -04:00
Heilig Benedek
bb102717b4 Adding option to specify the button of WebMouseEvent. 2015-09-25 13:01:52 +02:00
Cheng Zhao
c0528c5049 Bump v0.33.2 2015-09-25 17:50:53 +08:00
Cheng Zhao
5de1b20935 Merge pull request #2900 from atom/titlebar-drag
Make draggable region work for window with hidden titlebar
2015-09-25 17:12:53 +08:00
Cheng Zhao
7884a2319c osx: Make draggable region work for window with hidden titlebar 2015-09-25 16:38:36 +08:00
Cheng Zhao
6f944ad49b Clean up code 2015-09-25 16:21:08 +08:00
Cheng Zhao
94e5018a47 Merge pull request #2898 from atom/fix-download-item-doc
Fix inconsistent docs: downloadItem.getURL() => downloadItem.getUrl()
2015-09-25 13:33:49 +08:00
Haojian Wu
4a64d1d946 📝 fix a typo
interrputed => interrupted
2015-09-25 13:13:11 +08:00
Cheng Zhao
004d3ced53 Update node to fix building on Windows 2015-09-25 13:04:54 +08:00
Cheng Zhao
109d8352e1 Update node, fixes #2894 2015-09-25 12:52:16 +08:00
Haojian Wu
01f0643142 Fix inconsistent docs: downloadItem.getURL() => downloadItem.getUrl() 2015-09-25 09:34:04 +08:00
Cheng Zhao
a0638fe801 spec: Suppress the setTimeout test on Travis CI
Not sure why it failed there.
2015-09-24 21:06:24 +08:00
Cheng Zhao
ecefd3540b Merge pull request #2840 from atom/download-item
Add more download supports in Electron
2015-09-24 21:04:25 +08:00
Haojian Wu
06cc133959 Some cleanup. 2015-09-24 19:31:09 +08:00
Cheng Zhao
da57a3101f Call WasShown when showing window
Otherwise WebContents would be invisible when window is hidden at first
and then show later.

Refs #2879.
2015-09-24 18:16:41 +08:00
Cheng Zhao
fc422e5d55 spec: Increase timeout for setTimeout test 2015-09-24 18:08:56 +08:00
Cheng Zhao
10731de9d6 Merge pull request #2879 from deepak1556/web_contents_visibility_patch
browser: notify webcontents hidden when window not shown
2015-09-24 18:00:25 +08:00
Cheng Zhao
c73d1ce6c7 Merge pull request #2877 from kostia/utf8-charset-in-quick-start
📝 Include UTF-8 charset in quick start example
2015-09-24 17:49:35 +08:00
Cheng Zhao
83481a369a Merge branch 'master' of https://github.com/preco21/electron into preco21-master 2015-09-24 17:00:06 +08:00
Haojian Wu
1879392c7b Reimplement downloadItem.getFilename API.
Previously, the suggested file name(Always 'empty') returned by
'download_item->GetSuggestedFilename' is not the same with the default one saved
in local disk.

The patch reimplement this API allowing it to return the default file name, which
is more expected from user.
2015-09-24 16:39:02 +08:00
Cheng Zhao
39695cdb85 docs: Set npm_config_runtime when using npm
Refs https://github.com/mapbox/node-pre-gyp/pull/175.
2015-09-24 16:18:02 +08:00
Haojian Wu
0861d5d44b Redefine 'will-download' design. 2015-09-24 16:04:44 +08:00
Cheng Zhao
62604708d1 Merge pull request #2887 from atom/fix-ffi-crash
Fix crash when using ffi
2015-09-24 15:39:16 +08:00
Cheng Zhao
e3fab8b5b3 spec: Run an example of ffi 2015-09-24 15:08:38 +08:00
Cheng Zhao
497732fb6f Revert "spec: ffi is crashing on OS X"
This reverts commit 706deae1b0.
2015-09-24 15:06:06 +08:00
Cheng Zhao
fe2d9ee0f6 Update libchromium to have the V8 patch 2015-09-24 14:16:45 +08:00
Cheng Zhao
5d26bc08ee Merge pull request #2886 from atom/fix-asar-leak
win: Fix leaking of fd when reading file in asar
2015-09-24 14:00:23 +08:00
Robo
5ca5c4fb92 browser: hide webcontents when window not shown 2015-09-24 10:30:18 +05:30
Cheng Zhao
576257470b spec: Remove the will-navigate test
It is unreliable to test in renderer process, remove it for now.
2015-09-24 12:20:29 +08:00
Cheng Zhao
269f70c12a spec: Reading asar file should not leak fd 2015-09-24 12:15:18 +08:00
Cheng Zhao
9e90ea8734 win: Fix leaking of fd when reading file in asar 2015-09-24 12:11:07 +08:00
Cheng Zhao
9b1fa04988 win: Fix building 2015-09-24 12:01:57 +08:00
Plusb Preco
d621755f13 Update as upstream, improve grammar 2015-09-24 12:47:30 +09:00
Cheng Zhao
e3ec705c80 Merge pull request #2882 from atom/no-guids-in-tray
Remove GUID from Shell_NotifyIcon calls
2015-09-24 11:32:15 +08:00
Paul Betts
b0e5039951 Fix initializer 2015-09-23 11:26:57 -07:00
Paul Betts
22e6f15795 Remove GUID from Shell_NotifyIcon calls
https://github.com/atom/electron/issues/2468#issuecomment-142684129 has
the details
2015-09-23 11:20:26 -07:00
Cheng Zhao
1520ebfe1f Update brightray for #2861 2015-09-23 17:31:26 +08:00
Cheng Zhao
142702866d Merge pull request #2861 from deepak1556/ssl_version_config_patch
browser: switch to set minimum version for TLS fallback
2015-09-23 17:30:26 +08:00
Kostiantyn Kahanskyi
334c28d128 📝 Include UTF-8 charset in quick start example
Partially fixes #678
2015-09-23 10:21:03 +02:00
Cheng Zhao
057c77341a Merge pull request #2875 from atom/fix-buffer-gc
Do not rely garbage collection to free memory of Buffer
2015-09-23 15:58:59 +08:00
Cheng Zhao
706deae1b0 spec: ffi is crashing on OS X 2015-09-23 15:44:50 +08:00
Cheng Zhao
f8f8db7e88 spec: Test whether ffi works 2015-09-23 14:16:07 +08:00
Cheng Zhao
6c01cec8d2 Update node to not rely on GC to free memory 2015-09-23 14:16:07 +08:00
Cheng Zhao
d8062ab9e1 docs: win.setMenu is not available on OS X 2015-09-23 11:45:51 +08:00
Robo
748b1387d2 browser: switch to set minimum version for TLS fallback 2015-09-23 09:10:36 +05:30
Eran Tiktin
d3a79010ea Merge pull request #4 from atom/master
Update from original
2015-09-23 00:59:43 +03:00
Cheng Zhao
6c8a9cb072 Merge pull request #2870 from atom/window-open-options
Pass options in "new-window" event
2015-09-23 00:06:50 +08:00
Cheng Zhao
7165aa5467 Merge pull request #2846 from alexsalas/patch-1
err undefined
2015-09-22 23:42:51 +08:00
Cheng Zhao
8bfa3cba63 docs: The options parameter of new-window event 2015-09-22 23:41:08 +08:00
Cheng Zhao
f2fa0e96eb Pass options in "new-window" event 2015-09-22 23:40:16 +08:00
Cheng Zhao
d0d71efb0b Merge pull request #2869 from atom/inherit-window-open
Inherit parent window's options in window.open
2015-09-22 23:15:01 +08:00
Cheng Zhao
486f16fffa spec: Increase timeout for window.open specs 2015-09-22 22:48:52 +08:00
Cheng Zhao
e499bb14de docs: Mention window.open inherits options 2015-09-22 22:46:44 +08:00
Cheng Zhao
4521db459b spec: window.open should inherit options of parent window 2015-09-22 22:36:46 +08:00
Cheng Zhao
de41890196 Inherit parent window's options in window.open 2015-09-22 22:32:10 +08:00
Cheng Zhao
a6b7dd22e8 Merge pull request #2868 from atom/window-open-full
Add allowpopups attribute for webview
2015-09-22 21:52:07 +08:00
Cheng Zhao
f06f8ae73b spec: Add test for allowpopups attribute 2015-09-22 21:18:04 +08:00
Cheng Zhao
9cbdde2eba docs: allowpopups attribute 2015-09-22 20:13:49 +08:00
Cheng Zhao
f07fea1936 Add allowpopups attribute for webview 2015-09-22 20:11:05 +08:00
Cheng Zhao
7c65d05b02 Don't print error when window.open failed 2015-09-22 19:59:32 +08:00
Haojian Wu
5ef9c7e1a1 Add spec for download item. 2015-09-21 21:44:51 +08:00
Haojian Wu
22168bc6d8 Allow emitting 'done' event when user cancel the download saving dialog. 2015-09-21 21:44:18 +08:00
Haojian Wu
57bf0cb615 Refractor in completed event in DownloadItem.
* Rename `completed` to `done`, making it align with Chromium's style.
* Add 'state' in `done` event's result. It can check the download item final
status: cancelled, completed, interrupted.
2015-09-21 14:00:38 +08:00
Haojian Wu
997ac91fe0 Add donwloadItem.getContentDisposition() API. 2015-09-21 09:38:38 +08:00
Haojian Wu
4391e81dfe Keep compatibility with old APIs. 2015-09-21 09:38:06 +08:00
Haojian Wu
d0ee30101d Fix cpplint warnings. 2015-09-21 09:34:49 +08:00
Haojian Wu
dd38131704 📝 Add DownloadItem doc. 2015-09-21 09:34:42 +08:00
Alexander Salas
40b861bc9c err undefined 2015-09-20 17:58:41 -04:30
joshaber
2365ffe143 Merge remote-tracking branch 'atom/master' 2015-09-20 22:46:36 +01:00
Haojian Wu
5ec74451ef Introduce DownloadItem for supporting more downloading features. 2015-09-20 18:56:10 +08:00
Haojian Wu
87b9b0bc31 Implement session.setOpenDownloadDialog() API. 2015-09-20 18:45:34 +08:00
Plusb Preco
94b6b92e4c Merge remote-tracking branch 'atom/master' 2015-09-19 15:32:20 +09:00
Eran Tiktin
25a2f28501 Merge pull request #3 from atom/master
Update from original
2015-09-16 18:03:20 +03:00
Patrick Detlefsen
6c4016af46 make sure the query params are stripped from the updateUrl 2015-06-22 15:51:47 +02:00
Patrick Detlefsen
154ca8575c limit the auto-updater-win api to very few methods 2015-06-22 15:33:08 +02:00
Patrick Detlefsen
ae5411c37b move squirrel bahaviour into proper place 2015-06-22 15:17:07 +02:00
Patrick Detlefsen
62882fe49e auto updater win is an EventEmitter already 2015-06-16 16:13:23 +02:00
Patrick Detlefsen
a8469fc79d auto-updater extends event-emitter 2015-06-16 12:31:55 +02:00
Patrick Detlefsen
7aa60baafb switch statement coffee else instead of default 2015-06-16 11:48:39 +02:00
Patrick Detlefsen
99f352228c addresses suggestions from pull-request 2015-06-16 11:04:37 +02:00
Patrick Detlefsen
621178f558 initial idea 2015-06-15 20:28:47 +02:00
734 changed files with 47236 additions and 11429 deletions

2
.gitignore vendored
View File

@@ -1,4 +1,6 @@
.DS_Store
.tags*
/.idea/
/build/
/dist/
/external_binaries/

View File

@@ -10,6 +10,7 @@ os:
- osx
env:
- TARGET_ARCH=x64
osx_image: xcode7
matrix:
include:

24
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,24 @@
# Contributor Code of Conduct
As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.
Examples of unacceptable behavior by participants include:
- The use of sexualized language or imagery
- Personal attacks
- Trolling or insulting/derogatory comments
- Public or private harassment
- Publishing other's private information, such as physical or electronic addresses, without explicit permission
- Other unethical or unprofessional conduct
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team.
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community.
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting a project maintainer at [atom@github.com](mailto:atom@github.com). All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. Maintainers are obligated to maintain confidentiality with regard to the reporter of an incident.
This Code of Conduct is adapted from the Contributor Covenant, version 1.3.0, available from http://contributor-covenant.org/version/1/3/0/

80
CONTRIBUTING-ko.md Normal file
View File

@@ -0,0 +1,80 @@
# Electron에 기여하기
:+1::tada: 먼저, 이 프로젝트에 기여해주셔서 감사합니다! :tada::+1:
이 프로젝트는 기여자 규약 [행동강령](CODE_OF_CONDUCT.md)을 준수합니다. 따라서 이
프로젝트의 개발에 참여하려면 이 규약을 지켜야 합니다. 받아들일 수 없는 행위를 발견했을
경우 atom@github.com로 보고 하십시오.
다음 항목들은 Electron에 기여하는 가이드라인을 제시합니다.
참고로 이 항목들은 그저 가이드라인에 불과하며 규칙이 아닙니다. 따라서 스스로의 적절한
판단에 따라 이 문서의 변경을 제안할 수 있으며 변경시 pull request를 넣으면 됩니다.
## 이슈 제출
* [여기](https://github.com/atom/electron/issues/new)에서 새로운 이슈를 만들 수
있습니다. 하지만 이슈를 작성하기 전에 아래의 항목들을 숙지하고 가능한한 이슈 보고에
대해 최대한 많은 정보와 자세한 설명을 포함해야 합니다. 가능하다면 다음 항목을 포함해야
합니다:
* 사용하고 있는 Electron의 버전
* 현재 사용중인 운영체제
* 가능하다면 무엇을 하려고 했고, 어떤 결과를 예측했으며, 어떤 것이 예측된대로
작동하지 않았는지에 대해 서술해야 합니다.
* 추가로 다음 사항을 준수하면 이슈를 해결하는데 큰 도움이 됩니다:
* 스크린샷 또는 GIF 애니메이션 이미지들
* 터미널에 출력된 에러의 내용 또는 개발자 도구, 알림창에 뜬 내용
* [Cursory search](https://github.com/atom/electron/issues?utf8=✓&q=is%3Aissue+)를
통해 이미 비슷한 내용의 이슈가 등록되어있는지 확인
## Pull Request 하기
* 가능한한 스크린샷과 GIF 애니메이션 이미지를 pull request에 추가
* CoffeeScript, JavaScript, C++과 Python등
[참조문서에 정의된 코딩스타일](/docs-translations/ko-KR/development/coding-style.md)을
준수
* [문서 스타일 가이드](/docs-translations/ko-KR/styleguide.md)에 따라 문서를
[Markdown](https://daringfireball.net/projects/markdown) 형식으로 작성.
* 짧은, 현재 시제 커밋 메시지 사용. [커밋 메시지 스타일 가이드](#Git-커밋-메시지)를
참고하세요
## 스타일 가이드
### 공통 코드
* 파일 마지막에 공백 라인(newline) 추가
* 다음 순서에 맞춰서 require 코드 작성:
* Node 빌트인 모듈 (`path` 같은)
* Electron 모듈 (`ipc`, `app` 같은)
* 로컬 모듈 (상대 경로상에 있는)
* 다음 순서에 맞춰서 클래스 속성 지정:
* 클래스 메서드와 속성 (메서드는 `@`로 시작)
* 인스턴스 메서드와 속성
* 플랫폼 종속적인 코드 자제:
* 파일 이름 결합시 `path.join()`을 사용.
* 임시 디렉터리가 필요할 땐 `/tmp` 대신 `os.tmpdir()`을 통해 접근.
* 명시적인 함수 종료가 필요할 땐 `return` 만 사용.
* `return null`, `return undefined`, `null`, 또는 `undefined` 사용 X
### Git 커밋 메시지
* 현재 시제 사용 ("Added feature" 대신 "Add feature" 사용)
* 필수적 분위기(imperative mood) 사용 ("Moves cursor to..." 대신 "Move cursor to..." 사용)
* 첫 줄은 72자에 맞추거나 그 보다 적게 제한
* 자유롭게 필요에 따라 이슈나 PR링크를 참조
* 단순한 문서 변경일 경우 `[ci skip]`을 커밋 메시지에 추가
* 커밋 메시지의 도입부에 의미있는 이모티콘 사용:
* :art: `:art:` 코드의 포맷이나 구조를 개선(추가)했을 때
* :racehorse: `:racehorse:` 성능을 개선했을 때
* :non-potable_water: `:non-potable_water:` 메모리 누수를 연결했을 때
* :memo: `:memo:` 문서를 작성했을 때
* :penguin: `:penguin:` Linux에 대한 패치를 했을 때
* :apple: `:apple:` Mac OS에 대한 패치를 했을 때
* :checkered_flag: `:checkered_flag:` Windows에 대한 패치를 했을 때
* :bug: `:bug:` 버그를 고쳤을 때
* :fire: `:fire:` 코드 또는 파일을 삭제했을 때
* :green_heart: `:green_heart:` CI 빌드를 고쳤을 때
* :white_check_mark: `:white_check_mark:` 테스트를 추가했을 때
* :lock: `:lock:` 보안 문제를 해결했을 때
* :arrow_up: `:arrow_up:` 종속성 라이브러리를 업데이트 했을 때
* :arrow_down: `:arrow_down:` 종속성 라이브러리를 다운그레이드 했을 때
* :shirt: `:shirt:` linter(코드 검사기)의 경고를 제거했을 때

View File

@@ -2,8 +2,9 @@
:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:
This project adheres to the [Contributor Covenant 1.2](http://contributor-covenant.org/version/1/2/0).
By participating, you are expected to uphold this code. Please report unacceptable behavior to atom@github.com.
This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.md).
By participating, you are expected to uphold this code. Please report unacceptable
behavior to atom@github.com.
The following is a set of guidelines for contributing to Electron.
These are just guidelines, not rules, use your best judgment and feel free to
@@ -57,6 +58,7 @@ possible with your report. If you can, please include:
* Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
* Limit the first line to 72 characters or less
* Reference issues and pull requests liberally
* When only changing documentation, include `[ci skip]` in the commit description
* Consider starting the commit message with an applicable emoji:
* :art: `:art:` when improving the format/structure of the code
* :racehorse: `:racehorse:` when improving performance

2
ISSUE_TEMPLATE.md Normal file
View File

@@ -0,0 +1,2 @@
* Electron version:
* Operating system:

View File

@@ -8,18 +8,26 @@
:zap: *프레임워크 이름이 Atom Shell에서 Electron으로 변경되었습니다* :zap:
Electron 프레임워크는 JavaScript, HTML 그리고 CSS를 사용하여 Cross-Platform 데스크톱 어플리케이션을 개발할 수 있도록 해주는 프레임워크입니다. 이 프레임워크는 [io.js](http://iojs.org) 와
[Chromium](http://www.chromium.org)을 기반으로 만들어 졌으며 [Atom Editor](https://github.com/atom/atom)에 사용되고 있습니다.
Electron 프레임워크는 JavaScript, HTML 그리고 CSS를 사용하여
Cross-Platform 데스크톱 어플리케이션을 개발할 수 있도록 해주는 프레임워크입니다.
[Node.js](https://nodejs.org/)와 [Chromium](http://www.chromium.org)을 기반으로
만들어졌으며 [Atom Editor](https://github.com/atom/atom)에 사용되고 있습니다.
Electron에 대한 중요한 알림을 받고 싶다면 Twitter에서 [@ElectronJS](https://twitter.com/electronjs)를 팔로우 하세요.
Electron에 대한 중요한 알림을 받고 싶다면 Twitter에서
[@ElectronJS](https://twitter.com/electronjs)를 팔로우 하세요.
이 프로젝트는 기여자 규약 1.2를 준수합니다. 이 프로젝트에 참여할 때 코드를 유지해야 합니다. 받아들일 수 없는 행동은 atom@github.com로 보고 하십시오.
이 프로젝트는 기여자 규약 [행동강령](CODE_OF_CONDUCT.md)을 준수합니다. 따라서 이
프로젝트의 개발에 참여하려면 이 규약을 지켜야 합니다. 받아들일 수 없는 행위를 발견했을
경우 atom@github.com로 보고 하십시오.
## 다운로드
Linux, Windows, Mac용으로 미리 빌드된 Electron 바이너리와 디버그 심볼이 준비되어 있습니다. [releases](https://github.com/atom/electron/releases) 페이지에서 받아 볼 수 있습니다.
Linux, Windows, OS X 용으로 미리 빌드된 Electron 바이너리와 디버그 심볼이 준비되어
있습니다. [releases](https://github.com/atom/electron/releases) 페이지에서 받아 볼
수 있습니다.
또한 [`npm`](https://docs.npmjs.com/)을 통해 미리 빌드된 Electron 바이너리를 받을 수도 있습니다:
또한 [`npm`](https://docs.npmjs.com/)을 통해 미리 빌드된 Electron 바이너리를 설치할
수도 있습니다:
```sh
# $PATH에 `electron` 커맨드를 등록하고 전역에 설치합니다.
@@ -35,24 +43,38 @@ npm install electron-prebuilt --save-dev
## 참조 문서
[Docs](https://github.com/atom/electron/tree/master/docs/README.md)에 개발 가이드와 API 레퍼런스가 있습니다.
Electron을 빌드 하는 방법과 프로젝트에 기여하는 방법도 문서에 포함되어 있으니 참고하시기 바랍니다.
[Docs](https://github.com/atom/electron/tree/master/docs/README.md)에 개발 지침과
API 레퍼런스가 있습니다. Electron을 빌드 하는 방법과 프로젝트에 기여하는법 또한 문서에
포함되어 있으니 참고하시기 바랍니다.
## 참조 문서 (번역)
- [브라질 포르투](https://github.com/atom/electron/tree/master/docs-translations/pt-BR)
- [브라질 포르투](https://github.com/atom/electron/tree/master/docs-translations/pt-BR)
- [한국어](https://github.com/atom/electron/tree/master/docs-translations/ko-KR)
- [일본어](https://github.com/atom/electron/tree/master/docs-translations/jp)
- [스페인어](https://github.com/atom/electron/tree/master/docs-translations/es)
- [중국어 간체](https://github.com/atom/electron/tree/master/docs-translations/zh-CN)
- [중국어 번체](https://github.com/atom/electron/tree/master/docs-translations/zh-TW)
- [우크라이나어](https://github.com/atom/electron/tree/master/docs-translations/uk-UA)
- [러시아어](https://github.com/atom/electron/tree/master/docs-translations/ru-RU)
- [프랑스어](https://github.com/atom/electron/tree/master/docs-translations/fr-FR)
## 시작하기
[`atom/electron-quick-start`](https://github.com/atom/electron-quick-start)
저장소를 클론하여 Electron을 간단히 접해볼 수 있습니다.
## 커뮤니티
다음 링크를 통해 커뮤니티에 질문을 올리거나 토론을 나누실 수 있습니다:
다음 링크를 통해 커뮤니티에 질문을 올리거나 토론을 나 수 있습니다:
- Atom 포럼의 [`electron`](http://discuss.atom.io/category/electron) 카테고리
- Freenode 채팅의 `#atom-shell` 채널
- Atom 포럼의 [`electron`](http://discuss.atom.io/c/electron) 카테고리
- Freenode 채팅의 `#atom-shell` 채널
- Slack의 [`Atom`](http://atom-slack.herokuapp.com/) 채널
- [`electron-br`](https://electron-br.slack.com) *(브라질)* 커뮤니티
- [`electron-kr`](http://www.meetup.com/electron-kr/) *(한국)* 커뮤니티
- [`electron-jp`](https://electron-jp-slackin.herokuapp.com/) *(일본)* 커뮤니티
[awesome-electron](https://github.com/sindresorhus/awesome-electron) 프로젝트엔 커뮤니티가 운영중인 유용한 예제 어플리케이션과 도구, 리소스가 있으니 한번 참고해 보시기 바랍니다.
[awesome-electron](https://github.com/sindresorhus/awesome-electron) 프로젝트
커뮤니티가 운영중인 유용한 예제 어플리케이션과 도구, 리소스가 있으니 한번 참고해 보시기
바랍니다.

View File

@@ -7,20 +7,20 @@
:zap: *Formerly known as Atom Shell* :zap:
The Electron framework lets you write cross-platform desktop applications
using JavaScript, HTML and CSS. It is based on [io.js](http://iojs.org) and
using JavaScript, HTML and CSS. It is based on [Node.js](https://nodejs.org/) and
[Chromium](http://www.chromium.org) and is used in the [Atom
editor](https://github.com/atom/atom).
Follow [@ElectronJS](https://twitter.com/electronjs) on Twitter for important
announcements.
This project adheres to the [Contributor Covenant 1.2](http://contributor-covenant.org/version/1/2/0).
By participating, you are expected to uphold this code. Please report
unacceptable behavior to atom@github.com.
This project adheres to the Contributor Covenant [code of conduct](CODE_OF_CONDUCT.md).
By participating, you are expected to uphold this code. Please report unacceptable
behavior to atom@github.com.
## Downloads
Prebuilt binaries and debug symbols of Electron for Linux, Windows and Mac can
Prebuilt binaries and debug symbols of Electron for Linux, Windows and OS X can
be found on the [releases](https://github.com/atom/electron/releases) page.
You can also use [`npm`](https://docs.npmjs.com/) to install prebuilt electron
@@ -52,15 +52,26 @@ contains documents describing how to build and contribute to Electron.
- [Spanish](https://github.com/atom/electron/tree/master/docs-translations/es)
- [Simplified Chinese](https://github.com/atom/electron/tree/master/docs-translations/zh-CN)
- [Traditional Chinese](https://github.com/atom/electron/tree/master/docs-translations/zh-TW)
- [Ukrainian](https://github.com/atom/electron/tree/master/docs-translations/uk-UA)
- [Russian](https://github.com/atom/electron/tree/master/docs-translations/ru-RU)
- [French](https://github.com/atom/electron/tree/master/docs-translations/fr-FR)
## Quick Start
Clone and run the [`atom/electron-quick-start`](https://github.com/atom/electron-quick-start)
repository to see a minimal Electron app in action.
## Community
You can ask questions and interact with the community in the following
You can ask questions and interact with the community in the following
locations:
- [`electron`](http://discuss.atom.io/category/electron) category on the Atom
- [`electron`](http://discuss.atom.io/c/electron) category on the Atom
forums
- `#atom-shell` channel on Freenode
- [`Atom`](http://atom-slack.herokuapp.com/) channel on Slack
- [`electron-br`](https://electron-br.slack.com) *(Brazilian Portuguese)*
- [`electron-kr`](http://www.meetup.com/electron-kr/) *(Korean)*
- [`electron-jp`](https://electron-jp-slackin.herokuapp.com/) *(Japanese)*
Check out [awesome-electron](https://github.com/sindresorhus/awesome-electron)
Check out [awesome-electron](https://github.com/sindresorhus/awesome-electron)
for a community maintained list of useful example apps, tools and resources.

23
appveyor.yml Normal file
View File

@@ -0,0 +1,23 @@
# appveyor file
# http://www.appveyor.com/docs/appveyor-yml
version: "{build}"
init:
- git config --global core.autocrlf input
platform:
- x86
- x64
install:
- cmd: SET PATH=C:\Program Files (x86)\MSBuild\12.0\bin\;%PATH%
- cmd: SET PATH=C:\python27;%PATH%
- cmd: python script/cibuild
branches:
only:
- master
# disable build and test pahses
build: off
test: off

144
atom.gyp
View File

@@ -4,7 +4,7 @@
'product_name%': 'Electron',
'company_name%': 'GitHub, Inc',
'company_abbr%': 'github',
'version%': '0.33.1',
'version%': '0.36.10',
},
'includes': [
'filenames.gypi',
@@ -28,7 +28,7 @@
'target_name': '<(project_name)',
'type': 'executable',
'dependencies': [
'compile_coffee',
'js2asar',
'<(project_name)_lib',
],
'sources': [
@@ -64,9 +64,6 @@
'files': [
'<(PRODUCT_DIR)/<(product_name) Helper.app',
'<(PRODUCT_DIR)/<(product_name) Framework.framework',
'external_binaries/Squirrel.framework',
'external_binaries/ReactiveCocoa.framework',
'external_binaries/Mantle.framework',
],
},
{
@@ -109,10 +106,20 @@
'<@(locale_dirs)',
],
},
]
}, { # OS=="mac"
'dependencies': [
'make_locale_paks',
],
'conditions': [
['mas_build==0', {
'copies': [
{
'destination': '<(PRODUCT_DIR)/<(product_name).app/Contents/Frameworks',
'files': [
'external_binaries/Squirrel.framework',
'external_binaries/ReactiveCocoa.framework',
'external_binaries/Mantle.framework',
],
},
],
}],
],
}], # OS!="mac"
['OS=="win"', {
@@ -137,6 +144,7 @@
}, {
'copied_libraries': [
'<(libchromiumcontent_dir)/pdf.dll',
'<(libchromiumcontent_dir)/ffmpeg.dll',
],
}],
],
@@ -144,6 +152,7 @@
'destination': '<(PRODUCT_DIR)',
'files': [
'<@(copied_libraries)',
'<(libchromiumcontent_dir)/locales',
'<(libchromiumcontent_dir)/libEGL.dll',
'<(libchromiumcontent_dir)/libGLESv2.dll',
'<(libchromiumcontent_dir)/icudtl.dat',
@@ -185,6 +194,7 @@
}, {
'copied_libraries': [
'<(PRODUCT_DIR)/lib/libnode.so',
'<(libchromiumcontent_dir)/libffmpeg.so',
],
}],
],
@@ -192,6 +202,7 @@
'destination': '<(PRODUCT_DIR)',
'files': [
'<@(copied_libraries)',
'<(libchromiumcontent_dir)/locales',
'<(libchromiumcontent_dir)/icudtl.dat',
'<(libchromiumcontent_dir)/content_shell.pak',
'<(libchromiumcontent_dir)/natives_blob.bin',
@@ -212,7 +223,7 @@
'target_name': '<(project_name)_lib',
'type': 'static_library',
'dependencies': [
'atom_coffee2c',
'atom_js2c',
'vendor/brightray/brightray.gyp:brightray',
'vendor/node/node.gyp:node',
],
@@ -224,6 +235,8 @@
# Defined in Chromium but not exposed in its gyp file.
'V8_USE_EXTERNAL_STARTUP_DATA',
'ENABLE_PLUGINS',
'ENABLE_PEPPER_CDMS',
'USE_PROPRIETARY_CODECS',
],
'sources': [
'<@(lib_sources)',
@@ -245,6 +258,12 @@
'vendor/node/deps/cares/include',
# The `third_party/WebKit/Source/platform/weborigin/SchemeRegistry.h` is using `platform/PlatformExport.h`.
'<(libchromiumcontent_src_dir)/third_party/WebKit/Source',
# The 'third_party/libyuv/include/libyuv/scale_argb.h' is using 'libyuv/basic_types.h'.
'<(libchromiumcontent_src_dir)/third_party/libyuv/include',
# The 'third_party/webrtc/modules/desktop_capture/desktop_frame.h' is using 'webrtc/base/scoped_ptr.h'.
'<(libchromiumcontent_src_dir)/third_party/',
'<(libchromiumcontent_src_dir)/components/cdm',
'<(libchromiumcontent_src_dir)/third_party/widevine',
],
'direct_dependent_settings': {
'include_dirs': [
@@ -271,6 +290,7 @@
'-lcomctl32.lib',
'-lcomdlg32.lib',
'-lwininet.lib',
'-lwinmm.lib',
],
},
'dependencies': [
@@ -285,12 +305,28 @@
'vendor/breakpad/breakpad.gyp:breakpad_sender',
],
}], # OS=="win"
['OS=="mac"', {
['OS=="mac" and mas_build==0', {
'dependencies': [
'vendor/crashpad/client/client.gyp:crashpad_client',
'vendor/crashpad/handler/handler.gyp:crashpad_handler',
],
}], # OS=="mac"
'link_settings': {
# Do not link with QTKit for mas build.
'libraries': [
'$(SDKROOT)/System/Library/Frameworks/QTKit.framework',
],
},
}], # OS=="mac" and mas_build==0
['OS=="mac" and mas_build==1', {
'defines': [
'MAS_BUILD',
],
'sources!': [
'atom/browser/auto_updater_mac.mm',
'atom/common/crash_reporter/crash_reporter_mac.h',
'atom/common/crash_reporter/crash_reporter_mac.mm',
],
}], # OS=="mac" and mas_build==1
['OS=="linux"', {
'link_settings': {
'ldflags': [
@@ -317,11 +353,11 @@
],
}, # target <(product_name)_lib
{
'target_name': 'compile_coffee',
'target_name': 'js2asar',
'type': 'none',
'actions': [
{
'action_name': 'compile_coffee',
'action_name': 'js2asar',
'variables': {
'conditions': [
['OS=="mac"', {
@@ -332,41 +368,41 @@
],
},
'inputs': [
'<@(coffee_sources)',
'<@(js_sources)',
],
'outputs': [
'<(resources_path)/atom.asar',
],
'action': [
'python',
'tools/coffee2asar.py',
'tools/js2asar.py',
'<@(_outputs)',
'<@(_inputs)',
],
}
],
}, # target compile_coffee
}, # target js2asar
{
'target_name': 'atom_coffee2c',
'target_name': 'atom_js2c',
'type': 'none',
'actions': [
{
'action_name': 'atom_coffee2c',
'action_name': 'atom_js2c',
'inputs': [
'<@(coffee2c_sources)',
'<@(js2c_sources)',
],
'outputs': [
'<(SHARED_INTERMEDIATE_DIR)/atom_natives.h',
],
'action': [
'python',
'tools/coffee2c.py',
'tools/js2c.py',
'<@(_outputs)',
'<@(_inputs)',
],
}
],
}, # target atom_coffee2c
}, # target atom_js2c
],
'conditions': [
['OS=="mac"', {
@@ -393,9 +429,6 @@
'libraries': [
'$(SDKROOT)/System/Library/Frameworks/Carbon.framework',
'$(SDKROOT)/System/Library/Frameworks/QuartzCore.framework',
'external_binaries/Squirrel.framework',
'external_binaries/ReactiveCocoa.framework',
'external_binaries/Mantle.framework',
],
},
'mac_bundle': 1,
@@ -430,6 +463,7 @@
}, {
'copied_libraries': [
'<(PRODUCT_DIR)/libnode.dylib',
'<(libchromiumcontent_dir)/libffmpeg.dylib',
],
}],
],
@@ -439,12 +473,6 @@
'<@(copied_libraries)',
],
},
{
'destination': '<(PRODUCT_DIR)/<(product_name) Framework.framework/Versions/A/Resources',
'files': [
'<(PRODUCT_DIR)/crashpad_handler',
],
},
],
'postbuilds': [
{
@@ -475,6 +503,35 @@
'Libraries',
],
},
{
'postbuild_name': 'Copy locales',
'action': [
'tools/mac/copy-locales.py',
'-d',
'<(libchromiumcontent_dir)/locales',
'${BUILT_PRODUCTS_DIR}/<(product_name) Framework.framework/Resources',
'<@(locales)',
],
},
],
'conditions': [
['mas_build==0', {
'link_settings': {
'libraries': [
'external_binaries/Squirrel.framework',
'external_binaries/ReactiveCocoa.framework',
'external_binaries/Mantle.framework',
],
},
'copies': [
{
'destination': '<(PRODUCT_DIR)/<(product_name) Framework.framework/Versions/A/Resources',
'files': [
'<(PRODUCT_DIR)/crashpad_handler',
],
},
],
}],
],
}, # target framework
{
@@ -500,31 +557,6 @@
},
}, # target helper
],
}, { # OS=="mac"
'targets': [
{
'target_name': 'make_locale_paks',
'type': 'none',
'actions': [
{
'action_name': 'Make Empty Paks',
'inputs': [
'tools/make_locale_paks.py',
],
'outputs': [
'<(PRODUCT_DIR)/locales'
],
'action': [
'python',
'tools/make_locale_paks.py',
'<(PRODUCT_DIR)',
'<@(locales)',
],
'msvs_cygwin_shell': 0,
},
],
},
],
}], # OS!="mac"
],
}

View File

@@ -11,12 +11,21 @@
#include "atom/common/chrome_version.h"
#include "atom/common/options_switches.h"
#include "base/command_line.h"
#include "base/files/file_util.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "content/public/common/content_constants.h"
#include "content/public/common/pepper_plugin_info.h"
#include "content/public/common/user_agent.h"
#include "ppapi/shared_impl/ppapi_permissions.h"
#include "third_party/widevine/cdm/stub/widevine_cdm_version.h"
#include "ui/base/l10n/l10n_util.h"
#include "url/url_constants.h"
#if defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS)
#include "chrome/common/widevine_cdm_constants.h"
#endif
namespace atom {
@@ -31,8 +40,8 @@ content::PepperPluginInfo CreatePepperFlashInfo(const base::FilePath& path,
plugin.path = path;
plugin.permissions = ppapi::PERMISSION_ALL_BITS;
std::vector<std::string> flash_version_numbers;
base::SplitString(version, '.', &flash_version_numbers);
std::vector<std::string> flash_version_numbers = base::SplitString(
version, ".", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
if (flash_version_numbers.size() < 1)
flash_version_numbers.push_back("11");
// |SplitString()| puts in an empty string given an empty string. :(
@@ -47,7 +56,7 @@ content::PepperPluginInfo CreatePepperFlashInfo(const base::FilePath& path,
// E.g., "Shockwave Flash 10.2 r154":
plugin.description = plugin.name + " " + flash_version_numbers[0] + "." +
flash_version_numbers[1] + " r" + flash_version_numbers[2];
plugin.version = JoinString(flash_version_numbers, '.');
plugin.version = base::JoinString(flash_version_numbers, ".");
content::WebPluginMimeType swf_mime_type(
content::kFlashPluginSwfMimeType,
content::kFlashPluginSwfExtension,
@@ -62,8 +71,95 @@ content::PepperPluginInfo CreatePepperFlashInfo(const base::FilePath& path,
return plugin;
}
#if defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS)
content::PepperPluginInfo CreateWidevineCdmInfo(const base::FilePath& path,
const std::string& version) {
content::PepperPluginInfo widevine_cdm;
widevine_cdm.is_out_of_process = true;
widevine_cdm.path = path;
widevine_cdm.name = kWidevineCdmDisplayName;
widevine_cdm.description = kWidevineCdmDescription +
std::string(" (version: ") +
version + ")";
widevine_cdm.version = version;
content::WebPluginMimeType widevine_cdm_mime_type(
kWidevineCdmPluginMimeType,
kWidevineCdmPluginExtension,
kWidevineCdmPluginMimeTypeDescription);
// Add the supported codecs as if they came from the component manifest.
std::vector<std::string> codecs;
codecs.push_back(kCdmSupportedCodecVorbis);
codecs.push_back(kCdmSupportedCodecVp8);
codecs.push_back(kCdmSupportedCodecVp9);
#if defined(USE_PROPRIETARY_CODECS)
codecs.push_back(kCdmSupportedCodecAac);
codecs.push_back(kCdmSupportedCodecAvc1);
#endif // defined(USE_PROPRIETARY_CODECS)
std::string codec_string = base::JoinString(
codecs, std::string(1, kCdmSupportedCodecsValueDelimiter));
widevine_cdm_mime_type.additional_param_names.push_back(
base::ASCIIToUTF16(kCdmSupportedCodecsParamName));
widevine_cdm_mime_type.additional_param_values.push_back(
base::ASCIIToUTF16(codec_string));
widevine_cdm.mime_types.push_back(widevine_cdm_mime_type);
widevine_cdm.permissions = kWidevineCdmPluginPermissions;
return widevine_cdm;
}
#endif
void ConvertStringWithSeparatorToVector(std::vector<std::string>* vec,
const char* separator,
const char* cmd_switch) {
auto command_line = base::CommandLine::ForCurrentProcess();
auto string_with_separator = command_line->GetSwitchValueASCII(cmd_switch);
if (!string_with_separator.empty())
*vec = base::SplitString(string_with_separator, separator,
base::TRIM_WHITESPACE,
base::SPLIT_WANT_NONEMPTY);
}
} // namespace
void AddPepperFlashFromCommandLine(
std::vector<content::PepperPluginInfo>* plugins) {
auto command_line = base::CommandLine::ForCurrentProcess();
auto flash_path = command_line->GetSwitchValueNative(
switches::kPpapiFlashPath);
if (flash_path.empty())
return;
auto flash_version = command_line->GetSwitchValueASCII(
switches::kPpapiFlashVersion);
plugins->push_back(
CreatePepperFlashInfo(base::FilePath(flash_path), flash_version));
}
#if defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS)
void AddWidevineCdmFromCommandLine(
std::vector<content::PepperPluginInfo>* plugins) {
auto command_line = base::CommandLine::ForCurrentProcess();
auto widevine_cdm_path = command_line->GetSwitchValueNative(
switches::kWidevineCdmPath);
if (widevine_cdm_path.empty())
return;
if (!base::PathExists(base::FilePath(widevine_cdm_path)))
return;
auto widevine_cdm_version = command_line->GetSwitchValueASCII(
switches::kWidevineCdmVersion);
if (widevine_cdm_version.empty())
return;
plugins->push_back(CreateWidevineCdmInfo(base::FilePath(widevine_cdm_path),
widevine_cdm_version));
}
#endif
AtomContentClient::AtomContentClient() {
}
@@ -80,35 +176,41 @@ std::string AtomContentClient::GetUserAgent() const {
ATOM_PRODUCT_NAME "/" ATOM_VERSION_STRING);
}
base::string16 AtomContentClient::GetLocalizedString(int message_id) const {
return l10n_util::GetStringUTF16(message_id);
}
void AtomContentClient::AddAdditionalSchemes(
std::vector<std::string>* standard_schemes,
std::vector<url::SchemeWithType>* standard_schemes,
std::vector<std::string>* savable_schemes) {
auto command_line = base::CommandLine::ForCurrentProcess();
auto custom_schemes = command_line->GetSwitchValueASCII(
switches::kRegisterStandardSchemes);
if (!custom_schemes.empty()) {
std::vector<std::string> schemes;
base::SplitString(custom_schemes, ',', &schemes);
standard_schemes->insert(standard_schemes->end(),
schemes.begin(),
schemes.end());
std::vector<std::string> schemes;
ConvertStringWithSeparatorToVector(&schemes, ",",
switches::kRegisterStandardSchemes);
if (!schemes.empty()) {
for (const std::string& scheme : schemes)
standard_schemes->push_back({scheme.c_str(), url::SCHEME_WITHOUT_PORT});
}
standard_schemes->push_back("chrome-extension");
standard_schemes->push_back({"chrome-extension", url::SCHEME_WITHOUT_PORT});
}
void AtomContentClient::AddPepperPlugins(
std::vector<content::PepperPluginInfo>* plugins) {
auto command_line = base::CommandLine::ForCurrentProcess();
auto flash_path = command_line->GetSwitchValueNative(
switches::kPpapiFlashPath);
if (flash_path.empty())
return;
AddPepperFlashFromCommandLine(plugins);
#if defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS)
AddWidevineCdmFromCommandLine(plugins);
#endif
}
auto flash_version = command_line->GetSwitchValueASCII(
switches::kPpapiFlashVersion);
plugins->push_back(
CreatePepperFlashInfo(base::FilePath(flash_path), flash_version));
void AtomContentClient::AddServiceWorkerSchemes(
std::set<std::string>* service_worker_schemes) {
std::vector<std::string> schemes;
ConvertStringWithSeparatorToVector(&schemes, ",",
switches::kRegisterServiceWorkerSchemes);
if (!schemes.empty()) {
for (const std::string& scheme : schemes)
service_worker_schemes->insert(scheme);
}
service_worker_schemes->insert(url::kFileScheme);
}
} // namespace atom

View File

@@ -5,6 +5,7 @@
#ifndef ATOM_APP_ATOM_CONTENT_CLIENT_H_
#define ATOM_APP_ATOM_CONTENT_CLIENT_H_
#include <set>
#include <string>
#include <vector>
@@ -21,11 +22,14 @@ class AtomContentClient : public brightray::ContentClient {
// content::ContentClient:
std::string GetProduct() const override;
std::string GetUserAgent() const override;
base::string16 GetLocalizedString(int message_id) const override;
void AddAdditionalSchemes(
std::vector<std::string>* standard_schemes,
std::vector<url::SchemeWithType>* standard_schemes,
std::vector<std::string>* savable_schemes) override;
void AddPepperPlugins(
std::vector<content::PepperPluginInfo>* plugins) override;
void AddServiceWorkerSchemes(
std::set<std::string>* service_worker_schemes) override;
private:
DISALLOW_COPY_AND_ASSIGN(AtomContentClient);

View File

@@ -10,6 +10,7 @@
#include "base/at_exit.h"
#include "base/i18n/icu_util.h"
#include "base/mac/bundle_locations.h"
#include "base/mac/scoped_nsautorelease_pool.h"
#include "brightray/common/mac/main_application_bundle.h"
#include "content/public/app/content_main.h"
@@ -25,6 +26,7 @@ int AtomMain(int argc, const char* argv[]) {
int AtomInitializeICUandStartNode(int argc, char *argv[]) {
base::AtExitManager atexit_manager;
base::mac::ScopedNSAutoreleasePool pool;
base::mac::SetOverrideFrameworkBundlePath(
brightray::MainApplicationBundlePath()
.Append("Contents")

View File

@@ -5,13 +5,8 @@
#include "atom/app/atom_main.h"
#include <stdlib.h>
#include <string.h>
#if defined(OS_WIN)
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
#include <windows.h>
#include <shellscalingapi.h>
#include <tchar.h>
@@ -36,10 +31,27 @@
#include "base/at_exit.h"
#include "base/i18n/icu_util.h"
#if defined(OS_WIN)
namespace {
const char* kRunAsNode = "ELECTRON_RUN_AS_NODE";
const char* kOldRunAsNode = "ATOM_SHELL_INTERNAL_RUN_AS_NODE";
bool IsEnvSet(const char* name) {
#if defined(OS_WIN)
size_t required_size;
getenv_s(&required_size, nullptr, 0, name);
return required_size != 0;
#else
char* indicator = getenv(name);
return indicator && indicator[0] != '\0';
#endif
}
bool IsRunAsNode() {
return IsEnvSet(kRunAsNode) || IsEnvSet(kOldRunAsNode);
}
#if defined(OS_WIN)
// Win8.1 supports monitor-specific DPI scaling.
bool SetProcessDpiAwarenessWrapper(PROCESS_DPI_AWARENESS value) {
typedef HRESULT(WINAPI *SetProcessDpiAwarenessPtr)(PROCESS_DPI_AWARENESS);
@@ -77,24 +89,22 @@ void EnableHighDPISupport() {
SetProcessDPIAwareWrapper();
}
}
#endif
} // namespace
#if defined(OS_WIN)
int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd, int) {
int argc = 0;
wchar_t** wargv = ::CommandLineToArgvW(::GetCommandLineW(), &argc);
scoped_ptr<base::Environment> env(base::Environment::Create());
// Make output work in console if we are not in cygiwn.
std::string os;
if (env->GetVar("OS", &os) && os != "cygwin") {
if (!IsEnvSet("TERM") && !IsEnvSet("ELECTRON_NO_ATTACH_CONSOLE")) {
AttachConsole(ATTACH_PARENT_PROCESS);
FILE* dontcare;
freopen_s(&dontcare, "CON", "w", stdout);
freopen_s(&dontcare, "CON", "w", stderr);
freopen_s(&dontcare, "CON", "r", stdin);
}
// Convert argv to to UTF8
@@ -131,16 +141,12 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd, int) {
}
}
std::string node_indicator, crash_service_indicator;
if (env->GetVar("ATOM_SHELL_INTERNAL_RUN_AS_NODE", &node_indicator) &&
node_indicator == "1") {
if (IsRunAsNode()) {
// Now that argv conversion is done, we can finally start.
base::AtExitManager atexit_manager;
base::i18n::InitializeICU();
return atom::NodeMain(argc, argv);
} else if (env->GetVar("ATOM_SHELL_INTERNAL_CRASH_SERVICE",
&crash_service_indicator) &&
crash_service_indicator == "1") {
} else if (IsEnvSet("ATOM_SHELL_INTERNAL_CRASH_SERVICE")) {
return crash_service::Main(cmd);
}
@@ -164,8 +170,7 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd, int) {
#elif defined(OS_LINUX) // defined(OS_WIN)
int main(int argc, const char* argv[]) {
char* node_indicator = getenv("ATOM_SHELL_INTERNAL_RUN_AS_NODE");
if (node_indicator != NULL && strcmp(node_indicator, "1") == 0) {
if (IsRunAsNode()) {
base::i18n::InitializeICU();
base::AtExitManager atexit_manager;
return atom::NodeMain(argc, const_cast<char**>(argv));
@@ -182,8 +187,7 @@ int main(int argc, const char* argv[]) {
#else // defined(OS_LINUX)
int main(int argc, const char* argv[]) {
char* node_indicator = getenv("ATOM_SHELL_INTERNAL_RUN_AS_NODE");
if (node_indicator != NULL && strcmp(node_indicator, "1") == 0) {
if (IsRunAsNode()) {
return AtomInitializeICUandStartNode(argc, const_cast<char**>(argv));
}

View File

@@ -5,6 +5,7 @@
#include "atom/app/atom_main_delegate.h"
#include <string>
#include <iostream>
#include "atom/app/atom_content_client.h"
#include "atom/browser/atom_browser_client.h"
@@ -15,11 +16,22 @@
#include "base/debug/stack_trace.h"
#include "base/environment.h"
#include "base/logging.h"
#include "chrome/common/chrome_paths.h"
#include "content/public/common/content_switches.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
namespace atom {
namespace {
bool IsBrowserProcess(base::CommandLine* cmd) {
std::string process_type = cmd->GetSwitchValueASCII(switches::kProcessType);
return process_type.empty();
}
} // namespace
AtomMainDelegate::AtomMainDelegate() {
}
@@ -27,10 +39,16 @@ AtomMainDelegate::~AtomMainDelegate() {
}
bool AtomMainDelegate::BasicStartupComplete(int* exit_code) {
// Disable logging out to debug.log on Windows
auto command_line = base::CommandLine::ForCurrentProcess();
logging::LoggingSettings settings;
#if defined(OS_WIN)
// On Windows the terminal returns immediately, so we add a new line to
// prevent output in the same line as the prompt.
if (IsBrowserProcess(command_line))
std::wcout << std::endl;
#if defined(DEBUG)
// Print logging to debug.log on Windows
settings.logging_dest = logging::LOG_TO_ALL;
settings.log_file = L"debug.log";
settings.lock_log = logging::LOCK_LOG_FILE;
@@ -41,15 +59,29 @@ bool AtomMainDelegate::BasicStartupComplete(int* exit_code) {
#else // defined(OS_WIN)
settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
#endif // !defined(OS_WIN)
// Only enable logging when --enable-logging is specified.
scoped_ptr<base::Environment> env(base::Environment::Create());
if (!command_line->HasSwitch(switches::kEnableLogging) &&
!env->HasVar("ELECTRON_ENABLE_LOGGING")) {
settings.logging_dest = logging::LOG_NONE;
logging::SetMinLogLevel(logging::LOG_NUM_SEVERITIES);
}
logging::InitLogging(settings);
// Logging with pid and timestamp.
logging::SetLogItems(true, false, true, false);
#if defined(DEBUG) && defined(OS_LINUX)
// Enable convient stack printing.
base::debug::EnableInProcessStackDumping();
bool enable_stack_dumping = env->HasVar("ELECTRON_ENABLE_STACK_DUMPING");
#if defined(DEBUG) && defined(OS_LINUX)
enable_stack_dumping = true;
#endif
if (enable_stack_dumping)
base::debug::EnableInProcessStackDumping();
chrome::RegisterPathProvider();
return brightray::MainDelegate::BasicStartupComplete(exit_code);
}
@@ -71,16 +103,9 @@ void AtomMainDelegate::PreSandboxStartup() {
}
// Only append arguments for browser process.
if (!process_type.empty())
if (!IsBrowserProcess(command_line))
return;
#if defined(OS_WIN)
// Disable the LegacyRenderWidgetHostHWND, it made frameless windows unable
// to move and resize. We may consider enabling it again after upgraded to
// Chrome 38, which should have fixed the problem.
command_line->AppendSwitch(switches::kDisableLegacyIntermediateWindow);
#endif
// Disable renderer sandbox for most of node's functions.
command_line->AppendSwitch(switches::kNoSandbox);
@@ -113,16 +138,4 @@ scoped_ptr<brightray::ContentClient> AtomMainDelegate::CreateContentClient() {
return scoped_ptr<brightray::ContentClient>(new AtomContentClient).Pass();
}
void AtomMainDelegate::AddDataPackFromPath(
ui::ResourceBundle* bundle, const base::FilePath& pak_dir) {
#if defined(OS_WIN)
bundle->AddDataPackFromPath(
pak_dir.Append(FILE_PATH_LITERAL("ui_resources_200_percent.pak")),
ui::SCALE_FACTOR_200P);
bundle->AddDataPackFromPath(
pak_dir.Append(FILE_PATH_LITERAL("content_resources_200_percent.pak")),
ui::SCALE_FACTOR_200P);
#endif
}
} // namespace atom

View File

@@ -25,8 +25,6 @@ class AtomMainDelegate : public brightray::MainDelegate {
// brightray::MainDelegate:
scoped_ptr<brightray::ContentClient> CreateContentClient() override;
void AddDataPackFromPath(
ui::ResourceBundle* bundle, const base::FilePath& pak_dir) override;
#if defined(OS_MACOSX)
void OverrideChildProcessPath() override;
void OverrideFrameworkBundlePath() override;

View File

@@ -7,8 +7,8 @@
#include "atom/app/uv_task_runner.h"
#include "atom/browser/javascript_environment.h"
#include "atom/browser/node_debugger.h"
#include "atom/common/node_includes.h"
#include "base/command_line.h"
#include "atom/common/node_includes.h"
#include "base/thread_task_runner_handle.h"
#include "gin/array_buffer.h"
#include "gin/public/isolate_holder.h"
@@ -19,25 +19,22 @@ namespace atom {
int NodeMain(int argc, char *argv[]) {
base::CommandLine::Init(argc, argv);
argv = uv_setup_args(argc, argv);
int exec_argc;
const char** exec_argv;
node::Init(&argc, const_cast<const char**>(argv), &exec_argc, &exec_argv);
int exit_code = 1;
{
// Feed gin::PerIsolateData with a task runner.
argv = uv_setup_args(argc, argv);
uv_loop_t* loop = uv_default_loop();
scoped_refptr<UvTaskRunner> uv_task_runner(new UvTaskRunner(loop));
base::ThreadTaskRunnerHandle handle(uv_task_runner);
gin::V8Initializer::LoadV8Snapshot();
gin::V8Initializer::LoadV8Natives();
gin::IsolateHolder::Initialize(
gin::IsolateHolder::kNonStrictMode,
gin::ArrayBufferAllocator::SharedInstance());
JavascriptEnvironment gin_env;
int exec_argc;
const char** exec_argv;
node::Init(&argc, const_cast<const char**>(argv), &exec_argc, &exec_argv);
node::Environment* env = node::CreateEnvironment(
gin_env.isolate(), loop, gin_env.context(), argc, argv,
exec_argc, exec_argv);

View File

@@ -37,7 +37,7 @@ bool UvTaskRunner::PostNonNestableDelayedTask(
const tracked_objects::Location& from_here,
const base::Closure& task,
base::TimeDelta delay) {
return PostDelayedTask(from_here, task, delay);;
return PostDelayedTask(from_here, task, delay);
}
// static
@@ -48,8 +48,13 @@ void UvTaskRunner::OnTimeout(uv_timer_t* timer) {
self->tasks_[timer].Run();
self->tasks_.erase(timer);
uv_unref(reinterpret_cast<uv_handle_t*>(timer));
delete timer;
uv_timer_stop(timer);
uv_close(reinterpret_cast<uv_handle_t*>(timer), UvTaskRunner::OnClose);
}
// static
void UvTaskRunner::OnClose(uv_handle_t* handle) {
delete reinterpret_cast<uv_timer_t*>(handle);
}
} // namespace atom

View File

@@ -31,6 +31,7 @@ class UvTaskRunner : public base::SingleThreadTaskRunner {
private:
static void OnTimeout(uv_timer_t* timer);
static void OnClose(uv_handle_t* handle);
uv_loop_t* loop_;

View File

@@ -7,33 +7,39 @@
#include <string>
#include <vector>
#if defined(OS_WIN)
#include <shlobj.h>
#endif
#include "atom/browser/api/atom_api_menu.h"
#include "atom/browser/api/atom_api_session.h"
#include "atom/browser/api/atom_api_web_contents.h"
#include "atom/browser/atom_browser_context.h"
#include "atom/browser/atom_browser_main_parts.h"
#include "atom/browser/browser.h"
#include "atom/browser/api/atom_api_web_contents.h"
#include "atom/browser/login_handler.h"
#include "atom/common/native_mate_converters/callback.h"
#include "atom/common/native_mate_converters/net_converter.h"
#include "atom/common/native_mate_converters/file_path_converter.h"
#include "atom/common/native_mate_converters/gurl_converter.h"
#include "atom/common/native_mate_converters/image_converter.h"
#include "atom/common/node_includes.h"
#include "atom/common/options_switches.h"
#include "base/command_line.h"
#include "base/environment.h"
#include "base/files/file_path.h"
#include "base/path_service.h"
#include "brightray/browser/brightray_paths.h"
#include "chrome/common/chrome_paths.h"
#include "content/public/browser/client_certificate_delegate.h"
#include "content/public/browser/gpu_data_manager.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/common/content_switches.h"
#include "native_mate/dictionary.h"
#include "native_mate/object_template_builder.h"
#include "net/ssl/ssl_cert_request_info.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/image/image.h"
#if defined(OS_WIN)
#include "base/strings/utf_string_conversions.h"
#include "ui/base/win/shell.h"
#endif
using atom::Browser;
@@ -61,21 +67,6 @@ struct Converter<Browser::UserTask> {
};
#endif
template<>
struct Converter<scoped_refptr<net::X509Certificate>> {
static v8::Local<v8::Value> ToV8(
v8::Isolate* isolate,
const scoped_refptr<net::X509Certificate>& val) {
mate::Dictionary dict(isolate, v8::Object::New(isolate));
std::string encoded_data;
net::X509Certificate::GetPEMEncoded(
val->os_cert_handle(), &encoded_data);
dict.Set("data", encoded_data);
dict.Set("issuerName", val->issuer().GetDisplayName());
return dict.GetHandle();
}
};
} // namespace mate
@@ -99,22 +90,47 @@ int GetPathConstant(const std::string& name) {
return base::DIR_HOME;
else if (name == "temp")
return base::DIR_TEMP;
else if (name == "userDesktop")
else if (name == "userDesktop" || name == "desktop")
return base::DIR_USER_DESKTOP;
else if (name == "exe")
return base::FILE_EXE;
else if (name == "module")
return base::FILE_MODULE;
else if (name == "documents")
return chrome::DIR_USER_DOCUMENTS;
else if (name == "downloads")
return chrome::DIR_DEFAULT_DOWNLOADS;
else if (name == "music")
return chrome::DIR_USER_MUSIC;
else if (name == "pictures")
return chrome::DIR_USER_PICTURES;
else if (name == "videos")
return chrome::DIR_USER_VIDEOS;
else
return -1;
}
bool NotificationCallbackWrapper(
const ProcessSingleton::NotificationCallback& callback,
const base::CommandLine::StringVector& cmd,
const base::FilePath& cwd) {
// Make sure the callback is called after app gets ready.
if (Browser::Get()->is_ready()) {
callback.Run(cmd, cwd);
} else {
scoped_refptr<base::SingleThreadTaskRunner> task_runner(
base::ThreadTaskRunnerHandle::Get());
task_runner->PostTask(
FROM_HERE, base::Bind(base::IgnoreResult(callback), cmd, cwd));
}
// ProcessSingleton needs to know whether current process is quiting.
return !Browser::Get()->is_shutting_down();
}
void OnClientCertificateSelected(
v8::Isolate* isolate,
std::shared_ptr<content::ClientCertificateDelegate> delegate,
mate::Arguments* args) {
v8::Locker locker(isolate);
v8::HandleScope handle_scope(isolate);
mate::Dictionary cert_data;
if (!(args->Length() == 1 && args->GetNext(&cert_data))) {
args->ThrowError();
@@ -128,18 +144,29 @@ void OnClientCertificateSelected(
net::X509Certificate::CreateCertificateListFromBytes(
encoded_data.data(), encoded_data.size(),
net::X509Certificate::FORMAT_AUTO);
delegate->ContinueWithCertificate(certs[0].get());
}
void PassLoginInformation(scoped_refptr<LoginHandler> login_handler,
mate::Arguments* args) {
base::string16 username, password;
if (args->GetNext(&username) && args->GetNext(&password))
login_handler->Login(username, password);
else
login_handler->CancelAuth();
}
} // namespace
App::App() {
static_cast<AtomBrowserClient*>(AtomBrowserClient::Get())->set_delegate(this);
Browser::Get()->AddObserver(this);
content::GpuDataManager::GetInstance()->AddObserver(this);
}
App::~App() {
static_cast<AtomBrowserClient*>(AtomBrowserClient::Get())->set_delegate(
nullptr);
Browser::Get()->RemoveObserver(this);
content::GpuDataManager::GetInstance()->RemoveObserver(this);
}
@@ -157,7 +184,13 @@ void App::OnWindowAllClosed() {
}
void App::OnQuit() {
Emit("quit");
int exitCode = AtomBrowserMainParts::Get()->GetExitCode();
Emit("quit", exitCode);
if (process_singleton_.get()) {
process_singleton_->Cleanup();
process_singleton_.reset();
}
}
void App::OnOpenFile(bool* prevent_default, const std::string& file_path) {
@@ -177,26 +210,62 @@ void App::OnWillFinishLaunching() {
}
void App::OnFinishLaunching() {
// Create the defaultSession.
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
auto browser_context = static_cast<AtomBrowserContext*>(
AtomBrowserMainParts::Get()->browser_context());
auto handle = Session::CreateFrom(isolate(), browser_context);
default_session_.Reset(isolate(), handle.ToV8());
Emit("ready");
}
void App::OnSelectCertificate(
void App::OnLogin(LoginHandler* login_handler) {
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
bool prevent_default = Emit(
"login",
WebContents::CreateFrom(isolate(), login_handler->GetWebContents()),
login_handler->request(),
login_handler->auth_info(),
base::Bind(&PassLoginInformation, make_scoped_refptr(login_handler)));
// Default behavior is to always cancel the auth.
if (!prevent_default)
login_handler->CancelAuth();
}
void App::AllowCertificateError(
int pid,
int fid,
int cert_error,
const net::SSLInfo& ssl_info,
const GURL& request_url,
content::ResourceType resource_type,
bool overridable,
bool strict_enforcement,
bool expired_previous_decision,
const base::Callback<void(bool)>& callback,
content::CertificateRequestResultType* request) {
auto rfh = content::RenderFrameHost::FromID(pid, fid);
auto web_contents = content::WebContents::FromRenderFrameHost(rfh);
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
bool prevent_default = Emit("certificate-error",
WebContents::CreateFrom(isolate(), web_contents),
request_url,
net::ErrorToString(cert_error),
ssl_info.cert,
callback);
// Deny the certificate by default.
if (!prevent_default)
*request = content::CERTIFICATE_REQUEST_RESULT_TYPE_DENY;
}
void App::SelectClientCertificate(
content::WebContents* web_contents,
net::SSLCertRequestInfo* cert_request_info,
scoped_ptr<content::ClientCertificateDelegate> delegate) {
std::shared_ptr<content::ClientCertificateDelegate>
shared_delegate(delegate.release());
bool prevent_default =
Emit("select-certificate",
api::WebContents::CreateFrom(isolate(), web_contents),
Emit("select-client-certificate",
WebContents::CreateFrom(isolate(), web_contents),
cert_request_info->host_and_port.ToString(),
cert_request_info->client_certs,
base::Bind(&OnClientCertificateSelected,
@@ -242,22 +311,42 @@ void App::SetDesktopName(const std::string& desktop_name) {
#endif
}
void App::SetAppUserModelId(const std::string& app_id) {
#if defined(OS_WIN)
base::string16 app_id_utf16 = base::UTF8ToUTF16(app_id);
SetCurrentProcessExplicitAppUserModelID(app_id_utf16.c_str());
#endif
void App::AllowNTLMCredentialsForAllDomains(bool should_allow) {
auto browser_context = static_cast<AtomBrowserContext*>(
AtomBrowserMainParts::Get()->browser_context());
browser_context->AllowNTLMCredentialsForAllDomains(should_allow);
}
std::string App::GetLocale() {
return l10n_util::GetApplicationLocale("");
}
v8::Local<v8::Value> App::DefaultSession(v8::Isolate* isolate) {
if (default_session_.IsEmpty())
return v8::Null(isolate);
else
return v8::Local<v8::Value>::New(isolate, default_session_);
#if defined(OS_WIN)
bool App::IsAeroGlassEnabled() {
return ui::win::IsAeroGlassEnabled();
}
#endif
bool App::MakeSingleInstance(
const ProcessSingleton::NotificationCallback& callback) {
if (process_singleton_.get())
return false;
base::FilePath user_dir;
PathService::Get(brightray::DIR_USER_DATA, &user_dir);
process_singleton_.reset(new ProcessSingleton(
user_dir, base::Bind(NotificationCallbackWrapper, callback)));
switch (process_singleton_->NotifyOtherProcessOrCreate()) {
case ProcessSingleton::NotifyResult::LOCK_ERROR:
case ProcessSingleton::NotifyResult::PROFILE_IN_USE:
case ProcessSingleton::NotifyResult::PROCESS_NOTIFIED:
process_singleton_.reset();
return true;
case ProcessSingleton::NotifyResult::PROCESS_NONE:
default: // Shouldn't be needed, but VS warns if it is not there.
return false;
}
}
mate::ObjectTemplateBuilder App::GetObjectTemplateBuilder(
@@ -265,6 +354,7 @@ mate::ObjectTemplateBuilder App::GetObjectTemplateBuilder(
auto browser = base::Unretained(Browser::Get());
return mate::ObjectTemplateBuilder(isolate)
.SetMethod("quit", base::Bind(&Browser::Quit, browser))
.SetMethod("exit", base::Bind(&Browser::Exit, browser))
.SetMethod("focus", base::Bind(&Browser::Focus, browser))
.SetMethod("getVersion", base::Bind(&Browser::GetVersion, browser))
.SetMethod("setVersion", base::Bind(&Browser::SetVersion, browser))
@@ -275,16 +365,24 @@ mate::ObjectTemplateBuilder App::GetObjectTemplateBuilder(
base::Bind(&Browser::AddRecentDocument, browser))
.SetMethod("clearRecentDocuments",
base::Bind(&Browser::ClearRecentDocuments, browser))
.SetMethod("setAppUserModelId",
base::Bind(&Browser::SetAppUserModelID, browser))
#if defined(OS_MACOSX)
.SetMethod("hide", base::Bind(&Browser::Hide, browser))
.SetMethod("show", base::Bind(&Browser::Show, browser))
#endif
#if defined(OS_WIN)
.SetMethod("setUserTasks",
base::Bind(&Browser::SetUserTasks, browser))
.SetMethod("isAeroGlassEnabled", &App::IsAeroGlassEnabled)
#endif
.SetMethod("setPath", &App::SetPath)
.SetMethod("getPath", &App::GetPath)
.SetMethod("setDesktopName", &App::SetDesktopName)
.SetMethod("setAppUserModelId", &App::SetAppUserModelId)
.SetMethod("allowNTLMCredentialsForAllDomains",
&App::AllowNTLMCredentialsForAllDomains)
.SetMethod("getLocale", &App::GetLocale)
.SetProperty("defaultSession", &App::DefaultSession);
.SetMethod("makeSingleInstance", &App::MakeSingleInstance);
}
// static
@@ -301,6 +399,16 @@ namespace {
void AppendSwitch(const std::string& switch_string, mate::Arguments* args) {
auto command_line = base::CommandLine::ForCurrentProcess();
if (switch_string == atom::switches::kPpapiFlashPath ||
switch_string == atom::switches::kClientCertificate ||
switch_string == switches::kLogNetLog) {
base::FilePath path;
args->GetNext(&path);
command_line->AppendSwitchPath(switch_string, path);
return;
}
std::string value;
if (args->GetNext(&value))
command_line->AppendSwitchASCII(switch_string, value);
@@ -346,6 +454,7 @@ void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
dict.SetMethod("dockHide", base::Bind(&Browser::DockHide, browser));
dict.SetMethod("dockShow", base::Bind(&Browser::DockShow, browser));
dict.SetMethod("dockSetMenu", &DockSetMenu);
dict.SetMethod("dockSetIcon", base::Bind(&Browser::DockSetIcon, browser));
#endif
}

View File

@@ -8,7 +8,10 @@
#include <string>
#include "atom/browser/api/event_emitter.h"
#include "atom/browser/atom_browser_client.h"
#include "atom/browser/browser_observer.h"
#include "atom/common/native_mate_converters/callback.h"
#include "chrome/browser/process_singleton.h"
#include "content/public/browser/gpu_data_manager_observer.h"
#include "native_mate/handle.h"
@@ -24,7 +27,8 @@ namespace atom {
namespace api {
class App : public mate::EventEmitter,
class App : public AtomBrowserClient::Delegate,
public mate::EventEmitter,
public BrowserObserver,
public content::GpuDataManagerObserver {
public:
@@ -44,7 +48,22 @@ class App : public mate::EventEmitter,
void OnActivate(bool has_visible_windows) override;
void OnWillFinishLaunching() override;
void OnFinishLaunching() override;
void OnSelectCertificate(
void OnLogin(LoginHandler* login_handler) override;
// content::ContentBrowserClient:
void AllowCertificateError(
int render_process_id,
int render_frame_id,
int cert_error,
const net::SSLInfo& ssl_info,
const GURL& request_url,
content::ResourceType resource_type,
bool overridable,
bool strict_enforcement,
bool expired_previous_decision,
const base::Callback<void(bool)>& callback,
content::CertificateRequestResultType* request) override;
void SelectClientCertificate(
content::WebContents* web_contents,
net::SSLCertRequestInfo* cert_request_info,
scoped_ptr<content::ClientCertificateDelegate> delegate) override;
@@ -64,11 +83,16 @@ class App : public mate::EventEmitter,
const base::FilePath& path);
void SetDesktopName(const std::string& desktop_name);
void SetAppUserModelId(const std::string& app_id);
void AllowNTLMCredentialsForAllDomains(bool should_allow);
bool MakeSingleInstance(
const ProcessSingleton::NotificationCallback& callback);
std::string GetLocale();
v8::Local<v8::Value> DefaultSession(v8::Isolate* isolate);
v8::Global<v8::Value> default_session_;
#if defined(OS_WIN)
bool IsAeroGlassEnabled();
#endif
scoped_ptr<ProcessSingleton> process_singleton_;
DISALLOW_COPY_AND_ASSIGN(App);
};

View File

@@ -5,12 +5,31 @@
#include "atom/browser/api/atom_api_auto_updater.h"
#include "base/time/time.h"
#include "atom/browser/auto_updater.h"
#include "atom/browser/browser.h"
#include "atom/browser/native_window.h"
#include "atom/browser/window_list.h"
#include "atom/common/native_mate_converters/callback.h"
#include "atom/common/node_includes.h"
#include "native_mate/dictionary.h"
#include "native_mate/object_template_builder.h"
namespace mate {
template<>
struct Converter<base::Time> {
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
const base::Time& val) {
v8::MaybeLocal<v8::Value> date = v8::Date::New(
isolate->GetCurrentContext(), val.ToJsTime());
if (date.IsEmpty())
return v8::Null(isolate);
else
return date.ToLocalChecked();
}
};
} // namespace mate
namespace atom {
namespace api {
@@ -20,11 +39,18 @@ AutoUpdater::AutoUpdater() {
}
AutoUpdater::~AutoUpdater() {
auto_updater::AutoUpdater::SetDelegate(NULL);
auto_updater::AutoUpdater::SetDelegate(nullptr);
}
void AutoUpdater::OnError(const std::string& error) {
Emit("error", error);
void AutoUpdater::OnError(const std::string& message) {
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
auto error = v8::Exception::Error(mate::StringToV8(isolate(), message));
EmitCustomEvent(
"error",
error->ToObject(isolate()->GetCurrentContext()).ToLocalChecked(),
// Message is also emitted to keep compatibility with old code.
message);
}
void AutoUpdater::OnCheckingForUpdate() {
@@ -42,26 +68,36 @@ void AutoUpdater::OnUpdateNotAvailable() {
void AutoUpdater::OnUpdateDownloaded(const std::string& release_notes,
const std::string& release_name,
const base::Time& release_date,
const std::string& update_url,
const base::Closure& quit_and_install) {
quit_and_install_ = quit_and_install;
Emit("update-downloaded-raw", release_notes, release_name,
release_date.ToJsTime(), update_url);
const std::string& url) {
Emit("update-downloaded", release_notes, release_name, release_date, url,
// Keep compatibility with old APIs.
base::Bind(&AutoUpdater::QuitAndInstall, base::Unretained(this)));
}
void AutoUpdater::OnWindowAllClosed() {
QuitAndInstall();
}
mate::ObjectTemplateBuilder AutoUpdater::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return mate::ObjectTemplateBuilder(isolate)
.SetMethod("setFeedUrl", &auto_updater::AutoUpdater::SetFeedURL)
.SetMethod("setFeedURL", &auto_updater::AutoUpdater::SetFeedURL)
.SetMethod("checkForUpdates", &auto_updater::AutoUpdater::CheckForUpdates)
.SetMethod("_quitAndInstall", &AutoUpdater::QuitAndInstall);
.SetMethod("quitAndInstall", &AutoUpdater::QuitAndInstall);
}
void AutoUpdater::QuitAndInstall() {
if (quit_and_install_.is_null())
Browser::Get()->Shutdown();
else
quit_and_install_.Run();
// If we don't have any window then quitAndInstall immediately.
WindowList* window_list = WindowList::GetInstance();
if (window_list->size() == 0) {
auto_updater::AutoUpdater::QuitAndInstall();
return;
}
// Otherwise do the restart after all windows have been closed.
window_list->AddObserver(this);
for (NativeWindow* window : *window_list)
window->Close();
}
// static

View File

@@ -7,9 +7,9 @@
#include <string>
#include "base/callback.h"
#include "atom/browser/api/event_emitter.h"
#include "atom/browser/auto_updater_delegate.h"
#include "atom/browser/auto_updater.h"
#include "atom/browser/window_list_observer.h"
#include "native_mate/handle.h"
namespace atom {
@@ -17,7 +17,8 @@ namespace atom {
namespace api {
class AutoUpdater : public mate::EventEmitter,
public auto_updater::AutoUpdaterDelegate {
public auto_updater::Delegate,
public WindowListObserver {
public:
static mate::Handle<AutoUpdater> Create(v8::Isolate* isolate);
@@ -25,17 +26,18 @@ class AutoUpdater : public mate::EventEmitter,
AutoUpdater();
virtual ~AutoUpdater();
// AutoUpdaterDelegate implementations.
// Delegate implementations.
void OnError(const std::string& error) override;
void OnCheckingForUpdate() override;
void OnUpdateAvailable() override;
void OnUpdateNotAvailable() override;
void OnUpdateDownloaded(
const std::string& release_notes,
const std::string& release_name,
const base::Time& release_date,
const std::string& update_url,
const base::Closure& quit_and_install) override;
void OnUpdateDownloaded(const std::string& release_notes,
const std::string& release_name,
const base::Time& release_date,
const std::string& update_url) override;
// WindowListObserver:
void OnWindowAllClosed() override;
// mate::Wrappable implementations:
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
@@ -44,8 +46,6 @@ class AutoUpdater : public mate::EventEmitter,
private:
void QuitAndInstall();
base::Closure quit_and_install_;
DISALLOW_COPY_AND_ASSIGN(AutoUpdater);
};

View File

@@ -7,7 +7,6 @@
#include "atom/common/native_mate_converters/callback.h"
#include "atom/common/native_mate_converters/gurl_converter.h"
#include "atom/common/native_mate_converters/value_converter.h"
#include "base/bind.h"
#include "base/time/time.h"
#include "base/values.h"
#include "content/public/browser/browser_context.h"
@@ -20,139 +19,21 @@
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_getter.h"
using atom::api::Cookies;
using content::BrowserThread;
namespace {
bool GetCookieListFromStore(
net::CookieStore* cookie_store,
const std::string& url,
const net::CookieMonster::GetCookieListCallback& callback) {
DCHECK(cookie_store);
GURL gurl(url);
net::CookieMonster* monster = cookie_store->GetCookieMonster();
// Empty url will match all url cookies.
if (url.empty()) {
monster->GetAllCookiesAsync(callback);
return true;
}
if (!gurl.is_valid())
return false;
monster->GetAllCookiesForURLAsync(gurl, callback);
return true;
}
void RunGetCookiesCallbackOnUIThread(v8::Isolate* isolate,
const std::string& error_message,
const net::CookieList& cookie_list,
const Cookies::CookiesCallback& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
v8::Locker locker(isolate);
v8::HandleScope handle_scope(isolate);
if (!error_message.empty()) {
v8::Local<v8::Value> error = mate::ConvertToV8(isolate, error_message);
callback.Run(error, v8::Null(isolate));
return;
}
callback.Run(v8::Null(isolate), mate::ConvertToV8(isolate, cookie_list));
}
void RunRemoveCookiesCallbackOnUIThread(
v8::Isolate* isolate,
const std::string& error_message,
const Cookies::CookiesCallback& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
v8::Locker locker(isolate);
v8::HandleScope handle_scope(isolate);
if (!error_message.empty()) {
v8::Local<v8::Value> error = mate::ConvertToV8(isolate, error_message);
callback.Run(error, v8::Null(isolate));
return;
}
callback.Run(v8::Null(isolate), v8::Null(isolate));
}
void RunSetCookiesCallbackOnUIThread(v8::Isolate* isolate,
const std::string& error_message,
bool set_success,
const Cookies::CookiesCallback& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
v8::Locker locker(isolate);
v8::HandleScope handle_scope(isolate);
if (!error_message.empty()) {
v8::Local<v8::Value> error = mate::ConvertToV8(isolate, error_message);
callback.Run(error, v8::Null(isolate));
return;
}
if (!set_success) {
v8::Local<v8::Value> error = mate::ConvertToV8(
isolate, "Failed to set cookies");
callback.Run(error, v8::Null(isolate));
}
callback.Run(v8::Null(isolate), v8::Null(isolate));
}
bool MatchesDomain(const base::DictionaryValue* filter,
const std::string& cookie_domain) {
std::string filter_domain;
if (!filter->GetString("domain", &filter_domain))
return true;
// Add a leading '.' character to the filter domain if it doesn't exist.
if (net::cookie_util::DomainIsHostOnly(filter_domain))
filter_domain.insert(0, ".");
std::string sub_domain(cookie_domain);
// Strip any leading '.' character from the input cookie domain.
if (!net::cookie_util::DomainIsHostOnly(sub_domain))
sub_domain = sub_domain.substr(1);
// Now check whether the domain argument is a subdomain of the filter domain.
for (sub_domain.insert(0, ".");
sub_domain.length() >= filter_domain.length();) {
if (sub_domain == filter_domain) {
return true;
}
const size_t next_dot = sub_domain.find('.', 1); // Skip over leading dot.
sub_domain.erase(0, next_dot);
}
return false;
}
bool MatchesCookie(const base::DictionaryValue* filter,
const net::CanonicalCookie& cookie) {
std::string name, domain, path;
bool is_secure, session;
if (filter->GetString("name", &name) && name != cookie.Name())
return false;
if (filter->GetString("path", &path) && path != cookie.Path())
return false;
if (!MatchesDomain(filter, cookie.Domain()))
return false;
if (filter->GetBoolean("secure", &is_secure) &&
is_secure != cookie.IsSecure())
return false;
if (filter->GetBoolean("session", &session) &&
session != cookie.IsPersistent())
return false;
return true;
}
} // namespace
namespace mate {
template<>
struct Converter<atom::api::Cookies::Error> {
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
atom::api::Cookies::Error val) {
if (val == atom::api::Cookies::SUCCESS)
return v8::Null(isolate);
else
return v8::Exception::Error(StringToV8(isolate, "failed"));
}
};
template<>
struct Converter<net::CanonicalCookie> {
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
@@ -161,11 +42,11 @@ struct Converter<net::CanonicalCookie> {
dict.Set("name", val.Name());
dict.Set("value", val.Value());
dict.Set("domain", val.Domain());
dict.Set("host_only", net::cookie_util::DomainIsHostOnly(val.Domain()));
dict.Set("hostOnly", net::cookie_util::DomainIsHostOnly(val.Domain()));
dict.Set("path", val.Path());
dict.Set("secure", val.IsSecure());
dict.Set("http_only", val.IsHttpOnly());
dict.Set("session", val.IsPersistent());
dict.Set("httpOnly", val.IsHttpOnly());
dict.Set("session", !val.IsPersistent());
if (!val.IsPersistent())
dict.Set("expirationDate", val.ExpiryDate().ToDoubleT());
return dict.GetHandle();
@@ -178,121 +59,117 @@ namespace atom {
namespace api {
Cookies::Cookies(content::BrowserContext* browser_context)
: request_context_getter_(browser_context->GetRequestContext()) {
}
namespace {
Cookies::~Cookies() {
}
// Returns whether |domain| matches |filter|.
bool MatchesDomain(std::string filter, const std::string& domain) {
// Add a leading '.' character to the filter domain if it doesn't exist.
if (net::cookie_util::DomainIsHostOnly(filter))
filter.insert(0, ".");
void Cookies::Get(const base::DictionaryValue& options,
const CookiesCallback& callback) {
scoped_ptr<base::DictionaryValue> filter(
options.DeepCopyWithoutEmptyChildren());
std::string sub_domain(domain);
// Strip any leading '.' character from the input cookie domain.
if (!net::cookie_util::DomainIsHostOnly(sub_domain))
sub_domain = sub_domain.substr(1);
content::BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&Cookies::GetCookiesOnIOThread, base::Unretained(this),
Passed(&filter), callback));
}
void Cookies::GetCookiesOnIOThread(scoped_ptr<base::DictionaryValue> filter,
const CookiesCallback& callback) {
std::string url;
filter->GetString("url", &url);
if (!GetCookieListFromStore(GetCookieStore(), url,
base::Bind(&Cookies::OnGetCookies, base::Unretained(this),
Passed(&filter), callback))) {
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
base::Bind(&RunGetCookiesCallbackOnUIThread, isolate(),
"Url is not valid", net::CookieList(), callback));
// Now check whether the domain argument is a subdomain of the filter domain.
for (sub_domain.insert(0, "."); sub_domain.length() >= filter.length();) {
if (sub_domain == filter)
return true;
const size_t next_dot = sub_domain.find('.', 1); // Skip over leading dot.
sub_domain.erase(0, next_dot);
}
return false;
}
void Cookies::OnGetCookies(scoped_ptr<base::DictionaryValue> filter,
const CookiesCallback& callback,
const net::CookieList& cookie_list) {
// Returns whether |cookie| matches |filter|.
bool MatchesCookie(const base::DictionaryValue* filter,
const net::CanonicalCookie& cookie) {
std::string str;
bool b;
if (filter->GetString("name", &str) && str != cookie.Name())
return false;
if (filter->GetString("path", &str) && str != cookie.Path())
return false;
if (filter->GetString("domain", &str) && !MatchesDomain(str, cookie.Domain()))
return false;
if (filter->GetBoolean("secure", &b) && b != cookie.IsSecure())
return false;
if (filter->GetBoolean("session", &b) && b != !cookie.IsPersistent())
return false;
return true;
}
// Helper to returns the CookieStore.
inline net::CookieStore* GetCookieStore(
scoped_refptr<net::URLRequestContextGetter> getter) {
return getter->GetURLRequestContext()->cookie_store();
}
// Run |callback| on UI thread.
void RunCallbackInUI(const base::Closure& callback) {
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, callback);
}
// Remove cookies from |list| not matching |filter|, and pass it to |callback|.
void FilterCookies(scoped_ptr<base::DictionaryValue> filter,
const Cookies::GetCallback& callback,
const net::CookieList& list) {
net::CookieList result;
for (const auto& cookie : cookie_list) {
for (const auto& cookie : list) {
if (MatchesCookie(filter.get(), cookie))
result.push_back(cookie);
}
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, base::Bind(
&RunGetCookiesCallbackOnUIThread, isolate(), "", result, callback));
RunCallbackInUI(base::Bind(callback, Cookies::SUCCESS, result));
}
void Cookies::Remove(const mate::Dictionary& details,
const CookiesCallback& callback) {
GURL url;
std::string name;
std::string error_message;
if (!details.Get("url", &url) || !details.Get("name", &name)) {
error_message = "Details(url, name) of removing cookie are required.";
}
if (error_message.empty() && !url.is_valid()) {
error_message = "Url is not valid.";
}
if (!error_message.empty()) {
RunRemoveCookiesCallbackOnUIThread(isolate(), error_message, callback);
return;
}
content::BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&Cookies::RemoveCookiesOnIOThread, base::Unretained(this),
url, name, callback));
}
void Cookies::RemoveCookiesOnIOThread(const GURL& url, const std::string& name,
const CookiesCallback& callback) {
GetCookieStore()->DeleteCookieAsync(url, name,
base::Bind(&Cookies::OnRemoveCookies, base::Unretained(this), callback));
}
void Cookies::OnRemoveCookies(const CookiesCallback& callback) {
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
base::Bind(&RunRemoveCookiesCallbackOnUIThread, isolate(), "", callback));
}
void Cookies::Set(const base::DictionaryValue& options,
const CookiesCallback& callback) {
// Receives cookies matching |filter| in IO thread.
void GetCookiesOnIO(scoped_refptr<net::URLRequestContextGetter> getter,
scoped_ptr<base::DictionaryValue> filter,
const Cookies::GetCallback& callback) {
std::string url;
std::string error_message;
if (!options.GetString("url", &url)) {
error_message = "The url field is required.";
}
filter->GetString("url", &url);
GURL gurl(url);
if (error_message.empty() && !gurl.is_valid()) {
error_message = "Url is not valid.";
}
auto filtered_callback =
base::Bind(FilterCookies, base::Passed(&filter), callback);
if (!error_message.empty()) {
RunSetCookiesCallbackOnUIThread(isolate(), error_message, false, callback);
return;
}
scoped_ptr<base::DictionaryValue> details(
options.DeepCopyWithoutEmptyChildren());
content::BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&Cookies::SetCookiesOnIOThread, base::Unretained(this),
Passed(&details), gurl, callback));
net::CookieMonster* monster = GetCookieStore(getter)->GetCookieMonster();
// Empty url will match all url cookies.
if (url.empty())
monster->GetAllCookiesAsync(filtered_callback);
else
monster->GetAllCookiesForURLAsync(GURL(url), filtered_callback);
}
void Cookies::SetCookiesOnIOThread(scoped_ptr<base::DictionaryValue> details,
const GURL& url,
const CookiesCallback& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
// Removes cookie with |url| and |name| in IO thread.
void RemoveCookieOnIOThread(scoped_refptr<net::URLRequestContextGetter> getter,
const GURL& url, const std::string& name,
const base::Closure& callback) {
GetCookieStore(getter)->DeleteCookieAsync(
url, name, base::Bind(RunCallbackInUI, callback));
}
std::string name, value, domain, path;
// Callback of SetCookie.
void OnSetCookie(const Cookies::SetCallback& callback, bool success) {
RunCallbackInUI(
base::Bind(callback, success ? Cookies::SUCCESS : Cookies::FAILED));
}
// Sets cookie with |details| in IO thread.
void SetCookieOnIO(scoped_refptr<net::URLRequestContextGetter> getter,
scoped_ptr<base::DictionaryValue> details,
const Cookies::SetCallback& callback) {
std::string url, name, value, domain, path;
bool secure = false;
bool http_only = false;
double expiration_date;
details->GetString("url", &url);
details->GetString("name", &name);
details->GetString("value", &value);
details->GetString("domain", &domain);
details->GetString("path", &path);
details->GetBoolean("secure", &secure);
details->GetBoolean("http_only", &http_only);
details->GetBoolean("httpOnly", &http_only);
base::Time expiration_time;
if (details->GetDouble("expirationDate", &expiration_date)) {
@@ -301,37 +178,44 @@ void Cookies::SetCookiesOnIOThread(scoped_ptr<base::DictionaryValue> details,
base::Time::FromDoubleT(expiration_date);
}
GetCookieStore()->GetCookieMonster()->SetCookieWithDetailsAsync(
url,
name,
value,
domain,
path,
expiration_time,
secure,
http_only,
false,
net::COOKIE_PRIORITY_DEFAULT,
base::Bind(&Cookies::OnSetCookies, base::Unretained(this), callback));
GetCookieStore(getter)->GetCookieMonster()->SetCookieWithDetailsAsync(
GURL(url), name, value, domain, path, expiration_time, secure, http_only,
false, net::COOKIE_PRIORITY_DEFAULT, base::Bind(OnSetCookie, callback));
}
void Cookies::OnSetCookies(const CookiesCallback& callback,
bool set_success) {
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
base::Bind(&RunSetCookiesCallbackOnUIThread, isolate(), "", set_success,
callback));
} // namespace
Cookies::Cookies(content::BrowserContext* browser_context)
: request_context_getter_(browser_context->GetRequestContext()) {
}
mate::ObjectTemplateBuilder Cookies::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return mate::ObjectTemplateBuilder(isolate)
.SetMethod("get", &Cookies::Get)
.SetMethod("remove", &Cookies::Remove)
.SetMethod("set", &Cookies::Set);
Cookies::~Cookies() {
}
net::CookieStore* Cookies::GetCookieStore() {
return request_context_getter_->GetURLRequestContext()->cookie_store();
void Cookies::Get(const base::DictionaryValue& filter,
const GetCallback& callback) {
scoped_ptr<base::DictionaryValue> copied(filter.CreateDeepCopy());
auto getter = make_scoped_refptr(request_context_getter_);
content::BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(GetCookiesOnIO, getter, Passed(&copied), callback));
}
void Cookies::Remove(const GURL& url, const std::string& name,
const base::Closure& callback) {
auto getter = make_scoped_refptr(request_context_getter_);
content::BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(RemoveCookieOnIOThread, getter, url, name, callback));
}
void Cookies::Set(const base::DictionaryValue& details,
const SetCallback& callback) {
scoped_ptr<base::DictionaryValue> copied(details.CreateDeepCopy());
auto getter = make_scoped_refptr(request_context_getter_);
content::BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(SetCookieOnIO, getter, Passed(&copied), callback));
}
// static
@@ -341,6 +225,15 @@ mate::Handle<Cookies> Cookies::Create(
return mate::CreateHandle(isolate, new Cookies(browser_context));
}
// static
void Cookies::BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype) {
mate::ObjectTemplateBuilder(isolate, prototype)
.SetMethod("get", &Cookies::Get)
.SetMethod("remove", &Cookies::Remove)
.SetMethod("set", &Cookies::Set);
}
} // namespace api
} // namespace atom

View File

@@ -7,8 +7,8 @@
#include <string>
#include "atom/browser/api/trackable_object.h"
#include "base/callback.h"
#include "native_mate/wrappable.h"
#include "native_mate/handle.h"
#include "net/cookies/canonical_cookie.h"
@@ -20,12 +20,7 @@ namespace content {
class BrowserContext;
}
namespace mate {
class Dictionary;
}
namespace net {
class CookieStore;
class URLRequestContextGetter;
}
@@ -33,51 +28,33 @@ namespace atom {
namespace api {
class Cookies : public mate::Wrappable {
class Cookies : public mate::TrackableObject<Cookies> {
public:
// node.js style callback function(error, result)
typedef base::Callback<void(v8::Local<v8::Value>, v8::Local<v8::Value>)>
CookiesCallback;
enum Error {
SUCCESS,
FAILED,
};
using GetCallback = base::Callback<void(Error, const net::CookieList&)>;
using SetCallback = base::Callback<void(Error)>;
static mate::Handle<Cookies> Create(v8::Isolate* isolate,
content::BrowserContext* browser_context);
// mate::TrackableObject:
static void BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype);
protected:
explicit Cookies(content::BrowserContext* browser_context);
~Cookies();
void Get(const base::DictionaryValue& options,
const CookiesCallback& callback);
void Remove(const mate::Dictionary& details,
const CookiesCallback& callback);
void Set(const base::DictionaryValue& details,
const CookiesCallback& callback);
void GetCookiesOnIOThread(scoped_ptr<base::DictionaryValue> filter,
const CookiesCallback& callback);
void OnGetCookies(scoped_ptr<base::DictionaryValue> filter,
const CookiesCallback& callback,
const net::CookieList& cookie_list);
void RemoveCookiesOnIOThread(const GURL& url,
const std::string& name,
const CookiesCallback& callback);
void OnRemoveCookies(const CookiesCallback& callback);
void SetCookiesOnIOThread(scoped_ptr<base::DictionaryValue> details,
const GURL& url,
const CookiesCallback& callback);
void OnSetCookies(const CookiesCallback& callback,
bool set_success);
// mate::Wrappable:
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override;
void Get(const base::DictionaryValue& filter, const GetCallback& callback);
void Remove(const GURL& url, const std::string& name,
const base::Closure& callback);
void Set(const base::DictionaryValue& details, const SetCallback& callback);
private:
// Must be called on IO thread.
net::CookieStore* GetCookieStore();
net::URLRequestContextGetter* request_context_getter_;
DISALLOW_COPY_AND_ASSIGN(Cookies);

View File

@@ -0,0 +1,195 @@
// Copyright (c) 2016 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/api/atom_api_debugger.h"
#include <string>
#include "atom/browser/atom_browser_main_parts.h"
#include "atom/common/native_mate_converters/callback.h"
#include "atom/common/native_mate_converters/value_converter.h"
#include "atom/common/node_includes.h"
#include "base/json/json_reader.h"
#include "base/json/json_writer.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/web_contents.h"
#include "native_mate/dictionary.h"
#include "native_mate/object_template_builder.h"
using content::DevToolsAgentHost;
namespace atom {
namespace api {
namespace {
// The wrapDebugger funtion which is implemented in JavaScript.
using WrapDebuggerCallback = base::Callback<void(v8::Local<v8::Value>)>;
WrapDebuggerCallback g_wrap_debugger;
} // namespace
Debugger::Debugger(content::WebContents* web_contents)
: web_contents_(web_contents),
previous_request_id_(0) {
}
Debugger::~Debugger() {
}
void Debugger::AgentHostClosed(DevToolsAgentHost* agent_host,
bool replaced_with_another_client) {
std::string detach_reason = "target closed";
if (replaced_with_another_client)
detach_reason = "replaced with devtools";
Emit("detach", detach_reason);
}
void Debugger::DispatchProtocolMessage(DevToolsAgentHost* agent_host,
const std::string& message) {
DCHECK(agent_host == agent_host_.get());
scoped_ptr<base::Value> parsed_message(base::JSONReader::Read(message));
if (!parsed_message->IsType(base::Value::TYPE_DICTIONARY))
return;
base::DictionaryValue* dict =
static_cast<base::DictionaryValue*>(parsed_message.get());
int id;
if (!dict->GetInteger("id", &id)) {
std::string method;
if (!dict->GetString("method", &method))
return;
base::DictionaryValue* params_value = nullptr;
base::DictionaryValue params;
if (dict->GetDictionary("params", &params_value))
params.Swap(params_value);
Emit("message", method, params);
} else {
auto send_command_callback = pending_requests_[id];
pending_requests_.erase(id);
if (send_command_callback.is_null())
return;
base::DictionaryValue* error_body = nullptr;
base::DictionaryValue error;
if (dict->GetDictionary("error", &error_body))
error.Swap(error_body);
base::DictionaryValue* result_body = nullptr;
base::DictionaryValue result;
if (dict->GetDictionary("result", &result_body))
result.Swap(result_body);
send_command_callback.Run(error, result);
}
}
void Debugger::Attach(mate::Arguments* args) {
std::string protocol_version;
args->GetNext(&protocol_version);
if (!protocol_version.empty() &&
!DevToolsAgentHost::IsSupportedProtocolVersion(protocol_version)) {
args->ThrowError("Requested protocol version is not supported");
return;
}
agent_host_ = DevToolsAgentHost::GetOrCreateFor(web_contents_);
if (!agent_host_.get()) {
args->ThrowError("No target available");
return;
}
if (agent_host_->IsAttached()) {
args->ThrowError("Another debugger is already attached to this target");
return;
}
agent_host_->AttachClient(this);
}
bool Debugger::IsAttached() {
return agent_host_.get() ? agent_host_->IsAttached() : false;
}
void Debugger::Detach() {
if (!agent_host_.get())
return;
agent_host_->DetachClient();
AgentHostClosed(agent_host_.get(), false);
agent_host_ = nullptr;
}
void Debugger::SendCommand(mate::Arguments* args) {
if (!agent_host_.get())
return;
std::string method;
if (!args->GetNext(&method)) {
args->ThrowError();
return;
}
base::DictionaryValue command_params;
args->GetNext(&command_params);
SendCommandCallback callback;
args->GetNext(&callback);
base::DictionaryValue request;
int request_id = ++previous_request_id_;
pending_requests_[request_id] = callback;
request.SetInteger("id", request_id);
request.SetString("method", method);
if (!command_params.empty())
request.Set("params", command_params.DeepCopy());
std::string json_args;
base::JSONWriter::Write(request, &json_args);
agent_host_->DispatchProtocolMessage(json_args);
}
// static
mate::Handle<Debugger> Debugger::Create(
v8::Isolate* isolate,
content::WebContents* web_contents) {
auto handle = mate::CreateHandle(isolate, new Debugger(web_contents));
g_wrap_debugger.Run(handle.ToV8());
return handle;
}
// static
void Debugger::BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype) {
mate::ObjectTemplateBuilder(isolate, prototype)
.SetMethod("attach", &Debugger::Attach)
.SetMethod("isAttached", &Debugger::IsAttached)
.SetMethod("detach", &Debugger::Detach)
.SetMethod("sendCommand", &Debugger::SendCommand);
}
void ClearWrapDebugger() {
g_wrap_debugger.Reset();
}
void SetWrapDebugger(const WrapDebuggerCallback& callback) {
g_wrap_debugger = callback;
// Cleanup the wrapper on exit.
atom::AtomBrowserMainParts::Get()->RegisterDestructionCallback(
base::Bind(ClearWrapDebugger));
}
} // namespace api
} // namespace atom
namespace {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
v8::Isolate* isolate = context->GetIsolate();
mate::Dictionary dict(isolate, exports);
dict.SetMethod("_setWrapDebugger", &atom::api::SetWrapDebugger);
}
} // namespace
NODE_MODULE_CONTEXT_AWARE_BUILTIN(atom_browser_debugger, Initialize);

View File

@@ -0,0 +1,75 @@
// Copyright (c) 2016 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ATOM_BROWSER_API_ATOM_API_DEBUGGER_H_
#define ATOM_BROWSER_API_ATOM_API_DEBUGGER_H_
#include <map>
#include <string>
#include "atom/browser/api/trackable_object.h"
#include "base/callback.h"
#include "base/values.h"
#include "content/public/browser/devtools_agent_host_client.h"
#include "native_mate/handle.h"
namespace content {
class DevToolsAgentHost;
class WebContents;
}
namespace mate {
class Arguments;
}
namespace atom {
namespace api {
class Debugger: public mate::TrackableObject<Debugger>,
public content::DevToolsAgentHostClient {
public:
using SendCommandCallback =
base::Callback<void(const base::DictionaryValue&,
const base::DictionaryValue&)>;
static mate::Handle<Debugger> Create(
v8::Isolate* isolate, content::WebContents* web_contents);
// mate::TrackableObject:
static void BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype);
protected:
explicit Debugger(content::WebContents* web_contents);
~Debugger();
// content::DevToolsAgentHostClient:
void AgentHostClosed(content::DevToolsAgentHost* agent_host,
bool replaced_with_another_client) override;
void DispatchProtocolMessage(content::DevToolsAgentHost* agent_host,
const std::string& message) override;
private:
using PendingRequestMap = std::map<int, SendCommandCallback>;
void Attach(mate::Arguments* args);
bool IsAttached();
void Detach();
void SendCommand(mate::Arguments* args);
content::WebContents* web_contents_; // Weak Reference.
scoped_refptr<content::DevToolsAgentHost> agent_host_;
PendingRequestMap pending_requests_;
int previous_request_id_;
DISALLOW_COPY_AND_ASSIGN(Debugger);
};
} // namespace api
} // namespace atom
#endif // ATOM_BROWSER_API_ATOM_API_DEBUGGER_H_

View File

@@ -0,0 +1,120 @@
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/api/atom_api_desktop_capturer.h"
#include "atom/common/api/atom_api_native_image.h"
#include "atom/common/node_includes.h"
#include "atom/common/native_mate_converters/gfx_converter.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/media/desktop_media_list.h"
#include "native_mate/dictionary.h"
#include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h"
#include "third_party/webrtc/modules/desktop_capture/screen_capturer.h"
#include "third_party/webrtc/modules/desktop_capture/window_capturer.h"
namespace mate {
template<>
struct Converter<DesktopMediaList::Source> {
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
const DesktopMediaList::Source& source) {
mate::Dictionary dict(isolate, v8::Object::New(isolate));
content::DesktopMediaID id = source.id;
dict.Set("name", base::UTF16ToUTF8(source.name));
dict.Set("id", id.ToString());
dict.Set(
"thumbnail",
atom::api::NativeImage::Create(isolate, gfx::Image(source.thumbnail)));
return ConvertToV8(isolate, dict);
}
};
} // namespace mate
namespace atom {
namespace api {
DesktopCapturer::DesktopCapturer() {
}
DesktopCapturer::~DesktopCapturer() {
}
void DesktopCapturer::StartHandling(bool capture_window,
bool capture_screen,
const gfx::Size& thumbnail_size) {
webrtc::DesktopCaptureOptions options =
webrtc::DesktopCaptureOptions::CreateDefault();
#if defined(OS_WIN)
// On windows, desktop effects (e.g. Aero) will be disabled when the Desktop
// capture API is active by default.
// We keep the desktop effects in most times. Howerver, the screen still
// fickers when the API is capturing the window due to limitation of current
// implemetation. This is a known and wontFix issue in webrtc (see:
// http://code.google.com/p/webrtc/issues/detail?id=3373)
options.set_disable_effects(false);
#endif
scoped_ptr<webrtc::ScreenCapturer> screen_capturer(
capture_screen ? webrtc::ScreenCapturer::Create(options) : nullptr);
scoped_ptr<webrtc::WindowCapturer> window_capturer(
capture_window ? webrtc::WindowCapturer::Create(options) : nullptr);
media_list_.reset(new NativeDesktopMediaList(screen_capturer.Pass(),
window_capturer.Pass()));
media_list_->SetThumbnailSize(thumbnail_size);
media_list_->StartUpdating(this);
}
void DesktopCapturer::OnSourceAdded(int index) {
}
void DesktopCapturer::OnSourceRemoved(int index) {
}
void DesktopCapturer::OnSourceMoved(int old_index, int new_index) {
}
void DesktopCapturer::OnSourceNameChanged(int index) {
}
void DesktopCapturer::OnSourceThumbnailChanged(int index) {
}
bool DesktopCapturer::OnRefreshFinished() {
Emit("finished", media_list_->GetSources());
media_list_.reset();
return false;
}
mate::ObjectTemplateBuilder DesktopCapturer::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return mate::ObjectTemplateBuilder(isolate)
.SetMethod("startHandling", &DesktopCapturer::StartHandling);
}
// static
mate::Handle<DesktopCapturer> DesktopCapturer::Create(v8::Isolate* isolate) {
return mate::CreateHandle(isolate, new DesktopCapturer);
}
} // namespace api
} // namespace atom
namespace {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
v8::Isolate* isolate = context->GetIsolate();
mate::Dictionary dict(isolate, exports);
dict.Set("desktopCapturer", atom::api::DesktopCapturer::Create(isolate));
}
} // namespace
NODE_MODULE_CONTEXT_AWARE_BUILTIN(atom_browser_desktop_capturer, Initialize);

View File

@@ -0,0 +1,52 @@
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ATOM_BROWSER_API_ATOM_API_DESKTOP_CAPTURER_H_
#define ATOM_BROWSER_API_ATOM_API_DESKTOP_CAPTURER_H_
#include "atom/browser/api/event_emitter.h"
#include "chrome/browser/media/desktop_media_list_observer.h"
#include "chrome/browser/media/native_desktop_media_list.h"
#include "native_mate/handle.h"
namespace atom {
namespace api {
class DesktopCapturer: public mate::EventEmitter,
public DesktopMediaListObserver {
public:
static mate::Handle<DesktopCapturer> Create(v8::Isolate* isolate);
void StartHandling(bool capture_window,
bool capture_screen,
const gfx::Size& thumbnail_size);
protected:
DesktopCapturer();
~DesktopCapturer();
// DesktopMediaListObserver overrides.
void OnSourceAdded(int index) override;
void OnSourceRemoved(int index) override;
void OnSourceMoved(int old_index, int new_index) override;
void OnSourceNameChanged(int index) override;
void OnSourceThumbnailChanged(int index) override;
bool OnRefreshFinished() override;
private:
// mate::Wrappable:
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override;
scoped_ptr<DesktopMediaList> media_list_;
DISALLOW_COPY_AND_ASSIGN(DesktopCapturer);
};
} // namespace api
} // namespace atom
#endif // ATOM_BROWSER_API_ATOM_API_DESKTOP_CAPTURER_H_

View File

@@ -41,6 +41,7 @@ namespace {
void ShowMessageBox(int type,
const std::vector<std::string>& buttons,
int default_id,
int cancel_id,
int options,
const std::string& title,
@@ -54,12 +55,13 @@ void ShowMessageBox(int type,
if (mate::Converter<atom::MessageBoxCallback>::FromV8(args->isolate(),
peek,
&callback)) {
atom::ShowMessageBox(window, (atom::MessageBoxType)type, buttons, cancel_id,
options, title, message, detail, icon, callback);
atom::ShowMessageBox(window, (atom::MessageBoxType)type, buttons,
default_id, cancel_id, options, title,
message, detail, icon, callback);
} else {
int chosen = atom::ShowMessageBox(window, (atom::MessageBoxType)type,
buttons, cancel_id, options, title,
message, detail, icon);
buttons, default_id, cancel_id,
options, title, message, detail, icon);
args->Return(chosen);
}
}

View File

@@ -0,0 +1,212 @@
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/api/atom_api_download_item.h"
#include <map>
#include "atom/browser/atom_browser_main_parts.h"
#include "atom/common/native_mate_converters/callback.h"
#include "atom/common/native_mate_converters/file_path_converter.h"
#include "atom/common/native_mate_converters/gurl_converter.h"
#include "atom/common/node_includes.h"
#include "base/memory/linked_ptr.h"
#include "base/message_loop/message_loop.h"
#include "base/strings/utf_string_conversions.h"
#include "native_mate/dictionary.h"
#include "net/base/filename_util.h"
namespace mate {
template<>
struct Converter<content::DownloadItem::DownloadState> {
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
content::DownloadItem::DownloadState state) {
std::string download_state;
switch (state) {
case content::DownloadItem::COMPLETE:
download_state = "completed";
break;
case content::DownloadItem::CANCELLED:
download_state = "cancelled";
break;
case content::DownloadItem::INTERRUPTED:
download_state = "interrupted";
break;
default:
break;
}
return ConvertToV8(isolate, download_state);
}
};
} // namespace mate
namespace atom {
namespace api {
namespace {
// The wrapDownloadItem funtion which is implemented in JavaScript
using WrapDownloadItemCallback = base::Callback<void(v8::Local<v8::Value>)>;
WrapDownloadItemCallback g_wrap_download_item;
std::map<uint32, linked_ptr<v8::Global<v8::Value>>> g_download_item_objects;
} // namespace
DownloadItem::DownloadItem(content::DownloadItem* download_item)
: download_item_(download_item) {
download_item_->AddObserver(this);
AttachAsUserData(download_item);
}
DownloadItem::~DownloadItem() {
if (download_item_) {
// Destroyed by either garbage collection or destroy().
download_item_->RemoveObserver(this);
download_item_->Remove();
}
// Remove from the global map.
auto iter = g_download_item_objects.find(weak_map_id());
if (iter != g_download_item_objects.end())
g_download_item_objects.erase(iter);
}
void DownloadItem::OnDownloadUpdated(content::DownloadItem* item) {
if (download_item_->IsDone()) {
Emit("done", item->GetState());
// Destroy the item once item is downloaded.
base::MessageLoop::current()->PostTask(FROM_HERE, GetDestroyClosure());
} else {
Emit("updated");
}
}
void DownloadItem::OnDownloadDestroyed(content::DownloadItem* download_item) {
download_item_ = nullptr;
// Destroy the native class immediately when downloadItem is destroyed.
delete this;
}
void DownloadItem::Pause() {
download_item_->Pause();
}
void DownloadItem::Resume() {
download_item_->Resume();
}
void DownloadItem::Cancel() {
download_item_->Cancel(true);
download_item_->Remove();
}
int64 DownloadItem::GetReceivedBytes() const {
return download_item_->GetReceivedBytes();
}
int64 DownloadItem::GetTotalBytes() const {
return download_item_->GetTotalBytes();
}
std::string DownloadItem::GetMimeType() const {
return download_item_->GetMimeType();
}
bool DownloadItem::HasUserGesture() const {
return download_item_->HasUserGesture();
}
std::string DownloadItem::GetFilename() const {
return base::UTF16ToUTF8(net::GenerateFileName(GetURL(),
GetContentDisposition(),
std::string(),
download_item_->GetSuggestedFilename(),
GetMimeType(),
std::string()).LossyDisplayName());
}
std::string DownloadItem::GetContentDisposition() const {
return download_item_->GetContentDisposition();
}
const GURL& DownloadItem::GetURL() const {
return download_item_->GetURL();
}
void DownloadItem::SetSavePath(const base::FilePath& path) {
save_path_ = path;
}
base::FilePath DownloadItem::GetSavePath() const {
return save_path_;
}
// static
void DownloadItem::BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype) {
mate::ObjectTemplateBuilder(isolate, prototype)
.MakeDestroyable()
.SetMethod("pause", &DownloadItem::Pause)
.SetMethod("resume", &DownloadItem::Resume)
.SetMethod("cancel", &DownloadItem::Cancel)
.SetMethod("getReceivedBytes", &DownloadItem::GetReceivedBytes)
.SetMethod("getTotalBytes", &DownloadItem::GetTotalBytes)
.SetMethod("getMimeType", &DownloadItem::GetMimeType)
.SetMethod("hasUserGesture", &DownloadItem::HasUserGesture)
.SetMethod("getFilename", &DownloadItem::GetFilename)
.SetMethod("getContentDisposition", &DownloadItem::GetContentDisposition)
.SetMethod("getURL", &DownloadItem::GetURL)
.SetMethod("setSavePath", &DownloadItem::SetSavePath)
.SetMethod("getSavePath", &DownloadItem::GetSavePath);
}
// static
mate::Handle<DownloadItem> DownloadItem::Create(
v8::Isolate* isolate, content::DownloadItem* item) {
auto existing = TrackableObject::FromWrappedClass(isolate, item);
if (existing)
return mate::CreateHandle(isolate, static_cast<DownloadItem*>(existing));
auto handle = mate::CreateHandle(isolate, new DownloadItem(item));
g_wrap_download_item.Run(handle.ToV8());
// Reference this object in case it got garbage collected.
g_download_item_objects[handle->weak_map_id()] = make_linked_ptr(
new v8::Global<v8::Value>(isolate, handle.ToV8()));
return handle;
}
void ClearWrapDownloadItem() {
g_wrap_download_item.Reset();
}
void SetWrapDownloadItem(const WrapDownloadItemCallback& callback) {
g_wrap_download_item = callback;
// Cleanup the wrapper on exit.
atom::AtomBrowserMainParts::Get()->RegisterDestructionCallback(
base::Bind(ClearWrapDownloadItem));
}
} // namespace api
} // namespace atom
namespace {
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
v8::Isolate* isolate = context->GetIsolate();
mate::Dictionary dict(isolate, exports);
dict.SetMethod("_setWrapDownloadItem", &atom::api::SetWrapDownloadItem);
}
} // namespace
NODE_MODULE_CONTEXT_AWARE_BUILTIN(atom_browser_download_item, Initialize);

View File

@@ -0,0 +1,62 @@
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ATOM_BROWSER_API_ATOM_API_DOWNLOAD_ITEM_H_
#define ATOM_BROWSER_API_ATOM_API_DOWNLOAD_ITEM_H_
#include <string>
#include "atom/browser/api/trackable_object.h"
#include "base/files/file_path.h"
#include "content/public/browser/download_item.h"
#include "native_mate/handle.h"
#include "url/gurl.h"
namespace atom {
namespace api {
class DownloadItem : public mate::TrackableObject<DownloadItem>,
public content::DownloadItem::Observer {
public:
static mate::Handle<DownloadItem> Create(v8::Isolate* isolate,
content::DownloadItem* item);
// mate::TrackableObject:
static void BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype);
void Pause();
void Resume();
void Cancel();
int64 GetReceivedBytes() const;
int64 GetTotalBytes() const;
std::string GetMimeType() const;
bool HasUserGesture() const;
std::string GetFilename() const;
std::string GetContentDisposition() const;
const GURL& GetURL() const;
void SetSavePath(const base::FilePath& path);
base::FilePath GetSavePath() const;
protected:
explicit DownloadItem(content::DownloadItem* download_item);
~DownloadItem();
// Override content::DownloadItem::Observer methods
void OnDownloadUpdated(content::DownloadItem* download) override;
void OnDownloadDestroyed(content::DownloadItem* download) override;
private:
base::FilePath save_path_;
content::DownloadItem* download_item_;
DISALLOW_COPY_AND_ASSIGN(DownloadItem);
};
} // namespace api
} // namespace atom
#endif // ATOM_BROWSER_API_ATOM_API_DOWNLOAD_ITEM_H_

View File

@@ -8,9 +8,9 @@
#include <map>
#include <string>
#include "atom/browser/api/trackable_object.h"
#include "base/callback.h"
#include "chrome/browser/extensions/global_shortcut_listener.h"
#include "native_mate/wrappable.h"
#include "native_mate/handle.h"
#include "ui/base/accelerators/accelerator.h"
@@ -19,13 +19,13 @@ namespace atom {
namespace api {
class GlobalShortcut : public extensions::GlobalShortcutListener::Observer,
public mate::Wrappable {
public mate::TrackableObject<GlobalShortcut> {
public:
static mate::Handle<GlobalShortcut> Create(v8::Isolate* isolate);
protected:
GlobalShortcut();
virtual ~GlobalShortcut();
~GlobalShortcut() override;
// mate::Wrappable implementations:
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(

View File

@@ -151,6 +151,7 @@ bool Menu::IsVisibleAt(int index) const {
void Menu::BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype) {
mate::ObjectTemplateBuilder(isolate, prototype)
.MakeDestroyable()
.SetMethod("insertItem", &Menu::InsertItemAt)
.SetMethod("insertCheckItem", &Menu::InsertCheckItemAt)
.SetMethod("insertRadioItem", &Menu::InsertRadioItemAt)
@@ -168,8 +169,7 @@ void Menu::BuildPrototype(v8::Isolate* isolate,
.SetMethod("isItemCheckedAt", &Menu::IsItemCheckedAt)
.SetMethod("isEnabledAt", &Menu::IsEnabledAt)
.SetMethod("isVisibleAt", &Menu::IsVisibleAt)
.SetMethod("_popup", &Menu::Popup)
.SetMethod("_popupAt", &Menu::PopupAt);
.SetMethod("popupAt", &Menu::PopupAt);
}
} // namespace api

View File

@@ -8,16 +8,16 @@
#include <string>
#include "atom/browser/api/atom_api_window.h"
#include "atom/browser/api/trackable_object.h"
#include "atom/browser/ui/atom_menu_model.h"
#include "base/callback.h"
#include "base/memory/scoped_ptr.h"
#include "native_mate/wrappable.h"
namespace atom {
namespace api {
class Menu : public mate::Wrappable,
class Menu : public mate::TrackableObject<Menu>,
public AtomMenuModel::Delegate {
public:
static mate::Wrappable* Create();
@@ -37,7 +37,7 @@ class Menu : public mate::Wrappable,
protected:
Menu();
virtual ~Menu();
~Menu() override;
// mate::Wrappable:
void AfterInit(v8::Isolate* isolate) override;
@@ -51,8 +51,9 @@ class Menu : public mate::Wrappable,
void ExecuteCommand(int command_id, int event_flags) override;
void MenuWillShow(ui::SimpleMenuModel* source) override;
virtual void Popup(Window* window) = 0;
virtual void PopupAt(Window* window, int x, int y) = 0;
virtual void PopupAt(Window* window,
int x = -1, int y = -1,
int positioning_item = 0) = 0;
scoped_ptr<AtomMenuModel> model_;
Menu* parent_;

View File

@@ -19,8 +19,7 @@ class MenuMac : public Menu {
protected:
MenuMac();
void Popup(Window* window) override;
void PopupAt(Window* window, int x, int y) override;
void PopupAt(Window* window, int x, int y, int positioning_item = 0) override;
base::scoped_nsobject<AtomMenuController> menu_controller_;

View File

@@ -18,39 +18,7 @@ namespace api {
MenuMac::MenuMac() {
}
void MenuMac::Popup(Window* window) {
NativeWindow* native_window = window->window();
if (!native_window)
return;
content::WebContents* web_contents = native_window->web_contents();
if (!web_contents)
return;
NSWindow* nswindow = native_window->GetNativeWindow();
base::scoped_nsobject<AtomMenuController> menu_controller(
[[AtomMenuController alloc] initWithModel:model_.get()]);
// Fake out a context menu event.
NSEvent* currentEvent = [NSApp currentEvent];
NSPoint position = [nswindow mouseLocationOutsideOfEventStream];
NSTimeInterval eventTime = [currentEvent timestamp];
NSEvent* clickEvent = [NSEvent mouseEventWithType:NSRightMouseDown
location:position
modifierFlags:NSRightMouseDownMask
timestamp:eventTime
windowNumber:[nswindow windowNumber]
context:nil
eventNumber:0
clickCount:1
pressure:1.0];
// Show the menu.
[NSMenu popUpContextMenu:[menu_controller menu]
withEvent:clickEvent
forView:web_contents->GetContentNativeView()];
}
void MenuMac::PopupAt(Window* window, int x, int y) {
void MenuMac::PopupAt(Window* window, int x, int y, int positioning_item) {
NativeWindow* native_window = window->window();
if (!native_window)
return;
@@ -63,10 +31,23 @@ void MenuMac::PopupAt(Window* window, int x, int y) {
NSMenu* menu = [menu_controller menu];
NSView* view = web_contents->GetContentNativeView();
// Which menu item to show.
NSMenuItem* item = nil;
if (positioning_item < [menu numberOfItems] && positioning_item >= 0)
item = [menu itemAtIndex:positioning_item];
// (-1, -1) means showing on mouse location.
NSPoint position;
if (x == -1 || y == -1) {
NSWindow* nswindow = native_window->GetNativeWindow();
position = [view convertPoint:[nswindow mouseLocationOutsideOfEventStream]
fromView:nil];
} else {
position = NSMakePoint(x, [view frame].size.height - y);
}
// Show the menu.
[menu popUpMenuPositioningItem:[menu itemAtIndex:0]
atLocation:NSMakePoint(x, [view frame].size.height - y)
inView:view];
[menu popUpMenuPositioningItem:item atLocation:position inView:view];
}
// static

View File

@@ -16,11 +16,7 @@ namespace api {
MenuViews::MenuViews() {
}
void MenuViews::Popup(Window* window) {
PopupAtPoint(window, gfx::Screen::GetNativeScreen()->GetCursorScreenPoint());
}
void MenuViews::PopupAt(Window* window, int x, int y) {
void MenuViews::PopupAt(Window* window, int x, int y, int positioning_item) {
NativeWindow* native_window = static_cast<NativeWindow*>(window->window());
if (!native_window)
return;
@@ -31,18 +27,23 @@ void MenuViews::PopupAt(Window* window, int x, int y) {
if (!view)
return;
gfx::Point origin = view->GetViewBounds().origin();
PopupAtPoint(window, gfx::Point(origin.x() + x, origin.y() + y));
}
// (-1, -1) means showing on mouse location.
gfx::Point location;
if (x == -1 || y == -1) {
location = gfx::Screen::GetNativeScreen()->GetCursorScreenPoint();
} else {
gfx::Point origin = view->GetViewBounds().origin();
location = gfx::Point(origin.x() + x, origin.y() + y);
}
void MenuViews::PopupAtPoint(Window* window, const gfx::Point& point) {
// Show the menu.
views::MenuRunner menu_runner(
model(),
views::MenuRunner::CONTEXT_MENU | views::MenuRunner::HAS_MNEMONICS);
ignore_result(menu_runner.RunMenuAt(
static_cast<NativeWindowViews*>(window->window())->widget(),
NULL,
gfx::Rect(point, gfx::Size()),
gfx::Rect(location, gfx::Size()),
views::MENU_ANCHOR_TOPLEFT,
ui::MENU_SOURCE_MOUSE));
}

View File

@@ -17,12 +17,9 @@ class MenuViews : public Menu {
MenuViews();
protected:
void Popup(Window* window) override;
void PopupAt(Window* window, int x, int y) override;
void PopupAt(Window* window, int x, int y, int positioning_item = 0) override;
private:
void PopupAtPoint(Window* window, const gfx::Point& point);
DISALLOW_COPY_AND_ASSIGN(MenuViews);
};

View File

@@ -5,7 +5,7 @@
#ifndef ATOM_BROWSER_API_ATOM_API_POWER_MONITOR_H_
#define ATOM_BROWSER_API_ATOM_API_POWER_MONITOR_H_
#include "atom/browser/api/event_emitter.h"
#include "atom/browser/api/trackable_object.h"
#include "base/compiler_specific.h"
#include "base/power_monitor/power_observer.h"
#include "native_mate/handle.h"
@@ -14,14 +14,14 @@ namespace atom {
namespace api {
class PowerMonitor : public mate::EventEmitter,
class PowerMonitor : public mate::TrackableObject<PowerMonitor>,
public base::PowerObserver {
public:
static v8::Local<v8::Value> Create(v8::Isolate* isolate);
protected:
PowerMonitor();
virtual ~PowerMonitor();
~PowerMonitor() override;
// base::PowerObserver implementations:
void OnPowerStateChange(bool on_battery_power) override;

View File

@@ -7,10 +7,10 @@
#include <map>
#include "atom/browser/api/trackable_object.h"
#include "base/memory/scoped_ptr.h"
#include "content/public/browser/power_save_blocker.h"
#include "native_mate/handle.h"
#include "native_mate/wrappable.h"
namespace mate {
class Dictionary;
@@ -20,13 +20,13 @@ namespace atom {
namespace api {
class PowerSaveBlocker : public mate::Wrappable {
class PowerSaveBlocker : public mate::TrackableObject<PowerSaveBlocker> {
public:
static mate::Handle<PowerSaveBlocker> Create(v8::Isolate* isolate);
protected:
PowerSaveBlocker();
virtual ~PowerSaveBlocker();
~PowerSaveBlocker() override;
// mate::Wrappable implementations:
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
@@ -48,7 +48,6 @@ class PowerSaveBlocker : public mate::Wrappable {
std::map<int, content::PowerSaveBlocker::PowerSaveBlockerType>;
PowerSaveBlockerTypeMap power_save_blocker_types_;
DISALLOW_COPY_AND_ASSIGN(PowerSaveBlocker);
};

View File

@@ -12,27 +12,12 @@
#include "atom/browser/net/url_request_fetch_job.h"
#include "atom/browser/net/url_request_string_job.h"
#include "atom/common/native_mate_converters/callback.h"
#include "atom/common/native_mate_converters/net_converter.h"
#include "atom/common/node_includes.h"
#include "native_mate/dictionary.h"
using content::BrowserThread;
namespace mate {
template<>
struct Converter<const net::URLRequest*> {
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
const net::URLRequest* val) {
return mate::ObjectTemplateBuilder(isolate)
.SetValue("method", val->method())
.SetValue("url", val->url().spec())
.SetValue("referrer", val->referrer())
.Build()->NewInstance();
}
};
} // namespace mate
namespace atom {
namespace api {
@@ -47,12 +32,14 @@ mate::ObjectTemplateBuilder Protocol::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return mate::ObjectTemplateBuilder(isolate)
.SetMethod("registerStandardSchemes", &Protocol::RegisterStandardSchemes)
.SetMethod("registerServiceWorkerSchemes",
&Protocol::RegisterServiceWorkerSchemes)
.SetMethod("registerStringProtocol",
&Protocol::RegisterProtocol<URLRequestStringJob>)
.SetMethod("registerBufferProtocol",
&Protocol::RegisterProtocol<URLRequestBufferJob>)
.SetMethod("registerFileProtocol",
&Protocol::RegisterProtocol<UrlRequestAsyncAsarJob>)
&Protocol::RegisterProtocol<URLRequestAsyncAsarJob>)
.SetMethod("registerHttpProtocol",
&Protocol::RegisterProtocol<URLRequestFetchJob>)
.SetMethod("unregisterProtocol", &Protocol::UnregisterProtocol)
@@ -62,7 +49,7 @@ mate::ObjectTemplateBuilder Protocol::GetObjectTemplateBuilder(
.SetMethod("interceptBufferProtocol",
&Protocol::InterceptProtocol<URLRequestBufferJob>)
.SetMethod("interceptFileProtocol",
&Protocol::InterceptProtocol<UrlRequestAsyncAsarJob>)
&Protocol::InterceptProtocol<URLRequestAsyncAsarJob>)
.SetMethod("interceptHttpProtocol",
&Protocol::InterceptProtocol<URLRequestFetchJob>)
.SetMethod("uninterceptProtocol", &Protocol::UninterceptProtocol);
@@ -73,6 +60,11 @@ void Protocol::RegisterStandardSchemes(
atom::AtomBrowserClient::SetCustomSchemes(schemes);
}
void Protocol::RegisterServiceWorkerSchemes(
const std::vector<std::string>& schemes) {
atom::AtomBrowserClient::SetCustomServiceWorkerSchemes(schemes);
}
void Protocol::UnregisterProtocol(
const std::string& scheme, mate::Arguments* args) {
CompletionCallback callback;

View File

@@ -92,6 +92,9 @@ class Protocol : public mate::Wrappable {
// Register schemes to standard scheme list.
void RegisterStandardSchemes(const std::vector<std::string>& schemes);
// Register schemes that can handle service worker.
void RegisterServiceWorkerSchemes(const std::vector<std::string>& schemes);
// Register the protocol with certain request job.
template<typename RequestJob>
void RegisterProtocol(const std::string& scheme,

View File

@@ -41,7 +41,7 @@ std::vector<std::string> MetricsToArray(uint32_t metrics) {
if (metrics & gfx::DisplayObserver::DISPLAY_METRIC_DEVICE_SCALE_FACTOR)
array.push_back("scaleFactor");
if (metrics & gfx::DisplayObserver::DISPLAY_METRIC_ROTATION)
array.push_back("rotaion");
array.push_back("rotation");
return array;
}

View File

@@ -8,16 +8,27 @@
#include <vector>
#include "atom/browser/api/atom_api_cookies.h"
#include "atom/browser/atom_browser_context.h"
#include "atom/browser/api/atom_api_download_item.h"
#include "atom/browser/api/atom_api_web_contents.h"
#include "atom/browser/api/atom_api_web_request.h"
#include "atom/browser/api/save_page_handler.h"
#include "atom/browser/atom_browser_context.h"
#include "atom/browser/atom_browser_main_parts.h"
#include "atom/browser/atom_permission_manager.h"
#include "atom/browser/net/atom_cert_verifier.h"
#include "atom/common/native_mate_converters/callback.h"
#include "atom/common/native_mate_converters/content_converter.h"
#include "atom/common/native_mate_converters/gurl_converter.h"
#include "atom/common/native_mate_converters/file_path_converter.h"
#include "atom/common/native_mate_converters/net_converter.h"
#include "atom/common/node_includes.h"
#include "base/files/file_path.h"
#include "base/prefs/pref_service.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
#include "base/thread_task_runner_handle.h"
#include "brightray/browser/net/devtools_network_conditions.h"
#include "brightray/browser/net/devtools_network_controller.h"
#include "chrome/common/pref_names.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/browser/storage_partition.h"
@@ -25,6 +36,7 @@
#include "native_mate/object_template_builder.h"
#include "net/base/load_flags.h"
#include "net/disk_cache/disk_cache.h"
#include "net/dns/host_cache.h"
#include "net/proxy/proxy_service.h"
#include "net/proxy/proxy_config_service_fixed.h"
#include "net/url_request/url_request_context.h"
@@ -44,7 +56,7 @@ struct ClearStorageDataOptions {
uint32 GetStorageMask(const std::vector<std::string>& storage_types) {
uint32 storage_mask = 0;
for (const auto& it : storage_types) {
auto type = base::StringToLowerASCII(it);
auto type = base::ToLowerASCII(it);
if (type == "appcache")
storage_mask |= StoragePartition::REMOVE_DATA_MASK_APPCACHE;
else if (type == "cookies")
@@ -68,7 +80,7 @@ uint32 GetStorageMask(const std::vector<std::string>& storage_types) {
uint32 GetQuotaMask(const std::vector<std::string>& quota_types) {
uint32 quota_mask = 0;
for (const auto& it : quota_types) {
auto type = base::StringToLowerASCII(it);
auto type = base::ToLowerASCII(it);
if (type == "temporary")
quota_mask |= StoragePartition::QUOTA_MANAGED_STORAGE_MASK_TEMPORARY;
else if (type == "persistent")
@@ -102,15 +114,31 @@ struct Converter<ClearStorageDataOptions> {
};
template<>
struct Converter<content::DownloadItem*> {
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
content::DownloadItem* val) {
mate::Dictionary dict(isolate, v8::Object::New(isolate));
dict.Set("url", val->GetURL());
dict.Set("filename", val->GetSuggestedFilename());
dict.Set("mimeType", val->GetMimeType());
dict.Set("hasUserGesture", val->HasUserGesture());
return dict.GetHandle();
struct Converter<net::ProxyConfig> {
static bool FromV8(v8::Isolate* isolate,
v8::Local<v8::Value> val,
net::ProxyConfig* out) {
std::string proxy_rules;
GURL pac_url;
mate::Dictionary options;
// Fallback to previous API when passed String.
// https://git.io/vuhjj
if (ConvertFromV8(isolate, val, &proxy_rules)) {
pac_url = GURL(proxy_rules); // Assume it is PAC script if it is URL.
} else if (ConvertFromV8(isolate, val, &options)) {
options.Get("pacScript", &pac_url);
options.Get("proxyRules", &proxy_rules);
} else {
return false;
}
// pacScript takes precedence over proxyRules.
if (!pac_url.is_empty() && pac_url.is_valid()) {
out->set_pac_url(pac_url);
} else {
out->proxy_rules().ParseFromString(proxy_rules);
}
return true;
}
};
@@ -180,7 +208,7 @@ class ResolveProxyHelper {
};
// Runs the callback in UI thread.
template <typename ...T>
template<typename ...T>
void RunCallbackInUI(const base::Callback<void(T...)>& callback, T... result) {
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE, base::Bind(callback, result...));
@@ -188,19 +216,35 @@ void RunCallbackInUI(const base::Callback<void(T...)>& callback, T... result) {
// Callback of HttpCache::GetBackend.
void OnGetBackend(disk_cache::Backend** backend_ptr,
Session::CacheAction action,
const net::CompletionCallback& callback,
int result) {
if (result != net::OK) {
RunCallbackInUI(callback, result);
} else if (backend_ptr && *backend_ptr) {
(*backend_ptr)->DoomAllEntries(base::Bind(&RunCallbackInUI<int>, callback));
if (action == Session::CacheAction::CLEAR) {
(*backend_ptr)->DoomAllEntries(base::Bind(&RunCallbackInUI<int>,
callback));
} else if (action == Session::CacheAction::STATS) {
base::StringPairs stats;
(*backend_ptr)->GetStats(&stats);
for (size_t i = 0; i < stats.size(); ++i) {
if (stats[i].first == "Current size") {
int current_size;
base::StringToInt(stats[i].second, &current_size);
RunCallbackInUI(callback, current_size);
break;
}
}
}
} else {
RunCallbackInUI<int>(callback, net::ERR_FAILED);
}
}
void ClearHttpCacheInIO(
void DoCacheActionInIO(
const scoped_refptr<net::URLRequestContextGetter>& context_getter,
Session::CacheAction action,
const net::CompletionCallback& callback) {
auto request_context = context_getter->GetURLRequestContext();
auto http_cache = request_context->http_transaction_factory()->GetCache();
@@ -211,22 +255,36 @@ void ClearHttpCacheInIO(
using BackendPtr = disk_cache::Backend*;
BackendPtr* backend_ptr = new BackendPtr(nullptr);
net::CompletionCallback on_get_backend =
base::Bind(&OnGetBackend, base::Owned(backend_ptr), callback);
base::Bind(&OnGetBackend, base::Owned(backend_ptr), action, callback);
int rv = http_cache->GetBackend(backend_ptr, on_get_backend);
if (rv != net::ERR_IO_PENDING)
on_get_backend.Run(net::OK);
}
void SetProxyInIO(net::URLRequestContextGetter* getter,
const std::string& proxy,
const net::ProxyConfig& config,
const base::Closure& callback) {
net::ProxyConfig config;
config.proxy_rules().ParseFromString(proxy);
auto proxy_service = getter->GetURLRequestContext()->proxy_service();
proxy_service->ResetConfigService(new net::ProxyConfigServiceFixed(config));
proxy_service->ResetConfigService(make_scoped_ptr(
new net::ProxyConfigServiceFixed(config)));
// Refetches and applies the new pac script if provided.
proxy_service->ForceReloadProxyConfig();
RunCallbackInUI(callback);
}
void ClearHostResolverCacheInIO(
const scoped_refptr<net::URLRequestContextGetter>& context_getter,
const base::Closure& callback) {
auto request_context = context_getter->GetURLRequestContext();
auto cache = request_context->host_resolver()->GetHostCache();
if (cache) {
cache->clear();
DCHECK_EQ(0u, cache->size());
if (!callback.is_null())
RunCallbackInUI(callback);
}
}
} // namespace
Session::Session(AtomBrowserContext* browser_context)
@@ -241,37 +299,33 @@ Session::Session(AtomBrowserContext* browser_context)
Session::~Session() {
content::BrowserContext::GetDownloadManager(browser_context())->
RemoveObserver(this);
Destroy();
}
void Session::OnDownloadCreated(content::DownloadManager* manager,
content::DownloadItem* item) {
content::DownloadItem* item) {
auto web_contents = item->GetWebContents();
bool prevent_default = Emit("will-download", item,
api::WebContents::CreateFrom(isolate(),
web_contents));
if (SavePageHandler::IsSavePageTypes(item->GetMimeType()))
return;
bool prevent_default = Emit(
"will-download",
DownloadItem::Create(isolate(), item),
api::WebContents::CreateFrom(isolate(), web_contents));
if (prevent_default) {
item->Cancel(true);
item->Remove();
}
}
bool Session::IsDestroyed() const {
return !browser_context_;
}
void Session::Destroy() {
browser_context_ = nullptr;
}
void Session::ResolveProxy(const GURL& url, ResolveProxyCallback callback) {
new ResolveProxyHelper(browser_context(), url, callback);
}
void Session::ClearCache(const net::CompletionCallback& callback) {
template<Session::CacheAction action>
void Session::DoCacheAction(const net::CompletionCallback& callback) {
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&ClearHttpCacheInIO,
base::Bind(&DoCacheActionInIO,
make_scoped_refptr(browser_context_->GetRequestContext()),
action,
callback));
}
@@ -293,11 +347,17 @@ void Session::ClearStorageData(mate::Arguments* args) {
base::Time(), base::Time::Max(), callback);
}
void Session::SetProxy(const std::string& proxy,
void Session::FlushStorageData() {
auto storage_partition =
content::BrowserContext::GetStoragePartition(browser_context(), nullptr);
storage_partition->Flush();
}
void Session::SetProxy(const net::ProxyConfig& config,
const base::Closure& callback) {
auto getter = browser_context_->GetRequestContext();
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&SetProxyInIO, base::Unretained(getter), proxy, callback));
base::Bind(&SetProxyInIO, base::Unretained(getter), config, callback));
}
void Session::SetDownloadPath(const base::FilePath& path) {
@@ -305,6 +365,76 @@ void Session::SetDownloadPath(const base::FilePath& path) {
prefs::kDownloadDefaultDirectory, path);
}
void Session::EnableNetworkEmulation(const mate::Dictionary& options) {
scoped_ptr<brightray::DevToolsNetworkConditions> conditions;
bool offline = false;
double latency, download_throughput, upload_throughput;
if (options.Get("offline", &offline) && offline) {
conditions.reset(new brightray::DevToolsNetworkConditions(offline));
} else {
options.Get("latency", &latency);
options.Get("downloadThroughput", &download_throughput);
options.Get("uploadThroughput", &upload_throughput);
conditions.reset(
new brightray::DevToolsNetworkConditions(false,
latency,
download_throughput,
upload_throughput));
}
auto controller = browser_context_->GetDevToolsNetworkController();
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&brightray::DevToolsNetworkController::SetNetworkState,
base::Unretained(controller),
std::string(),
base::Passed(&conditions)));
}
void Session::DisableNetworkEmulation() {
scoped_ptr<brightray::DevToolsNetworkConditions> conditions(
new brightray::DevToolsNetworkConditions(false));
auto controller = browser_context_->GetDevToolsNetworkController();
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&brightray::DevToolsNetworkController::SetNetworkState,
base::Unretained(controller),
std::string(),
base::Passed(&conditions)));
}
void Session::SetCertVerifyProc(v8::Local<v8::Value> val,
mate::Arguments* args) {
AtomCertVerifier::VerifyProc proc;
if (!(val->IsNull() || mate::ConvertFromV8(args->isolate(), val, &proc))) {
args->ThrowError("Must pass null or function");
return;
}
browser_context_->cert_verifier()->SetVerifyProc(proc);
}
void Session::SetPermissionRequestHandler(v8::Local<v8::Value> val,
mate::Arguments* args) {
AtomPermissionManager::RequestHandler handler;
if (!(val->IsNull() || mate::ConvertFromV8(args->isolate(), val, &handler))) {
args->ThrowError("Must pass null or function");
return;
}
auto permission_manager = static_cast<AtomPermissionManager*>(
browser_context()->GetPermissionManager());
permission_manager->SetPermissionRequestHandler(handler);
}
void Session::ClearHostResolverCache(mate::Arguments* args) {
base::Closure callback;
args->GetNext(&callback);
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&ClearHostResolverCacheInIO,
make_scoped_refptr(browser_context_->GetRequestContext()),
callback));
}
v8::Local<v8::Value> Session::Cookies(v8::Isolate* isolate) {
if (cookies_.IsEmpty()) {
auto handle = atom::api::Cookies::Create(isolate, browser_context());
@@ -313,15 +443,12 @@ v8::Local<v8::Value> Session::Cookies(v8::Isolate* isolate) {
return v8::Local<v8::Value>::New(isolate, cookies_);
}
mate::ObjectTemplateBuilder Session::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return mate::ObjectTemplateBuilder(isolate)
.SetMethod("resolveProxy", &Session::ResolveProxy)
.SetMethod("clearCache", &Session::ClearCache)
.SetMethod("clearStorageData", &Session::ClearStorageData)
.SetMethod("setProxy", &Session::SetProxy)
.SetMethod("setDownloadPath", &Session::SetDownloadPath)
.SetProperty("cookies", &Session::Cookies);
v8::Local<v8::Value> Session::WebRequest(v8::Isolate* isolate) {
if (web_request_.IsEmpty()) {
auto handle = atom::api::WebRequest::Create(isolate, browser_context());
web_request_.Reset(isolate, handle.ToV8());
}
return v8::Local<v8::Value>::New(isolate, web_request_);
}
// static
@@ -344,14 +471,40 @@ mate::Handle<Session> Session::FromPartition(
static_cast<AtomBrowserContext*>(browser_context.get()));
}
void SetWrapSession(const WrapSessionCallback& callback) {
g_wrap_session = callback;
// static
void Session::BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype) {
mate::ObjectTemplateBuilder(isolate, prototype)
.MakeDestroyable()
.SetMethod("resolveProxy", &Session::ResolveProxy)
.SetMethod("getCacheSize", &Session::DoCacheAction<CacheAction::STATS>)
.SetMethod("clearCache", &Session::DoCacheAction<CacheAction::CLEAR>)
.SetMethod("clearStorageData", &Session::ClearStorageData)
.SetMethod("flushStorageData", &Session::FlushStorageData)
.SetMethod("setProxy", &Session::SetProxy)
.SetMethod("setDownloadPath", &Session::SetDownloadPath)
.SetMethod("enableNetworkEmulation", &Session::EnableNetworkEmulation)
.SetMethod("disableNetworkEmulation", &Session::DisableNetworkEmulation)
.SetMethod("setCertificateVerifyProc", &Session::SetCertVerifyProc)
.SetMethod("setPermissionRequestHandler",
&Session::SetPermissionRequestHandler)
.SetMethod("clearHostResolverCache", &Session::ClearHostResolverCache)
.SetProperty("cookies", &Session::Cookies)
.SetProperty("webRequest", &Session::WebRequest);
}
void ClearWrapSession() {
g_wrap_session.Reset();
}
void SetWrapSession(const WrapSessionCallback& callback) {
g_wrap_session = callback;
// Cleanup the wrapper on exit.
atom::AtomBrowserMainParts::Get()->RegisterDestructionCallback(
base::Bind(ClearWrapSession));
}
} // namespace api
} // namespace atom
@@ -364,7 +517,6 @@ void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
mate::Dictionary dict(isolate, exports);
dict.SetMethod("fromPartition", &atom::api::Session::FromPartition);
dict.SetMethod("_setWrapSession", &atom::api::SetWrapSession);
dict.SetMethod("_clearWrapSession", &atom::api::ClearWrapSession);
}
} // namespace

View File

@@ -20,6 +20,11 @@ class FilePath;
namespace mate {
class Arguments;
class Dictionary;
}
namespace net {
class ProxyConfig;
}
namespace atom {
@@ -33,6 +38,11 @@ class Session: public mate::TrackableObject<Session>,
public:
using ResolveProxyCallback = base::Callback<void(std::string)>;
enum class CacheAction {
CLEAR,
STATS,
};
// Gets or creates Session from the |browser_context|.
static mate::Handle<Session> CreateFrom(
v8::Isolate* isolate, AtomBrowserContext* browser_context);
@@ -43,6 +53,10 @@ class Session: public mate::TrackableObject<Session>,
AtomBrowserContext* browser_context() const { return browser_context_.get(); }
// mate::TrackableObject:
static void BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype);
protected:
explicit Session(AtomBrowserContext* browser_context);
~Session();
@@ -51,24 +65,26 @@ class Session: public mate::TrackableObject<Session>,
void OnDownloadCreated(content::DownloadManager* manager,
content::DownloadItem* item) override;
// mate::Wrappable:
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override;
bool IsDestroyed() const override;
private:
// mate::TrackableObject:
void Destroy() override;
void ResolveProxy(const GURL& url, ResolveProxyCallback callback);
void ClearCache(const net::CompletionCallback& callback);
template<CacheAction action>
void DoCacheAction(const net::CompletionCallback& callback);
void ClearStorageData(mate::Arguments* args);
void SetProxy(const std::string& proxy, const base::Closure& callback);
void FlushStorageData();
void SetProxy(const net::ProxyConfig& config, const base::Closure& callback);
void SetDownloadPath(const base::FilePath& path);
void EnableNetworkEmulation(const mate::Dictionary& options);
void DisableNetworkEmulation();
void SetCertVerifyProc(v8::Local<v8::Value> proc, mate::Arguments* args);
void SetPermissionRequestHandler(v8::Local<v8::Value> val,
mate::Arguments* args);
void ClearHostResolverCache(mate::Arguments* args);
v8::Local<v8::Value> Cookies(v8::Isolate* isolate);
v8::Local<v8::Value> WebRequest(v8::Isolate* isolate);
// Cached object for cookies API.
// Cached object.
v8::Global<v8::Value> cookies_;
v8::Global<v8::Value> web_request_;
scoped_refptr<AtomBrowserContext> browser_context_;

View File

@@ -44,21 +44,21 @@ mate::Wrappable* Tray::New(v8::Isolate* isolate, const gfx::Image& image) {
void Tray::OnClicked(const gfx::Rect& bounds, int modifiers) {
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
EmitCustomEvent("clicked",
EmitCustomEvent("click",
ModifiersToObject(isolate(), modifiers), bounds);
}
void Tray::OnDoubleClicked(const gfx::Rect& bounds, int modifiers) {
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
EmitCustomEvent("double-clicked",
EmitCustomEvent("double-click",
ModifiersToObject(isolate(), modifiers), bounds);
}
void Tray::OnRightClicked(const gfx::Rect& bounds, int modifiers) {
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
EmitCustomEvent("right-clicked",
EmitCustomEvent("right-click",
ModifiersToObject(isolate(), modifiers), bounds);
}
@@ -67,23 +67,31 @@ void Tray::OnBalloonShow() {
}
void Tray::OnBalloonClicked() {
Emit("balloon-clicked");
Emit("balloon-click");
}
void Tray::OnBalloonClosed() {
Emit("balloon-closed");
}
void Tray::OnDrop() {
Emit("drop");
}
void Tray::OnDropFiles(const std::vector<std::string>& files) {
Emit("drop-files", files);
}
bool Tray::IsDestroyed() const {
return !tray_icon_;
void Tray::OnDragEntered() {
Emit("drag-enter");
}
void Tray::Destroy() {
tray_icon_.reset();
void Tray::OnDragExited() {
Emit("drag-leave");
}
void Tray::OnDragEnded() {
Emit("drag-end");
}
void Tray::SetImage(mate::Arguments* args, const gfx::Image& image) {
@@ -121,9 +129,11 @@ void Tray::DisplayBalloon(mate::Arguments* args,
}
void Tray::PopUpContextMenu(mate::Arguments* args) {
mate::Handle<Menu> menu;
args->GetNext(&menu);
gfx::Point pos;
args->GetNext(&pos);
tray_icon_->PopUpContextMenu(pos);
tray_icon_->PopUpContextMenu(pos, menu.IsEmpty() ? nullptr : menu->model());
}
void Tray::SetContextMenu(mate::Arguments* args, Menu* menu) {
@@ -144,7 +154,7 @@ v8::Local<v8::Object> Tray::ModifiersToObject(v8::Isolate* isolate,
void Tray::BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype) {
mate::ObjectTemplateBuilder(isolate, prototype)
.SetMethod("destroy", &Tray::Destroy, true)
.MakeDestroyable()
.SetMethod("setImage", &Tray::SetImage)
.SetMethod("setPressedImage", &Tray::SetPressedImage)
.SetMethod("setToolTip", &Tray::SetToolTip)

View File

@@ -8,7 +8,7 @@
#include <string>
#include <vector>
#include "atom/browser/api/event_emitter.h"
#include "atom/browser/api/trackable_object.h"
#include "atom/browser/ui/tray_icon_observer.h"
#include "base/memory/scoped_ptr.h"
@@ -29,7 +29,7 @@ namespace api {
class Menu;
class Tray : public mate::EventEmitter,
class Tray : public mate::TrackableObject<Tray>,
public TrayIconObserver {
public:
static mate::Wrappable* New(v8::Isolate* isolate, const gfx::Image& image);
@@ -39,7 +39,7 @@ class Tray : public mate::EventEmitter,
protected:
explicit Tray(const gfx::Image& image);
virtual ~Tray();
~Tray() override;
// TrayIconObserver:
void OnClicked(const gfx::Rect& bounds, int modifiers) override;
@@ -48,12 +48,12 @@ class Tray : public mate::EventEmitter,
void OnBalloonShow() override;
void OnBalloonClicked() override;
void OnBalloonClosed() override;
void OnDrop() override;
void OnDropFiles(const std::vector<std::string>& files) override;
void OnDragEntered() override;
void OnDragExited() override;
void OnDragEnded() override;
// mate::Wrappable:
bool IsDestroyed() const override;
void Destroy();
void SetImage(mate::Arguments* args, const gfx::Image& image);
void SetPressedImage(mate::Arguments* args, const gfx::Image& image);
void SetToolTip(mate::Arguments* args, const std::string& tool_tip);

View File

@@ -5,27 +5,34 @@
#include "atom/browser/api/atom_api_web_contents.h"
#include <set>
#include <string>
#include "atom/browser/api/atom_api_debugger.h"
#include "atom/browser/api/atom_api_session.h"
#include "atom/browser/api/atom_api_window.h"
#include "atom/browser/atom_browser_client.h"
#include "atom/browser/atom_browser_context.h"
#include "atom/browser/atom_browser_main_parts.h"
#include "atom/browser/native_window.h"
#include "atom/browser/web_contents_permission_helper.h"
#include "atom/browser/web_contents_preferences.h"
#include "atom/browser/web_view_guest_delegate.h"
#include "atom/common/api/api_messages.h"
#include "atom/common/api/event_emitter_caller.h"
#include "atom/common/native_mate_converters/blink_converter.h"
#include "atom/common/native_mate_converters/callback.h"
#include "atom/common/native_mate_converters/content_converter.h"
#include "atom/common/native_mate_converters/file_path_converter.h"
#include "atom/common/native_mate_converters/gfx_converter.h"
#include "atom/common/native_mate_converters/gurl_converter.h"
#include "atom/common/native_mate_converters/image_converter.h"
#include "atom/common/native_mate_converters/string16_converter.h"
#include "atom/common/native_mate_converters/value_converter.h"
#include "atom/common/mouse_util.h"
#include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h"
#include "brightray/browser/inspectable_web_contents.h"
#include "brightray/browser/inspectable_web_contents_view.h"
#include "chrome/browser/printing/print_view_manager_basic.h"
#include "chrome/browser/printing/print_preview_message_handler.h"
#include "content/common/view_messages.h"
@@ -43,12 +50,14 @@
#include "content/public/browser/storage_partition.h"
#include "content/public/browser/site_instance.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/context_menu_params.h"
#include "native_mate/dictionary.h"
#include "native_mate/object_template_builder.h"
#include "net/http/http_response_headers.h"
#include "net/url_request/static_http_user_agent_settings.h"
#include "net/url_request/url_request_context.h"
#include "third_party/WebKit/public/web/WebInputEvent.h"
#include "ui/base/l10n/l10n_util.h"
#include "atom/common/node_includes.h"
@@ -60,9 +69,12 @@ struct PrintSettings {
};
void SetUserAgentInIO(scoped_refptr<net::URLRequestContextGetter> getter,
std::string accept_lang,
std::string user_agent) {
getter->GetURLRequestContext()->set_http_user_agent_settings(
new net::StaticHttpUserAgentSettings("en-us,en", user_agent));
new net::StaticHttpUserAgentSettings(
net::HttpUtil::GenerateAcceptLanguageHeader(accept_lang),
user_agent));
}
} // namespace
@@ -130,8 +142,7 @@ struct Converter<net::HttpResponseHeaders*> {
std::string key;
std::string value;
while (headers->EnumerateHeaderLines(&iter, &key, &value)) {
key = base::StringToLowerASCII(key);
value = base::StringToLowerASCII(value);
key = base::ToLowerASCII(key);
if (response_headers.HasKey(key)) {
base::ListValue* values = nullptr;
if (response_headers.GetList(key, &values))
@@ -147,6 +158,27 @@ struct Converter<net::HttpResponseHeaders*> {
}
};
template<>
struct Converter<content::SavePageType> {
static bool FromV8(v8::Isolate* isolate, v8::Local<v8::Value> val,
content::SavePageType* out) {
std::string save_type;
if (!ConvertFromV8(isolate, val, &save_type))
return false;
save_type = base::ToLowerASCII(save_type);
if (save_type == "htmlonly") {
*out = content::SAVE_PAGE_TYPE_AS_ONLY_HTML;
} else if (save_type == "htmlcomplete") {
*out = content::SAVE_PAGE_TYPE_AS_COMPLETE_HTML;
} else if (save_type == "mhtml") {
*out = content::SAVE_PAGE_TYPE_AS_MHTML;
} else {
return false;
}
return true;
}
};
} // namespace mate
@@ -156,8 +188,6 @@ namespace api {
namespace {
v8::Persistent<v8::ObjectTemplate> template_;
// The wrapWebContents function which is implemented in JavaScript
using WrapWebContentsCallback = base::Callback<void(v8::Local<v8::Value>)>;
WrapWebContentsCallback g_wrap_web_contents;
@@ -187,7 +217,9 @@ WebContents::WebContents(content::WebContents* web_contents)
}
WebContents::WebContents(v8::Isolate* isolate,
const mate::Dictionary& options) {
const mate::Dictionary& options)
: embedder_(nullptr),
request_id_(0) {
// Whether it is a guest WebContents.
bool is_guest = false;
options.Get("isGuest", &is_guest);
@@ -228,10 +260,13 @@ WebContents::WebContents(v8::Isolate* isolate,
AttachAsUserData(web_contents);
InitWithWebContents(web_contents);
// Save the preferences.
base::DictionaryValue web_preferences;
mate::ConvertFromV8(isolate, options.GetHandle(), &web_preferences);
new WebContentsPreferences(web_contents, &web_preferences);
managed_web_contents()->GetView()->SetDelegate(this);
// Save the preferences in C++.
new WebContentsPreferences(web_contents, options);
// Intialize permission helper.
WebContentsPermissionHelper::CreateForWebContents(web_contents);
web_contents->SetUserAgentOverride(GetBrowserContext()->GetUserAgent());
@@ -239,10 +274,10 @@ WebContents::WebContents(v8::Isolate* isolate,
guest_delegate_->Initialize(this);
NativeWindow* owner_window = nullptr;
WebContents* embedder = nullptr;
if (options.Get("embedder", &embedder) && embedder) {
if (options.Get("embedder", &embedder_) && embedder_) {
// New WebContents's owner_window is the embedder's owner_window.
auto relay = NativeWindowRelay::FromWebContents(embedder->web_contents());
auto relay =
NativeWindowRelay::FromWebContents(embedder_->web_contents());
if (relay)
owner_window = relay->window.get();
}
@@ -252,7 +287,19 @@ WebContents::WebContents(v8::Isolate* isolate,
}
WebContents::~WebContents() {
Destroy();
// The destroy() is called.
if (managed_web_contents()) {
// For webview we need to tell content module to do some cleanup work before
// destroying it.
if (type_ == WEB_VIEW)
guest_delegate_->Destroy();
// The WebContentsDestroyed will not be called automatically because we
// unsubscribe from webContents before destroying it. So we have to manually
// call it here to make sure "destroyed" event is emitted.
RenderViewDeleted(web_contents()->GetRenderViewHost());
WebContentsDestroyed();
}
}
bool WebContents::AddMessageToConsole(content::WebContents* source,
@@ -346,6 +393,18 @@ void WebContents::HandleKeyboardEvent(
void WebContents::EnterFullscreenModeForTab(content::WebContents* source,
const GURL& origin) {
auto permission_helper =
WebContentsPermissionHelper::FromWebContents(source);
auto callback = base::Bind(&WebContents::OnEnterFullscreenModeForTab,
base::Unretained(this), source, origin);
permission_helper->RequestFullscreenPermission(callback);
}
void WebContents::OnEnterFullscreenModeForTab(content::WebContents* source,
const GURL& origin,
bool allowed) {
if (!allowed)
return;
CommonWebContentsDelegate::EnterFullscreenModeForTab(source, origin);
Emit("enter-html-full-screen");
}
@@ -367,23 +426,75 @@ void WebContents::RendererResponsive(content::WebContents* source) {
owner_window()->RendererResponsive(source);
}
bool WebContents::HandleContextMenu(const content::ContextMenuParams& params) {
if (!params.custom_context.is_pepper_menu)
return false;
Emit("pepper-context-menu", std::make_pair(params, web_contents()));
web_contents()->NotifyContextMenuClosed(params.custom_context);
return true;
}
bool WebContents::OnGoToEntryOffset(int offset) {
GoToOffset(offset);
return false;
}
void WebContents::FindReply(content::WebContents* web_contents,
int request_id,
int number_of_matches,
const gfx::Rect& selection_rect,
int active_match_ordinal,
bool final_update) {
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
mate::Dictionary result = mate::Dictionary::CreateEmpty(isolate());
if (number_of_matches == -1) {
result.Set("requestId", request_id);
result.Set("selectionArea", selection_rect);
result.Set("finalUpdate", final_update);
Emit("found-in-page", result);
} else if (final_update) {
result.Set("requestId", request_id);
result.Set("matches", number_of_matches);
result.Set("finalUpdate", final_update);
Emit("found-in-page", result);
}
}
bool WebContents::CheckMediaAccessPermission(
content::WebContents* web_contents,
const GURL& security_origin,
content::MediaStreamType type) {
return true;
}
void WebContents::RequestMediaAccessPermission(
content::WebContents* web_contents,
const content::MediaStreamRequest& request,
const content::MediaResponseCallback& callback) {
auto permission_helper =
WebContentsPermissionHelper::FromWebContents(web_contents);
permission_helper->RequestMediaAccessPermission(request, callback);
}
void WebContents::RequestToLockMouse(
content::WebContents* web_contents,
bool user_gesture,
bool last_unlocked_by_target) {
auto permission_helper =
WebContentsPermissionHelper::FromWebContents(web_contents);
permission_helper->RequestPointerLockPermission(user_gesture);
}
void WebContents::BeforeUnloadFired(const base::TimeTicks& proceed_time) {
// Do nothing, we override this method just to avoid compilation error since
// there are two virtual functions named BeforeUnloadFired.
}
void WebContents::RenderViewDeleted(content::RenderViewHost* render_view_host) {
int process_id = render_view_host->GetProcess()->GetID();
Emit("render-view-deleted", process_id);
// process.emit('ATOM_BROWSER_RELEASE_RENDER_VIEW', processId);
// Tell the rpc server that a render view has been deleted and we need to
// release all objects owned by it.
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
node::Environment* env = node::Environment::GetCurrent(isolate());
mate::EmitEvent(isolate(), env->process_object(),
"ATOM_BROWSER_RELEASE_RENDER_VIEW", process_id);
Emit("render-view-deleted", render_view_host->GetProcess()->GetID());
}
void WebContents::RenderProcessGone(base::TerminationStatus status) {
@@ -398,6 +509,22 @@ void WebContents::PluginCrashed(const base::FilePath& plugin_path,
Emit("plugin-crashed", info.name, info.version);
}
void WebContents::MediaStartedPlaying() {
Emit("media-started-playing");
}
void WebContents::MediaPaused() {
Emit("media-paused");
}
void WebContents::DidChangeThemeColor(SkColor theme_color) {
std::string hex_theme_color = base::StringPrintf("#%02X%02X%02X",
SkColorGetR(theme_color),
SkColorGetG(theme_color),
SkColorGetB(theme_color));
Emit("did-change-theme-color", hex_theme_color);
}
void WebContents::DocumentLoadedInFrame(
content::RenderFrameHost* render_frame_host) {
if (!render_frame_host->GetParent())
@@ -413,14 +540,13 @@ void WebContents::DidFinishLoad(content::RenderFrameHost* render_frame_host,
Emit("did-finish-load");
}
// this error occurs when host could not be found
void WebContents::DidFailProvisionalLoad(
content::RenderFrameHost* render_frame_host,
const GURL& validated_url,
const GURL& url,
int error_code,
const base::string16& error_description,
bool was_ignored_by_handler) {
Emit("did-fail-load", error_code, error_description, validated_url);
Emit("did-fail-provisional-load", error_code, error_description, url);
}
void WebContents::DidFailLoad(content::RenderFrameHost* render_frame_host,
@@ -468,14 +594,17 @@ void WebContents::DidNavigateMainFrame(
const content::LoadCommittedDetails& details,
const content::FrameNavigateParams& params) {
if (details.is_navigation_to_different_page())
Emit("did-navigate-to-different-page");
Emit("did-navigate", params.url);
else if (details.is_in_page)
Emit("did-navigate-in-page", params.url);
}
void WebContents::TitleWasSet(content::NavigationEntry* entry,
bool explicit_set) {
// Back/Forward navigation may have pruned entries.
if (entry)
Emit("page-title-set", entry->GetTitle(), explicit_set);
Emit("-page-title-updated", entry->GetTitle(), explicit_set);
else
Emit("-page-title-updated", "", explicit_set);
}
void WebContents::DidUpdateFaviconURL(
@@ -491,23 +620,75 @@ void WebContents::DidUpdateFaviconURL(
Emit("page-favicon-updated", unique_urls);
}
void WebContents::DevToolsFocused() {
Emit("devtools-focused");
}
void WebContents::DevToolsOpened() {
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
auto handle = WebContents::CreateFrom(
isolate(), managed_web_contents()->GetDevToolsWebContents());
devtools_web_contents_.Reset(isolate(), handle.ToV8());
// Inherit owner window in devtools.
if (owner_window())
handle->SetOwnerWindow(managed_web_contents()->GetDevToolsWebContents(),
owner_window());
Emit("devtools-opened");
}
void WebContents::DevToolsClosed() {
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
devtools_web_contents_.Reset();
Emit("devtools-closed");
}
bool WebContents::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(WebContents, message)
IPC_MESSAGE_HANDLER(AtomViewHostMsg_Message, OnRendererMessage)
IPC_MESSAGE_HANDLER_DELAY_REPLY(AtomViewHostMsg_Message_Sync,
OnRendererMessageSync)
IPC_MESSAGE_HANDLER_CODE(ViewHostMsg_SetCursor, OnCursorChange,
handled = false)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
// There are three ways of destroying a webContents:
// 1. call webContents.destory();
// 2. garbage collection;
// 3. user closes the window of webContents;
// For webview only #1 will happen, for BrowserWindow both #1 and #3 may
// happen. The #2 should never happen for webContents, because webview is
// managed by GuestViewManager, and BrowserWindow's webContents is managed
// by api::Window.
// For #1, the destructor will do the cleanup work and we only need to make
// sure "destroyed" event is emitted. For #3, the content::WebContents will
// be destroyed on close, and WebContentsDestroyed would be called for it, so
// we need to make sure the api::WebContents is also deleted.
void WebContents::WebContentsDestroyed() {
// The RenderViewDeleted was not called when the WebContents is destroyed.
RenderViewDeleted(web_contents()->GetRenderViewHost());
Emit("destroyed");
// This event is only for internal use, which is emitted when WebContents is
// being destroyed.
Emit("will-destroy");
// Cleanup relationships with other parts.
RemoveFromWeakMap();
// We can not call Destroy here because we need to call Emit first, but we
// also do not want any method to be used, so just mark as destroyed here.
MarkDestroyed();
Emit("destroyed");
// Destroy the native class in next tick.
base::MessageLoop::current()->PostTask(FROM_HERE, GetDestroyClosure());
}
void WebContents::NavigationEntryCommitted(
@@ -516,23 +697,6 @@ void WebContents::NavigationEntryCommitted(
details.is_in_page, details.did_replace_entry);
}
void WebContents::Destroy() {
session_.Reset();
if (type_ == WEB_VIEW && managed_web_contents()) {
// When force destroying the "destroyed" event is not emitted.
WebContentsDestroyed();
guest_delegate_->Destroy();
Observe(nullptr);
DestroyWebContents();
}
}
bool WebContents::IsAlive() const {
return web_contents() != NULL;
}
int WebContents::GetID() const {
return web_contents()->GetRenderProcessHost()->GetID();
}
@@ -542,6 +706,14 @@ bool WebContents::Equal(const WebContents* web_contents) const {
}
void WebContents::LoadURL(const GURL& url, const mate::Dictionary& options) {
if (!url.is_valid()) {
Emit("did-fail-load",
static_cast<int>(net::ERR_INVALID_URL),
net::ErrorToShortString(net::ERR_INVALID_URL),
url.possibly_invalid_spec());
return;
}
content::NavigationController::LoadURLParams params(url);
GURL http_referrer;
@@ -553,12 +725,25 @@ void WebContents::LoadURL(const GURL& url, const mate::Dictionary& options) {
if (options.Get("userAgent", &user_agent))
SetUserAgent(user_agent);
std::string extra_headers;
if (options.Get("extraHeaders", &extra_headers))
params.extra_headers = extra_headers;
params.transition_type = ui::PAGE_TRANSITION_TYPED;
params.should_clear_history_list = true;
params.override_user_agent = content::NavigationController::UA_OVERRIDE_TRUE;
web_contents()->GetController().LoadURLWithParams(params);
}
void WebContents::DownloadURL(const GURL& url) {
auto browser_context = web_contents()->GetBrowserContext();
auto download_manager =
content::BrowserContext::GetDownloadManager(browser_context);
download_manager->DownloadUrl(
content::DownloadUrlParameters::FromWebContents(web_contents(), url));
}
GURL WebContents::GetURL() const {
return web_contents()->GetURL();
}
@@ -579,10 +764,6 @@ void WebContents::Stop() {
web_contents()->Stop();
}
void WebContents::ReloadIgnoringCache() {
web_contents()->GetController().ReloadIgnoringCache(false);
}
void WebContents::GoBack() {
atom::AtomBrowserClient::SuppressRendererProcessRestartForOnce();
web_contents()->GetController().GoBack();
@@ -606,8 +787,10 @@ void WebContents::SetUserAgent(const std::string& user_agent) {
web_contents()->SetUserAgentOverride(user_agent);
scoped_refptr<net::URLRequestContextGetter> getter =
web_contents()->GetBrowserContext()->GetRequestContext();
auto accept_lang = l10n_util::GetApplicationLocale("");
getter->GetNetworkTaskRunner()->PostTask(FROM_HERE,
base::Bind(&SetUserAgentInIO, getter, user_agent));
base::Bind(&SetUserAgentInIO, getter, accept_lang, user_agent));
}
std::string WebContents::GetUserAgent() {
@@ -618,9 +801,11 @@ void WebContents::InsertCSS(const std::string& css) {
web_contents()->InsertCSS(css);
}
void WebContents::ExecuteJavaScript(const base::string16& code,
bool has_user_gesture) {
Send(new AtomViewMsg_ExecuteJavaScript(routing_id(), code, has_user_gesture));
bool WebContents::SavePage(const base::FilePath& full_file_path,
const content::SavePageType& save_type,
const SavePageHandler::SavePageCallback& callback) {
auto handler = new SavePageHandler(web_contents(), callback);
return handler->Handle(full_file_path, save_type);
}
void WebContents::OpenDevTools(mate::Arguments* args) {
@@ -652,6 +837,13 @@ bool WebContents::IsDevToolsOpened() {
return managed_web_contents()->IsDevToolsViewShowing();
}
bool WebContents::IsDevToolsFocused() {
if (type_ == REMOTE)
return false;
return managed_web_contents()->GetView()->IsDevToolsViewFocused();
}
void WebContents::EnableDeviceEmulation(
const blink::WebDeviceEmulationParams& params) {
if (type_ == REMOTE)
@@ -698,10 +890,6 @@ void WebContents::InspectServiceWorker() {
}
}
v8::Local<v8::Value> WebContents::Session(v8::Isolate* isolate) {
return v8::Local<v8::Value>::New(isolate, session_);
}
void WebContents::HasServiceWorker(
const base::Callback<void(bool)>& callback) {
auto context = GetServiceWorkerContext(web_contents());
@@ -810,6 +998,25 @@ void WebContents::ReplaceMisspelling(const base::string16& word) {
web_contents()->ReplaceMisspelling(word);
}
uint32 WebContents::FindInPage(mate::Arguments* args) {
uint32 request_id = GetNextRequestId();
base::string16 search_text;
blink::WebFindOptions options;
if (!args->GetNext(&search_text) || search_text.empty()) {
args->ThrowError("Must provide a non-empty search content");
return 0;
}
args->GetNext(&options);
web_contents()->Find(request_id, search_text, options);
return request_id;
}
void WebContents::StopFindInPage(content::StopFindAction action) {
web_contents()->StopFinding(action);
}
void WebContents::Focus() {
web_contents()->Focus();
}
@@ -840,7 +1047,7 @@ void WebContents::SendInputEvent(v8::Isolate* isolate,
return;
}
} else if (blink::WebInputEvent::isKeyboardEventType(type)) {
content::NativeWebKeyboardEvent keyboard_event;;
content::NativeWebKeyboardEvent keyboard_event;
if (mate::ConvertFromV8(isolate, input_event, &keyboard_event)) {
host->ForwardKeyboardEvent(keyboard_event);
return;
@@ -862,7 +1069,7 @@ void WebContents::BeginFrameSubscription(
const auto view = web_contents()->GetRenderWidgetHostView();
if (view) {
scoped_ptr<FrameSubscriber> frame_subscriber(new FrameSubscriber(
isolate(), view->GetVisibleViewportSize(), callback));
isolate(), view, callback));
view->BeginFrameSubscription(frame_subscriber.Pass());
}
}
@@ -873,6 +1080,19 @@ void WebContents::EndFrameSubscription() {
view->EndFrameSubscription();
}
void WebContents::OnCursorChange(const content::WebCursor& cursor) {
content::WebCursor::CursorInfo info;
cursor.GetCursorInfo(&info);
if (cursor.IsCustom()) {
Emit("cursor-changed", CursorTypeToString(info),
gfx::Image::CreateFrom1xBitmap(info.custom_image),
info.image_scale_factor);
} else {
Emit("cursor-changed", CursorTypeToString(info));
}
}
void WebContents::SetSize(const SetSizeParams& params) {
if (guest_delegate_)
guest_delegate_->SetSize(params);
@@ -887,78 +1107,115 @@ bool WebContents::IsGuest() const {
return type_ == WEB_VIEW;
}
mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
if (template_.IsEmpty())
template_.Reset(isolate, mate::ObjectTemplateBuilder(isolate)
.SetMethod("destroy", &WebContents::Destroy, true)
.SetMethod("isAlive", &WebContents::IsAlive, true)
.SetMethod("getId", &WebContents::GetID)
.SetMethod("equal", &WebContents::Equal)
.SetMethod("_loadUrl", &WebContents::LoadURL)
.SetMethod("_getUrl", &WebContents::GetURL)
.SetMethod("getTitle", &WebContents::GetTitle)
.SetMethod("isLoading", &WebContents::IsLoading)
.SetMethod("isWaitingForResponse", &WebContents::IsWaitingForResponse)
.SetMethod("_stop", &WebContents::Stop)
.SetMethod("_reloadIgnoringCache", &WebContents::ReloadIgnoringCache)
.SetMethod("_goBack", &WebContents::GoBack)
.SetMethod("_goForward", &WebContents::GoForward)
.SetMethod("_goToOffset", &WebContents::GoToOffset)
.SetMethod("isCrashed", &WebContents::IsCrashed)
.SetMethod("setUserAgent", &WebContents::SetUserAgent)
.SetMethod("getUserAgent", &WebContents::GetUserAgent)
.SetMethod("insertCSS", &WebContents::InsertCSS)
.SetMethod("_executeJavaScript", &WebContents::ExecuteJavaScript)
.SetMethod("openDevTools", &WebContents::OpenDevTools)
.SetMethod("closeDevTools", &WebContents::CloseDevTools)
.SetMethod("isDevToolsOpened", &WebContents::IsDevToolsOpened)
.SetMethod("enableDeviceEmulation",
&WebContents::EnableDeviceEmulation)
.SetMethod("disableDeviceEmulation",
&WebContents::DisableDeviceEmulation)
.SetMethod("toggleDevTools", &WebContents::ToggleDevTools)
.SetMethod("inspectElement", &WebContents::InspectElement)
.SetMethod("setAudioMuted", &WebContents::SetAudioMuted)
.SetMethod("isAudioMuted", &WebContents::IsAudioMuted)
.SetMethod("undo", &WebContents::Undo)
.SetMethod("redo", &WebContents::Redo)
.SetMethod("cut", &WebContents::Cut)
.SetMethod("copy", &WebContents::Copy)
.SetMethod("paste", &WebContents::Paste)
.SetMethod("pasteAndMatchStyle", &WebContents::PasteAndMatchStyle)
.SetMethod("delete", &WebContents::Delete)
.SetMethod("selectAll", &WebContents::SelectAll)
.SetMethod("unselect", &WebContents::Unselect)
.SetMethod("replace", &WebContents::Replace)
.SetMethod("replaceMisspelling", &WebContents::ReplaceMisspelling)
.SetMethod("focus", &WebContents::Focus)
.SetMethod("tabTraverse", &WebContents::TabTraverse)
.SetMethod("_send", &WebContents::SendIPCMessage, true)
.SetMethod("sendInputEvent", &WebContents::SendInputEvent)
.SetMethod("beginFrameSubscription",
&WebContents::BeginFrameSubscription)
.SetMethod("endFrameSubscription", &WebContents::EndFrameSubscription)
.SetMethod("setSize", &WebContents::SetSize)
.SetMethod("setAllowTransparency", &WebContents::SetAllowTransparency)
.SetMethod("isGuest", &WebContents::IsGuest)
.SetMethod("hasServiceWorker", &WebContents::HasServiceWorker)
.SetMethod("unregisterServiceWorker",
&WebContents::UnregisterServiceWorker)
.SetMethod("inspectServiceWorker", &WebContents::InspectServiceWorker)
.SetMethod("print", &WebContents::Print)
.SetMethod("_printToPDF", &WebContents::PrintToPDF)
.SetMethod("addWorkSpace", &WebContents::AddWorkSpace)
.SetMethod("removeWorkSpace", &WebContents::RemoveWorkSpace)
.SetProperty("session", &WebContents::Session)
.Build());
return mate::ObjectTemplateBuilder(
isolate, v8::Local<v8::ObjectTemplate>::New(isolate, template_));
v8::Local<v8::Value> WebContents::GetWebPreferences(v8::Isolate* isolate) {
WebContentsPreferences* web_preferences =
WebContentsPreferences::FromWebContents(web_contents());
return mate::ConvertToV8(isolate, *web_preferences->web_preferences());
}
bool WebContents::IsDestroyed() const {
return !IsAlive();
v8::Local<v8::Value> WebContents::GetOwnerBrowserWindow() {
if (owner_window())
return Window::From(isolate(), owner_window());
else
return v8::Null(isolate());
}
v8::Local<v8::Value> WebContents::Session(v8::Isolate* isolate) {
return v8::Local<v8::Value>::New(isolate, session_);
}
content::WebContents* WebContents::HostWebContents() {
if (!embedder_)
return nullptr;
return embedder_->web_contents();
}
v8::Local<v8::Value> WebContents::DevToolsWebContents(v8::Isolate* isolate) {
if (devtools_web_contents_.IsEmpty())
return v8::Null(isolate);
else
return v8::Local<v8::Value>::New(isolate, devtools_web_contents_);
}
v8::Local<v8::Value> WebContents::Debugger(v8::Isolate* isolate) {
if (debugger_.IsEmpty()) {
auto handle = atom::api::Debugger::Create(isolate, web_contents());
debugger_.Reset(isolate, handle.ToV8());
}
return v8::Local<v8::Value>::New(isolate, debugger_);
}
// static
void WebContents::BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype) {
mate::ObjectTemplateBuilder(isolate, prototype)
.MakeDestroyable()
.SetMethod("getId", &WebContents::GetID)
.SetMethod("equal", &WebContents::Equal)
.SetMethod("_loadURL", &WebContents::LoadURL)
.SetMethod("downloadURL", &WebContents::DownloadURL)
.SetMethod("_getURL", &WebContents::GetURL)
.SetMethod("getTitle", &WebContents::GetTitle)
.SetMethod("isLoading", &WebContents::IsLoading)
.SetMethod("isWaitingForResponse", &WebContents::IsWaitingForResponse)
.SetMethod("_stop", &WebContents::Stop)
.SetMethod("_goBack", &WebContents::GoBack)
.SetMethod("_goForward", &WebContents::GoForward)
.SetMethod("_goToOffset", &WebContents::GoToOffset)
.SetMethod("isCrashed", &WebContents::IsCrashed)
.SetMethod("setUserAgent", &WebContents::SetUserAgent)
.SetMethod("getUserAgent", &WebContents::GetUserAgent)
.SetMethod("insertCSS", &WebContents::InsertCSS)
.SetMethod("savePage", &WebContents::SavePage)
.SetMethod("openDevTools", &WebContents::OpenDevTools)
.SetMethod("closeDevTools", &WebContents::CloseDevTools)
.SetMethod("isDevToolsOpened", &WebContents::IsDevToolsOpened)
.SetMethod("isDevToolsFocused", &WebContents::IsDevToolsFocused)
.SetMethod("enableDeviceEmulation",
&WebContents::EnableDeviceEmulation)
.SetMethod("disableDeviceEmulation",
&WebContents::DisableDeviceEmulation)
.SetMethod("toggleDevTools", &WebContents::ToggleDevTools)
.SetMethod("inspectElement", &WebContents::InspectElement)
.SetMethod("setAudioMuted", &WebContents::SetAudioMuted)
.SetMethod("isAudioMuted", &WebContents::IsAudioMuted)
.SetMethod("undo", &WebContents::Undo)
.SetMethod("redo", &WebContents::Redo)
.SetMethod("cut", &WebContents::Cut)
.SetMethod("copy", &WebContents::Copy)
.SetMethod("paste", &WebContents::Paste)
.SetMethod("pasteAndMatchStyle", &WebContents::PasteAndMatchStyle)
.SetMethod("delete", &WebContents::Delete)
.SetMethod("selectAll", &WebContents::SelectAll)
.SetMethod("unselect", &WebContents::Unselect)
.SetMethod("replace", &WebContents::Replace)
.SetMethod("replaceMisspelling", &WebContents::ReplaceMisspelling)
.SetMethod("findInPage", &WebContents::FindInPage)
.SetMethod("stopFindInPage", &WebContents::StopFindInPage)
.SetMethod("focus", &WebContents::Focus)
.SetMethod("tabTraverse", &WebContents::TabTraverse)
.SetMethod("_send", &WebContents::SendIPCMessage)
.SetMethod("sendInputEvent", &WebContents::SendInputEvent)
.SetMethod("beginFrameSubscription",
&WebContents::BeginFrameSubscription)
.SetMethod("endFrameSubscription", &WebContents::EndFrameSubscription)
.SetMethod("setSize", &WebContents::SetSize)
.SetMethod("setAllowTransparency", &WebContents::SetAllowTransparency)
.SetMethod("isGuest", &WebContents::IsGuest)
.SetMethod("getWebPreferences", &WebContents::GetWebPreferences)
.SetMethod("getOwnerBrowserWindow", &WebContents::GetOwnerBrowserWindow)
.SetMethod("hasServiceWorker", &WebContents::HasServiceWorker)
.SetMethod("unregisterServiceWorker",
&WebContents::UnregisterServiceWorker)
.SetMethod("inspectServiceWorker", &WebContents::InspectServiceWorker)
.SetMethod("print", &WebContents::Print)
.SetMethod("_printToPDF", &WebContents::PrintToPDF)
.SetMethod("addWorkSpace", &WebContents::AddWorkSpace)
.SetMethod("removeWorkSpace", &WebContents::RemoveWorkSpace)
.SetProperty("session", &WebContents::Session)
.SetProperty("hostWebContents", &WebContents::HostWebContents)
.SetProperty("devToolsWebContents", &WebContents::DevToolsWebContents)
.SetProperty("debugger", &WebContents::Debugger);
}
AtomBrowserContext* WebContents::GetBrowserContext() const {
@@ -995,19 +1252,23 @@ mate::Handle<WebContents> WebContents::CreateFrom(
// static
mate::Handle<WebContents> WebContents::Create(
v8::Isolate* isolate, const mate::Dictionary& options) {
auto handle = mate::CreateHandle(isolate, new WebContents(isolate, options));
auto handle = mate::CreateHandle(isolate, new WebContents(isolate, options));
g_wrap_web_contents.Run(handle.ToV8());
return handle;
}
void SetWrapWebContents(const WrapWebContentsCallback& callback) {
g_wrap_web_contents = callback;
}
void ClearWrapWebContents() {
g_wrap_web_contents.Reset();
}
void SetWrapWebContents(const WrapWebContentsCallback& callback) {
g_wrap_web_contents = callback;
// Cleanup the wrapper on exit.
atom::AtomBrowserMainParts::Get()->RegisterDestructionCallback(
base::Bind(ClearWrapWebContents));
}
} // namespace api
} // namespace atom
@@ -1021,7 +1282,6 @@ void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
mate::Dictionary dict(isolate, exports);
dict.SetMethod("create", &atom::api::WebContents::Create);
dict.SetMethod("_setWrapWebContents", &atom::api::SetWrapWebContents);
dict.SetMethod("_clearWrapWebContents", &atom::api::ClearWrapWebContents);
}
} // namespace

View File

@@ -9,10 +9,12 @@
#include <vector>
#include "atom/browser/api/frame_subscriber.h"
#include "atom/browser/api/save_page_handler.h"
#include "atom/browser/api/trackable_object.h"
#include "atom/browser/common_web_contents_delegate.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/common/favicon_url.h"
#include "content/common/cursors/webcursor.h"
#include "native_mate/handle.h"
#include "ui/gfx/image/image.h"
@@ -53,13 +55,10 @@ class WebContents : public mate::TrackableObject<WebContents>,
static mate::Handle<WebContents> Create(
v8::Isolate* isolate, const mate::Dictionary& options);
// mate::TrackableObject:
void Destroy() override;
bool IsAlive() const;
int GetID() const;
bool Equal(const WebContents* web_contents) const;
void LoadURL(const GURL& url, const mate::Dictionary& options);
void DownloadURL(const GURL& url);
GURL GetURL() const;
base::string16 GetTitle() const;
bool IsLoading() const;
@@ -73,17 +72,18 @@ class WebContents : public mate::TrackableObject<WebContents>,
void SetUserAgent(const std::string& user_agent);
std::string GetUserAgent();
void InsertCSS(const std::string& css);
void ExecuteJavaScript(const base::string16& code,
bool has_user_gesture);
bool SavePage(const base::FilePath& full_file_path,
const content::SavePageType& save_type,
const SavePageHandler::SavePageCallback& callback);
void OpenDevTools(mate::Arguments* args);
void CloseDevTools();
bool IsDevToolsOpened();
bool IsDevToolsFocused();
void ToggleDevTools();
void EnableDeviceEmulation(const blink::WebDeviceEmulationParams& params);
void DisableDeviceEmulation();
void InspectElement(int x, int y);
void InspectServiceWorker();
v8::Local<v8::Value> Session(v8::Isolate* isolate);
void HasServiceWorker(const base::Callback<void(bool)>&);
void UnregisterServiceWorker(const base::Callback<void(bool)>&);
void SetAudioMuted(bool muted);
@@ -110,6 +110,8 @@ class WebContents : public mate::TrackableObject<WebContents>,
void Unselect();
void Replace(const base::string16& word);
void ReplaceMisspelling(const base::string16& word);
uint32 FindInPage(mate::Arguments* args);
void StopFindInPage(content::StopFindAction action);
// Focus.
void Focus();
@@ -132,16 +134,32 @@ class WebContents : public mate::TrackableObject<WebContents>,
void SetAllowTransparency(bool allow);
bool IsGuest() const;
// Callback triggered on permission response.
void OnEnterFullscreenModeForTab(content::WebContents* source,
const GURL& origin,
bool allowed);
// Returns the web preferences of current WebContents.
v8::Local<v8::Value> GetWebPreferences(v8::Isolate* isolate);
// Returns the owner window.
v8::Local<v8::Value> GetOwnerBrowserWindow();
// Properties.
v8::Local<v8::Value> Session(v8::Isolate* isolate);
content::WebContents* HostWebContents();
v8::Local<v8::Value> DevToolsWebContents(v8::Isolate* isolate);
v8::Local<v8::Value> Debugger(v8::Isolate* isolate);
// mate::TrackableObject:
static void BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype);
protected:
explicit WebContents(content::WebContents* web_contents);
WebContents(v8::Isolate* isolate, const mate::Dictionary& options);
~WebContents();
// mate::Wrappable:
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override;
bool IsDestroyed() const override;
// content::WebContentsDelegate:
bool AddMessageToConsole(content::WebContents* source,
int32 level,
@@ -176,6 +194,26 @@ class WebContents : public mate::TrackableObject<WebContents>,
void ExitFullscreenModeForTab(content::WebContents* source) override;
void RendererUnresponsive(content::WebContents* source) override;
void RendererResponsive(content::WebContents* source) override;
bool HandleContextMenu(const content::ContextMenuParams& params) override;
bool OnGoToEntryOffset(int offset) override;
void FindReply(content::WebContents* web_contents,
int request_id,
int number_of_matches,
const gfx::Rect& selection_rect,
int active_match_ordinal,
bool final_update) override;
bool CheckMediaAccessPermission(
content::WebContents* web_contents,
const GURL& security_origin,
content::MediaStreamType type) override;
void RequestMediaAccessPermission(
content::WebContents* web_contents,
const content::MediaStreamRequest& request,
const content::MediaResponseCallback& callback) override;
void RequestToLockMouse(
content::WebContents* web_contents,
bool user_gesture,
bool last_unlocked_by_target) override;
// content::WebContentsObserver:
void BeforeUnloadFired(const base::TimeTicks& proceed_time) override;
@@ -214,6 +252,14 @@ class WebContents : public mate::TrackableObject<WebContents>,
const std::vector<content::FaviconURL>& urls) override;
void PluginCrashed(const base::FilePath& plugin_path,
base::ProcessId plugin_pid) override;
void MediaStartedPlaying() override;
void MediaPaused() override;
void DidChangeThemeColor(SkColor theme_color) override;
// brightray::InspectableWebContentsViewDelegate:
void DevToolsFocused() override;
void DevToolsOpened() override;
void DevToolsClosed() override;
private:
enum Type {
@@ -224,6 +270,13 @@ class WebContents : public mate::TrackableObject<WebContents>,
AtomBrowserContext* GetBrowserContext() const;
uint32 GetNextRequestId() {
return ++request_id_;
}
// Called when we receive a CursorChange message from chromium.
void OnCursorChange(const content::WebCursor& cursor);
// Called when received a message from renderer.
void OnRendererMessage(const base::string16& channel,
const base::ListValue& args);
@@ -234,12 +287,20 @@ class WebContents : public mate::TrackableObject<WebContents>,
IPC::Message* message);
v8::Global<v8::Value> session_;
v8::Global<v8::Value> devtools_web_contents_;
v8::Global<v8::Value> debugger_;
scoped_ptr<WebViewGuestDelegate> guest_delegate_;
// The host webcontents that may contain this webcontents.
WebContents* embedder_;
// The type of current WebContents.
Type type_;
// Request id used for findInPage request.
uint32 request_id_;
DISALLOW_COPY_AND_ASSIGN(WebContents);
};

View File

@@ -0,0 +1,119 @@
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/api/atom_api_web_request.h"
#include <string>
#include "atom/browser/atom_browser_context.h"
#include "atom/browser/net/atom_network_delegate.h"
#include "atom/common/native_mate_converters/callback.h"
#include "atom/common/native_mate_converters/net_converter.h"
#include "atom/common/native_mate_converters/value_converter.h"
#include "content/public/browser/browser_thread.h"
#include "native_mate/dictionary.h"
#include "native_mate/object_template_builder.h"
using content::BrowserThread;
namespace mate {
template<>
struct Converter<extensions::URLPattern> {
static bool FromV8(v8::Isolate* isolate, v8::Local<v8::Value> val,
extensions::URLPattern* out) {
std::string pattern;
if (!ConvertFromV8(isolate, val, &pattern))
return false;
return out->Parse(pattern) == extensions::URLPattern::PARSE_SUCCESS;
}
};
} // namespace mate
namespace atom {
namespace api {
WebRequest::WebRequest(AtomBrowserContext* browser_context)
: browser_context_(browser_context) {
}
WebRequest::~WebRequest() {
}
template<AtomNetworkDelegate::SimpleEvent type>
void WebRequest::SetSimpleListener(mate::Arguments* args) {
SetListener<AtomNetworkDelegate::SimpleListener>(
&AtomNetworkDelegate::SetSimpleListenerInIO, type, args);
}
template<AtomNetworkDelegate::ResponseEvent type>
void WebRequest::SetResponseListener(mate::Arguments* args) {
SetListener<AtomNetworkDelegate::ResponseListener>(
&AtomNetworkDelegate::SetResponseListenerInIO, type, args);
}
template<typename Listener, typename Method, typename Event>
void WebRequest::SetListener(Method method, Event type, mate::Arguments* args) {
// { urls }.
URLPatterns patterns;
mate::Dictionary dict;
args->GetNext(&dict) && dict.Get("urls", &patterns);
// Function or null.
v8::Local<v8::Value> value;
Listener listener;
if (!args->GetNext(&listener) &&
!(args->GetNext(&value) && value->IsNull())) {
args->ThrowError("Must pass null or a Function");
return;
}
auto delegate = browser_context_->network_delegate();
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(method, base::Unretained(delegate), type,
patterns, listener));
}
// static
mate::Handle<WebRequest> WebRequest::Create(
v8::Isolate* isolate,
AtomBrowserContext* browser_context) {
return mate::CreateHandle(isolate, new WebRequest(browser_context));
}
// static
void WebRequest::BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype) {
mate::ObjectTemplateBuilder(isolate, prototype)
.SetMethod("onBeforeRequest",
&WebRequest::SetResponseListener<
AtomNetworkDelegate::kOnBeforeRequest>)
.SetMethod("onBeforeSendHeaders",
&WebRequest::SetResponseListener<
AtomNetworkDelegate::kOnBeforeSendHeaders>)
.SetMethod("onHeadersReceived",
&WebRequest::SetResponseListener<
AtomNetworkDelegate::kOnHeadersReceived>)
.SetMethod("onSendHeaders",
&WebRequest::SetSimpleListener<
AtomNetworkDelegate::kOnSendHeaders>)
.SetMethod("onBeforeRedirect",
&WebRequest::SetSimpleListener<
AtomNetworkDelegate::kOnBeforeRedirect>)
.SetMethod("onResponseStarted",
&WebRequest::SetSimpleListener<
AtomNetworkDelegate::kOnResponseStarted>)
.SetMethod("onCompleted",
&WebRequest::SetSimpleListener<
AtomNetworkDelegate::kOnCompleted>)
.SetMethod("onErrorOccurred",
&WebRequest::SetSimpleListener<
AtomNetworkDelegate::kOnErrorOccurred>);
}
} // namespace api
} // namespace atom

View File

@@ -0,0 +1,50 @@
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ATOM_BROWSER_API_ATOM_API_WEB_REQUEST_H_
#define ATOM_BROWSER_API_ATOM_API_WEB_REQUEST_H_
#include "atom/browser/api/trackable_object.h"
#include "atom/browser/net/atom_network_delegate.h"
#include "native_mate/arguments.h"
#include "native_mate/handle.h"
namespace atom {
class AtomBrowserContext;
namespace api {
class WebRequest : public mate::TrackableObject<WebRequest> {
public:
static mate::Handle<WebRequest> Create(v8::Isolate* isolate,
AtomBrowserContext* browser_context);
// mate::TrackableObject:
static void BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype);
protected:
explicit WebRequest(AtomBrowserContext* browser_context);
~WebRequest();
// C++ can not distinguish overloaded member function.
template<AtomNetworkDelegate::SimpleEvent type>
void SetSimpleListener(mate::Arguments* args);
template<AtomNetworkDelegate::ResponseEvent type>
void SetResponseListener(mate::Arguments* args);
template<typename Listener, typename Method, typename Event>
void SetListener(Method method, Event type, mate::Arguments* args);
private:
scoped_refptr<AtomBrowserContext> browser_context_;
DISALLOW_COPY_AND_ASSIGN(WebRequest);
};
} // namespace api
} // namespace atom
#endif // ATOM_BROWSER_API_ATOM_API_WEB_REQUEST_H_

View File

@@ -3,6 +3,7 @@
// found in the LICENSE file.
#include "atom/browser/api/atom_api_window.h"
#include "atom/common/native_mate_converters/value_converter.h"
#include "atom/browser/api/atom_api_menu.h"
#include "atom/browser/api/atom_api_web_contents.h"
@@ -60,44 +61,106 @@ void OnCapturePageDone(
callback.Run(gfx::Image::CreateFrom1xBitmap(bitmap));
}
// Converts min-width to minWidth, returns false if no conversion is needed.
bool TranslateOldKey(const std::string& key, std::string* new_key) {
if (key.find('-') == std::string::npos)
return false;
new_key->reserve(key.size());
bool next_upper_case = false;
for (char c : key) {
if (c == '-') {
next_upper_case = true;
} else if (next_upper_case) {
new_key->push_back(base::ToUpperASCII(c));
next_upper_case = false;
} else {
new_key->push_back(c);
}
}
return true;
}
// Converts min-width to minWidth recursively in the dictionary.
void TranslateOldOptions(v8::Isolate* isolate, v8::Local<v8::Object> options) {
auto context = isolate->GetCurrentContext();
auto maybe_keys = options->GetOwnPropertyNames(context);
if (maybe_keys.IsEmpty())
return;
std::vector<std::string> keys;
if (!mate::ConvertFromV8(isolate, maybe_keys.ToLocalChecked(), &keys))
return;
mate::Dictionary dict(isolate, options);
for (const auto& key : keys) {
v8::Local<v8::Value> value;
if (!dict.Get(key, &value)) // Shouldn't happen, but guard it anyway.
continue;
// Go recursively.
v8::Local<v8::Object> sub_options;
if (mate::ConvertFromV8(isolate, value, &sub_options))
TranslateOldOptions(isolate, sub_options);
// Translate key.
std::string new_key;
if (TranslateOldKey(key, &new_key)) {
dict.Set(new_key, value);
dict.Delete(key);
}
}
}
// Converts binary data to Buffer.
v8::Local<v8::Value> ToBuffer(v8::Isolate* isolate, void* val, int size) {
auto buffer = node::Buffer::Copy(isolate, static_cast<char*>(val), size);
if (buffer.IsEmpty())
return v8::Null(isolate);
else
return buffer.ToLocalChecked();
}
} // namespace
Window::Window(v8::Isolate* isolate, const mate::Dictionary& options) {
// Use options['web-preferences'] to create WebContents.
// Be compatible with old style field names like min-width.
TranslateOldOptions(isolate, options.GetHandle());
// Use options.webPreferences to create WebContents.
mate::Dictionary web_preferences = mate::Dictionary::CreateEmpty(isolate);
options.Get(switches::kWebPreferences, &web_preferences);
options.Get(options::kWebPreferences, &web_preferences);
// Be compatible with old options which are now in web_preferences.
v8::Local<v8::Value> value;
if (options.Get(switches::kNodeIntegration, &value))
web_preferences.Set(switches::kNodeIntegration, value);
if (options.Get(switches::kPreloadScript, &value))
web_preferences.Set(switches::kPreloadScript, value);
if (options.Get(switches::kZoomFactor, &value))
web_preferences.Set(switches::kZoomFactor, value);
if (options.Get(options::kNodeIntegration, &value))
web_preferences.Set(options::kNodeIntegration, value);
if (options.Get(options::kPreloadScript, &value))
web_preferences.Set(options::kPreloadScript, value);
if (options.Get(options::kZoomFactor, &value))
web_preferences.Set(options::kZoomFactor, value);
// Creates the WebContents used by BrowserWindow.
auto web_contents = WebContents::Create(isolate, web_preferences);
web_contents_.Reset(isolate, web_contents.ToV8());
api_web_contents_ = web_contents.get();
// Keep a copy of the options for later use.
mate::Dictionary(isolate, web_contents->GetWrapper(isolate)).Set(
"browserWindowOptions", options);
// Creates BrowserWindow.
window_.reset(NativeWindow::Create(web_contents->managed_web_contents(),
options));
web_contents->SetOwnerWindow(window_.get());
window_->InitFromOptions(options);
window_->AddObserver(this);
AttachAsUserData(window_.get());
}
Window::~Window() {
if (window_)
Destroy();
}
if (!window_->IsClosed())
window_->CloseContents(nullptr);
void Window::OnPageTitleUpdated(bool* prevent_default,
const std::string& title) {
*prevent_default = Emit("page-title-updated", title);
// Destroy the native window in next tick because the native code might be
// iterating all windows.
base::MessageLoop::current()->DeleteSoon(FROM_HERE, window_.release());
}
void Window::WillCloseWindow(bool* prevent_default) {
@@ -105,19 +168,19 @@ void Window::WillCloseWindow(bool* prevent_default) {
}
void Window::OnWindowClosed() {
if (api_web_contents_) {
api_web_contents_->DestroyWebContents();
api_web_contents_ = nullptr;
web_contents_.Reset();
}
api_web_contents_->DestroyWebContents();
RemoveFromWeakMap();
window_->RemoveObserver(this);
// We can not call Destroy here because we need to call Emit first, but we
// also do not want any method to be used, so just mark as destroyed here.
MarkDestroyed();
Emit("closed");
// Clean up the resources after window has been closed.
base::MessageLoop::current()->DeleteSoon(FROM_HERE, window_.release());
// Destroy the native class when window is closed.
base::MessageLoop::current()->PostTask(FROM_HERE, GetDestroyClosure());
}
void Window::OnWindowBlur() {
@@ -164,6 +227,14 @@ void Window::OnWindowLeaveFullScreen() {
Emit("leave-full-screen");
}
void Window::OnWindowScrollTouchBegin() {
Emit("scroll-touch-begin");
}
void Window::OnWindowScrollTouchEnd() {
Emit("scroll-touch-end");
}
void Window::OnWindowEnterHtmlFullScreen() {
Emit("enter-html-full-screen");
}
@@ -180,60 +251,45 @@ void Window::OnRendererResponsive() {
Emit("responsive");
}
void Window::OnDevToolsFocus() {
Emit("devtools-focused");
}
void Window::OnDevToolsOpened() {
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
auto handle = WebContents::CreateFrom(
isolate(), api_web_contents_->GetDevToolsWebContents());
devtools_web_contents_.Reset(isolate(), handle.ToV8());
Emit("devtools-opened");
}
void Window::OnDevToolsClosed() {
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
devtools_web_contents_.Reset();
Emit("devtools-closed");
}
void Window::OnExecuteWindowsCommand(const std::string& command_name) {
Emit("app-command", command_name);
}
#if defined(OS_WIN)
void Window::OnWindowMessage(UINT message, WPARAM w_param, LPARAM l_param) {
if (IsWindowMessageHooked(message)) {
messages_callback_map_[message].Run(
ToBuffer(isolate(), static_cast<void*>(&w_param), sizeof(WPARAM)),
ToBuffer(isolate(), static_cast<void*>(&l_param), sizeof(LPARAM)));
}
}
#endif
// static
mate::Wrappable* Window::New(v8::Isolate* isolate,
const mate::Dictionary& options) {
mate::Wrappable* Window::New(v8::Isolate* isolate, mate::Arguments* args) {
if (!Browser::Get()->is_ready()) {
isolate->ThrowException(v8::Exception::Error(mate::StringToV8(
isolate, "Cannot create BrowserWindow before app is ready")));
return nullptr;
}
if (args->Length() > 1) {
args->ThrowError();
return nullptr;
}
mate::Dictionary options;
if (!(args->Length() == 1 && args->GetNext(&options))) {
options = mate::Dictionary::CreateEmpty(isolate);
}
return new Window(isolate, options);
}
bool Window::IsDestroyed() const {
return !window_ || window_->IsClosed();
}
void Window::Destroy() {
if (window_)
window_->CloseContents(nullptr);
}
void Window::Close() {
window_->Close();
}
bool Window::IsClosed() {
return window_->IsClosed();
}
void Window::Focus() {
window_->Focus(true);
}
@@ -290,16 +346,20 @@ bool Window::IsFullscreen() {
return window_->IsFullscreen();
}
void Window::SetBounds(const gfx::Rect& bounds) {
window_->SetBounds(bounds);
void Window::SetBounds(const gfx::Rect& bounds, mate::Arguments* args) {
bool animate = false;
args->GetNext(&animate);
window_->SetBounds(bounds, animate);
}
gfx::Rect Window::GetBounds() {
return window_->GetBounds();
}
void Window::SetSize(int width, int height) {
window_->SetSize(gfx::Size(width, height));
void Window::SetSize(int width, int height, mate::Arguments* args) {
bool animate = false;
args->GetNext(&animate);
window_->SetSize(gfx::Size(width, height), animate);
}
std::vector<int> Window::GetSize() {
@@ -310,8 +370,10 @@ std::vector<int> Window::GetSize() {
return result;
}
void Window::SetContentSize(int width, int height) {
window_->SetContentSize(gfx::Size(width, height));
void Window::SetContentSize(int width, int height, mate::Arguments* args) {
bool animate = false;
args->GetNext(&animate);
window_->SetContentSize(gfx::Size(width, height), animate);
}
std::vector<int> Window::GetContentSize() {
@@ -354,6 +416,46 @@ bool Window::IsResizable() {
return window_->IsResizable();
}
void Window::SetMovable(bool movable) {
window_->SetMovable(movable);
}
bool Window::IsMovable() {
return window_->IsMovable();
}
void Window::SetMinimizable(bool minimizable) {
window_->SetMinimizable(minimizable);
}
bool Window::IsMinimizable() {
return window_->IsMinimizable();
}
void Window::SetMaximizable(bool maximizable) {
window_->SetMaximizable(maximizable);
}
bool Window::IsMaximizable() {
return window_->IsMaximizable();
}
void Window::SetFullScreenable(bool fullscreenable) {
window_->SetFullScreenable(fullscreenable);
}
bool Window::IsFullScreenable() {
return window_->IsFullScreenable();
}
void Window::SetClosable(bool closable) {
window_->SetClosable(closable);
}
bool Window::IsClosable() {
return window_->IsClosable();
}
void Window::SetAlwaysOnTop(bool top) {
window_->SetAlwaysOnTop(top);
}
@@ -366,8 +468,10 @@ void Window::Center() {
window_->Center();
}
void Window::SetPosition(int x, int y) {
window_->SetPosition(gfx::Point(x, y));
void Window::SetPosition(int x, int y, mate::Arguments* args) {
bool animate = false;
args->GetNext(&animate);
window_->SetPosition(gfx::Point(x, y), animate);
}
std::vector<int> Window::GetPosition() {
@@ -402,6 +506,18 @@ bool Window::IsKiosk() {
return window_->IsKiosk();
}
void Window::SetBackgroundColor(const std::string& color_name) {
window_->SetBackgroundColor(color_name);
}
void Window::SetHasShadow(bool has_shadow) {
window_->SetHasShadow(has_shadow);
}
bool Window::HasShadow() {
return window_->HasShadow();
}
void Window::FocusOnWebView() {
window_->FocusOnWebView();
}
@@ -414,10 +530,6 @@ bool Window::IsWebViewFocused() {
return window_->IsWebViewFocused();
}
bool Window::IsDevToolsFocused() {
return window_->IsDevToolsFocused();
}
void Window::SetRepresentedFilename(const std::string& filename) {
window_->SetRepresentedFilename(filename);
}
@@ -434,6 +546,10 @@ bool Window::IsDocumentEdited() {
return window_->IsDocumentEdited();
}
void Window::SetIgnoreMouseEvents(bool ignore) {
return window_->SetIgnoreMouseEvents(ignore);
}
void Window::CapturePage(mate::Arguments* args) {
gfx::Rect rect;
base::Callback<void(const gfx::Image&)> callback;
@@ -505,6 +621,29 @@ bool Window::IsMenuBarVisible() {
return window_->IsMenuBarVisible();
}
#if defined(OS_WIN)
bool Window::HookWindowMessage(UINT message,
const MessageCallback& callback) {
messages_callback_map_[message] = callback;
return true;
}
void Window::UnhookWindowMessage(UINT message) {
if (!ContainsKey(messages_callback_map_, message))
return;
messages_callback_map_.erase(message);
}
bool Window::IsWindowMessageHooked(UINT message) {
return ContainsKey(messages_callback_map_, message);
}
void Window::UnhookAllWindowMessages() {
messages_callback_map_.clear();
}
#endif
#if defined(OS_MACOSX)
void Window::ShowDefinitionForSelection() {
window_->ShowDefinitionForSelection();
@@ -517,6 +656,12 @@ void Window::SetAspectRatio(double aspect_ratio, mate::Arguments* args) {
window_->SetAspectRatio(aspect_ratio, extra_size);
}
v8::Local<v8::Value> Window::GetNativeWindowHandle() {
gfx::AcceleratedWidget handle = window_->GetAcceleratedWidget();
return ToBuffer(
isolate(), static_cast<void*>(&handle), sizeof(gfx::AcceleratedWidget));
}
void Window::SetVisibleOnAllWorkspaces(bool visible) {
return window_->SetVisibleOnAllWorkspaces(visible);
}
@@ -536,20 +681,12 @@ v8::Local<v8::Value> Window::WebContents(v8::Isolate* isolate) {
return v8::Local<v8::Value>::New(isolate, web_contents_);
}
v8::Local<v8::Value> Window::DevToolsWebContents(v8::Isolate* isolate) {
if (devtools_web_contents_.IsEmpty())
return v8::Null(isolate);
else
return v8::Local<v8::Value>::New(isolate, devtools_web_contents_);
}
// static
void Window::BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype) {
mate::ObjectTemplateBuilder(isolate, prototype)
.SetMethod("destroy", &Window::Destroy, true)
.MakeDestroyable()
.SetMethod("close", &Window::Close)
.SetMethod("isClosed", &Window::IsClosed)
.SetMethod("focus", &Window::Focus)
.SetMethod("isFocused", &Window::IsFocused)
.SetMethod("show", &Window::Show)
@@ -565,6 +702,7 @@ void Window::BuildPrototype(v8::Isolate* isolate,
.SetMethod("setFullScreen", &Window::SetFullScreen)
.SetMethod("isFullScreen", &Window::IsFullscreen)
.SetMethod("setAspectRatio", &Window::SetAspectRatio)
.SetMethod("getNativeWindowHandle", &Window::GetNativeWindowHandle)
.SetMethod("getBounds", &Window::GetBounds)
.SetMethod("setBounds", &Window::SetBounds)
.SetMethod("getSize", &Window::GetSize)
@@ -577,6 +715,16 @@ void Window::BuildPrototype(v8::Isolate* isolate,
.SetMethod("getMaximumSize", &Window::GetMaximumSize)
.SetMethod("setResizable", &Window::SetResizable)
.SetMethod("isResizable", &Window::IsResizable)
.SetMethod("setMovable", &Window::SetMovable)
.SetMethod("isMovable", &Window::IsMovable)
.SetMethod("setMinimizable", &Window::SetMinimizable)
.SetMethod("isMinimizable", &Window::IsMinimizable)
.SetMethod("setMaximizable", &Window::SetMaximizable)
.SetMethod("isMaximizable", &Window::IsMaximizable)
.SetMethod("setFullScreenable", &Window::SetFullScreenable)
.SetMethod("isFullScreenable", &Window::IsFullScreenable)
.SetMethod("setClosable", &Window::SetClosable)
.SetMethod("isClosable", &Window::IsClosable)
.SetMethod("setAlwaysOnTop", &Window::SetAlwaysOnTop)
.SetMethod("isAlwaysOnTop", &Window::IsAlwaysOnTop)
.SetMethod("center", &Window::Center)
@@ -588,14 +736,17 @@ void Window::BuildPrototype(v8::Isolate* isolate,
.SetMethod("setSkipTaskbar", &Window::SetSkipTaskbar)
.SetMethod("setKiosk", &Window::SetKiosk)
.SetMethod("isKiosk", &Window::IsKiosk)
.SetMethod("setBackgroundColor", &Window::SetBackgroundColor)
.SetMethod("setHasShadow", &Window::SetHasShadow)
.SetMethod("hasShadow", &Window::HasShadow)
.SetMethod("setRepresentedFilename", &Window::SetRepresentedFilename)
.SetMethod("getRepresentedFilename", &Window::GetRepresentedFilename)
.SetMethod("setDocumentEdited", &Window::SetDocumentEdited)
.SetMethod("isDocumentEdited", &Window::IsDocumentEdited)
.SetMethod("setIgnoreMouseEvents", &Window::SetIgnoreMouseEvents)
.SetMethod("focusOnWebView", &Window::FocusOnWebView)
.SetMethod("blurWebView", &Window::BlurWebView)
.SetMethod("isWebViewFocused", &Window::IsWebViewFocused)
.SetMethod("isDevToolsFocused", &Window::IsDevToolsFocused)
.SetMethod("capturePage", &Window::CapturePage)
.SetMethod("setProgressBar", &Window::SetProgressBar)
.SetMethod("setOverlayIcon", &Window::SetOverlayIcon)
@@ -609,13 +760,28 @@ void Window::BuildPrototype(v8::Isolate* isolate,
&Window::SetVisibleOnAllWorkspaces)
.SetMethod("isVisibleOnAllWorkspaces",
&Window::IsVisibleOnAllWorkspaces)
#if defined(OS_WIN)
.SetMethod("hookWindowMessage", &Window::HookWindowMessage)
.SetMethod("isWindowMessageHooked", &Window::IsWindowMessageHooked)
.SetMethod("unhookWindowMessage", &Window::UnhookWindowMessage)
.SetMethod("unhookAllWindowMessages", &Window::UnhookAllWindowMessages)
#endif
#if defined(OS_MACOSX)
.SetMethod("showDefinitionForSelection",
&Window::ShowDefinitionForSelection)
#endif
.SetProperty("id", &Window::ID, true)
.SetProperty("webContents", &Window::WebContents, true)
.SetProperty("devToolsWebContents", &Window::DevToolsWebContents, true);
.SetProperty("id", &Window::ID)
.SetProperty("webContents", &Window::WebContents);
}
// static
v8::Local<v8::Value> Window::From(v8::Isolate* isolate,
NativeWindow* native_window) {
auto existing = TrackableObject::FromWrappedClass(isolate, native_window);
if (existing)
return existing->GetWrapper(isolate);
else
return v8::Null(isolate);
}
} // namespace api

View File

@@ -5,6 +5,7 @@
#ifndef ATOM_BROWSER_API_ATOM_API_WINDOW_H_
#define ATOM_BROWSER_API_ATOM_API_WINDOW_H_
#include <map>
#include <string>
#include <vector>
@@ -37,12 +38,15 @@ class WebContents;
class Window : public mate::TrackableObject<Window>,
public NativeWindowObserver {
public:
static mate::Wrappable* New(v8::Isolate* isolate,
const mate::Dictionary& options);
static mate::Wrappable* New(v8::Isolate* isolate, mate::Arguments* args);
static void BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype);
// Returns the BrowserWindow object from |native_window|.
static v8::Local<v8::Value> From(v8::Isolate* isolate,
NativeWindow* native_window);
NativeWindow* window() const { return window_.get(); }
protected:
@@ -50,8 +54,6 @@ class Window : public mate::TrackableObject<Window>,
virtual ~Window();
// NativeWindowObserver:
void OnPageTitleUpdated(bool* prevent_default,
const std::string& title) override;
void WillCloseWindow(bool* prevent_default) override;
void OnWindowClosed() override;
void OnWindowBlur() override;
@@ -63,27 +65,23 @@ class Window : public mate::TrackableObject<Window>,
void OnWindowResize() override;
void OnWindowMove() override;
void OnWindowMoved() override;
void OnWindowScrollTouchBegin() override;
void OnWindowScrollTouchEnd() override;
void OnWindowEnterFullScreen() override;
void OnWindowLeaveFullScreen() override;
void OnWindowEnterHtmlFullScreen() override;
void OnWindowLeaveHtmlFullScreen() override;
void OnRendererUnresponsive() override;
void OnRendererResponsive() override;
void OnDevToolsFocus() override;
void OnDevToolsOpened() override;
void OnDevToolsClosed() override;
void OnExecuteWindowsCommand(const std::string& command_name) override;
// mate::Wrappable:
bool IsDestroyed() const override;
#if defined(OS_WIN)
void OnWindowMessage(UINT message, WPARAM w_param, LPARAM l_param) override;
#endif
private:
// mate::TrackableObject:
void Destroy() override;
// APIs for NativeWindow.
void Close();
bool IsClosed();
void Focus();
bool IsFocused();
void Show();
@@ -98,11 +96,11 @@ class Window : public mate::TrackableObject<Window>,
bool IsMinimized();
void SetFullScreen(bool fullscreen);
bool IsFullscreen();
void SetBounds(const gfx::Rect& bounds);
void SetBounds(const gfx::Rect& bounds, mate::Arguments* args);
gfx::Rect GetBounds();
void SetSize(int width, int height);
void SetSize(int width, int height, mate::Arguments* args);
std::vector<int> GetSize();
void SetContentSize(int width, int height);
void SetContentSize(int width, int height, mate::Arguments* args);
std::vector<int> GetContentSize();
void SetMinimumSize(int width, int height);
std::vector<int> GetMinimumSize();
@@ -110,10 +108,20 @@ class Window : public mate::TrackableObject<Window>,
std::vector<int> GetMaximumSize();
void SetResizable(bool resizable);
bool IsResizable();
void SetMovable(bool movable);
bool IsMovable();
void SetMinimizable(bool minimizable);
bool IsMinimizable();
void SetMaximizable(bool maximizable);
bool IsMaximizable();
void SetFullScreenable(bool fullscreenable);
bool IsFullScreenable();
void SetClosable(bool closable);
bool IsClosable();
void SetAlwaysOnTop(bool top);
bool IsAlwaysOnTop();
void Center();
void SetPosition(int x, int y);
void SetPosition(int x, int y, mate::Arguments* args);
std::vector<int> GetPosition();
void SetTitle(const std::string& title);
std::string GetTitle();
@@ -121,14 +129,17 @@ class Window : public mate::TrackableObject<Window>,
void SetSkipTaskbar(bool skip);
void SetKiosk(bool kiosk);
bool IsKiosk();
void SetBackgroundColor(const std::string& color_name);
void SetHasShadow(bool has_shadow);
bool HasShadow();
void FocusOnWebView();
void BlurWebView();
bool IsWebViewFocused();
bool IsDevToolsFocused();
void SetRepresentedFilename(const std::string& filename);
std::string GetRepresentedFilename();
void SetDocumentEdited(bool edited);
bool IsDocumentEdited();
void SetIgnoreMouseEvents(bool ignore);
void CapturePage(mate::Arguments* args);
void SetProgressBar(double progress);
void SetOverlayIcon(const gfx::Image& overlay,
@@ -140,6 +151,17 @@ class Window : public mate::TrackableObject<Window>,
void SetMenuBarVisibility(bool visible);
bool IsMenuBarVisible();
void SetAspectRatio(double aspect_ratio, mate::Arguments* args);
v8::Local<v8::Value> GetNativeWindowHandle();
#if defined(OS_WIN)
typedef base::Callback<void(v8::Local<v8::Value>,
v8::Local<v8::Value>)> MessageCallback;
bool HookWindowMessage(UINT message, const MessageCallback& callback);
bool IsWindowMessageHooked(UINT message);
void UnhookWindowMessage(UINT message);
void UnhookAllWindowMessages();
#endif
#if defined(OS_MACOSX)
void ShowDefinitionForSelection();
@@ -150,10 +172,13 @@ class Window : public mate::TrackableObject<Window>,
int32_t ID() const;
v8::Local<v8::Value> WebContents(v8::Isolate* isolate);
v8::Local<v8::Value> DevToolsWebContents(v8::Isolate* isolate);
#if defined(OS_WIN)
typedef std::map<UINT, MessageCallback> MessageCallbackMap;
MessageCallbackMap messages_callback_map_;
#endif
v8::Global<v8::Value> web_contents_;
v8::Global<v8::Value> devtools_web_contents_;
v8::Global<v8::Value> menu_;
api::WebContents* api_web_contents_;

View File

@@ -4,19 +4,18 @@
#include "atom/browser/api/frame_subscriber.h"
#include "atom/common/node_includes.h"
#include "base/bind.h"
#include "media/base/video_frame.h"
#include "media/base/yuv_convert.h"
#include "atom/common/node_includes.h"
#include "content/public/browser/render_widget_host.h"
namespace atom {
namespace api {
FrameSubscriber::FrameSubscriber(v8::Isolate* isolate,
const gfx::Size& size,
content::RenderWidgetHostView* view,
const FrameCaptureCallback& callback)
: isolate_(isolate), size_(size), callback_(callback) {
: isolate_(isolate), view_(view), callback_(callback), weak_factory_(this) {
}
bool FrameSubscriber::ShouldCaptureFrame(
@@ -24,40 +23,40 @@ bool FrameSubscriber::ShouldCaptureFrame(
base::TimeTicks present_time,
scoped_refptr<media::VideoFrame>* storage,
DeliverFrameCallback* callback) {
*storage = media::VideoFrame::CreateFrame(media::VideoFrame::YV12, size_,
gfx::Rect(size_), size_,
base::TimeDelta());
*callback = base::Bind(&FrameSubscriber::OnFrameDelivered,
base::Unretained(this),
*storage);
return true;
const auto host = view_ ? view_->GetRenderWidgetHost() : nullptr;
if (!view_ || !host)
return false;
const auto size = view_->GetVisibleViewportSize();
host->CopyFromBackingStore(
gfx::Rect(size),
size,
base::Bind(&FrameSubscriber::OnFrameDelivered,
weak_factory_.GetWeakPtr(), callback_),
kBGRA_8888_SkColorType);
return false;
}
void FrameSubscriber::OnFrameDelivered(
scoped_refptr<media::VideoFrame> frame, base::TimeTicks, bool result) {
if (!result)
void FrameSubscriber::OnFrameDelivered(const FrameCaptureCallback& callback,
const SkBitmap& bitmap, content::ReadbackResponse response) {
if (bitmap.computeSize64() == 0)
return;
gfx::Rect rect = frame->visible_rect();
size_t rgb_arr_size = rect.width() * rect.height() * 4;
v8::Locker locker(isolate_);
v8::HandleScope handle_scope(isolate_);
size_t rgb_arr_size = bitmap.width() * bitmap.height() *
bitmap.bytesPerPixel();
v8::MaybeLocal<v8::Object> buffer = node::Buffer::New(isolate_, rgb_arr_size);
if (buffer.IsEmpty())
return;
// Convert a frame of YUV to 32 bit ARGB.
media::ConvertYUVToRGB32(frame->data(media::VideoFrame::kYPlane),
frame->data(media::VideoFrame::kUPlane),
frame->data(media::VideoFrame::kVPlane),
reinterpret_cast<uint8*>(
node::Buffer::Data(buffer.ToLocalChecked())),
rect.width(), rect.height(),
frame->stride(media::VideoFrame::kYPlane),
frame->stride(media::VideoFrame::kUVPlane),
rect.width() * 4,
media::YV12);
bitmap.copyPixelsTo(
reinterpret_cast<uint8*>(node::Buffer::Data(buffer.ToLocalChecked())),
rgb_arr_size);
v8::Locker locker(isolate_);
v8::HandleScope handle_scope(isolate_);
callback_.Run(buffer.ToLocalChecked());
}

View File

@@ -6,7 +6,11 @@
#define ATOM_BROWSER_API_FRAME_SUBSCRIBER_H_
#include "base/callback.h"
#include "base/memory/weak_ptr.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/render_widget_host_view_frame_subscriber.h"
#include "content/public/browser/readback_types.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/gfx/geometry/size.h"
#include "v8/include/v8.h"
@@ -19,7 +23,7 @@ class FrameSubscriber : public content::RenderWidgetHostViewFrameSubscriber {
using FrameCaptureCallback = base::Callback<void(v8::Local<v8::Value>)>;
FrameSubscriber(v8::Isolate* isolate,
const gfx::Size& size,
content::RenderWidgetHostView* view,
const FrameCaptureCallback& callback);
bool ShouldCaptureFrame(const gfx::Rect& damage_rect,
@@ -28,13 +32,15 @@ class FrameSubscriber : public content::RenderWidgetHostViewFrameSubscriber {
DeliverFrameCallback* callback) override;
private:
void OnFrameDelivered(
scoped_refptr<media::VideoFrame> frame, base::TimeTicks, bool);
void OnFrameDelivered(const FrameCaptureCallback& callback,
const SkBitmap& bitmap, content::ReadbackResponse response);
v8::Isolate* isolate_;
gfx::Size size_;
content::RenderWidgetHostView* view_;
FrameCaptureCallback callback_;
base::WeakPtrFactory<FrameSubscriber> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(FrameSubscriber);
};

View File

@@ -1,55 +0,0 @@
EventEmitter = require('events').EventEmitter
bindings = process.atomBinding 'app'
sessionBindings = process.atomBinding 'session'
app = bindings.app
app.__proto__ = EventEmitter.prototype
wrapSession = (session) ->
# session is an Event Emitter.
session.__proto__ = EventEmitter.prototype
app.setApplicationMenu = (menu) ->
require('menu').setApplicationMenu menu
app.getApplicationMenu = ->
require('menu').getApplicationMenu()
app.commandLine =
appendSwitch: bindings.appendSwitch,
appendArgument: bindings.appendArgument
if process.platform is 'darwin'
app.dock =
bounce: (type='informational') -> bindings.dockBounce type
cancelBounce: bindings.dockCancelBounce
setBadge: bindings.dockSetBadgeText
getBadge: bindings.dockGetBadgeText
hide: bindings.dockHide
show: bindings.dockShow
setMenu: bindings.dockSetMenu
appPath = null
app.setAppPath = (path) ->
appPath = path
app.getAppPath = ->
appPath
# Be compatible with old API.
app.once 'ready', -> @emit 'finish-launching'
app.terminate = app.quit
app.exit = process.exit
app.getHomeDir = -> @getPath 'home'
app.getDataPath = -> @getPath 'userData'
app.setDataPath = (path) -> @setPath 'userData', path
app.resolveProxy = -> @defaultSession.resolveProxy.apply @defaultSession, arguments
app.on 'activate', (event, hasVisibleWindows) -> @emit 'activate-with-no-open-windows' if not hasVisibleWindows
# Session wrapper.
sessionBindings._setWrapSession wrapSession
process.once 'exit', sessionBindings._clearWrapSession
# Only one App object pemitted.
module.exports = app

123
atom/browser/api/lib/app.js Normal file
View File

@@ -0,0 +1,123 @@
const deprecate = require('electron').deprecate;
const session = require('electron').session;
const Menu = require('electron').Menu;
const EventEmitter = require('events').EventEmitter;
const bindings = process.atomBinding('app');
const downloadItemBindings = process.atomBinding('download_item');
const app = bindings.app;
var slice = [].slice;
app.__proto__ = EventEmitter.prototype;
app.setApplicationMenu = function(menu) {
return Menu.setApplicationMenu(menu);
};
app.getApplicationMenu = function() {
return Menu.getApplicationMenu();
};
app.commandLine = {
appendSwitch: bindings.appendSwitch,
appendArgument: bindings.appendArgument
};
if (process.platform === 'darwin') {
app.dock = {
bounce: function(type) {
if (type == null) {
type = 'informational';
}
return bindings.dockBounce(type);
},
cancelBounce: bindings.dockCancelBounce,
setBadge: bindings.dockSetBadgeText,
getBadge: bindings.dockGetBadgeText,
hide: bindings.dockHide,
show: bindings.dockShow,
setMenu: bindings.dockSetMenu,
setIcon: bindings.dockSetIcon
};
}
var appPath = null;
app.setAppPath = function(path) {
return appPath = path;
};
app.getAppPath = function() {
return appPath;
};
// Routes the events to webContents.
var ref1 = ['login', 'certificate-error', 'select-client-certificate'];
var fn = function(name) {
return app.on(name, function() {
var args, event, webContents;
event = arguments[0], webContents = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : [];
return webContents.emit.apply(webContents, [name, event].concat(slice.call(args)));
});
};
var i, len;
for (i = 0, len = ref1.length; i < len; i++) {
fn(ref1[i]);
}
// Deprecated.
app.getHomeDir = deprecate('app.getHomeDir', 'app.getPath', function() {
return this.getPath('home');
});
app.getDataPath = deprecate('app.getDataPath', 'app.getPath', function() {
return this.getPath('userData');
});
app.setDataPath = deprecate('app.setDataPath', 'app.setPath', function(path) {
return this.setPath('userData', path);
});
app.resolveProxy = deprecate('app.resolveProxy', 'session.defaultSession.resolveProxy', function(url, callback) {
return session.defaultSession.resolveProxy(url, callback);
});
deprecate.rename(app, 'terminate', 'quit');
deprecate.event(app, 'finish-launching', 'ready', function() {
// give default app a chance to setup default menu.
return setImmediate((function(_this) {
return function() {
return _this.emit('finish-launching');
};
})(this));
});
deprecate.event(app, 'activate-with-no-open-windows', 'activate', function(event, hasVisibleWindows) {
if (!hasVisibleWindows) {
return this.emit('activate-with-no-open-windows', event);
}
});
deprecate.event(app, 'select-certificate', 'select-client-certificate');
// Wrappers for native classes.
var wrapDownloadItem = function(downloadItem) {
// downloadItem is an EventEmitter.
downloadItem.__proto__ = EventEmitter.prototype;
// Deprecated.
deprecate.property(downloadItem, 'url', 'getURL');
deprecate.property(downloadItem, 'filename', 'getFilename');
deprecate.property(downloadItem, 'mimeType', 'getMimeType');
return deprecate.rename(downloadItem, 'getUrl', 'getURL');
};
downloadItemBindings._setWrapDownloadItem(wrapDownloadItem);
// Only one App object pemitted.
module.exports = app;

View File

@@ -1,6 +0,0 @@
module.exports =
browserMainParts:
preMainMessageLoopRun: ->
setImmediate ->
module.exports.browserMainParts.preMainMessageLoopRun()

View File

@@ -1,24 +0,0 @@
autoUpdater = process.atomBinding('auto_updater').autoUpdater
EventEmitter = require('events').EventEmitter
autoUpdater.__proto__ = EventEmitter.prototype
autoUpdater.on 'update-downloaded-raw', (args...) ->
args[3] = new Date(args[3]) # releaseDate
@emit 'update-downloaded', args..., => @quitAndInstall()
autoUpdater.quitAndInstall = ->
# If we don't have any window then quitAndInstall immediately.
BrowserWindow = require 'browser-window'
windows = BrowserWindow.getAllWindows()
if windows.length is 0
@_quitAndInstall()
return
# Do the restart after all windows have been closed.
app = require 'app'
app.removeAllListeners 'window-all-closed'
app.once 'window-all-closed', @_quitAndInstall.bind(this)
win.close() for win in windows
module.exports = autoUpdater

View File

@@ -0,0 +1,7 @@
const deprecate = require('electron').deprecate;
const autoUpdater = process.platform === 'win32' ? require('./auto-updater/auto-updater-win') : require('./auto-updater/auto-updater-native');
// Deprecated.
deprecate.rename(autoUpdater, 'setFeedUrl', 'setFeedURL');
module.exports = autoUpdater;

View File

@@ -0,0 +1,6 @@
const EventEmitter = require('events').EventEmitter;
const autoUpdater = process.atomBinding('auto_updater').autoUpdater;
autoUpdater.__proto__ = EventEmitter.prototype;
module.exports = autoUpdater;

View File

@@ -0,0 +1,63 @@
'use strict';
const app = require('electron').app;
const EventEmitter = require('events').EventEmitter;
const squirrelUpdate = require('./squirrel-update-win');
const util = require('util');
function AutoUpdater() {
EventEmitter.call(this);
}
util.inherits(AutoUpdater, EventEmitter);
AutoUpdater.prototype.quitAndInstall = function() {
squirrelUpdate.processStart();
return app.quit();
};
AutoUpdater.prototype.setFeedURL = function(updateURL) {
return this.updateURL = updateURL;
};
AutoUpdater.prototype.checkForUpdates = function() {
if (!this.updateURL) {
return this.emitError('Update URL is not set');
}
if (!squirrelUpdate.supported()) {
return this.emitError('Can not find Squirrel');
}
this.emit('checking-for-update');
return squirrelUpdate.download(this.updateURL, (function(_this) {
return function(error, update) {
if (error != null) {
return _this.emitError(error);
}
if (update == null) {
return _this.emit('update-not-available');
}
_this.emit('update-available');
return squirrelUpdate.update(_this.updateURL, function(error) {
var date, releaseNotes, version;
if (error != null) {
return _this.emitError(error);
}
releaseNotes = update.releaseNotes, version = update.version;
// Following information is not available on Windows, so fake them.
date = new Date;
return _this.emit('update-downloaded', {}, releaseNotes, version, date, _this.updateURL, function() {
return _this.quitAndInstall();
});
});
};
})(this));
};
// Private: Emit both error object and message, this is to keep compatibility
// with Old APIs.
AutoUpdater.prototype.emitError = function(message) {
return this.emit('error', new Error(message), message);
};
module.exports = new AutoUpdater;

View File

@@ -0,0 +1,98 @@
const fs = require('fs');
const path = require('path');
const spawn = require('child_process').spawn;
// i.e. my-app/app-0.1.13/
const appFolder = path.dirname(process.execPath);
// i.e. my-app/Update.exe
const updateExe = path.resolve(appFolder, '..', 'Update.exe');
const exeName = path.basename(process.execPath);
// Spawn a command and invoke the callback when it completes with an error
// and the output from standard out.
var spawnUpdate = function(args, detached, callback) {
var error, errorEmitted, spawnedProcess, stderr, stdout;
try {
spawnedProcess = spawn(updateExe, args, {
detached: detached
});
} catch (error1) {
error = error1;
// Shouldn't happen, but still guard it.
process.nextTick(function() {
return callback(error);
});
return;
}
stdout = '';
stderr = '';
spawnedProcess.stdout.on('data', function(data) {
return stdout += data;
});
spawnedProcess.stderr.on('data', function(data) {
return stderr += data;
});
errorEmitted = false;
spawnedProcess.on('error', function(error) {
errorEmitted = true;
return callback(error);
});
return spawnedProcess.on('exit', function(code, signal) {
// We may have already emitted an error.
if (errorEmitted) {
return;
}
// Process terminated with error.
if (code !== 0) {
return callback("Command failed: " + (signal != null ? signal : code) + "\n" + stderr);
}
// Success.
return callback(null, stdout);
});
};
// Start an instance of the installed app.
exports.processStart = function() {
return spawnUpdate(['--processStart', exeName], true, function() {});
};
// Download the releases specified by the URL and write new results to stdout.
exports.download = function(updateURL, callback) {
return spawnUpdate(['--download', updateURL], false, function(error, stdout) {
var json, ref, ref1, update;
if (error != null) {
return callback(error);
}
try {
// Last line of output is the JSON details about the releases
json = stdout.trim().split('\n').pop();
update = (ref = JSON.parse(json)) != null ? (ref1 = ref.releasesToApply) != null ? typeof ref1.pop === "function" ? ref1.pop() : void 0 : void 0 : void 0;
} catch (jsonError) {
return callback("Invalid result:\n" + stdout);
}
return callback(null, update);
});
};
// Update the application to the latest remote version specified by URL.
exports.update = function(updateURL, callback) {
return spawnUpdate(['--update', updateURL], false, callback);
};
// Is the Update.exe installed with the current application?
exports.supported = function() {
try {
fs.accessSync(updateExe, fs.R_OK);
return true;
} catch (error) {
return false;
}
};

View File

@@ -1,93 +0,0 @@
EventEmitter = require('events').EventEmitter
app = require 'app'
ipc = require 'ipc'
BrowserWindow = process.atomBinding('window').BrowserWindow
BrowserWindow::__proto__ = EventEmitter.prototype
BrowserWindow::_init = ->
# Simulate the application menu on platforms other than OS X.
if process.platform isnt 'darwin'
menu = app.getApplicationMenu()
@setMenu menu if menu?
# Make new windows requested by links behave like "window.open"
@webContents.on '-new-window', (event, url, frameName) ->
options = show: true, width: 800, height: 600
ipc.emit 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_OPEN', event, url, frameName, options
# window.resizeTo(...)
# window.moveTo(...)
@webContents.on 'move', (event, size) =>
@setBounds size
# Hide the auto-hide menu when webContents is focused.
@webContents.on 'activate', =>
if process.platform isnt 'darwin' and @isMenuBarAutoHide() and @isMenuBarVisible()
@setMenuBarVisibility false
# Forward the crashed event.
@webContents.on 'crashed', =>
@emit 'crashed'
# Sometimes the webContents doesn't get focus when window is shown, so we have
# to force focusing on webContents in this case. The safest way is to focus it
# when we first start to load URL, if we do it earlier it won't have effect,
# if we do it later we might move focus in the page.
# Though this hack is only needed on OS X when the app is launched from
# Finder, we still do it on all platforms in case of other bugs we don't know.
@webContents.once 'load-url', ->
@focus()
# Redirect focus/blur event to app instance too.
@on 'blur', (event) =>
app.emit 'browser-window-blur', event, this
@on 'focus', (event) =>
app.emit 'browser-window-focus', event, this
# Notify the creation of the window.
app.emit 'browser-window-created', {}, this
BrowserWindow.getFocusedWindow = ->
windows = BrowserWindow.getAllWindows()
return window for window in windows when window.isFocused()
BrowserWindow.fromWebContents = (webContents) ->
windows = BrowserWindow.getAllWindows()
return window for window in windows when window.webContents?.equal webContents
BrowserWindow.fromDevToolsWebContents = (webContents) ->
windows = BrowserWindow.getAllWindows()
return window for window in windows when window.devToolsWebContents?.equal webContents
# Helpers.
BrowserWindow::loadUrl = -> @webContents.loadUrl.apply @webContents, arguments
BrowserWindow::send = -> @webContents.send.apply @webContents, arguments
# Be compatible with old API.
BrowserWindow::undo = -> @webContents.undo()
BrowserWindow::redo = -> @webContents.redo()
BrowserWindow::cut = -> @webContents.cut()
BrowserWindow::copy = -> @webContents.copy()
BrowserWindow::paste = -> @webContents.paste()
BrowserWindow::selectAll = -> @webContents.selectAll()
BrowserWindow::restart = -> @webContents.reload()
BrowserWindow::getUrl = -> @webContents.getUrl()
BrowserWindow::reload = -> @webContents.reload.apply @webContents, arguments
BrowserWindow::reloadIgnoringCache = -> @webContents.reloadIgnoringCache.apply @webContents, arguments
BrowserWindow::getPageTitle = -> @webContents.getTitle()
BrowserWindow::isLoading = -> @webContents.isLoading()
BrowserWindow::isWaitingForResponse = -> @webContents.isWaitingForResponse()
BrowserWindow::stop = -> @webContents.stop()
BrowserWindow::isCrashed = -> @webContents.isCrashed()
BrowserWindow::executeJavaScriptInDevTools = (code) -> @devToolsWebContents?.executeJavaScript code
BrowserWindow::openDevTools = -> @webContents.openDevTools.apply @webContents, arguments
BrowserWindow::closeDevTools = -> @webContents.closeDevTools()
BrowserWindow::isDevToolsOpened = -> @webContents.isDevToolsOpened()
BrowserWindow::toggleDevTools = -> @webContents.toggleDevTools()
BrowserWindow::inspectElement = -> @webContents.inspectElement.apply @webContents, arguments
BrowserWindow::inspectServiceWorker = -> @webContents.inspectServiceWorker()
BrowserWindow::print = -> @webContents.print.apply @webContents, arguments
BrowserWindow::printToPDF = -> @webContents.printToPDF.apply @webContents, arguments
module.exports = BrowserWindow

View File

@@ -0,0 +1,243 @@
const ipcMain = require('electron').ipcMain;
const deprecate = require('electron').deprecate;
const EventEmitter = require('events').EventEmitter;
const BrowserWindow = process.atomBinding('window').BrowserWindow;
BrowserWindow.prototype.__proto__ = EventEmitter.prototype;
BrowserWindow.prototype._init = function() {
// avoid recursive require.
var app, menu;
app = require('electron').app;
// Simulate the application menu on platforms other than OS X.
if (process.platform !== 'darwin') {
menu = app.getApplicationMenu();
if (menu != null) {
this.setMenu(menu);
}
}
// Make new windows requested by links behave like "window.open"
this.webContents.on('-new-window', function(event, url, frameName) {
var options;
options = {
show: true,
width: 800,
height: 600
};
return ipcMain.emit('ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_OPEN', event, url, frameName, options);
});
// window.resizeTo(...)
// window.moveTo(...)
this.webContents.on('move', (function(_this) {
return function(event, size) {
return _this.setBounds(size);
};
})(this));
// Hide the auto-hide menu when webContents is focused.
this.webContents.on('activate', (function(_this) {
return function() {
if (process.platform !== 'darwin' && _this.isMenuBarAutoHide() && _this.isMenuBarVisible()) {
return _this.setMenuBarVisibility(false);
}
};
})(this));
// Forward the crashed event.
this.webContents.on('crashed', (function(_this) {
return function() {
return _this.emit('crashed');
};
})(this));
// Change window title to page title.
this.webContents.on('page-title-updated', (event, title) => {
// The page-title-updated event is not emitted immediately (see #3645), so
// when the callback is called the BrowserWindow might have been closed.
if (this.isDestroyed())
return;
// Route the event to BrowserWindow.
this.emit('page-title-updated', event, title);
if (!event.defaultPrevented)
this.setTitle(title);
});
// Sometimes the webContents doesn't get focus when window is shown, so we have
// to force focusing on webContents in this case. The safest way is to focus it
// when we first start to load URL, if we do it earlier it won't have effect,
// if we do it later we might move focus in the page.
// Though this hack is only needed on OS X when the app is launched from
// Finder, we still do it on all platforms in case of other bugs we don't know.
this.webContents.once('load-url', function() {
return this.focus();
});
// Redirect focus/blur event to app instance too.
this.on('blur', (function(_this) {
return function(event) {
return app.emit('browser-window-blur', event, _this);
};
})(this));
this.on('focus', (function(_this) {
return function(event) {
return app.emit('browser-window-focus', event, _this);
};
})(this));
// Notify the creation of the window.
app.emit('browser-window-created', {}, this);
// Be compatible with old APIs.
this.webContents.on('devtools-focused', (function(_this) {
return function() {
return _this.emit('devtools-focused');
};
})(this));
this.webContents.on('devtools-opened', (function(_this) {
return function() {
return _this.emit('devtools-opened');
};
})(this));
this.webContents.on('devtools-closed', (function(_this) {
return function() {
return _this.emit('devtools-closed');
};
})(this));
return Object.defineProperty(this, 'devToolsWebContents', {
enumerable: true,
configurable: false,
get: function() {
return this.webContents.devToolsWebContents;
}
});
};
BrowserWindow.getFocusedWindow = function() {
var i, len, window, windows;
windows = BrowserWindow.getAllWindows();
for (i = 0, len = windows.length; i < len; i++) {
window = windows[i];
if (window.isFocused()) {
return window;
}
}
return null;
};
BrowserWindow.fromWebContents = function(webContents) {
var i, len, ref1, window, windows;
windows = BrowserWindow.getAllWindows();
for (i = 0, len = windows.length; i < len; i++) {
window = windows[i];
if ((ref1 = window.webContents) != null ? ref1.equal(webContents) : void 0) {
return window;
}
}
};
BrowserWindow.fromDevToolsWebContents = function(webContents) {
var i, len, ref1, window, windows;
windows = BrowserWindow.getAllWindows();
for (i = 0, len = windows.length; i < len; i++) {
window = windows[i];
if ((ref1 = window.devToolsWebContents) != null ? ref1.equal(webContents) : void 0) {
return window;
}
}
};
// Helpers.
BrowserWindow.prototype.loadURL = function() {
return this.webContents.loadURL.apply(this.webContents, arguments);
};
BrowserWindow.prototype.getURL = function() {
return this.webContents.getURL();
};
BrowserWindow.prototype.reload = function() {
return this.webContents.reload.apply(this.webContents, arguments);
};
BrowserWindow.prototype.send = function() {
return this.webContents.send.apply(this.webContents, arguments);
};
BrowserWindow.prototype.openDevTools = function() {
return this.webContents.openDevTools.apply(this.webContents, arguments);
};
BrowserWindow.prototype.closeDevTools = function() {
return this.webContents.closeDevTools();
};
BrowserWindow.prototype.isDevToolsOpened = function() {
return this.webContents.isDevToolsOpened();
};
BrowserWindow.prototype.isDevToolsFocused = function() {
return this.webContents.isDevToolsFocused();
};
BrowserWindow.prototype.toggleDevTools = function() {
return this.webContents.toggleDevTools();
};
BrowserWindow.prototype.inspectElement = function() {
return this.webContents.inspectElement.apply(this.webContents, arguments);
};
BrowserWindow.prototype.inspectServiceWorker = function() {
return this.webContents.inspectServiceWorker();
};
// Deprecated.
deprecate.member(BrowserWindow, 'undo', 'webContents');
deprecate.member(BrowserWindow, 'redo', 'webContents');
deprecate.member(BrowserWindow, 'cut', 'webContents');
deprecate.member(BrowserWindow, 'copy', 'webContents');
deprecate.member(BrowserWindow, 'paste', 'webContents');
deprecate.member(BrowserWindow, 'selectAll', 'webContents');
deprecate.member(BrowserWindow, 'reloadIgnoringCache', 'webContents');
deprecate.member(BrowserWindow, 'isLoading', 'webContents');
deprecate.member(BrowserWindow, 'isWaitingForResponse', 'webContents');
deprecate.member(BrowserWindow, 'stop', 'webContents');
deprecate.member(BrowserWindow, 'isCrashed', 'webContents');
deprecate.member(BrowserWindow, 'print', 'webContents');
deprecate.member(BrowserWindow, 'printToPDF', 'webContents');
deprecate.rename(BrowserWindow, 'restart', 'reload');
deprecate.rename(BrowserWindow, 'loadUrl', 'loadURL');
deprecate.rename(BrowserWindow, 'getUrl', 'getURL');
BrowserWindow.prototype.executeJavaScriptInDevTools = deprecate('executeJavaScriptInDevTools', 'devToolsWebContents.executeJavaScript', function(code) {
var ref1;
return (ref1 = this.devToolsWebContents) != null ? ref1.executeJavaScript(code) : void 0;
});
BrowserWindow.prototype.getPageTitle = deprecate('getPageTitle', 'webContents.getTitle', function() {
var ref1;
return (ref1 = this.webContents) != null ? ref1.getTitle() : void 0;
});
module.exports = BrowserWindow;

View File

@@ -1 +0,0 @@
module.exports = process.atomBinding 'content_tracing'

View File

@@ -0,0 +1 @@
module.exports = process.atomBinding('content_tracing');

View File

@@ -1,125 +0,0 @@
binding = process.atomBinding 'dialog'
v8Util = process.atomBinding 'v8_util'
app = require 'app'
BrowserWindow = require 'browser-window'
fileDialogProperties =
openFile: 1 << 0
openDirectory: 1 << 1
multiSelections: 1 << 2
createDirectory: 1 << 3
messageBoxTypes = ['none', 'info', 'warning', 'error', 'question']
messageBoxOptions =
noLink: 1 << 0
parseArgs = (window, options, callback) ->
unless window is null or window?.constructor is BrowserWindow
# Shift.
callback = options
options = window
window = null
if not callback? and typeof options is 'function'
# Shift.
callback = options
options = null
[window, options, callback]
checkAppInitialized = ->
throw new Error('dialog module can only be used after app is ready') unless app.isReady()
module.exports =
showOpenDialog: (args...) ->
checkAppInitialized()
[window, options, callback] = parseArgs args...
options ?= title: 'Open', properties: ['openFile']
options.properties ?= ['openFile']
throw new TypeError('Properties need to be array') unless Array.isArray options.properties
properties = 0
for prop, value of fileDialogProperties
properties |= value if prop in options.properties
options.title ?= ''
options.defaultPath ?= ''
options.filters ?= []
wrappedCallback =
if typeof callback is 'function'
(success, result) -> callback(if success then result)
else
null
binding.showOpenDialog String(options.title),
String(options.defaultPath),
options.filters
properties,
window,
wrappedCallback
showSaveDialog: (args...) ->
checkAppInitialized()
[window, options, callback] = parseArgs args...
options ?= title: 'Save'
options.title ?= ''
options.defaultPath ?= ''
options.filters ?= []
wrappedCallback =
if typeof callback is 'function'
(success, result) -> callback(if success then result)
else
null
binding.showSaveDialog String(options.title),
String(options.defaultPath),
options.filters
window,
wrappedCallback
showMessageBox: (args...) ->
checkAppInitialized()
[window, options, callback] = parseArgs args...
options ?= type: 'none'
options.type ?= 'none'
messageBoxType = messageBoxTypes.indexOf options.type
throw new TypeError('Invalid message box type') unless messageBoxType > -1
throw new TypeError('Buttons need to be array') unless Array.isArray options.buttons
options.title ?= ''
options.message ?= ''
options.detail ?= ''
options.icon ?= null
# Choose a default button to get selected when dialog is cancelled.
unless options.cancelId?
options.cancelId = 0
for text, i in options.buttons
if text.toLowerCase() in ['cancel', 'no']
options.cancelId = i
break
flags = if options.noLink then messageBoxOptions.noLink else 0
binding.showMessageBox messageBoxType,
options.buttons,
options.cancelId,
flags,
options.title,
options.message,
options.detail,
options.icon,
window,
callback
showErrorBox: (args...) ->
binding.showErrorBox args...
# Mark standard asynchronous functions.
for api in ['showMessageBox', 'showOpenDialog', 'showSaveDialog']
v8Util.setHiddenValue module.exports[api], 'asynchronous', true

View File

@@ -0,0 +1,170 @@
const app = require('electron').app;
const BrowserWindow = require('electron').BrowserWindow;
const binding = process.atomBinding('dialog');
const v8Util = process.atomBinding('v8_util');
var slice = [].slice;
var includes = [].includes;
var fileDialogProperties = {
openFile: 1 << 0,
openDirectory: 1 << 1,
multiSelections: 1 << 2,
createDirectory: 1 << 3
};
var messageBoxTypes = ['none', 'info', 'warning', 'error', 'question'];
var messageBoxOptions = {
noLink: 1 << 0
};
var parseArgs = function(window, options, callback) {
if (!(window === null || (window != null ? window.constructor : void 0) === BrowserWindow)) {
// Shift.
callback = options;
options = window;
window = null;
}
if ((callback == null) && typeof options === 'function') {
// Shift.
callback = options;
options = null;
}
return [window, options, callback];
};
var checkAppInitialized = function() {
if (!app.isReady()) {
throw new Error('dialog module can only be used after app is ready');
}
};
module.exports = {
showOpenDialog: function() {
var args, callback, options, prop, properties, ref1, value, window, wrappedCallback;
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
checkAppInitialized();
ref1 = parseArgs.apply(null, args), window = ref1[0], options = ref1[1], callback = ref1[2];
if (options == null) {
options = {
title: 'Open',
properties: ['openFile']
};
}
if (options.properties == null) {
options.properties = ['openFile'];
}
if (!Array.isArray(options.properties)) {
throw new TypeError('Properties need to be array');
}
properties = 0;
for (prop in fileDialogProperties) {
value = fileDialogProperties[prop];
if (includes.call(options.properties, prop)) {
properties |= value;
}
}
if (options.title == null) {
options.title = '';
}
if (options.defaultPath == null) {
options.defaultPath = '';
}
if (options.filters == null) {
options.filters = [];
}
wrappedCallback = typeof callback === 'function' ? function(success, result) {
return callback(success ? result : void 0);
} : null;
return binding.showOpenDialog(String(options.title), String(options.defaultPath), options.filters, properties, window, wrappedCallback);
},
showSaveDialog: function() {
var args, callback, options, ref1, window, wrappedCallback;
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
checkAppInitialized();
ref1 = parseArgs.apply(null, args), window = ref1[0], options = ref1[1], callback = ref1[2];
if (options == null) {
options = {
title: 'Save'
};
}
if (options.title == null) {
options.title = '';
}
if (options.defaultPath == null) {
options.defaultPath = '';
}
if (options.filters == null) {
options.filters = [];
}
wrappedCallback = typeof callback === 'function' ? function(success, result) {
return callback(success ? result : void 0);
} : null;
return binding.showSaveDialog(String(options.title), String(options.defaultPath), options.filters, window, wrappedCallback);
},
showMessageBox: function() {
var args, callback, flags, i, j, len, messageBoxType, options, ref1, ref2, ref3, text, window;
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
checkAppInitialized();
ref1 = parseArgs.apply(null, args), window = ref1[0], options = ref1[1], callback = ref1[2];
if (options == null) {
options = {
type: 'none'
};
}
if (options.type == null) {
options.type = 'none';
}
messageBoxType = messageBoxTypes.indexOf(options.type);
if (!(messageBoxType > -1)) {
throw new TypeError('Invalid message box type');
}
if (!Array.isArray(options.buttons)) {
throw new TypeError('Buttons need to be array');
}
if (options.title == null) {
options.title = '';
}
if (options.message == null) {
options.message = '';
}
if (options.detail == null) {
options.detail = '';
}
if (options.icon == null) {
options.icon = null;
}
if (options.defaultId == null) {
options.defaultId = -1;
}
// Choose a default button to get selected when dialog is cancelled.
if (options.cancelId == null) {
options.cancelId = 0;
ref2 = options.buttons;
for (i = j = 0, len = ref2.length; j < len; i = ++j) {
text = ref2[i];
if ((ref3 = text.toLowerCase()) === 'cancel' || ref3 === 'no') {
options.cancelId = i;
break;
}
}
}
flags = options.noLink ? messageBoxOptions.noLink : 0;
return binding.showMessageBox(messageBoxType, options.buttons, options.defaultId, options.cancelId, flags, options.title, options.message, options.detail, options.icon, window, callback);
},
showErrorBox: function() {
var args;
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
return binding.showErrorBox.apply(binding, args);
}
};
// Mark standard asynchronous functions.
var ref1 = ['showMessageBox', 'showOpenDialog', 'showSaveDialog'];
var j, len, api;
for (j = 0, len = ref1.length; j < len; j++) {
api = ref1[j];
v8Util.setHiddenValue(module.exports[api], 'asynchronous', true);
}

View File

@@ -0,0 +1,112 @@
const common = require('../../../../common/api/lib/exports/electron');
// Import common modules.
common.defineProperties(exports);
Object.defineProperties(exports, {
// Browser side modules, please sort with alphabet order.
app: {
enumerable: true,
get: function() {
return require('../app');
}
},
autoUpdater: {
enumerable: true,
get: function() {
return require('../auto-updater');
}
},
BrowserWindow: {
enumerable: true,
get: function() {
return require('../browser-window');
}
},
contentTracing: {
enumerable: true,
get: function() {
return require('../content-tracing');
}
},
dialog: {
enumerable: true,
get: function() {
return require('../dialog');
}
},
ipcMain: {
enumerable: true,
get: function() {
return require('../ipc-main');
}
},
globalShortcut: {
enumerable: true,
get: function() {
return require('../global-shortcut');
}
},
Menu: {
enumerable: true,
get: function() {
return require('../menu');
}
},
MenuItem: {
enumerable: true,
get: function() {
return require('../menu-item');
}
},
powerMonitor: {
enumerable: true,
get: function() {
return require('../power-monitor');
}
},
powerSaveBlocker: {
enumerable: true,
get: function() {
return require('../power-save-blocker');
}
},
protocol: {
enumerable: true,
get: function() {
return require('../protocol');
}
},
screen: {
enumerable: true,
get: function() {
return require('../screen');
}
},
session: {
enumerable: true,
get: function() {
return require('../session');
}
},
Tray: {
enumerable: true,
get: function() {
return require('../tray');
}
},
// The internal modules, invisible unless you know their names.
NavigationController: {
get: function() {
return require('../navigation-controller');
}
},
webContents: {
get: function() {
return require('../web-contents');
}
}
});

View File

@@ -1,5 +0,0 @@
bindings = process.atomBinding 'global_shortcut'
globalShortcut = bindings.globalShortcut
module.exports = globalShortcut

View File

@@ -0,0 +1,5 @@
var globalShortcut;
globalShortcut = process.atomBinding('global_shortcut').globalShortcut;
module.exports = globalShortcut;

View File

@@ -0,0 +1,3 @@
const EventEmitter = require('events').EventEmitter;
module.exports = new EventEmitter;

View File

@@ -1,3 +0,0 @@
EventEmitter = require('events').EventEmitter
module.exports = new EventEmitter

View File

@@ -0,0 +1,7 @@
const deprecate = require('electron').deprecate;
const ipcMain = require('electron').ipcMain;
// This module is deprecated, we mirror everything from ipcMain.
deprecate.warn('ipc module', 'require("electron").ipcMain');
module.exports = ipcMain;

View File

@@ -1,63 +0,0 @@
BrowserWindow = require 'browser-window'
v8Util = process.atomBinding 'v8_util'
nextCommandId = 0
# Maps role to methods of webContents
rolesMap =
undo: 'undo'
redo: 'redo'
cut: 'cut'
copy: 'copy'
paste: 'paste'
selectall: 'selectAll'
minimize: 'minimize'
close: 'close'
class MenuItem
@types = ['normal', 'separator', 'submenu', 'checkbox', 'radio']
constructor: (options) ->
Menu = require 'menu'
{click, @selector, @type, @role, @label, @sublabel, @accelerator, @icon, @enabled, @visible, @checked, @submenu} = options
@type = 'submenu' if not @type? and @submenu?
throw new Error('Invalid submenu') if @type is 'submenu' and @submenu?.constructor isnt Menu
@overrideReadOnlyProperty 'type', 'normal'
@overrideReadOnlyProperty 'role'
@overrideReadOnlyProperty 'accelerator'
@overrideReadOnlyProperty 'icon'
@overrideReadOnlyProperty 'submenu'
@overrideProperty 'label', ''
@overrideProperty 'sublabel', ''
@overrideProperty 'enabled', true
@overrideProperty 'visible', true
@overrideProperty 'checked', false
throw new Error("Unknown menu type #{@type}") if MenuItem.types.indexOf(@type) is -1
@commandId = ++nextCommandId
@click = (focusedWindow) =>
# Manually flip the checked flags when clicked.
@checked = !@checked if @type in ['checkbox', 'radio']
if @role and rolesMap[@role] and process.platform isnt 'darwin'
focusedWindow?[rolesMap[@role]]()
else if typeof click is 'function'
click this, focusedWindow
else if typeof @selector is 'string'
Menu.sendActionToFirstResponder @selector
overrideProperty: (name, defaultValue=null) ->
this[name] ?= defaultValue
overrideReadOnlyProperty: (name, defaultValue=null) ->
this[name] ?= defaultValue
Object.defineProperty this, name,
enumerable: true
writable: false
value: this[name]
module.exports = MenuItem

View File

@@ -0,0 +1,102 @@
var MenuItem, methodInBrowserWindow, nextCommandId, rolesMap;
nextCommandId = 0;
// Maps role to methods of webContents
rolesMap = {
undo: 'undo',
redo: 'redo',
cut: 'cut',
copy: 'copy',
paste: 'paste',
selectall: 'selectAll',
minimize: 'minimize',
close: 'close'
};
// Maps methods that should be called directly on the BrowserWindow instance
methodInBrowserWindow = {
minimize: true,
close: true
};
MenuItem = (function() {
MenuItem.types = ['normal', 'separator', 'submenu', 'checkbox', 'radio'];
function MenuItem(options) {
var click, ref;
const Menu = require('electron').Menu;
click = options.click, this.selector = options.selector, this.type = options.type, this.role = options.role, this.label = options.label, this.sublabel = options.sublabel, this.accelerator = options.accelerator, this.icon = options.icon, this.enabled = options.enabled, this.visible = options.visible, this.checked = options.checked, this.submenu = options.submenu;
if ((this.submenu != null) && this.submenu.constructor !== Menu) {
this.submenu = Menu.buildFromTemplate(this.submenu);
}
if ((this.type == null) && (this.submenu != null)) {
this.type = 'submenu';
}
if (this.type === 'submenu' && ((ref = this.submenu) != null ? ref.constructor : void 0) !== Menu) {
throw new Error('Invalid submenu');
}
this.overrideReadOnlyProperty('type', 'normal');
this.overrideReadOnlyProperty('role');
this.overrideReadOnlyProperty('accelerator');
this.overrideReadOnlyProperty('icon');
this.overrideReadOnlyProperty('submenu');
this.overrideProperty('label', '');
this.overrideProperty('sublabel', '');
this.overrideProperty('enabled', true);
this.overrideProperty('visible', true);
this.overrideProperty('checked', false);
if (MenuItem.types.indexOf(this.type) === -1) {
throw new Error("Unknown menu type " + this.type);
}
this.commandId = ++nextCommandId;
this.click = (function(_this) {
return function(focusedWindow) {
// Manually flip the checked flags when clicked.
var methodName, ref1, ref2;
if ((ref1 = _this.type) === 'checkbox' || ref1 === 'radio') {
_this.checked = !_this.checked;
}
if (_this.role && rolesMap[_this.role] && process.platform !== 'darwin' && (focusedWindow != null)) {
methodName = rolesMap[_this.role];
if (methodInBrowserWindow[methodName]) {
return focusedWindow[methodName]();
} else {
return (ref2 = focusedWindow.webContents) != null ? ref2[methodName]() : void 0;
}
} else if (typeof click === 'function') {
return click(_this, focusedWindow);
} else if (typeof _this.selector === 'string') {
return Menu.sendActionToFirstResponder(_this.selector);
}
};
})(this);
}
MenuItem.prototype.overrideProperty = function(name, defaultValue) {
if (defaultValue == null) {
defaultValue = null;
}
return this[name] != null ? this[name] : this[name] = defaultValue;
};
MenuItem.prototype.overrideReadOnlyProperty = function(name, defaultValue) {
if (defaultValue == null) {
defaultValue = null;
}
if (this[name] == null) {
this[name] = defaultValue;
}
return Object.defineProperty(this, name, {
enumerable: true,
writable: false,
value: this[name]
});
};
return MenuItem;
})();
module.exports = MenuItem;

View File

@@ -1,176 +0,0 @@
BrowserWindow = require 'browser-window'
EventEmitter = require('events').EventEmitter
MenuItem = require 'menu-item'
v8Util = process.atomBinding 'v8_util'
bindings = process.atomBinding 'menu'
# Automatically generated radio menu item's group id.
nextGroupId = 0
# Search between seperators to find a radio menu item and return its group id,
# otherwise generate a group id.
generateGroupId = (items, pos) ->
if pos > 0
for i in [pos - 1..0]
item = items[i]
return item.groupId if item.type is 'radio'
break if item.type is 'separator'
else if pos < items.length
for i in [pos..items.length - 1]
item = items[i]
return item.groupId if item.type is 'radio'
break if item.type is 'separator'
++nextGroupId
# Returns the index of item according to |id|.
indexOfItemById = (items, id) ->
return i for item, i in items when item.id is id
-1
# Returns the index of where to insert the item according to |position|.
indexToInsertByPosition = (items, position) ->
return items.length unless position
[query, id] = position.split '='
insertIndex = indexOfItemById items, id
if insertIndex is -1 and query isnt 'endof'
console.warn "Item with id '#{id}' is not found"
return items.length
switch query
when 'after'
insertIndex++
when 'endof'
# If the |id| doesn't exist, then create a new group with the |id|.
if insertIndex is -1
items.push id: id, type: 'separator'
insertIndex = items.length - 1
# Find the end of the group.
insertIndex++
while insertIndex < items.length and items[insertIndex].type isnt 'separator'
insertIndex++
insertIndex
Menu = bindings.Menu
Menu::__proto__ = EventEmitter.prototype
Menu::_init = ->
@commandsMap = {}
@groupsMap = {}
@items = []
@delegate =
isCommandIdChecked: (commandId) => @commandsMap[commandId]?.checked
isCommandIdEnabled: (commandId) => @commandsMap[commandId]?.enabled
isCommandIdVisible: (commandId) => @commandsMap[commandId]?.visible
getAcceleratorForCommandId: (commandId) => @commandsMap[commandId]?.accelerator
getIconForCommandId: (commandId) => @commandsMap[commandId]?.icon
executeCommand: (commandId) =>
@commandsMap[commandId]?.click BrowserWindow.getFocusedWindow()
menuWillShow: =>
# Make sure radio groups have at least one menu item seleted.
for id, group of @groupsMap
checked = false
for radioItem in group when radioItem.checked
checked = true
break
v8Util.setHiddenValue group[0], 'checked', true unless checked
Menu::popup = (window, x, y) ->
throw new TypeError('Invalid window') unless window?.constructor is BrowserWindow
if x? and y?
@_popupAt(window, x, y)
else
@_popup window
Menu::append = (item) ->
@insert @getItemCount(), item
Menu::insert = (pos, item) ->
throw new TypeError('Invalid item') unless item?.constructor is MenuItem
switch item.type
when 'normal' then @insertItem pos, item.commandId, item.label
when 'checkbox' then @insertCheckItem pos, item.commandId, item.label
when 'separator' then @insertSeparator pos
when 'submenu' then @insertSubMenu pos, item.commandId, item.label, item.submenu
when 'radio'
# Grouping radio menu items.
item.overrideReadOnlyProperty 'groupId', generateGroupId(@items, pos)
@groupsMap[item.groupId] ?= []
@groupsMap[item.groupId].push item
# Setting a radio menu item should flip other items in the group.
v8Util.setHiddenValue item, 'checked', item.checked
Object.defineProperty item, 'checked',
enumerable: true
get: -> v8Util.getHiddenValue item, 'checked'
set: (val) =>
for otherItem in @groupsMap[item.groupId] when otherItem isnt item
v8Util.setHiddenValue otherItem, 'checked', false
v8Util.setHiddenValue item, 'checked', true
@insertRadioItem pos, item.commandId, item.label, item.groupId
@setSublabel pos, item.sublabel if item.sublabel?
@setIcon pos, item.icon if item.icon?
@setRole pos, item.role if item.role?
# Make menu accessable to items.
item.overrideReadOnlyProperty 'menu', this
# Remember the items.
@items.splice pos, 0, item
@commandsMap[item.commandId] = item
# Force menuWillShow to be called
Menu::_callMenuWillShow = ->
@delegate?.menuWillShow()
item.submenu._callMenuWillShow() for item in @items when item.submenu?
applicationMenu = null
Menu.setApplicationMenu = (menu) ->
throw new TypeError('Invalid menu') unless menu is null or menu.constructor is Menu
applicationMenu = menu # Keep a reference.
if process.platform is 'darwin'
return if menu is null
menu._callMenuWillShow()
bindings.setApplicationMenu menu
else
windows = BrowserWindow.getAllWindows()
w.setMenu menu for w in windows
Menu.getApplicationMenu = -> applicationMenu
Menu.sendActionToFirstResponder = bindings.sendActionToFirstResponder
Menu.buildFromTemplate = (template) ->
throw new TypeError('Invalid template for Menu') unless Array.isArray template
positionedTemplate = []
insertIndex = 0
for item in template
if item.position
insertIndex = indexToInsertByPosition positionedTemplate, item.position
else
# If no |position| is specified, insert after last item.
insertIndex++
positionedTemplate.splice insertIndex, 0, item
menu = new Menu
for item in positionedTemplate
throw new TypeError('Invalid template for MenuItem') unless typeof item is 'object'
item.submenu = Menu.buildFromTemplate item.submenu if item.submenu?
menuItem = new MenuItem(item)
menuItem[key] = value for key, value of item when not menuItem[key]?
menu.append menuItem
menu
module.exports = Menu

View File

@@ -0,0 +1,335 @@
const BrowserWindow = require('electron').BrowserWindow;
const MenuItem = require('electron').MenuItem;
const EventEmitter = require('events').EventEmitter;
const v8Util = process.atomBinding('v8_util');
const bindings = process.atomBinding('menu');
// Automatically generated radio menu item's group id.
var nextGroupId = 0;
// Search between seperators to find a radio menu item and return its group id,
// otherwise generate a group id.
var generateGroupId = function(items, pos) {
var i, item, j, k, ref1, ref2, ref3;
if (pos > 0) {
for (i = j = ref1 = pos - 1; ref1 <= 0 ? j <= 0 : j >= 0; i = ref1 <= 0 ? ++j : --j) {
item = items[i];
if (item.type === 'radio') {
return item.groupId;
}
if (item.type === 'separator') {
break;
}
}
} else if (pos < items.length) {
for (i = k = ref2 = pos, ref3 = items.length - 1; ref2 <= ref3 ? k <= ref3 : k >= ref3; i = ref2 <= ref3 ? ++k : --k) {
item = items[i];
if (item.type === 'radio') {
return item.groupId;
}
if (item.type === 'separator') {
break;
}
}
}
return ++nextGroupId;
};
// Returns the index of item according to |id|.
var indexOfItemById = function(items, id) {
var i, item, j, len;
for (i = j = 0, len = items.length; j < len; i = ++j) {
item = items[i];
if (item.id === id) {
return i;
}
}
return -1;
};
// Returns the index of where to insert the item according to |position|.
var indexToInsertByPosition = function(items, position) {
var id, insertIndex, query, ref1;
if (!position) {
return items.length;
}
ref1 = position.split('='), query = ref1[0], id = ref1[1];
insertIndex = indexOfItemById(items, id);
if (insertIndex === -1 && query !== 'endof') {
console.warn("Item with id '" + id + "' is not found");
return items.length;
}
switch (query) {
case 'after':
insertIndex++;
break;
case 'endof':
// If the |id| doesn't exist, then create a new group with the |id|.
if (insertIndex === -1) {
items.push({
id: id,
type: 'separator'
});
insertIndex = items.length - 1;
}
// Find the end of the group.
insertIndex++;
while (insertIndex < items.length && items[insertIndex].type !== 'separator') {
insertIndex++;
}
}
return insertIndex;
};
const Menu = bindings.Menu;
Menu.prototype.__proto__ = EventEmitter.prototype;
Menu.prototype._init = function() {
this.commandsMap = {};
this.groupsMap = {};
this.items = [];
return this.delegate = {
isCommandIdChecked: (function(_this) {
return function(commandId) {
var ref1;
return (ref1 = _this.commandsMap[commandId]) != null ? ref1.checked : void 0;
};
})(this),
isCommandIdEnabled: (function(_this) {
return function(commandId) {
var ref1;
return (ref1 = _this.commandsMap[commandId]) != null ? ref1.enabled : void 0;
};
})(this),
isCommandIdVisible: (function(_this) {
return function(commandId) {
var ref1;
return (ref1 = _this.commandsMap[commandId]) != null ? ref1.visible : void 0;
};
})(this),
getAcceleratorForCommandId: (function(_this) {
return function(commandId) {
var ref1;
return (ref1 = _this.commandsMap[commandId]) != null ? ref1.accelerator : void 0;
};
})(this),
getIconForCommandId: (function(_this) {
return function(commandId) {
var ref1;
return (ref1 = _this.commandsMap[commandId]) != null ? ref1.icon : void 0;
};
})(this),
executeCommand: (function(_this) {
return function(commandId) {
var ref1;
return (ref1 = _this.commandsMap[commandId]) != null ? ref1.click(BrowserWindow.getFocusedWindow()) : void 0;
};
})(this),
menuWillShow: (function(_this) {
return function() {
// Make sure radio groups have at least one menu item seleted.
var checked, group, id, j, len, radioItem, ref1, results;
ref1 = _this.groupsMap;
results = [];
for (id in ref1) {
group = ref1[id];
checked = false;
for (j = 0, len = group.length; j < len; j++) {
radioItem = group[j];
if (!radioItem.checked) {
continue;
}
checked = true;
break;
}
if (!checked) {
results.push(v8Util.setHiddenValue(group[0], 'checked', true));
} else {
results.push(void 0);
}
}
return results;
};
})(this)
};
};
Menu.prototype.popup = function(window, x, y, positioningItem) {
if (typeof window != 'object' || window.constructor !== BrowserWindow) {
// Shift.
positioningItem = y;
y = x;
x = window;
window = BrowserWindow.getFocusedWindow();
}
// Default parameters.
if (typeof x !== 'number') x = -1;
if (typeof y !== 'number') y = -1;
if (typeof positioningItem !== 'number') positioningItem = 0;
this.popupAt(window, x, y, positioningItem);
};
Menu.prototype.append = function(item) {
return this.insert(this.getItemCount(), item);
};
Menu.prototype.insert = function(pos, item) {
var base, name;
if ((item != null ? item.constructor : void 0) !== MenuItem) {
throw new TypeError('Invalid item');
}
switch (item.type) {
case 'normal':
this.insertItem(pos, item.commandId, item.label);
break;
case 'checkbox':
this.insertCheckItem(pos, item.commandId, item.label);
break;
case 'separator':
this.insertSeparator(pos);
break;
case 'submenu':
this.insertSubMenu(pos, item.commandId, item.label, item.submenu);
break;
case 'radio':
// Grouping radio menu items.
item.overrideReadOnlyProperty('groupId', generateGroupId(this.items, pos));
if ((base = this.groupsMap)[name = item.groupId] == null) {
base[name] = [];
}
this.groupsMap[item.groupId].push(item);
// Setting a radio menu item should flip other items in the group.
v8Util.setHiddenValue(item, 'checked', item.checked);
Object.defineProperty(item, 'checked', {
enumerable: true,
get: function() {
return v8Util.getHiddenValue(item, 'checked');
},
set: (function(_this) {
return function() {
var j, len, otherItem, ref1;
ref1 = _this.groupsMap[item.groupId];
for (j = 0, len = ref1.length; j < len; j++) {
otherItem = ref1[j];
if (otherItem !== item) {
v8Util.setHiddenValue(otherItem, 'checked', false);
}
}
return v8Util.setHiddenValue(item, 'checked', true);
};
})(this)
});
this.insertRadioItem(pos, item.commandId, item.label, item.groupId);
}
if (item.sublabel != null) {
this.setSublabel(pos, item.sublabel);
}
if (item.icon != null) {
this.setIcon(pos, item.icon);
}
if (item.role != null) {
this.setRole(pos, item.role);
}
// Make menu accessable to items.
item.overrideReadOnlyProperty('menu', this);
// Remember the items.
this.items.splice(pos, 0, item);
return this.commandsMap[item.commandId] = item;
};
// Force menuWillShow to be called
Menu.prototype._callMenuWillShow = function() {
var item, j, len, ref1, ref2, results;
if ((ref1 = this.delegate) != null) {
ref1.menuWillShow();
}
ref2 = this.items;
results = [];
for (j = 0, len = ref2.length; j < len; j++) {
item = ref2[j];
if (item.submenu != null) {
results.push(item.submenu._callMenuWillShow());
}
}
return results;
};
var applicationMenu = null;
Menu.setApplicationMenu = function(menu) {
var j, len, results, w, windows;
if (!(menu === null || menu.constructor === Menu)) {
throw new TypeError('Invalid menu');
}
// Keep a reference.
applicationMenu = menu;
if (process.platform === 'darwin') {
if (menu === null) {
return;
}
menu._callMenuWillShow();
return bindings.setApplicationMenu(menu);
} else {
windows = BrowserWindow.getAllWindows();
results = [];
for (j = 0, len = windows.length; j < len; j++) {
w = windows[j];
results.push(w.setMenu(menu));
}
return results;
}
};
Menu.getApplicationMenu = function() {
return applicationMenu;
};
Menu.sendActionToFirstResponder = bindings.sendActionToFirstResponder;
Menu.buildFromTemplate = function(template) {
var insertIndex, item, j, k, key, len, len1, menu, menuItem, positionedTemplate, value;
if (!Array.isArray(template)) {
throw new TypeError('Invalid template for Menu');
}
positionedTemplate = [];
insertIndex = 0;
for (j = 0, len = template.length; j < len; j++) {
item = template[j];
if (item.position) {
insertIndex = indexToInsertByPosition(positionedTemplate, item.position);
} else {
// If no |position| is specified, insert after last item.
insertIndex++;
}
positionedTemplate.splice(insertIndex, 0, item);
}
menu = new Menu;
for (k = 0, len1 = positionedTemplate.length; k < len1; k++) {
item = positionedTemplate[k];
if (typeof item !== 'object') {
throw new TypeError('Invalid template for MenuItem');
}
menuItem = new MenuItem(item);
for (key in item) {
value = item[key];
if (menuItem[key] == null) {
menuItem[key] = value;
}
}
menu.append(menuItem);
}
return menu;
};
module.exports = Menu;

View File

@@ -1,122 +0,0 @@
ipc = require 'ipc'
# The history operation in renderer is redirected to browser.
ipc.on 'ATOM_SHELL_NAVIGATION_CONTROLLER', (event, method, args...) ->
event.sender[method] args...
ipc.on 'ATOM_SHELL_SYNC_NAVIGATION_CONTROLLER', (event, method, args...) ->
event.returnValue = event.sender[method] args...
# JavaScript implementation of Chromium's NavigationController.
# Instead of relying on Chromium for history control, we compeletely do history
# control on user land, and only rely on WebContents.loadUrl for navigation.
# This helps us avoid Chromium's various optimizations so we can ensure renderer
# process is restarted everytime.
class NavigationController
constructor: (@webContents) ->
@clearHistory()
# webContents may have already navigated to a page.
if @webContents._getUrl()
@currentIndex++
@history.push @webContents._getUrl()
@webContents.on 'navigation-entry-commited', (event, url, inPage, replaceEntry) =>
if @inPageIndex > -1 and not inPage
# Navigated to a new page, clear in-page mark.
@inPageIndex = -1
else if @inPageIndex is -1 and inPage
# Started in-page navigations.
@inPageIndex = @currentIndex
if @pendingIndex >= 0 # Go to index.
@currentIndex = @pendingIndex
@pendingIndex = -1
@history[@currentIndex] = url
else if replaceEntry # Non-user initialized navigation.
@history[@currentIndex] = url
else # Normal navigation.
@history = @history.slice 0, @currentIndex + 1 # Clear history.
currentEntry = @history[@currentIndex]
if currentEntry?.url isnt url
@currentIndex++
@history.push url
loadUrl: (url, options={}) ->
@pendingIndex = -1
@webContents._loadUrl url, options
@webContents.emit 'load-url', url, options
getUrl: ->
if @currentIndex is -1
''
else
@history[@currentIndex]
stop: ->
@pendingIndex = -1
@webContents._stop()
reload: ->
@pendingIndex = @currentIndex
@webContents._loadUrl @getUrl(), {}
reloadIgnoringCache: ->
@webContents._reloadIgnoringCache() # Rely on WebContents to clear cache.
@reload()
canGoBack: ->
@getActiveIndex() > 0
canGoForward: ->
@getActiveIndex() < @history.length - 1
canGoToIndex: (index) ->
index >=0 and index < @history.length
canGoToOffset: (offset) ->
@canGoToIndex @currentIndex + offset
clearHistory: ->
@history = []
@currentIndex = -1
@pendingIndex = -1
@inPageIndex = -1
goBack: ->
return unless @canGoBack()
@pendingIndex = @getActiveIndex() - 1
if @inPageIndex > -1 and @pendingIndex >= @inPageIndex
@webContents._goBack()
else
@webContents._loadUrl @history[@pendingIndex], {}
goForward: ->
return unless @canGoForward()
@pendingIndex = @getActiveIndex() + 1
if @inPageIndex > -1 and @pendingIndex >= @inPageIndex
@webContents._goForward()
else
@webContents._loadUrl @history[@pendingIndex], {}
goToIndex: (index) ->
return unless @canGoToIndex index
@pendingIndex = index
@webContents._loadUrl @history[@pendingIndex], {}
goToOffset: (offset) ->
return unless @canGoToOffset offset
pendingIndex = @currentIndex + offset
if @inPageIndex > -1 and pendingIndex >= @inPageIndex
@pendingIndex = pendingIndex
@webContents._goToOffset offset
else
@goToIndex pendingIndex
getActiveIndex: ->
if @pendingIndex is -1 then @currentIndex else @pendingIndex
length: ->
@history.length
module.exports = NavigationController

View File

@@ -0,0 +1,188 @@
const ipcMain = require('electron').ipcMain;
var slice = [].slice;
// The history operation in renderer is redirected to browser.
ipcMain.on('ATOM_SHELL_NAVIGATION_CONTROLLER', function() {
var args, event, method, ref;
event = arguments[0], method = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : [];
return (ref = event.sender)[method].apply(ref, args);
});
ipcMain.on('ATOM_SHELL_SYNC_NAVIGATION_CONTROLLER', function() {
var args, event, method, ref;
event = arguments[0], method = arguments[1], args = 3 <= arguments.length ? slice.call(arguments, 2) : [];
return event.returnValue = (ref = event.sender)[method].apply(ref, args);
});
// JavaScript implementation of Chromium's NavigationController.
// Instead of relying on Chromium for history control, we compeletely do history
// control on user land, and only rely on WebContents.loadURL for navigation.
// This helps us avoid Chromium's various optimizations so we can ensure renderer
// process is restarted everytime.
var NavigationController = (function() {
function NavigationController(webContents) {
this.webContents = webContents;
this.clearHistory();
// webContents may have already navigated to a page.
if (this.webContents._getURL()) {
this.currentIndex++;
this.history.push(this.webContents._getURL());
}
this.webContents.on('navigation-entry-commited', (function(_this) {
return function(event, url, inPage, replaceEntry) {
var currentEntry;
if (_this.inPageIndex > -1 && !inPage) {
// Navigated to a new page, clear in-page mark.
_this.inPageIndex = -1;
} else if (_this.inPageIndex === -1 && inPage) {
// Started in-page navigations.
_this.inPageIndex = _this.currentIndex;
}
if (_this.pendingIndex >= 0) {
// Go to index.
_this.currentIndex = _this.pendingIndex;
_this.pendingIndex = -1;
return _this.history[_this.currentIndex] = url;
} else if (replaceEntry) {
// Non-user initialized navigation.
return _this.history[_this.currentIndex] = url;
} else {
// Normal navigation. Clear history.
_this.history = _this.history.slice(0, _this.currentIndex + 1);
currentEntry = _this.history[_this.currentIndex];
if ((currentEntry != null ? currentEntry.url : void 0) !== url) {
_this.currentIndex++;
return _this.history.push(url);
}
}
};
})(this));
}
NavigationController.prototype.loadURL = function(url, options) {
if (options == null) {
options = {};
}
this.pendingIndex = -1;
this.webContents._loadURL(url, options);
return this.webContents.emit('load-url', url, options);
};
NavigationController.prototype.getURL = function() {
if (this.currentIndex === -1) {
return '';
} else {
return this.history[this.currentIndex];
}
};
NavigationController.prototype.stop = function() {
this.pendingIndex = -1;
return this.webContents._stop();
};
NavigationController.prototype.reload = function() {
this.pendingIndex = this.currentIndex;
return this.webContents._loadURL(this.getURL(), {});
};
NavigationController.prototype.reloadIgnoringCache = function() {
this.pendingIndex = this.currentIndex;
return this.webContents._loadURL(this.getURL(), {
extraHeaders: "pragma: no-cache\n"
});
};
NavigationController.prototype.canGoBack = function() {
return this.getActiveIndex() > 0;
};
NavigationController.prototype.canGoForward = function() {
return this.getActiveIndex() < this.history.length - 1;
};
NavigationController.prototype.canGoToIndex = function(index) {
return index >= 0 && index < this.history.length;
};
NavigationController.prototype.canGoToOffset = function(offset) {
return this.canGoToIndex(this.currentIndex + offset);
};
NavigationController.prototype.clearHistory = function() {
this.history = [];
this.currentIndex = -1;
this.pendingIndex = -1;
return this.inPageIndex = -1;
};
NavigationController.prototype.goBack = function() {
if (!this.canGoBack()) {
return;
}
this.pendingIndex = this.getActiveIndex() - 1;
if (this.inPageIndex > -1 && this.pendingIndex >= this.inPageIndex) {
return this.webContents._goBack();
} else {
return this.webContents._loadURL(this.history[this.pendingIndex], {});
}
};
NavigationController.prototype.goForward = function() {
if (!this.canGoForward()) {
return;
}
this.pendingIndex = this.getActiveIndex() + 1;
if (this.inPageIndex > -1 && this.pendingIndex >= this.inPageIndex) {
return this.webContents._goForward();
} else {
return this.webContents._loadURL(this.history[this.pendingIndex], {});
}
};
NavigationController.prototype.goToIndex = function(index) {
if (!this.canGoToIndex(index)) {
return;
}
this.pendingIndex = index;
return this.webContents._loadURL(this.history[this.pendingIndex], {});
};
NavigationController.prototype.goToOffset = function(offset) {
var pendingIndex;
if (!this.canGoToOffset(offset)) {
return;
}
pendingIndex = this.currentIndex + offset;
if (this.inPageIndex > -1 && pendingIndex >= this.inPageIndex) {
this.pendingIndex = pendingIndex;
return this.webContents._goToOffset(offset);
} else {
return this.goToIndex(pendingIndex);
}
};
NavigationController.prototype.getActiveIndex = function() {
if (this.pendingIndex === -1) {
return this.currentIndex;
} else {
return this.pendingIndex;
}
};
NavigationController.prototype.length = function() {
return this.history.length;
};
return NavigationController;
})();
module.exports = NavigationController;

View File

@@ -1,6 +0,0 @@
powerMonitor = process.atomBinding('power_monitor').powerMonitor
EventEmitter = require('events').EventEmitter
powerMonitor.__proto__ = EventEmitter.prototype
module.exports = powerMonitor

View File

@@ -0,0 +1,6 @@
const EventEmitter = require('events').EventEmitter;
const powerMonitor = process.atomBinding('power_monitor').powerMonitor;
powerMonitor.__proto__ = EventEmitter.prototype;
module.exports = powerMonitor;

View File

@@ -1,3 +0,0 @@
bindings = process.atomBinding 'power_save_blocker'
module.exports = bindings.powerSaveBlocker

View File

@@ -0,0 +1,5 @@
var powerSaveBlocker;
powerSaveBlocker = process.atomBinding('power_save_blocker').powerSaveBlocker;
module.exports = powerSaveBlocker;

View File

@@ -1,24 +0,0 @@
app = require 'app'
throw new Error('Can not initialize protocol module before app is ready') unless app.isReady()
protocol = process.atomBinding('protocol').protocol
# Warn about removed APIs.
logAndThrow = (callback, message) ->
console.error message
if callback then callback(new Error(message)) else throw new Error(message)
protocol.registerProtocol = (scheme, handler, callback) ->
logAndThrow callback,
'registerProtocol API has been replaced by the
register[File/Http/Buffer/String]Protocol API family, please
switch to the new APIs.'
protocol.isHandledProtocol = (scheme, callback) ->
logAndThrow callback,
'isHandledProtocol API has been replaced by isProtocolHandled.'
protocol.interceptProtocol = (scheme, handler, callback) ->
logAndThrow callback,
'interceptProtocol API has been replaced by the
intercept[File/Http/Buffer/String]Protocol API family, please
switch to the new APIs.'
module.exports = protocol

View File

@@ -0,0 +1,31 @@
const app = require('electron').app;
if (!app.isReady()) {
throw new Error('Can not initialize protocol module before app is ready');
}
const protocol = process.atomBinding('protocol').protocol;
// Warn about removed APIs.
var logAndThrow = function(callback, message) {
console.error(message);
if (callback) {
return callback(new Error(message));
} else {
throw new Error(message);
}
};
protocol.registerProtocol = function(scheme, handler, callback) {
return logAndThrow(callback, 'registerProtocol API has been replaced by the register[File/Http/Buffer/String]Protocol API family, please switch to the new APIs.');
};
protocol.isHandledProtocol = function(scheme, callback) {
return logAndThrow(callback, 'isHandledProtocol API has been replaced by isProtocolHandled.');
};
protocol.interceptProtocol = function(scheme, handler, callback) {
return logAndThrow(callback, 'interceptProtocol API has been replaced by the intercept[File/Http/Buffer/String]Protocol API family, please switch to the new APIs.');
};
module.exports = protocol;

View File

@@ -1,6 +0,0 @@
EventEmitter = require('events').EventEmitter
screen = process.atomBinding('screen').screen
screen.__proto__ = EventEmitter.prototype
module.exports = screen

View File

@@ -0,0 +1,6 @@
const EventEmitter = require('events').EventEmitter;
const screen = process.atomBinding('screen').screen;
screen.__proto__ = EventEmitter.prototype;
module.exports = screen;

View File

@@ -0,0 +1,33 @@
const EventEmitter = require('events').EventEmitter;
const bindings = process.atomBinding('session');
const PERSIST_PREFIX = 'persist:';
// Returns the Session from |partition| string.
exports.fromPartition = function(partition) {
if (partition == null) {
partition = '';
}
if (partition === '') {
return exports.defaultSession;
}
if (partition.startsWith(PERSIST_PREFIX)) {
return bindings.fromPartition(partition.substr(PERSIST_PREFIX.length), false);
} else {
return bindings.fromPartition(partition, true);
}
};
// Returns the default session.
Object.defineProperty(exports, 'defaultSession', {
enumerable: true,
get: function() {
return bindings.fromPartition('', false);
}
});
var wrapSession = function(session) {
// session is an EventEmitter.
return session.__proto__ = EventEmitter.prototype;
};
bindings._setWrapSession(wrapSession);

View File

@@ -1,14 +0,0 @@
EventEmitter = require('events').EventEmitter
bindings = process.atomBinding 'tray'
Tray = bindings.Tray
Tray::__proto__ = EventEmitter.prototype
Tray::setContextMenu = (menu) ->
@_setContextMenu menu
@menu = menu # Keep a strong reference of menu.
# Keep compatibility with old APIs.
Tray::popContextMenu = Tray::popUpContextMenu
module.exports = Tray

View File

@@ -0,0 +1,23 @@
const deprecate = require('electron').deprecate;
const EventEmitter = require('events').EventEmitter;
const Tray = process.atomBinding('tray').Tray;
Tray.prototype.__proto__ = EventEmitter.prototype;
Tray.prototype._init = function() {
// Deprecated.
deprecate.rename(this, 'popContextMenu', 'popUpContextMenu');
deprecate.event(this, 'clicked', 'click');
deprecate.event(this, 'double-clicked', 'double-click');
deprecate.event(this, 'right-clicked', 'right-click');
return deprecate.event(this, 'balloon-clicked', 'balloon-click');
};
Tray.prototype.setContextMenu = function(menu) {
this._setContextMenu(menu);
// Keep a strong reference of menu.
return this.menu = menu;
};
module.exports = Tray;

View File

@@ -1,112 +0,0 @@
EventEmitter = require('events').EventEmitter
NavigationController = require './navigation-controller'
binding = process.atomBinding 'web_contents'
ipc = require 'ipc'
nextId = 0
getNextId = -> ++nextId
PDFPageSize =
A4:
custom_display_name: "A4"
height_microns: 297000
name: "ISO_A4"
is_default: "true"
width_microns: 210000
A3:
custom_display_name: "A3"
height_microns: 420000
name: "ISO_A3"
width_microns: 297000
Legal:
custom_display_name: "Legal"
height_microns: 355600
name: "NA_LEGAL"
width_microns: 215900
Letter:
custom_display_name: "Letter"
height_microns: 279400
name: "NA_LETTER"
width_microns: 215900
Tabloid:
height_microns: 431800
name: "NA_LEDGER"
width_microns: 279400
custom_display_name: "Tabloid"
wrapWebContents = (webContents) ->
# webContents is an EventEmitter.
webContents.__proto__ = EventEmitter.prototype
# WebContents::send(channel, args..)
webContents.send = (channel, args...) ->
@_send channel, [args...]
# Make sure webContents.executeJavaScript would run the code only when the
# web contents has been loaded.
webContents.executeJavaScript = (code, hasUserGesture=false) ->
if @getUrl() and not @isLoading()
@_executeJavaScript code, hasUserGesture
else
webContents.once 'did-finish-load', @_executeJavaScript.bind(this, code, hasUserGesture)
# The navigation controller.
controller = new NavigationController(webContents)
for name, method of NavigationController.prototype when method instanceof Function
do (name, method) ->
webContents[name] = -> method.apply controller, arguments
# Dispatch IPC messages to the ipc module.
webContents.on 'ipc-message', (event, packed) ->
[channel, args...] = packed
ipc.emit channel, event, args...
webContents.on 'ipc-message-sync', (event, packed) ->
[channel, args...] = packed
Object.defineProperty event, 'returnValue', set: (value) -> event.sendReply JSON.stringify(value)
ipc.emit channel, event, args...
webContents.printToPDF = (options, callback) ->
printingSetting =
pageRage: []
mediaSize: {}
landscape: false
color: 2
headerFooterEnabled: false
marginsType: 0
isFirstRequest: false
requestID: getNextId()
previewModifiable: true
printToPDF: true
printWithCloudPrint: false
printWithPrivet: false
printWithExtension: false
deviceName: "Save as PDF"
generateDraftData: true
fitToPageEnabled: false
duplex: 0
copies: 1
collate: true
shouldPrintBackgrounds: false
shouldPrintSelectionOnly: false
if options.landscape
printingSetting.landscape = options.landscape
if options.marginsType
printingSetting.marginsType = options.marginsType
if options.printSelectionOnly
printingSetting.shouldPrintSelectionOnly = options.printSelectionOnly
if options.printBackground
printingSetting.shouldPrintBackgrounds = options.printBackground
if options.pageSize and PDFPageSize[options.pageSize]
printingSetting.mediaSize = PDFPageSize[options.pageSize]
else
printingSetting.mediaSize = PDFPageSize['A4']
@_printToPDF printingSetting, callback
binding._setWrapWebContents wrapWebContents
process.once 'exit', binding._clearWrapWebContents
module.exports.create = (options={}) ->
binding.create(options)

View File

@@ -0,0 +1,247 @@
'use strict';
const EventEmitter = require('events').EventEmitter;
const deprecate = require('electron').deprecate;
const ipcMain = require('electron').ipcMain;
const NavigationController = require('electron').NavigationController;
const Menu = require('electron').Menu;
const binding = process.atomBinding('web_contents');
const debuggerBinding = process.atomBinding('debugger');
let slice = [].slice;
let nextId = 0;
let getNextId = function() {
return ++nextId;
};
let PDFPageSize = {
A5: {
custom_display_name: "A5",
height_microns: 210000,
name: "ISO_A5",
width_microns: 148000
},
A4: {
custom_display_name: "A4",
height_microns: 297000,
name: "ISO_A4",
is_default: "true",
width_microns: 210000
},
A3: {
custom_display_name: "A3",
height_microns: 420000,
name: "ISO_A3",
width_microns: 297000
},
Legal: {
custom_display_name: "Legal",
height_microns: 355600,
name: "NA_LEGAL",
width_microns: 215900
},
Letter: {
custom_display_name: "Letter",
height_microns: 279400,
name: "NA_LETTER",
width_microns: 215900
},
Tabloid: {
height_microns: 431800,
name: "NA_LEDGER",
width_microns: 279400,
custom_display_name: "Tabloid"
}
};
// Following methods are mapped to webFrame.
const webFrameMethods = [
'insertText',
'setZoomFactor',
'setZoomLevel',
'setZoomLevelLimits'
];
let wrapWebContents = function(webContents) {
// webContents is an EventEmitter.
var controller, method, name, ref1;
webContents.__proto__ = EventEmitter.prototype;
// Every remote callback from renderer process would add a listenter to the
// render-view-deleted event, so ignore the listenters warning.
webContents.setMaxListeners(0);
// WebContents::send(channel, args..)
webContents.send = function() {
var args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
var channel = arguments[0];
if (channel == null) {
throw new Error('Missing required channel argument');
}
return this._send(channel, slice.call(args));
};
// The navigation controller.
controller = new NavigationController(webContents);
ref1 = NavigationController.prototype;
for (name in ref1) {
method = ref1[name];
if (method instanceof Function) {
(function(name, method) {
return webContents[name] = function() {
return method.apply(controller, arguments);
};
})(name, method);
}
}
// Mapping webFrame methods.
for (let method of webFrameMethods) {
webContents[method] = function() {
let args = Array.prototype.slice.call(arguments);
this.send('ELECTRON_INTERNAL_RENDERER_WEB_FRAME_METHOD', method, args);
};
}
const asyncWebFrameMethods = function(requestId, method, callback, ...args) {
this.send('ELECTRON_INTERNAL_RENDERER_ASYNC_WEB_FRAME_METHOD', requestId, method, args);
ipcMain.once(`ELECTRON_INTERNAL_BROWSER_ASYNC_WEB_FRAME_RESPONSE_${requestId}`, function(event, result) {
if (callback)
callback(result);
});
};
// Make sure webContents.executeJavaScript would run the code only when the
// webContents has been loaded.
webContents.executeJavaScript = function(code, hasUserGesture, callback) {
let requestId = getNextId();
if (typeof hasUserGesture === "function") {
callback = hasUserGesture;
hasUserGesture = false;
}
if (this.getURL() && !this.isLoading())
return asyncWebFrameMethods.call(this, requestId, "executeJavaScript", callback, code, hasUserGesture);
else
return this.once('did-finish-load', asyncWebFrameMethods.bind(this, requestId, "executeJavaScript", callback, code, hasUserGesture));
};
// Dispatch IPC messages to the ipc module.
webContents.on('ipc-message', function(event, packed) {
var args, channel;
channel = packed[0], args = 2 <= packed.length ? slice.call(packed, 1) : [];
return ipcMain.emit.apply(ipcMain, [channel, event].concat(slice.call(args)));
});
webContents.on('ipc-message-sync', function(event, packed) {
var args, channel;
channel = packed[0], args = 2 <= packed.length ? slice.call(packed, 1) : [];
Object.defineProperty(event, 'returnValue', {
set: function(value) {
return event.sendReply(JSON.stringify(value));
}
});
return ipcMain.emit.apply(ipcMain, [channel, event].concat(slice.call(args)));
});
// Handle context menu action request from pepper plugin.
webContents.on('pepper-context-menu', function(event, params) {
var menu;
menu = Menu.buildFromTemplate(params.menu);
return menu.popup(params.x, params.y);
});
// This error occurs when host could not be found.
webContents.on('did-fail-provisional-load', function() {
var args;
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
// Calling loadURL during this event might cause crash, so delay the event
// until next tick.
return setImmediate((function(_this) {
return function() {
return _this.emit.apply(_this, ['did-fail-load'].concat(slice.call(args)));
};
})(this));
});
// Delays the page-title-updated event to next tick.
webContents.on('-page-title-updated', function() {
var args;
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
return setImmediate((function(_this) {
return function() {
return _this.emit.apply(_this, ['page-title-updated'].concat(slice.call(args)));
};
})(this));
});
// Deprecated.
deprecate.rename(webContents, 'loadUrl', 'loadURL');
deprecate.rename(webContents, 'getUrl', 'getURL');
deprecate.event(webContents, 'page-title-set', 'page-title-updated', function() {
var args;
args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
return this.emit.apply(this, ['page-title-set'].concat(slice.call(args)));
});
return webContents.printToPDF = function(options, callback) {
var printingSetting;
printingSetting = {
pageRage: [],
mediaSize: {},
landscape: false,
color: 2,
headerFooterEnabled: false,
marginsType: 0,
isFirstRequest: false,
requestID: getNextId(),
previewModifiable: true,
printToPDF: true,
printWithCloudPrint: false,
printWithPrivet: false,
printWithExtension: false,
deviceName: "Save as PDF",
generateDraftData: true,
fitToPageEnabled: false,
duplex: 0,
copies: 1,
collate: true,
shouldPrintBackgrounds: false,
shouldPrintSelectionOnly: false
};
if (options.landscape) {
printingSetting.landscape = options.landscape;
}
if (options.marginsType) {
printingSetting.marginsType = options.marginsType;
}
if (options.printSelectionOnly) {
printingSetting.shouldPrintSelectionOnly = options.printSelectionOnly;
}
if (options.printBackground) {
printingSetting.shouldPrintBackgrounds = options.printBackground;
}
if (options.pageSize && PDFPageSize[options.pageSize]) {
printingSetting.mediaSize = PDFPageSize[options.pageSize];
} else {
printingSetting.mediaSize = PDFPageSize['A4'];
}
return this._printToPDF(printingSetting, callback);
};
};
// Wrapper for native class.
let wrapDebugger = function(webContentsDebugger) {
// debugger is an EventEmitter.
webContentsDebugger.__proto__ = EventEmitter.prototype;
};
binding._setWrapWebContents(wrapWebContents);
debuggerBinding._setWrapDebugger(wrapDebugger);
module.exports.create = function(options) {
if (options == null) {
options = {};
}
return binding.create(options);
};

View File

@@ -0,0 +1,83 @@
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/api/save_page_handler.h"
#include <string>
#include "atom/browser/atom_browser_context.h"
#include "base/callback.h"
#include "base/files/file_path.h"
#include "content/public/browser/web_contents.h"
namespace atom {
namespace api {
SavePageHandler::SavePageHandler(content::WebContents* web_contents,
const SavePageCallback& callback)
: web_contents_(web_contents),
callback_(callback) {
}
SavePageHandler::~SavePageHandler() {
}
void SavePageHandler::OnDownloadCreated(content::DownloadManager* manager,
content::DownloadItem* item) {
// OnDownloadCreated is invoked during WebContents::SavePage, so the |item|
// here is the one stated by WebContents::SavePage.
item->AddObserver(this);
}
bool SavePageHandler::Handle(const base::FilePath& full_path,
const content::SavePageType& save_type) {
auto download_manager = content::BrowserContext::GetDownloadManager(
web_contents_->GetBrowserContext());
download_manager->AddObserver(this);
// Chromium will create a 'foo_files' directory under the directory of saving
// page 'foo.html' for holding other resource files of 'foo.html'.
base::FilePath saved_main_directory_path = full_path.DirName().Append(
full_path.RemoveExtension().BaseName().value() +
FILE_PATH_LITERAL("_files"));
bool result = web_contents_->SavePage(full_path,
saved_main_directory_path,
save_type);
download_manager->RemoveObserver(this);
// If initialization fails which means fail to create |DownloadItem|, we need
// to delete the |SavePageHandler| instance to avoid memory-leak.
if (!result)
delete this;
return result;
}
void SavePageHandler::OnDownloadUpdated(content::DownloadItem* item) {
if (item->IsDone()) {
v8::Isolate* isolate = v8::Isolate::GetCurrent();
v8::Locker locker(isolate);
v8::HandleScope handle_scope(isolate);
if (item->GetState() == content::DownloadItem::COMPLETE) {
callback_.Run(v8::Null(isolate));
} else {
v8::Local<v8::String> error_message = v8::String::NewFromUtf8(
isolate, "Fail to save page");
callback_.Run(v8::Exception::Error(error_message));
}
Destroy(item);
}
}
void SavePageHandler::Destroy(content::DownloadItem* item) {
item->RemoveObserver(this);
delete this;
}
// static
bool SavePageHandler::IsSavePageTypes(const std::string& type) {
return type == "multipart/related" || type == "text/html";
}
} // namespace api
} // namespace atom

View File

@@ -0,0 +1,60 @@
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ATOM_BROWSER_API_SAVE_PAGE_HANDLER_H_
#define ATOM_BROWSER_API_SAVE_PAGE_HANDLER_H_
#include <string>
#include "content/public/browser/download_item.h"
#include "content/public/browser/download_manager.h"
#include "content/public/browser/save_page_type.h"
#include "v8/include/v8.h"
namespace base {
class FilePath;
}
namespace content {
class WebContents;
}
namespace atom {
namespace api {
// A self-destroyed class for handling save page request.
class SavePageHandler : public content::DownloadManager::Observer,
public content::DownloadItem::Observer {
public:
using SavePageCallback = base::Callback<void(v8::Local<v8::Value>)>;
SavePageHandler(content::WebContents* web_contents,
const SavePageCallback& callback);
~SavePageHandler();
bool Handle(const base::FilePath& full_path,
const content::SavePageType& save_type);
static bool IsSavePageTypes(const std::string& type);
private:
void Destroy(content::DownloadItem* item);
// content::DownloadManager::Observer:
void OnDownloadCreated(content::DownloadManager* manager,
content::DownloadItem* item) override;
// content::DownloadItem::Observer:
void OnDownloadUpdated(content::DownloadItem* item) override;
content::WebContents* web_contents_; // weak
SavePageCallback callback_;
};
} // namespace api
} // namespace atom
#endif // ATOM_BROWSER_API_SAVE_PAGE_HANDLER_H_

View File

@@ -30,11 +30,11 @@ class IDUserData : public base::SupportsUserData::Data {
TrackableObjectBase::TrackableObjectBase()
: weak_map_id_(0), wrapped_(nullptr), weak_factory_(this) {
RegisterDestructionCallback(
base::Bind(&TrackableObjectBase::Destroy, weak_factory_.GetWeakPtr()));
cleanup_ = RegisterDestructionCallback(GetDestroyClosure());
}
TrackableObjectBase::~TrackableObjectBase() {
cleanup_.Run();
}
void TrackableObjectBase::AfterInit(v8::Isolate* isolate) {
@@ -42,6 +42,18 @@ void TrackableObjectBase::AfterInit(v8::Isolate* isolate) {
AttachAsUserData(wrapped_);
}
void TrackableObjectBase::MarkDestroyed() {
GetWrapper(isolate())->SetAlignedPointerInInternalField(0, nullptr);
}
base::Closure TrackableObjectBase::GetDestroyClosure() {
return base::Bind(&TrackableObjectBase::Destroy, weak_factory_.GetWeakPtr());
}
void TrackableObjectBase::Destroy() {
delete this;
}
void TrackableObjectBase::AttachAsUserData(base::SupportsUserData* wrapped) {
if (weak_map_id_ != 0) {
wrapped->SetUserData(kTrackedObjectKey, new IDUserData(weak_map_id_));
@@ -63,9 +75,9 @@ int32_t TrackableObjectBase::GetIDFromWrappedClass(base::SupportsUserData* w) {
}
// static
void TrackableObjectBase::RegisterDestructionCallback(
const base::Closure& closure) {
atom::AtomBrowserMainParts::Get()->RegisterDestructionCallback(closure);
base::Closure TrackableObjectBase::RegisterDestructionCallback(
const base::Closure& c) {
return atom::AtomBrowserMainParts::Get()->RegisterDestructionCallback(c);
}
} // namespace mate

View File

@@ -12,6 +12,7 @@
#include "base/bind.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "native_mate/object_template_builder.h"
namespace base {
class SupportsUserData;
@@ -30,26 +31,32 @@ class TrackableObjectBase : public mate::EventEmitter {
// Wrap TrackableObject into a class that SupportsUserData.
void AttachAsUserData(base::SupportsUserData* wrapped);
// Subclasses should implement this to destroy their native types.
virtual void Destroy() = 0;
protected:
~TrackableObjectBase() override;
// mate::Wrappable:
void AfterInit(v8::Isolate* isolate) override;
// Mark the JS object as destroyed.
void MarkDestroyed();
// Returns a closure that can destroy the native class.
base::Closure GetDestroyClosure();
// Get the weak_map_id from SupportsUserData.
static int32_t GetIDFromWrappedClass(base::SupportsUserData* wrapped);
// Register a callback that should be destroyed before JavaScript environment
// gets destroyed.
static void RegisterDestructionCallback(const base::Closure& closure);
static base::Closure RegisterDestructionCallback(const base::Closure& c);
int32_t weak_map_id_;
base::SupportsUserData* wrapped_;
private:
void Destroy();
base::Closure cleanup_;
base::WeakPtrFactory<TrackableObjectBase> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(TrackableObjectBase);
@@ -91,11 +98,6 @@ class TrackableObject : public TrackableObjectBase {
return std::vector<v8::Local<v8::Object>>();
}
TrackableObject() {
RegisterDestructionCallback(
base::Bind(&TrackableObject<T>::ReleaseAllWeakReferences));
}
// Removes this instance from the weak map.
void RemoveFromWeakMap() {
if (weak_map_ && weak_map_->Has(weak_map_id()))
@@ -103,28 +105,49 @@ class TrackableObject : public TrackableObjectBase {
}
protected:
TrackableObject() {}
~TrackableObject() override {
RemoveFromWeakMap();
}
void AfterInit(v8::Isolate* isolate) override {
if (!weak_map_)
if (!weak_map_) {
weak_map_.reset(new atom::IDWeakMap);
RegisterDestructionCallback(
base::Bind(&TrackableObject<T>::ReleaseAllWeakReferences));
}
weak_map_id_ = weak_map_->Add(isolate, GetWrapper(isolate));
TrackableObjectBase::AfterInit(isolate);
}
private:
// mate::Wrappable:
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override {
if (template_.IsEmpty()) {
auto templ = v8::ObjectTemplate::New(isolate);
T::BuildPrototype(isolate, templ);
template_.Reset(isolate, templ);
}
return ObjectTemplateBuilder(
isolate, v8::Local<v8::ObjectTemplate>::New(isolate, template_));
}
// Releases all weak references in weak map, called when app is terminating.
static void ReleaseAllWeakReferences() {
weak_map_.reset();
}
static v8::Persistent<v8::ObjectTemplate> template_;
static scoped_ptr<atom::IDWeakMap> weak_map_;
DISALLOW_COPY_AND_ASSIGN(TrackableObject);
};
template<typename T>
v8::Persistent<v8::ObjectTemplate> TrackableObject<T>::template_;
template<typename T>
scoped_ptr<atom::IDWeakMap> TrackableObject<T>::weak_map_;

View File

@@ -18,7 +18,7 @@ namespace {
// Notice that we just combined the api key with the url together here, because
// if we use the standard {url: key} format Chromium would override our key with
// the predefined one in common.gypi of libchromiumcontent, which is empty.
const char* kGeolocationProviderUrl =
const char* kGeolocationProviderURL =
"https://www.googleapis.com/geolocation/v1/geolocate?key="
GOOGLEAPIS_API_KEY;
@@ -35,11 +35,11 @@ void AtomAccessTokenStore::LoadAccessTokens(
const LoadAccessTokensCallbackType& callback) {
AccessTokenSet access_token_set;
// Equivelent to access_token_set[kGeolocationProviderUrl].
// Equivelent to access_token_set[kGeolocationProviderURL].
// Somehow base::string16 is causing compilation errors when used in a pair
// of std::map on Linux, this can work around it.
std::pair<GURL, base::string16> token_pair;
token_pair.first = GURL(kGeolocationProviderUrl);
token_pair.first = GURL(kGeolocationProviderURL);
access_token_set.insert(token_pair);
auto browser_context = AtomBrowserMainParts::Get()->browser_context();

Some files were not shown because too many files have changed in this diff Show More