Compare commits

..

1496 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
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
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
Cheng Zhao
619a397ec9 Bump v0.33.1 2015-09-22 15:13:50 +08:00
Cheng Zhao
889d7c1e02 Merge pull request #2866 from atom/no-expose-setimmediate
No more exposing setImmediate as local variable
2015-09-22 15:10:44 +08:00
Cheng Zhao
4cccce6bfe spec: Suppress beginFrameSubscription for now
Since the callback is called asynchronously there is no way to prevent
the callback from being called twice.
2015-09-22 14:55:35 +08:00
Cheng Zhao
4a91972037 spec: Revert back to original behavior of setImmediate 2015-09-22 14:40:48 +08:00
Cheng Zhao
42515c6f41 No more need of manually setting process as local variable 2015-09-22 14:30:54 +08:00
Cheng Zhao
eccb5e7590 Don't make setImmediate a local variable
It makes more troubles than benefits, and somehow it is slowing message
loop down.
2015-09-22 14:29:21 +08:00
Cheng Zhao
008af00044 Merge pull request #2852 from deepak1556/web_frame_scheme_api_patch
webframe: api to register scheme as privileged
2015-09-22 09:59:24 +08:00
Robo
325feca864 webframe: api to register scheme as privileged 2015-09-21 22:59:59 +05:30
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
Cheng Zhao
62d64e7528 Merge pull request #2829 from nekuz0r/enhanced-redirect-event
More infos on did-get-redirect-request event
2015-09-21 21:15:13 +08:00
Gohy Leandre
477103191f Add http_response_code, method, referrer, response_headers to did-get-redirect-request event. 2015-09-21 09:51:58 +02: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
Cheng Zhao
01a3bf5881 Merge pull request #2837 from rhencke/patch-1
Fix small typo in debug message.
2015-09-21 11:49:33 +08:00
Cheng Zhao
a69c9600ce Merge pull request #2836 from Ingramz/patch-1
Fix a typo
2015-09-21 11:46:28 +08:00
Cheng Zhao
a567d7a0b6 spec: Suppress beginFrameSubscription on CI 2015-09-21 11:43:10 +08:00
Cheng Zhao
7807d878d2 spec: Add timeout for beginFrameSubscription 2015-09-21 11:37:35 +08:00
Cheng Zhao
a69121fc24 Merge pull request #2834 from preco21/master
Update as upstream, change name the translation folder
2015-09-21 11:35:37 +08:00
Cheng Zhao
be600fda55 spec: Prevent callback of beginFrameSubscription being called twice 2015-09-21 11:24:05 +08:00
Cheng Zhao
35fc8885de Merge pull request #2847 from atom/add-chromium-license
Add Chromium's licenses to the dist
2015-09-21 11:05:45 +08:00
Cheng Zhao
717e0f9821 Add Chromium's licenses to the dist 2015-09-21 10:18: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
Robert Hencke
76b7cd0908 Fix small typo in debug message. 2015-09-19 17:11:29 -04:00
Indrek Ardel
c626ee6e92 Fix a typo 2015-09-19 21:17:23 +03:00
Plusb Preco
94b6b92e4c Merge remote-tracking branch 'atom/master' 2015-09-19 15:32:20 +09:00
Plusb Preco
6cf6cb9a79 Update as upstream, change name the translation folder
* Update as upstream
* Change name the translation folder (ko to ko-KR)
2015-09-19 15:30:30 +09:00
Cheng Zhao
7bb9595b81 Merge pull request #2827 from atom/fix-2752
Move the BeginFrameSubscription method to WebContents
2015-09-18 19:29:17 +08:00
Cheng Zhao
f716d47e54 spec: Make the will-navigate test run faster 2015-09-18 18:57:48 +08:00
Cheng Zhao
353cdd967a spec: Add test for webContents.beginFrameSubscription 2015-09-18 18:51:49 +08:00
Cheng Zhao
32bff05208 docs: <webview>.sendInputEvent 2015-09-18 18:32:21 +08:00
Cheng Zhao
b8d50f3a3a spec: Add test for sendInputEvent 2015-09-18 18:28:34 +08:00
Cheng Zhao
7b2980434c Fix wrong return values in a few converters 2015-09-18 18:21:51 +08:00
Cheng Zhao
ff0e15bf58 Expose sendInputEvent in webview 2015-09-18 17:55:42 +08:00
Cheng Zhao
1e918480b4 docs: webContents.beginFrameSubscription 2015-09-18 17:53:19 +08:00
Cheng Zhao
573892c112 docs: webContents.sendInputEvent 2015-09-18 17:44:11 +08:00
Cheng Zhao
86f523d3c1 Move BeginFrameSubscription to WebContents 2015-09-18 15:57:43 +08:00
Cheng Zhao
42863e4700 Move SendInputEvent to WebContents 2015-09-18 14:20:31 +08:00
Cheng Zhao
9e7de78231 Fix cpplint warnings 2015-09-18 14:12:48 +08:00
Cheng Zhao
c550546ff1 Do not manually convert Object to WebInputEvent 2015-09-18 14:09:31 +08:00
Cheng Zhao
5a599cb6ff Sequence of definitions should follow the declarations 2015-09-18 13:49:33 +08:00
Cheng Zhao
84ce441fb6 Add converters for WebInputEvent 2015-09-18 13:33:06 +08:00
Cheng Zhao
d7bac5a10b Remove the offscreen-render option
We are going to move the APIs to WebContents
2015-09-18 12:15:13 +08:00
Cheng Zhao
ec90d03d74 Fix compilation error 2015-09-18 12:10:00 +08:00
Cheng Zhao
ee0d48dc5a Merge branch 'master' of https://github.com/MaxWhere/electron into MaxWhere-master 2015-09-18 12:01:33 +08:00
Cheng Zhao
15394b9a3b Merge pull request #2825 from atom/blink-converter
Move the converters for blink structures to another file
2015-09-18 11:27:49 +08:00
Cheng Zhao
5aa7cf7a30 Fix cpplint warning 2015-09-18 11:10:32 +08:00
Cheng Zhao
7dc7ee1c41 Move the converters for blink structures to another file
It makes the api::WebContents smaller.
2015-09-18 11:06:38 +08:00
Cheng Zhao
96d35ec29e Merge pull request #2802 from nekuz0r/device-emulation
Add device emulation
2015-09-18 10:43:17 +08:00
Cheng Zhao
91796e7095 Merge pull request #2819 from IonicaBizauKitchen/hash
Fix the git commit messages hash link
2015-09-18 10:25:31 +08:00
Cheng Zhao
75b0d0cd6c Merge pull request #2818 from IonicaBizauKitchen/require
Fixed the mapNumbers require call
2015-09-18 10:25:10 +08:00
Gohy Leandre
6b875110ed Add device emulation API 2015-09-17 13:50:36 +02:00
Cheng Zhao
1348e18a81 Bump v0.33.0 2015-09-17 18:31:12 +08:00
Cheng Zhao
c700c58793 Merge pull request #2817 from atom/fix-set-immediate
Update to node v4.1.0
2015-09-17 18:27:53 +08:00
Ionică Bizău
a46cb8cebb Fix the git commit messages hash link 2015-09-17 12:34:15 +03:00
Ionică Bizău
01ed2c4222 Fixed the mapNumbers require call
Since mapNumber.js is a file, we should prefix it with "./", otherwise an error is thrown.
2015-09-17 12:24:12 +03:00
Cheng Zhao
d28789b509 Change version to v0.32.4
This makes sure the native modules are built against the headers of
v0.32.4, since Node.js v4.1.0 has bumped the module version.
2015-09-17 16:48:53 +08:00
Cheng Zhao
2be6bdcf4a Update to node v4.1.0 2015-09-17 16:06:35 +08:00
Cheng Zhao
5604655d54 spec: vm.createContext should not crash 2015-09-17 16:06:19 +08:00
Cheng Zhao
93639a080c spec: setImmediate should work in forked scripts 2015-09-17 15:12:15 +08:00
Cheng Zhao
e30dd943db Update brightray for #2808 2015-09-17 15:01:33 +08:00
Cheng Zhao
a386bb4edf Merge pull request #2815 from atom/release-resources
Release the resources of native window immediately when it is closed
2015-09-17 14:56:21 +08:00
Plusb Preco
ce8eb4a32c Merge remote-tracking branch 'atom/master' 2015-09-17 14:35:10 +09:00
Cheng Zhao
e73c655d65 No need to delete window in Destory
The native window is now automatically deleted after it gets closed.
2015-09-17 11:32:19 +08:00
Cheng Zhao
e3c64d7971 Release the native window after window gets closed
Previously we delete the window after the JS object gets garbage
collected, which is too late for releasing some resources.
2015-09-17 11:30:17 +08:00
Cheng Zhao
9fd5a64cd8 Update brightray to unsubscribe from NSNotificationCenter 2015-09-17 11:25:27 +08:00
Cheng Zhao
ec7ea3005d Merge pull request #2800 from seanchas116/app-getlocale
App app.getLocale() API to get application locale
2015-09-16 23:25:25 +08:00
Cheng Zhao
3f881e8617 Merge pull request #2798 from jonatasfreitasv/master
Three api docs translated to pt-BR
2015-09-16 23:18:28 +08:00
Eran Tiktin
25a2f28501 Merge pull request #3 from atom/master
Update from original
2015-09-16 18:03:20 +03:00
Cheng Zhao
cb13d8bdc7 Update brightray for #2790 2015-09-16 19:59:03 +08:00
Cheng Zhao
11ee2c47d0 Merge pull request #2789 from deepak1556/protocol_response_headers_patch
protocol: respect provided mimetype in generated response headers
2015-09-16 19:50:33 +08:00
Ryohei Ikegami
7b75b29265 Add docs for app.getLocale() 2015-09-16 17:17:49 +09:00
Ryohei Ikegami
b9c274929b Add app.getLocale() 2015-09-16 17:16:21 +09:00
Jonatas Freitas
842ec3d11b pt-BR README.md updated. 2015-09-16 00:39:14 -03:00
Jonatas Freitas
244e184b7e api/shell translated to pt-BR 2015-09-16 00:36:43 -03:00
Jonatas Freitas
a3a9bbb979 api/process.md translated to pt-BR 2015-09-16 00:10:35 -03:00
Robo
57c910faef protocol: respect provided mimetype in generated response headers 2015-09-16 08:34:04 +05:30
Heilig Benedek
90064eeddd Returning to original native_mate. 2015-09-16 03:29:23 +02:00
Cheng Zhao
08f5c32306 script: Call Electron binary from Debug build
We usually don't build Release version on the development machine.
2015-09-16 09:21:55 +08:00
Cheng Zhao
69cc3ab5ef docs: Make description of fullscreen more precise
Closes #2793.
2015-09-16 09:20:16 +08:00
Heilig Benedek
5269380b6d Removed duplicate keydown event sending. 2015-09-16 03:12:49 +02:00
Cheng Zhao
d8f77e5134 Merge pull request #2796 from atom/fix-wrong-check-activate-event
Fix a wrong check in emitting 'activate-with-no-open-windows' event.
2015-09-16 09:04:33 +08:00
Heilig Benedek
ceef06b344 Renamed setOffscreenRender to begin/endFrameSubscription because the name was a bit misleading, and replaced the ArrayBuffer creation with a node::Buffer::New call. 2015-09-16 02:59:16 +02:00
Haojian Wu
a3e9ff67b0 Fix a wrong check in emitting 'activate-with-no-open-windows' event. 2015-09-16 08:36:01 +08:00
Cheng Zhao
ae776b523c Merge pull request #2784 from neutrous/patch-1
Update quick-start.md for zh-CN
2015-09-15 21:28:59 +08:00
Cheng Zhao
10b1ea7244 Bump v0.32.3 2015-09-15 15:30:22 +08:00
Cheng Zhao
6615787775 Update node, fixes #2786 2015-09-15 15:19:43 +08:00
Cheng Zhao
cf6008a05e Merge pull request #2787 from atom/test
Fix a few failing specs on the CI machine with OS X 10.10 SDK
2015-09-15 15:02:08 +08:00
Cheng Zhao
f1787d747a The crash-reporter test is not reliable on CI machine 2015-09-15 14:43:11 +08:00
Cheng Zhao
eced01eb9d spec: Delay timeout of window.opener test 2015-09-15 14:37:27 +08:00
Cheng Zhao
357c7af3c0 spec: Check existence of webview before removing it 2015-09-15 13:45:26 +08:00
Cheng Zhao
817363b955 spec: Run tests on OS X CI machine 2015-09-15 13:42:44 +08:00
Cheng Zhao
311a5456ec Make crash-reporter spec more reliable 2015-09-15 13:18:01 +08:00
Cheng Zhao
3cf34fe40f Merge pull request #2785 from atom/fix-devtools-extension
Add BrowserWindow.isDevToolsFocused and fix "devtools-focused" not working
2015-09-15 12:56:36 +08:00
Cheng Zhao
2a3a65f67c Update brightray to use 10.10 SDK 2015-09-15 12:15:15 +08:00
Cheng Zhao
c9ee6b4caf docs: BrowserWindow.isDevToolsFocused 2015-09-15 11:43:45 +08:00
Cheng Zhao
b72a5884f2 Add BrowserWindow.isDevToolsFocused 2015-09-15 11:43:45 +08:00
Cheng Zhao
97857aa152 Update brightray for DevToolsFocused fix 2015-09-15 11:43:45 +08:00
Cheng Zhao
fe2219a635 Merge pull request #2777 from atom/dock-clicked
Implement 'activate' event for app.
2015-09-15 11:17:41 +08:00
Wujg
c99ec368b3 Update quick-start.md for zh-CN
Fixed some typo.
2015-09-15 11:15:11 +08:00
Haojian Wu
9652ed6508 More fixes after code review. 2015-09-14 19:43:21 -07:00
Cheng Zhao
dc59b4fa06 Merge pull request #2783 from atom/fix-devtools-extension
Fix `BrowserWindow.addDevToolsExtension` not working
2015-09-15 10:38:02 +08:00
Cheng Zhao
a1ccfdf777 Merge pull request #2782 from preco21/master
Update as upstream
2015-09-15 09:46:13 +08:00
Haojian Wu
40d93ce55a Deprecate 'activate-with-no-open-windows' event. 2015-09-14 18:36:05 -07:00
Haojian Wu
377e7ee3a7 Implement 'activiate' event instead of 'activate-with-open-windows'. 2015-09-14 18:34:27 -07:00
Cheng Zhao
8a8b11cf10 Do not use did-finish-load to detect whether WebContents is ready
The WebContents JS object can be created way later after the C++ object
gets created.
2015-09-15 09:21:15 +08:00
Cheng Zhao
e656d8428c Make getUrl work for devToolsWebContents 2015-09-15 09:20:56 +08:00
Cheng Zhao
238d4add99 devtools-opened should be emitted after devtools is opened 2015-09-15 09:18:22 +08:00
Cheng Zhao
3bf73bc455 Expose native implementation of WebContent::GetURL 2015-09-15 09:18:14 +08:00
Plusb Preco
9134b9cf43 Update as upstream 2015-09-15 09:50:28 +09:00
Plusb Preco
dd7036035a Merge remote-tracking branch 'atom/master' 2015-09-15 09:50:11 +09:00
Cheng Zhao
6bae0bada0 Merge pull request #2776 from jaanus/osx-window-titlebar
Implements #2734 “New API to configure BrowserWindow title bar on Mac”
2015-09-14 23:07:06 +08:00
Cheng Zhao
f140f35910 Expose experiment APIs 2015-09-14 22:59:49 +08:00
Cheng Zhao
a5dc911a05 Correctly set user agent for devtools 2015-09-14 22:55:29 +08:00
jaanus
5d8f1dd404 Implements #2734 “New API to configure BrowserWindow title bar on Mac”
New API supported on Yosemite 10.10 and newer.
2015-09-14 16:50:00 +02:00
Cheng Zhao
409b0b54e0 spec: Increate timeout for webview tests 2015-09-14 21:13:24 +08:00
Haojian Wu
c006c4efa4 Mention 'activate-with-no-open-windows' on OS X only. 2015-09-14 20:34:45 +08:00
Haojian Wu
3ad5d17612 [OS X] Implement 'activate-with-open-windows' event for app. 2015-09-14 20:32:50 +08:00
Cheng Zhao
4d28fbf561 Update brightray for atom/brightray#140 2015-09-14 19:24:54 +08:00
Cheng Zhao
1533d97e16 Merge pull request #2774 from atom/browser-window-created
Add browser-window-created event for app module
2015-09-14 17:44:50 +08:00
Cheng Zhao
ca8943c4ba spec: browser-window-created event 2015-09-14 17:02:45 +08:00
Cheng Zhao
8534ff4526 docs: browser-window-created event 2015-09-14 17:02:36 +08:00
Cheng Zhao
c346fcb326 Emit browser-window-created when window is created 2015-09-14 17:02:24 +08:00
Cheng Zhao
9e7b67802c Merge pull request #2773 from atom/require-global
Make sure global symbols of Node.js is always available in preload script
2015-09-14 16:45:27 +08:00
Cheng Zhao
9d366e6c5c Make global.setImmediate work in browser process 2015-09-14 16:34:58 +08:00
Cheng Zhao
d2e52fb6bb Set global.setImmediate 2015-09-14 16:25:43 +08:00
Cheng Zhao
baacc939f6 spec: node symbols should always be available in preload script 2015-09-14 16:05:58 +08:00
Cheng Zhao
3bd16a5ecd No more need to override setImmediate
It is now done in Node.js.
2015-09-14 15:47:39 +08:00
Cheng Zhao
7c3d3e4a87 Update node to pass all globals through "require" 2015-09-14 15:46:46 +08:00
Plusb Preco
e388163d33 Update as upstream 2015-09-14 08:07:24 +09:00
Jonatas Freitas
654626305c Documentation api/accelerator translated to pt-BR 2015-09-11 13:28:34 -03:00
Cheng Zhao
989799633d Merge pull request #2762 from GoooIce/master
Add docs-translations\api\ global-shortcut.md and accelerator.md for zh-CN
2015-09-11 21:09:07 +08:00
Cheng Zhao
bf01112acd Merge pull request #2764 from tomashanacek/master
docs: Fix role hideothers, unhide typo
2015-09-11 21:06:26 +08:00
Tomáš Hanáček
af5262630a docs: Fix role hideothers, unhide typo 2015-09-11 14:26:48 +02:00
王雪
a1cd806955 Merge pull request #3 from atom/master
更新一下啊
2015-09-11 18:38:10 +08:00
GoooIce
ff67fae9ef Add api\accelerator.md
Add api\accelerator.md
2015-09-11 17:27:20 +08:00
Cheng Zhao
b80aab3cf2 Merge pull request #2760 from preco21/master
Update as upstream, add new translated docs, fix typos,
2015-09-11 17:06:48 +08:00
Plusb Preco
750d3e979c Add session.md as translated, mark untranslated files in README.md 2015-09-11 13:30:37 +09:00
Plusb Preco
c3664463ab Update as upstream, fix typos 2015-09-11 11:56:36 +09:00
Plusb Preco
c6395c2197 Merge remote-tracking branch 'atom/master' 2015-09-11 11:56:11 +09:00
Jessica Lord
39bd10d1ef Merge pull request #2757 from atom/jl-web-contents-links
Update Documentation Links to web-contents
2015-09-10 14:48:33 -07:00
Jessica Lord
9eca0f82de Merge pull request #2751 from atom/jl-bw-prop
Create Instance Properties Section in BrowserWindow
2015-09-10 14:47:38 -07:00
Jessica Lord
4b8472d3b4 Merge pull request #2756 from GoooIce/master
Add docs-translations\api\shell.md for zh-CN
2015-09-10 12:47:05 -07:00
Jessica Lord
aae2d82c28 Update links to web-contents.md 2015-09-10 12:19:37 -07:00
Jessica Lord
6cfe43a644 Merge branch 'patch-1' of https://github.com/destan/electron into destan-patch-1 2015-09-10 12:13:21 -07:00
Jessica Lord
2ac2392a6b 🔥 extra line 2015-09-10 12:11:40 -07:00
Jessica Lord
7c287d565d Resolve conflicts 2015-09-10 12:09:37 -07:00
Paul Betts
31775aa049 Fix harder 2015-09-10 11:00:43 -07:00
Paul Betts
9ca85a7859 Fix electron-rebuild instructions for Win32 2015-09-10 10:57:08 -07:00
Jessica Lord
b861a174ca Merge pull request #2750 from atom/jl-doc-bits
A Few More Documentation Things
2015-09-10 10:41:42 -07:00
GoooIce
92f7899c60 Add api\global-shortcut.md
Add api\global-shortcut.md
2015-09-10 22:29:22 +08:00
王雪
572199068b Merge pull request #2 from atom/master
更新一下啊
2015-09-10 20:39:22 +08:00
GoooIce
32a66fa94e add api\shell.md
add api\shell.md
2015-09-10 20:27:50 +08:00
Cheng Zhao
60522e0d68 Bump v0.32.2 2015-09-10 16:27:15 +08:00
Cheng Zhao
708526baec Merge pull request #2754 from atom/fix-node-integration
Fix "node-integration" not working in "web-preferences"
2015-09-10 16:26:12 +08:00
Cheng Zhao
ae2f754d10 No need to set menu in spec window 2015-09-10 16:01:04 +08:00
Cheng Zhao
143453b603 Update native-mate to fix the behavior of Dictionary::Get 2015-09-10 15:58:10 +08:00
Cheng Zhao
d4cbf7cadb spec: node-integration should work in web-preferences 2015-09-10 15:57:16 +08:00
GoooIce
3ee854d9a3 Merge branch 'master' of https://github.com/GoooIce/electron 2015-09-10 14:34:11 +08:00
王雪
442b0d5df3 Merge pull request #1 from atom/master
更新一下啊
2015-09-10 14:37:05 +08:00
GoooIce
c8954ff32c Merge remote-tracking branch 'atom/master' 2015-09-10 14:27:16 +08:00
Cheng Zhao
6321a3898c Merge pull request #2748 from etiktin/patch-1
Update README.md
2015-09-10 11:18:24 +08:00
Cheng Zhao
70af2e0bee osx: Don't warn about unkown warning option
We can not make every compiler happy.
2015-09-10 11:15:35 +08:00
Cheng Zhao
626c7d1090 Merge pull request #2747 from nekuz0r/did-fail-event-url
add ValidatedUrl to did-fail-load event
2015-09-10 11:02:01 +08:00
Heilig Benedek
1497e7e2ac Whoops, missed a line last time. 2015-09-10 02:24:08 +02:00
Heilig Benedek
69769f9319 Resetting debug changes 2015-09-10 02:23:12 +02:00
Heilig Benedek
f807a8f1e7 Reset native-mate to the original repo 2015-09-10 02:16:41 +02:00
Heilig Benedek
b2af370249 Changed StringArray options to regular js objects with boolean values for better readability from the js side 2015-09-10 02:10:47 +02:00
Jessica Lord
c29a2e4992 Standardize DevTools 2015-09-09 14:11:06 -07:00
Jessica Lord
279fd0a461 Standardize **Note:** 2015-09-09 14:09:14 -07:00
Jessica Lord
1a35d6bda6 🔥 extra lines 2015-09-09 14:00:37 -07:00
Jessica Lord
5593717d78 Create Instance Properties section 2015-09-09 13:57:35 -07:00
Jessica Lord
6abc4fb255 🔥 odd, stray + 2015-09-09 13:48:04 -07:00
Jessica Lord
e9712e2998 Add section on documentation translations 2015-09-09 13:33:11 -07:00
Jessica Lord
ce49bba2fc Add section links 2015-09-09 13:32:56 -07:00
Eran Tiktin
5089929be8 Update README.md
Capitalized the "Formerly known..." text + rearranged the community section and mention the slack channel.
2015-09-09 21:34:20 +03:00
Gohy Leandre
590be75fa9 add ValidatedUrl to did-fail-load event 2015-09-09 15:56:16 +02:00
Jessica Lord
0046970805 Merge pull request #2713 from etiktin/fix_es_translation_links
Fix es translation links
2015-09-09 06:47:26 -07:00
Cheng Zhao
9dc6cfc1e9 Bump v0.32.1 2015-09-09 19:39:42 +08:00
Cheng Zhao
749a1a3e9a Merge pull request #2746 from atom/no-keep
Fix session not getting persisted on exit
2015-09-09 19:39:20 +08:00
Cheng Zhao
93bbc0bca9 Don't reference RequestContextGetter in JS objects
V8 doesn't guarrentee the C++ class of JS objects will get destroyed, so
this will result in RequestContextGetter never getting freed
2015-09-09 19:27:28 +08:00
Cheng Zhao
9d51da505e Run destruction callbacks before message loop gets destroyed 2015-09-09 19:27:08 +08:00
Destan Sarpkaya
e48f5ea1aa update broken link 2015-09-09 14:06:33 +03:00
Cheng Zhao
e5496d9ac0 Merge pull request #2743 from atom/fix-backward-compatibility
Fix backward compatibility with old BrowserWindow options
2015-09-09 16:25:03 +08:00
Cheng Zhao
c2b2a2072f spec: Set node-integration in window.open should work 2015-09-09 16:11:45 +08:00
Cheng Zhao
446235c8cd Fix backward compatibility with old BrowserWindow options 2015-09-09 15:55:26 +08:00
Cheng Zhao
530b040ade Merge pull request #2732 from John-Lin/master
Add doc translation in zh-TW
2015-09-09 15:41:06 +08:00
Cheng Zhao
375ac3e6ec Update brightray, fixes #2669 2015-09-09 13:35:07 +08:00
John-Lin
a200718944 add doc translation for synopsis 2015-09-08 15:47:29 +08:00
John-Lin
ba02e19fae add doc translation for process 2015-09-08 15:47:11 +08:00
John-Lin
8e1979a6a5 add doc translation for file object 2015-09-08 15:46:48 +08:00
Cheng Zhao
e5386cf8ea Bump v0.32.0 2015-09-08 13:40:10 +08:00
Cheng Zhao
e597229750 Merge pull request #2711 from jonatasfreitasv/master
application-distribution.md translated to pt-BR
2015-09-08 13:36:28 +08:00
Cheng Zhao
8b3ed9067e Merge pull request #2725 from John-Lin/master
Add doc translation in zh-TW
2015-09-08 13:34:14 +08:00
Cheng Zhao
40d4c65866 Merge pull request #2730 from preco21/master
Update as upstream
2015-09-08 13:24:42 +08:00
Cheng Zhao
1ca6534dcd Merge pull request #2712 from etiktin/add_chrome_version_2_gitignore
Fix `create_chrome_version_h` so it will generate chrome_version.h only if needed
2015-09-08 13:24:12 +08:00
Cheng Zhao
830bb54d6a Merge pull request #2731 from deepak1556/cleanup_patch
remove unused code
2015-09-08 13:23:23 +08:00
Robo
785eb9657b remove unused code 2015-09-08 05:24:07 +05:30
Plusb Preco
21bd578935 Update README-ko.md 2015-09-08 08:50:59 +09:00
Plusb Preco
1e0facc103 Update as upstream 2015-09-08 08:42:28 +09:00
Eran Tiktin
db3e27ceaa Fix create_chrome_version_h in bootstrap.py
The code was supposed to compare the content of the existing file with
the new content and only replace the file if the content was different,
but it had a fatal flow. It opened the existing file with 'w+' or 'wb+'
and they both truncate the file, so the compare was always false and we
always overwrote the file.
The updated code compares the file content ignoring line endings and
writes the file only if its different or if it didn't exist.
2015-09-07 21:55:02 +03:00
Eran Tiktin
b521e45ef8 Revert "Remove chrome_version.h from git"
This reverts commit dcbd8316df.
2015-09-07 19:51:37 +03:00
Eran Tiktin
ad6e67fdfa Revert "Add chrome_version.h to gitignore"
This reverts commit 41e1555cf4.
2015-09-07 19:51:28 +03:00
Cheng Zhao
564b74b19c Merge pull request #2726 from atom/fix-stdout
Fix exception when accessing process.stdout
2015-09-07 23:02:56 +08:00
Cheng Zhao
62b1034c6b Suppress the isTTY spec, not reliable on some machines 2015-09-07 22:42:46 +08:00
Cheng Zhao
4412a89270 Explicitly writes debug log to stderr
If we don't do this Chromium will close stdout and stderr for us,
resulting process.stdout not working.
2015-09-07 21:45:43 +08:00
Cheng Zhao
d4aa2308cd Update node to catch exception when accessing process.stdout 2015-09-07 21:45:27 +08:00
Cheng Zhao
8912b404a9 spec: process.stdout should have isTTY defined 2015-09-07 21:37:17 +08:00
Cheng Zhao
d7ec0b99fd spec: process.stdout should not throw exception 2015-09-07 21:37:17 +08:00
Cheng Zhao
87e02f2858 Merge pull request #2723 from atom/cleanup
A few unimportant code cleanups
2015-09-07 17:57:48 +08:00
John-Lin
66f7f2e6f2 add doc translation for power-save-blocker.md 2015-09-07 17:36:33 +08:00
John-Lin
13722e26cd add doc translation for power-monitor.md 2015-09-07 17:36:14 +08:00
Cheng Zhao
e365cb6b1c No longer needs to define node_includes.h at last 2015-09-07 16:41:49 +08:00
Cheng Zhao
46b2b91a27 Don't use Node's internal APIs 2015-09-07 16:41:49 +08:00
Cheng Zhao
24bbe5dabf No need to define WebContentsPreferences::From 2015-09-07 16:16:34 +08:00
Cheng Zhao
3717f5b7f2 Merge pull request #2722 from atom/fix-array-buffer
Support creating externalized ArrayBuffer for node::Buffer
2015-09-07 13:20:19 +08:00
Cheng Zhao
10bc0c20b1 Update libchromiumcontent to have WebArrayBuffer::createExternal API 2015-09-07 11:18:11 +08:00
Cheng Zhao
0a4fb2ec4f Support externalized ArrayBuffer for node::Buffer 2015-09-07 11:12:42 +08:00
Cheng Zhao
8cc1046992 Update to io.js 3.3.0 2015-09-07 11:05:27 +08:00
Plusb Preco
3669113ad2 Merge remote-tracking branch 'atom/master' 2015-09-07 11:47:04 +09:00
Cheng Zhao
aad1f5082f Merge pull request #2719 from Rokt33r/patch-1
fix typo
2015-09-06 16:18:48 +08:00
Jonatas Freitas
f56d715104 Translated application-packaging.md to pt-BR. 2015-09-06 01:27:34 -03:00
Cheng Zhao
cd12dbd47e Merge pull request #2718 from atom/all-in-webcontents
Cleanup code of Session and WebContents
2015-09-06 12:22:20 +08:00
Cheng Zhao
5830532a45 Merge pull request #2704 from preco21/master
Update as upstream
2015-09-06 12:21:14 +08:00
Dick Choi
4537d88a58 fix typo
Code block should be ended ``
2015-09-06 12:36:27 +09:00
Cheng Zhao
342e0c6cf7 Remove dead code 2015-09-06 11:13:41 +08:00
Cheng Zhao
512f89910d docs: No more extra-plugin-dirs 2015-09-06 11:07:38 +08:00
Cheng Zhao
e2bd1abce6 Make sure BrowserContext is destroyed on exit 2015-09-06 10:54:34 +08:00
Cheng Zhao
5eb0bedbbc Parse partition in webContents.create 2015-09-06 10:54:34 +08:00
Cheng Zhao
2454dccde0 docs: preload, node-integration, zoom-factor have been moved 2015-09-06 10:54:34 +08:00
Cheng Zhao
0b1a3f3ef3 Manage the life of BrowserContext in Session 2015-09-06 10:54:34 +08:00
Cheng Zhao
fafb28e41a Move management of browser context to BrowserContext 2015-09-06 10:54:34 +08:00
Cheng Zhao
ba25bed45b Store BrowserContext in ref-counted ptr 2015-09-06 10:54:34 +08:00
Cheng Zhao
3773f81fd5 Pass partition name instead of path to BrowserContext 2015-09-06 10:53:39 +08:00
Cheng Zhao
f2bdca31b3 spec: webview test should avoid affecting each other 2015-09-06 10:53:03 +08:00
Cheng Zhao
9c235509a6 Read guest view's info from WebContentsPreferences 2015-09-06 10:53:03 +08:00
Cheng Zhao
b1afe538ee Add undocumented "preload-url" option for web-preferences 2015-09-06 10:53:03 +08:00
Cheng Zhao
0b97d58a6f Move a few options in NativeWindow to web-preferences 2015-09-06 10:53:03 +08:00
Cheng Zhao
880dce950d Move OverrideWebkitPrefs to WebContentsPreferences 2015-09-06 10:53:03 +08:00
Cheng Zhao
39975378bb Move AppendExtraCommandLineSwitches to WebContentsPreferences 2015-09-06 10:53:03 +08:00
Cheng Zhao
96771c7098 NPAPI has been removed, remove related option 2015-09-06 10:53:03 +08:00
Cheng Zhao
0e92a3e333 Use options['web-preferences'] to create WebContents 2015-09-06 10:53:03 +08:00
Cheng Zhao
dd871812b7 Add WebContentsPrefrences class 2015-09-06 10:53:03 +08:00
Cheng Zhao
81d423c547 Merge pull request #2710 from etiktin/fix_build_failing_on_windows
Fix build failing on windows
2015-09-06 10:52:30 +08:00
Jonatas Freitas
943fe2c22d Change file names to follow styleguide 2015-09-05 23:32:51 -03:00
Plusb Preco
38e948f55b Fix small typo 2015-09-05 09:42:28 +09:00
Plusb Preco
3e4ad4c696 Update README-ko.md 2015-09-05 09:38:36 +09:00
Eran Tiktin
0bc8e7b787 Update README.md
Most of the links in the page were invalid because those docs aren't translated yet, so I changed them to point to the originals written in English. IMO that's a better experience than receiving 404.
2015-09-05 01:40:26 +03:00
Eran Tiktin
a8d56df41e Drop "-es" from file names
When "README.md" is named "README-es.md", github doesn't show it's
preview automatically. So I removed "-es" from all the docs.
2015-09-05 01:29:12 +03:00
Eran Tiktin
41e1555cf4 Add chrome_version.h to gitignore 2015-09-05 01:11:37 +03:00
Eran Tiktin
dcbd8316df Remove chrome_version.h from git
chrome_version.h is dynamically generated by bootstrap.py so it
shouldn't be in git
2015-09-05 01:06:52 +03:00
Jonatas Freitas
1a1b45e088 application-distribution.md translated to pt-BR 2015-09-04 19:01:31 -03:00
Jessica Lord
b980650b6e Use headers so titles are linkable 2015-09-04 14:31:33 -07:00
Jessica Lord
b9da81ee6a Title Case 2015-09-04 13:50:26 -07:00
Jessica Lord
b797804fd9 Use "in" over "on" 2015-09-04 13:44:40 -07:00
Eran Tiktin
0577e911b3 Fix build failing on Windows
build.py would fail on Windows due to a couple of changes made in #2459.

This commit fixes those issues.
2015-09-04 23:24:42 +03:00
Jessica Lord
619c77f409 Merge pull request #2705 from John-Lin/master
Add api/ipc-main-process docs zh-TW translations
2015-09-04 12:02:49 -07:00
Jessica Lord
6c5c202a99 Merge pull request #2709 from jonatasfreitasv/master
Start docs translation to pt-BR
2015-09-04 11:39:26 -07:00
Eran Tiktin
090c817ac9 Merge pull request #2 from atom/master
Update from original
2015-09-04 21:27:32 +03:00
Jonatas Freitas
f91a7e6d04 Fix README links. 2015-09-04 14:25:32 -03:00
Jonatas Freitas
5d6ac2296b Translated styleguide. 2015-09-04 14:19:59 -03:00
Jonatas Freitas
26dea993df Added pt-BR translation in README.md 2015-09-04 11:52:27 -03:00
Jonatas Freitas
eb8ac2b5d8 Translate README.md to pt-BR 2015-09-04 11:42:37 -03:00
Plusb Preco
44528ce60e Merge remote-tracking branch 'atom/master' 2015-09-04 18:18:07 +09:00
Plusb Preco
e72e09719a Update web-view-tag.md
* Update as upstream
2015-09-04 18:05:28 +09:00
Cheng Zhao
6f9d822472 Merge pull request #2459 from deepak1556/web_view_partition_patch
webview: partition attribute
2015-09-04 17:29:37 +09:00
John-Lin
67026cccc8 Add api/shell.md docs zh-TW translations 2015-09-04 16:06:15 +08:00
John-Lin
30c714a27f Fix typos in zh-TW README docs 2015-09-04 15:47:46 +08:00
John-Lin
05031a38e5 Add api docs translations 2015-09-04 15:42:57 +08:00
Plusb Preco
ae8ffae59e Improve grammar, update as upstream 2015-09-04 16:01:43 +09:00
Plusb Preco
587a9f1c5b Merge remote-tracking branch 'atom/master' 2015-09-04 16:01:12 +09:00
Jessica Lord
bd264aa1ba Merge pull request #2700 from lockys/master
Add zh-tw translation of docs-translations/zh-TW/tutorial/online-offline-events.md
2015-09-03 11:59:21 -07:00
Jessica Lord
9557ce523a Merge pull request #2698 from fritx/docs-zh-cn
Add docs-translations for zh-CN
2015-09-03 11:58:58 -07:00
Calvin Jeng
f1e5a99881 zh-tw translation 2015-09-04 00:06:50 +08:00
Robo
03ba9533fb store webviewinfo as web contents userdata 2015-09-03 21:27:50 +05:30
Robo
8f59c0b642 create partitionId with encodedURIcomponent 2015-09-03 20:49:29 +05:30
Robo
da5bac42f3 use embedders' browser context when partition is not specified 2015-09-03 20:49:29 +05:30
Robo
150b540e72 add spec and docs 2015-09-03 20:49:29 +05:30
Robo
5189147021 use embedders' browser context to retrieve webviewmanager 2015-09-03 20:49:29 +05:30
Robo
d180d3b168 webview: fix partition attribute 2015-09-03 20:49:29 +05:30
Fritz Lin
3f546e6bab Add docs-translations for zh-CN
- development/coding-style
- development/atom-shell-vs-node-webkit
2015-09-03 22:27:22 +08:00
Cheng Zhao
c65ccb6857 Merge pull request #2685 from atom/chrome45
Upgrade to Chrome45
2015-09-03 21:17:49 +09:00
Plusb Preco
e3504b2b24 Merge remote-tracking branch 'atom/master' 2015-09-03 21:14:04 +09:00
Cheng Zhao
53b9d61831 Fix building on Windows 2015-09-03 20:07:29 +08:00
Cheng Zhao
2c3751e287 Merge pull request #2696 from John-Lin/master
Add Traditional Chinese documents link in README to navigate
2015-09-03 19:25:26 +09:00
Cheng Zhao
4a81300100 Merge pull request #2695 from takashi/patch-1
Fix jp/quick-start-jp.md
2015-09-03 19:24:58 +09:00
Takashi Nakagawa
73af4c017d remove -jp suffix from quick-start-jp.md 2015-09-03 18:17:51 +09:00
John-Lin
2734d67a38 add Traditional Chinese documents link in README to navigate 2015-09-03 17:10:32 +08:00
Cheng Zhao
c81de98d22 Update brightray to Chrome 45 2015-09-03 17:54:43 +09:00
Cheng Zhao
599e9b90bb Provide task runner for the node mode 2015-09-03 17:50:24 +09:00
Cheng Zhao
c1d7ad9631 Devtools no longer uses iframes 2015-09-03 17:50:24 +09:00
Cheng Zhao
ee0dc0d926 Update clang 2015-09-03 17:50:23 +09:00
Cheng Zhao
4254eb279f Fix API changes on Linux 2015-09-03 17:50:23 +09:00
Cheng Zhao
262b66b93a Feed gin::PerIsolateData with a task runner 2015-09-03 17:50:23 +09:00
Cheng Zhao
45491ca7ab Fix API changes 2015-09-03 17:50:23 +09:00
Cheng Zhao
1db843244d Upgrade to Chrome 45 2015-09-03 17:50:23 +09:00
Cheng Zhao
992aada90f Can only run tests on x64 machine 2015-09-03 17:48:50 +09:00
Cheng Zhao
c01d2fbbcd Suppress running tests on our OS X machine
It gets stuck and I don't know the reason, ignore it for now and work on
more important things, will fix it in future.
2015-09-03 17:46:44 +09:00
Cheng Zhao
f75458f78d Write output directly to stderr 2015-09-03 17:39:06 +09:00
Takashi Nakagawa
d6daea12af fix jp/quick-start-jp.md
this change includes some typo, misspelled things in jp/quick-start-jp.md
2015-09-03 17:19:12 +09:00
Cheng Zhao
28e5258a96 Merge pull request #2692 from John-Lin/master
Add zh-TW documents
2015-09-03 17:13:05 +09:00
Cheng Zhao
f6d6a2a4c3 Merge pull request #2688 from huangruichang/master
* add desktop-environment-integration.md and and online-offline-event…
2015-09-03 17:12:46 +09:00
Cheng Zhao
c56b78f0fa Merge pull request #2690 from preco21/master
Fix mistranslation, update as upstream
2015-09-03 17:12:30 +09:00
John-Lin
27b77a06ed Added zh-TW documents 2015-09-03 12:41:54 +08:00
Jessica Lord
357dea506a Merge pull request #2672 from atom/jl-docs-tuts
Standardize Docs: Tutorials
2015-09-02 19:46:58 -07:00
Jessica Lord
c2dcccf7c7 Merge pull request #2657 from atom/jl-std-docs-9
Standardize Docs: web-frame, web-view-tag, window-open
2015-09-02 18:44:32 -07:00
Jessica Lord
28764b0f77 Merge pull request #2664 from atom/jl-docs-dev
Standardize Docs: Development
2015-09-02 18:44:02 -07:00
Jessica Lord
66a1405d2b Fix conflict 2015-09-02 17:09:37 -07:00
Plusb Preco
b3eb6dc32b Update as upstream 2015-09-03 08:28:12 +09:00
Jessica Lord
3af2540fad Merge pull request #2693 from tcyrus/patch-1
Update browser-window.md
2015-09-02 13:42:06 -07:00
Timothy Cyrus
2f41641139 Update browser-window.md
Fix App Command Web Link
2015-09-02 15:44:51 -04:00
Jessica Lord
131cd9cff6 Merge master 2015-09-02 10:23:37 -07:00
Jessica Lord
bd20104e5a Merge master 2015-09-02 10:19:08 -07:00
Jessica Lord
2e5a539f57 Merge master 2015-09-02 09:57:29 -07:00
Jessica Lord
159b6ca611 Merge pull request #2655 from atom/jl-std-docs-7
Standardize Docs: protocol, remote, screen
2015-09-02 09:46:39 -07:00
Plusb Preco
3914ff2ac5 Fix many typos, update as upstream 2015-09-03 01:12:54 +09:00
Cheng Zhao
f12ccac17e Merge pull request #2686 from astoilkov/patch-4
Clarify Selenium and WebDriver documentation
2015-09-02 20:45:24 +08:00
Cheng Zhao
f8d40a88fb Merge pull request #2678 from vHanda/master
Linux Build Instructions: Add list of packages for fedora
2015-09-02 20:41:45 +08:00
huangruichang
e78db6ae07 * add desktop-environment-integration.md and and online-offline-events.md for zh-CN 2015-09-02 20:12:22 +08:00
Antonio Stoilkov
e71d2bd8e7 Clarify Selenium and WebDriver documentation 2015-09-02 14:18:17 +03:00
Plusb Preco
ba7ddd66a1 Merge remote-tracking branch 'atom/master' 2015-09-02 17:17:42 +09:00
Cheng Zhao
f5f3278ffa Bump v0.31.2 2015-09-02 11:12:01 +08:00
Cheng Zhao
bfa33de792 Merge pull request #2682 from atom/menu-item-role
Add "role" attribute for MenuItem
2015-09-02 10:30:41 +08:00
Jessica Lord
ae3ff4e1e3 Merge pull request #2656 from atom/jl-std-docs-8
Standardize Docs: shell, synopsis, tray
2015-09-01 19:10:10 -07:00
Jessica Lord
0fa0aedd86 Text edits 2015-09-01 19:08:31 -07:00
Jessica Lord
e6265ec405 Merge pull request #2654 from atom/jl-std-docs-6
Standardize Docs: native-image, power-monitor, power-save-blocker, process
2015-09-01 18:44:52 -07:00
Cheng Zhao
6bce5b560b docs: The "role" attribute of MenuItem 2015-09-02 09:44:01 +08:00
Cheng Zhao
009b27f5f1 Unify the menu of default app 2015-09-02 09:42:17 +08:00
Cheng Zhao
7d07f10c25 Assign actions for roles on Windows and Linux 2015-09-02 09:42:17 +08:00
Cheng Zhao
d830badc57 Add role property for MenuItem 2015-09-02 09:42:17 +08:00
Heilig Benedek
dbcd0a4235 Key event sending update. 2015-09-02 02:33:40 +02:00
Jessica Lord
47d103af72 Text edits 2015-09-01 16:21:29 -07:00
Jessica Lord
91c75d73dd Text edits 2015-09-01 15:42:10 -07:00
Jessica Lord
2ead38b03f Text edits on remote 2015-09-01 15:30:08 -07:00
Jessica Lord
dd2ed559cf Merge pull request #2638 from atom/jl-std-docs-5
Standardize Docs: menu, menu-item
2015-09-01 14:26:11 -07:00
Jessica Lord
ab726ec1f5 Merge pull request #2679 from carsonmcdonald/fixaddRecentDocumentlink
Fix link to app.addRecentDocument
2015-09-01 14:24:35 -07:00
Carson McDonald
2c47532702 Fix link to app.addRecentDocument 2015-09-01 17:15:21 -04:00
Jessica Lord
95133af0ee y required if x exists 2015-09-01 14:08:42 -07:00
Vishesh Handa
17cc43152d Linux Build Instructions: Add list of packages for fedora 2015-09-01 16:01:44 +02:00
Cheng Zhao
0cb20c48f6 docs: Small changes to will-download event 2015-09-01 20:16:28 +08:00
Cheng Zhao
4e7f56846f Merge pull request #2650 from deepak1556/webcontents_download_event_patch
app: add will-download event to defaultSession
2015-09-01 20:10:43 +08:00
Robo
4062ca5f68 implement wrapSession 2015-09-01 16:50:42 +05:30
Cheng Zhao
e043ea9c20 Merge pull request #2677 from atom/fix-more-pages-print
Fix print spooler hangs when printing more than 3 pages on Windows.
2015-09-01 19:07:01 +08:00
Haojian Wu
10b53f7f73 Fix print spooler hangs when printing more than 3 pages on Windows. 2015-09-01 17:55:45 +08:00
Cheng Zhao
7acd3c1973 Merge pull request #2675 from atom/improve-node-integration
Fix a few navigation related problems
2015-09-01 16:42:41 +08:00
Jessica Lord
889c982918 Source code structure as tree command 2015-08-31 21:49:05 -07:00
Cheng Zhao
c70513f7ce spec: window.opener.postMessage should set source and origin 2015-09-01 12:15:00 +08:00
Jessica Lord
691d8dd9ab Replace "Mac" with "OS X" 2015-08-31 21:13:05 -07:00
Jessica Lord
316210d6c4 Add $ notation 2015-08-31 21:10:48 -07:00
Cheng Zhao
dddb598818 spec: Node integration should work after POST 2015-09-01 11:51:28 +08:00
Cheng Zhao
50bfe9e335 Set source and origin correctly for window.opener.postMessage 2015-09-01 11:51:10 +08:00
Jessica Lord
a03df3ac5a "the" 2015-08-31 20:17:14 -07:00
Jessica Lord
05d0f17447 Updates from inline comments 2015-08-31 20:05:57 -07:00
Cheng Zhao
f31848563f Merge pull request #2670 from preco21/master
Update as upstream, improve grammar
2015-09-01 10:47:06 +08:00
Jessica Lord
d9c3830df7 Standardize selenium and webdriver 2015-08-31 19:32:25 -07:00
Jessica Lord
cb4558e75b Standardize pepper flash 2015-08-31 19:23:43 -07:00
Jessica Lord
be73388918 Standardize native modules 2015-08-31 19:22:06 -07:00
Jessica Lord
6a2bd80a9a Standardize quick-start 2015-08-31 19:18:46 -07:00
Jessica Lord
52916f70ed Standardize online-offline 2015-08-31 19:17:59 -07:00
Jessica Lord
a5234224a6 Standardize devtools 2015-08-31 19:17:41 -07:00
Jessica Lord
c6269bf77a Standardize desktop env integration 2015-08-31 19:13:27 -07:00
Jessica Lord
0e4ae6f864 Standardize debug main process 2015-08-31 19:12:57 -07:00
Jessica Lord
96bb9b2757 Standardize app packaging 2015-08-31 19:12:33 -07:00
Jessica Lord
e0a57a0a47 Standardize app dist 2015-08-31 19:10:29 -07:00
Cheng Zhao
8cf1bc8457 Merge pull request #2665 from huangruichang/master
* add quick-start.md for zh-CN
2015-09-01 10:08:15 +08:00
Plusb Preco
eb3769f98e Update as upstream, improve grammar 2015-09-01 09:57:43 +09:00
Plusb Preco
afff32dc8d Improve grammar 2015-09-01 08:09:35 +09:00
Jessica Lord
ddee9f3e75 Merge pull request #2604 from atom/jl-std-docs-4
Standardize: global-shortcuts, ipc (main), ipc (render)
2015-08-31 11:01:57 -07:00
Heilig Benedek
3dd3fd9200 Merge branch 'master' of https://github.com/brenca/electron
Conflicts:
	atom/browser/api/atom_api_window.h
	atom/browser/native_window.cc
2015-08-31 18:46:29 +02:00
huangruichang
625ee387f3 * add quick-start.md for zh-CN 2015-09-01 00:34:00 +08:00
Heilig Benedek
c59c0bd5b3 Mouse event handling and keyboard event handling (not totally working yet) 2015-08-31 18:32:33 +02:00
Cheng Zhao
ebedb60684 Insert node integration for all main frames 2015-08-31 21:59:13 +08:00
Cheng Zhao
9ecc4bcb7d Fork renderer process for webview
Previously it was disabled because Chrome doesn't support swapping
renderer process before, it seeems to work fine now, so we enable it to
see how it goes.
2015-08-31 21:38:18 +08:00
Cheng Zhao
b205bd381e Merge pull request #2642 from deepak1556/app_api_patch
process: api to set file descriptor soft limit
2015-08-31 18:40:14 +08:00
Robo
af52eda0eb process: api to set file descriptor soft limit 2015-08-31 13:00:04 +05:30
Robo
aed487ef40 app: add will-download event to defaultSession 2015-08-31 12:57:56 +05:30
Cheng Zhao
50c7985ee2 Merge pull request #2658 from preco21/master
Improve grammar (KR), update as upstream
2015-08-31 14:35:57 +08:00
Cheng Zhao
00136a221f Merge pull request #2649 from fritx/docs-cn
Setting up docs translation in Chinese 👍
2015-08-31 14:30:40 +08:00
Plusb Preco
a6b86e924a Small changes
Improve grammar
2015-08-31 15:13:41 +09:00
Plusb Preco
ed01698444 Update as upstream 2015-08-31 15:11:06 +09:00
Plusb Preco
6459531bef Merge remote-tracking branch 'atom/master' 2015-08-31 14:58:17 +09:00
Cheng Zhao
49b15bd4f3 Merge pull request #2652 from SamyPesse/patch-1
Notes about server-side implementation of auto-updater
2015-08-31 13:50:29 +08:00
Plusb Preco
c67268a74f Improve grammar, update as upstream 2015-08-31 14:48:47 +09:00
Jessica Lord
2c79e9fd41 Standardize dir structure 2015-08-30 22:31:43 -07:00
Jessica Lord
29c865f0e1 Standardize symbol server 2015-08-30 22:31:25 -07:00
Jessica Lord
e0542945ce Standardize code style 2015-08-30 22:31:14 -07:00
Jessica Lord
842ba6aea6 Standardize overview 2015-08-30 22:31:07 -07:00
Jessica Lord
009e228218 Standardize build win 2015-08-30 22:30:36 -07:00
Jessica Lord
d93b6c1cae Standardize build mac 2015-08-30 22:30:23 -07:00
Jessica Lord
2206279846 Standardize build linux 2015-08-30 22:30:12 -07:00
Jessica Lord
1e5b7af490 Standardize atom vs nw 2015-08-30 22:30:01 -07:00
Jessica Lord
cb62afca23 Minor text edits 2015-08-30 21:10:02 -07:00
Jessica Lord
254cdc0e6c Text edits 2015-08-30 20:52:46 -07:00
Jessica Lord
2c6210cf9c Update code example 2015-08-30 20:52:37 -07:00
Fritz Lin
3d4f0dfc44 Move cn to zh-CN for future traditional Chinese translations
ref #2649
2015-08-31 11:02:37 +08:00
Cheng Zhao
874367e2c5 Merge pull request #2643 from etiktin/patch-6
Update web-frame.md phrasing
2015-08-31 09:57:42 +08:00
Cheng Zhao
22652860a2 Merge pull request #2641 from deepak1556/renderer_fork_navigation_patch
renderer: send referrer for all naviagtions
2015-08-31 09:56:04 +08:00
Cheng Zhao
87db1e8802 Merge pull request #2639 from appetizermonster/patch-1
Fix typo
2015-08-31 09:34:26 +08:00
Plusb Preco
8b6f3dc0aa Merge remote-tracking branch 'atom/master' 2015-08-31 09:55:35 +09:00
Plusb Preco
9c46be9d47 Translate styleguide.md 2015-08-31 09:52:28 +09:00
Samy Pessé
9ee063ca14 Add section about server implementations 2015-08-31 00:07:36 +02:00
Fritz Lin
eab88ea09c Setting up docs translation in Chinese 👍 2015-08-30 22:53:40 +08:00
Eran Tiktin
cfc5ecb05d Update web-frame.md phrasing 2015-08-29 20:05:15 +03:00
Robo
8757da6c47 renderer: send referrer for all naviagtions 2015-08-29 19:20:09 +05:30
appetizermonster
39e3506add Fix typo 2015-08-29 18:04:30 +09:00
Cheng Zhao
0f2ef3feb2 Merge pull request #2637 from RIAEvangelist/master
Update documentation to clarify bundled node/io.js version
2015-08-29 16:12:47 +08:00
Cheng Zhao
82d801ab9e Merge pull request #2635 from fscherwi/master
⬆️ asar@0.8.x
2015-08-29 15:57:49 +08:00
Jessica Lord
955ae78e33 Standardize window-open 2015-08-28 23:21:09 -07:00
Jessica Lord
8d40714f78 Standardize web-view-tag 2015-08-28 23:20:59 -07:00
Jessica Lord
2c3ed90ff3 Standardize web-frame 2015-08-28 23:20:49 -07:00
Jessica Lord
b1fc18f405 Standardize tray 2015-08-28 22:46:39 -07:00
Jessica Lord
e8a04981bb Standardize synopsis 2015-08-28 22:46:31 -07:00
Jessica Lord
a2cc936a3b Standardize shell 2015-08-28 22:28:30 -07:00
Jessica Lord
e6e09a8a7c Standardize screen 2015-08-28 22:24:54 -07:00
Jessica Lord
50736296a7 Standardize remote 2015-08-28 22:17:35 -07:00
Jessica Lord
b759999272 Standardize protocol 2015-08-28 22:03:39 -07:00
Jessica Lord
a5969fd076 Standardize process 2015-08-28 21:47:31 -07:00
Jessica Lord
91150839be Standardize power-save-blocker 2015-08-28 21:44:13 -07:00
Jessica Lord
83aa9df1ee Standardize power-monitor 2015-08-28 21:37:07 -07:00
Jessica Lord
a38d34d368 Standardize native-image 2015-08-28 21:33:45 -07:00
Jessica Lord
e8461b6f90 Capital Ms 2015-08-28 16:35:22 -07:00
Jessica Lord
33a19f9071 Edits and standardization 2015-08-28 16:19:28 -07:00
gellert
58081ca9e9 setOffscreenRender and api docs added 2015-08-29 00:45:00 +02:00
Jessica Lord
8ee91bce44 message → arg 2015-08-28 14:57:14 -07:00
Jessica Lord
dbc1855b42 Small edits 2015-08-28 14:21:37 -07:00
Brandon Nozaki Miller
dd28a2ef14 Update documentation to clarify bundled node/io.js version 2015-08-28 14:16:05 -07:00
Jessica Lord
609961a1de Merge pull request #2585 from atom/jl-std-docs-2
Standardize: clipboard, content-tracing, crash-reporter
2015-08-28 13:51:16 -07:00
fscherwi
852d982057 ⬆️ asar@0.8.x 2015-08-28 22:04:42 +02:00
Jessica Lord
6277a65bb7 Merge pull request #2535 from atom/jl-br-win
Updating Browser Window Documentation
2015-08-28 11:31:08 -07:00
Jessica Lord
26f7f2ab21 Merge pull request #2602 from atom/jl-std-docs-3
Standardize Docs: dialog, file-object, frameless-window
2015-08-28 11:30:18 -07:00
Jessica Lord
aa03fddb62 contentTracing → tracing → content-tracing 2015-08-28 10:57:20 -07:00
Jessica Lord
bbf2cbb6f6 Small edits 2015-08-28 10:50:30 -07:00
Jessica Lord
221eff7fec ⬇️ list level 2015-08-28 10:50:02 -07:00
Jessica Lord
c2073a3c45 Consolidate note on experimental APIs 2015-08-28 10:34:48 -07:00
Cheng Zhao
71d257b190 Merge pull request #2619 from etiktin/ignore_native_modules_in_debug_tests_windows
Skip native modules in debug tests on Windows
2015-08-28 10:43:32 +08:00
Cheng Zhao
0684d9da6d Merge pull request #2614 from timruffles/patch-3
[docs] improve advice on callbacks passed from renderer to main
2015-08-28 10:19:35 +08:00
Eran Tiktin
5337d8c23f Ignore native module tests on Windows debug build
This resolves #2558. There are no more errors when running test.py on
the debug build in Windows. When running the release build the tests
will be executed as usual.
2015-08-27 23:05:06 +03:00
Eran Tiktin
b7d80e792d Merge pull request #1 from atom/master
Update from original
2015-08-27 20:31:20 +03:00
Jessica Lord
d02ced87b8 message → arg, 80-col 2015-08-27 10:13:25 -07:00
Tim Ruffles
4bc9bf7654 improve advice on callbacks passed from renderer to main
Remote is a great feature, it's a shame to put people off unnecessarily. I think the original warnings given are too extreme

The potential bugs that stem from not cleaning up event handlers (or any reference) are present in any Javascript code. We don't avoid using event-handlers in the DOM because we might forget to clean them up!

I've added an example of the behaviour of return values from synchronously called callbacks from renderer, and have changed the advice from 'you shouldn't do this' to 'be careful when you do this'.
2015-08-27 17:10:02 +01:00
Jessica Lord
f74d7d71e6 Edits per inline comments 2015-08-27 08:11:51 -07:00
Cheng Zhao
195be931a4 Merge pull request #2613 from atom/fix-geolocation
Opt into location services
2015-08-27 23:01:22 +08:00
Cheng Zhao
4a7d5fa769 Merge pull request #2612 from atom/disable-pinch
Add webFrame.setZoomLevelLimits API
2015-08-27 22:52:10 +08:00
Cheng Zhao
16a0185ab5 Opt into location services 2015-08-27 22:50:40 +08:00
Cheng Zhao
8a09cf5369 Add webFrame.setZoomLevelLimits API 2015-08-27 22:08:25 +08:00
Cheng Zhao
c91ab5ec7c Merge pull request #2611 from atom/pod-optimize
Optimize memory usage when using remote module
2015-08-27 20:51:02 +08:00
Cheng Zhao
37244c3b08 Remove extra output 2015-08-27 20:35:04 +08:00
Cheng Zhao
7889e2750f Suppress the heap snapshot test
It is failing in Travis CI but not in GitHub CI or my own machine,
ignore it for now.
2015-08-27 20:21:05 +08:00
Cheng Zhao
63eb4b72e2 IDWeakMap is not used anly more in JS 2015-08-27 19:55:16 +08:00
Cheng Zhao
64e8ce0c07 Don't rely on IDWeakMap for bookkeeping remote objects
It frees us from using C++ to track JS objects, thus improves the
performance of collecting memory.
2015-08-27 19:01:34 +08:00
Heilig Benedek
e4c01f3187 Offscreen render support base 2015-08-27 11:22:39 +02:00
Cheng Zhao
bd64f5ced2 Use V8's new SetWeak method 2015-08-27 16:41:51 +08:00
Cheng Zhao
f7c75d36ba Do not create remote object for simple return values of APIs 2015-08-27 16:14:53 +08:00
Cheng Zhao
e99b8c3a2b Fix leak of handle when emitting events 2015-08-27 15:22:02 +08:00
Cheng Zhao
0ddf90815b Merge pull request #2608 from atom/fix-debugger
Fix debugger not working for main process
2015-08-27 14:28:30 +08:00
Cheng Zhao
e432638b7d Update node: Remove unneeded exports 2015-08-27 13:51:46 +08:00
Cheng Zhao
134ccb550c Use libuv to wake up main thread 2015-08-27 13:30:04 +08:00
Cheng Zhao
573c959a75 Use our debugger implementation in Node 2015-08-27 13:16:19 +08:00
Cheng Zhao
e7791a5486 Import the TCPListenSocket removed by Chromium 2015-08-27 12:59:54 +08:00
Cheng Zhao
a1a6ea6fe1 Revert "Remove our own debugger implementation"
This reverts commit 1d148fe2fb.
2015-08-27 12:25:28 +08:00
Cheng Zhao
04d8f3218f Merge pull request #2607 from atom/fix-quit
win: Delay quitting until next tick of message loop
2015-08-27 11:56:58 +08:00
Cheng Zhao
ab859067aa win: Delay quitting until next tick of message loop
This fixes app.quit() not working when it is called before the message
loop starts to run.
2015-08-27 11:42:06 +08:00
Cheng Zhao
9cdefb6069 Merge pull request #2606 from atom/win-manifest
win: Add compatibility information in manifest file
2015-08-27 10:58:06 +08:00
Cheng Zhao
a6c21666f4 win: Add compatibility information in manifest 2015-08-27 10:45:39 +08:00
Cheng Zhao
3dad645619 Merge pull request #2596 from deepak1556/value_converter_patch
nativemate: increase recursion depth
2015-08-27 10:35:31 +08:00
Jessica Lord
292ffffa14 Merge pull request #2603 from preco21/master
Fix important typo and update as upstream
2015-08-26 18:23:58 -07:00
Jessica Lord
a1f17069ec First run t ipc-r 2015-08-26 17:56:10 -07:00
Jessica Lord
71f46c0287 arg → message 2015-08-26 17:52:45 -07:00
Jessica Lord
a34a16653e Standardize global-shortcut 2015-08-26 17:32:47 -07:00
Jessica Lord
f96c76584f First run at ipc-m-p edits 2015-08-26 17:27:17 -07:00
Plusb Preco
ade5b142f8 Update as upstream 2015-08-27 09:19:24 +09:00
Plusb Preco
ed8f143427 Fix IMPORTANT Typos and update as upstream 2015-08-27 09:06:12 +09:00
Jessica Lord
586b407103 Small edits and line wrap 2015-08-26 16:41:25 -07:00
Jessica Lord
715a88026e Small edits 2015-08-26 16:28:44 -07:00
Jessica Lord
3001ef7980 General text edits to content-tracing 2015-08-26 14:56:00 -07:00
Jessica Lord
0a4144e67a Merge branch 'master' into jl-std-docs-2 2015-08-26 14:26:36 -07:00
Jessica Lord
71fa87e4ed Note about platform specific apis 2015-08-26 14:14:59 -07:00
Jessica Lord
4e781eb042 Add platform labels 2015-08-26 14:05:47 -07:00
Jessica Lord
5f1897713c Edits, grammar, punctuation and merge conflicts 2015-08-26 13:57:42 -07:00
Jessica Lord
38b519ceb5 Add (optional) notation 2015-08-26 10:45:57 -07:00
Jessica Lord
71f74f4042 Add platform label where applicable 2015-08-26 10:45:57 -07:00
Jessica Lord
c282d4c0ff Line wrap 80-col 2015-08-26 10:45:57 -07:00
Jessica Lord
00de81771c Text edits per commit comments 2015-08-26 10:45:16 -07:00
Jessica Lord
bc909ddf5e Add new files to readme 2015-08-26 10:45:15 -07:00
Jessica Lord
840095b444 Break out methods, standardize 2015-08-26 10:45:15 -07:00
Robo
be18a114e2 nativemate: increase recursion depth 2015-08-26 15:52:28 +05:30
Cheng Zhao
3e5449561f Merge pull request #2595 from atom/mac-tray-quick-click
mac: make tray's behavior more official when getting clicked quickly multiple times.
2015-08-26 17:18:51 +08:00
Cheng Zhao
7f67cfb6a0 Merge pull request #2594 from atom/fix-rounded-corner
mac: Do not set rounded corner by adding layer
2015-08-26 16:36:50 +08:00
Haojian Wu
2b051e3884 mac: make tray's behavior more official when getting clicked quickly
multiple times.
2015-08-26 16:28:22 +08:00
Cheng Zhao
290b221d79 mac: Do not set rounded corner by adding layer 2015-08-26 15:58:44 +08:00
Cheng Zhao
c441dd1436 Merge pull request #2571 from atom/index-entry-startup
Support index.js module resolution at startup of Electron.
2015-08-26 12:35:24 +08:00
Cheng Zhao
fcecd091da Merge pull request #2589 from etiktin/patch-5
Update build-instructions-windows
2015-08-26 12:22:10 +08:00
Jessica Lord
ac84f56e36 Merge pull request #2533 from atom/jl-snd-docs
Standardize Docs: app, auto-updater, styleguide
2015-08-25 14:37:48 -07:00
Eran Tiktin
5a8f60fe32 Update build-instructions-windows
The build instructions mistakenly said that you can find `atom.exe` under `out\D` instead of `electron.exe`. I fixed that and mentioned that the release build will be to `out\R`.
2015-08-25 23:28:41 +03:00
Jessica Lord
aeb37941bb Replace platform notes with one general note 2015-08-25 10:12:21 -07:00
Jessica Lord
28a4069520 Mac → OS X 2015-08-25 10:05:48 -07:00
Plusb Preco
1aab23ece7 Merge remote-tracking branch 'atom/master' 2015-08-25 22:46:41 +09:00
Plusb Preco
eea04e513d Update as upstream 2015-08-25 22:46:28 +09:00
Cheng Zhao
73c9241a17 Merge pull request #2577 from preco21/master
Add more translations and fixes, remove outdated comments
2015-08-25 21:43:01 +08:00
Plusb Preco
fcf2be78cb Reset and remove unrelated files 2015-08-25 22:28:27 +09:00
Plusb Preco
ecb1625756 Revert "Rename xx-ko.md to xx.md"
This reverts commit 638bb9b0b1.
2015-08-25 22:17:24 +09:00
Plusb Preco
2592d2cfcd Revert "Revert "Rename xx-ko.md to xx.md""
This reverts commit aef4acb2e6.
2015-08-25 22:17:01 +09:00
Plusb Preco
50cbb5744b Revert "Fix link target in README.md"
This reverts commit c9965f0ffd.
2015-08-25 22:15:43 +09:00
Plusb Preco
aef4acb2e6 Revert "Rename xx-ko.md to xx.md"
This reverts commit 638bb9b0b1.
2015-08-25 22:14:33 +09:00
Jessica Lord
f4783772c5 Merge branch 'master' into jl-std-docs-2 2015-08-25 06:10:04 -07:00
Jessica Lord
ba9c47eb7e Merge branch 'master' into jl-std-docs-3 2015-08-25 06:09:45 -07:00
Jessica Lord
76416d5e47 Standardize frameless-window 2015-08-25 05:56:38 -07:00
Plusb Preco
1065374db4 Merge remote-tracking branch 'atom/master' 2015-08-25 21:56:37 +09:00
Cheng Zhao
65046b05af Update brightray and node
* brightray: fix building on OS X
* node: remove a not used patch
2015-08-25 20:56:26 +08:00
Plusb Preco
638bb9b0b1 Rename xx-ko.md to xx.md 2015-08-25 21:54:20 +09:00
Jessica Lord
864c8df639 Standardize file-object 2015-08-25 05:48:24 -07:00
Jessica Lord
81ed608b9c Standardize dialog 2015-08-25 05:46:06 -07:00
Cheng Zhao
474f92e41b Merge pull request #2578 from christian-bromann/patch-1
minor wording fix, updated example
2015-08-25 20:40:35 +08:00
Cheng Zhao
6a7113e3ce Update brightray 2015-08-25 20:30:50 +08:00
Jessica Lord
d2288815f8 List punctuation in crash-reporter 2015-08-25 05:18:02 -07:00
Jessica Lord
2c7ccffe1a Line wrap at 80-col 2015-08-25 05:16:20 -07:00
Jessica Lord
a67767dbea Standardize crash-reporter 2015-08-25 05:01:57 -07:00
Jessica Lord
703ced32db Standardize content-tracing 2015-08-25 04:49:48 -07:00
Plusb Preco
c9965f0ffd Fix link target in README.md 2015-08-25 17:06:16 +09:00
Christian Bromann
291a60444a minor wording fix, updated example 2015-08-24 23:15:59 -07:00
Cheng Zhao
a1ef09a243 Merge pull request #2559 from etiktin/fix_test.py_errors_on_windows
Fix path comparison in api-ipc-spec
2015-08-25 14:12:11 +08:00
Cheng Zhao
da10df3a9a Merge pull request #2556 from etiktin/fix_msg_box_no_close_btn
Fix message box missing a close button on Windows
2015-08-25 13:57:24 +08:00
Plusb Preco
5dc5f52f32 Fix typos and improve grammer, translate more files
Translate content-tracing-ko.md file.
Fix typos, improve grammer in tutorials and update as upstream.
2015-08-25 14:43:37 +09:00
Cheng Zhao
ce0509a665 Merge pull request #2554 from etiktin/patch-4
Update coding-style with info about Chromium's types
2015-08-25 13:41:54 +08:00
Cheng Zhao
1c9088ce7d Merge pull request #2550 from LeMoussel/patch-1
Update using-selenium-and-webdriver.md
2015-08-25 13:32:06 +08:00
Cheng Zhao
a14739bde9 Merge pull request #2553 from etiktin/patch-3
Update dialog.md with info about filter extensions
2015-08-25 12:49:13 +08:00
Cheng Zhao
b479aa3d45 Merge pull request #2547 from atom/dialog-asterisk-extension
Make dialog works on "*" file extension.
2015-08-25 12:46:36 +08:00
Cheng Zhao
102d3966af Merge pull request #2521 from deepak1556/webcontents_fullscreen_patch
webContents: exit tabbed fullscreen when esc key is pressed
2015-08-25 12:39:14 +08:00
Robo
1518ff6d22 webContents: exit tabbed fullscreen when esc key is pressed 2015-08-25 10:05:03 +05:30
Plusb Preco
5a37f96434 Remove comments about remote buffer
Remove comments about remote buffer in browser-window.md, because remote
buffer now supports in remote module.
2015-08-25 10:14:52 +09:00
Plusb Preco
dddfe902a3 Merge branch 'master' of https://github.com/preco21/electron 2015-08-25 09:44:04 +09:00
Plusb Preco
3740161caa Remove remain sentences 2015-08-25 09:39:45 +09:00
Plusb Preco
7a158773f3 Remove remain sentences 2015-08-25 08:04:07 +09:00
Jessica Lord
7f72207e66 Add platform label where applicable 2015-08-24 15:33:07 -07:00
Jessica Lord
f74ce9cc1c Add items to style guide list 2015-08-24 15:18:40 -07:00
Jessica Lord
5018fe1e17 Revert "Add links to docs translations"
This reverts commit d7fda9c8cc.
2015-08-24 15:14:13 -07:00
Jessica Lord
90392e9231 Standardize clipboard 2015-08-24 14:35:43 -07:00
Haojian Wu
7a23add23b Support index.js module resolution at startup of Electron. 2015-08-24 21:16:19 +08:00
Jessica Lord
d87c8a8291 Add optional notation 2015-08-24 14:56:19 +02:00
Jessica Lord
9b84dc4e1a Line wrap 80 2015-08-24 14:38:29 +02:00
Cheng Zhao
37044f6fd4 Merge pull request #2568 from atom/first-crashed
Make sure guest view is destroyed immediately when embeder is closed
2015-08-24 16:35:57 +08:00
Cheng Zhao
33737498ec Make sure guest view is destroyed immediately when embeder is closed 2015-08-24 16:17:15 +08:00
Cheng Zhao
a0fea28632 asar@0.7.x 2015-08-24 15:50:19 +08:00
Cheng Zhao
23d1a80c04 Merge pull request #2557 from atom/jl-mv-translations
Organize Documentation Translations
2015-08-24 13:49:10 +08:00
Jessica Lord
29c39a3245 Add documentation translation links 2015-08-23 17:19:37 +02:00
Jessica Lord
d7fda9c8cc Add links to docs translations 2015-08-23 11:17:19 +02:00
Eran Tiktin
f05ee4205d Fix path comparison in api-ipc-spec
One of the tests failed because in one of the paths the drive letter was
upper case `C` and in the other it was lower case `c`.
Paths in Windows are case insensitive, so this shouldn't fail. The fix
was to lower case the paths before comparison (only on Windows).
2015-08-22 19:50:54 +03:00
Jessica Lord
1964bb2acc Move files to ES translation docs 2015-08-22 14:24:43 +02:00
Jessica Lord
04967de2ed Move file to JP translation docs 2015-08-22 14:24:35 +02:00
Jessica Lord
6c984fac7c Add file to KO translation docs 2015-08-22 14:23:57 +02:00
Jessica Lord
3f52a91312 Create directory for KO translations 2015-08-22 14:21:01 +02:00
Jessica Lord
acc0c616c4 Spec out doc styleguide 2015-08-22 14:07:45 +02:00
Eran Tiktin
c686fc4d6b Made sure that lines are not longer than 80 characters 2015-08-22 05:09:37 +03:00
Eran Tiktin
9232620023 Fixed comment spacing 2015-08-22 04:26:09 +03:00
Eran Tiktin
b1406fbad9 Fix no close button in message box on Windows
This resolves #2293.
2015-08-22 04:20:52 +03:00
Eran Tiktin
79c602c3cc Update coding-style with info about Chromium's types
When I first tried to add something to the C++ code, I was a bit overwhelmed by all the special types and abstractions.
The info added will hopefully make it a bit easier to start, by directing users to the right place.
2015-08-21 22:23:49 +03:00
Eran Tiktin
db2f0a68e8 Update dialog.md with info about filter extensions
There was some confusion about the correct way to add an `All Files` filter (see #2525), so I added it to the example.
Also added a short note about the extension syntax.

This is related to PR #2547.
2015-08-21 21:18:37 +03:00
Cheng Zhao
d7cf460918 docs: callback => completion in some places 2015-08-21 20:16:56 +08:00
Cheng Zhao
68a98d5dc2 Bump v0.31.0 2015-08-21 19:51:56 +08:00
Cheng Zhao
7c32378a73 Merge pull request #2474 from atom/chrome44
Upgrade to Chrome 44
2015-08-21 19:49:00 +08:00
Cheng Zhao
9212a1db8e Merge branch 'master' into chrome44 2015-08-21 19:29:34 +08:00
LeMoussel
a839f70a99 Update using-selenium-and-webdriver.md
Add an example of how to use webdriverio with electron
2015-08-21 12:09:31 +02:00
Cheng Zhao
d931a49e89 Warn about removed protocol APIs 2015-08-21 18:02:58 +08:00
Cheng Zhao
61b7a3afe3 No need to ship ffmpeg in dist 2015-08-21 16:27:29 +08:00
Cheng Zhao
cf6a904f95 win: Fix release build 2015-08-21 16:21:20 +08:00
Cheng Zhao
00e5290dc8 win: Update libchromium to fix .pdb missing errors 2015-08-21 16:19:19 +08:00
Cheng Zhao
627fe75a6a Update brightray to fix building on Linux 2015-08-21 16:14:47 +08:00
Cheng Zhao
bc5ebb9911 Update to io.js v3.1.0 2015-08-21 14:28:37 +08:00
Cheng Zhao
1bd8a9869a Run build script on arm and ia32 Linux 2015-08-21 14:18:04 +08:00
Cheng Zhao
0ee6e5334a Now working at 0.31.0 2015-08-21 13:58:49 +08:00
Cheng Zhao
c18ec7f5bc runas@3.x 2015-08-21 13:52:05 +08:00
Haojian Wu
5f663dbf0a mac: make * extension filter works. 2015-08-21 12:15:20 +08:00
Haojian Wu
c566ba575f Linux: make * extension filter works. 2015-08-21 12:13:33 +08:00
Jessica Lord
454413f69a Standardize auto-updater.md 2015-08-19 18:55:11 +02:00
Jessica Lord
714745cdd7 Add 'returns' and change h2 descriptions 2015-08-19 18:51:36 +02:00
Jessica Lord
624b6b9762 Standardize app.md 2015-08-19 18:28:48 +02:00
Cheng Zhao
7d97bb6fe0 docs: Rewrite docs for new protocol API 2015-08-14 13:44:18 +08:00
Cheng Zhao
86eb0a5eaa Create both Uint8Array and ArrayBuffer from blink 2015-08-14 12:40:03 +08:00
Cheng Zhao
62d5c89f62 spec: Rewrite tests for new protocol API 2015-08-13 22:39:11 +08:00
Cheng Zhao
a88f951b2f Always set headers for response
When intercepting HTTP protocols Chromium will assume there is always headers
set, so we have to provide headers for all the responses to avoid the
crash.
2015-08-13 22:26:27 +08:00
Cheng Zhao
467ba6b7a9 Rename protocol.isHandledProtocol to protocol.isProtocolHandled 2015-08-13 21:29:23 +08:00
Cheng Zhao
02714d466c Fix crash when requesting invalid url 2015-08-13 21:21:23 +08:00
Cheng Zhao
741c8f3d98 Implement protocol.uninterceptProtocol 2015-08-13 20:19:02 +08:00
Cheng Zhao
773e932e98 Implement protocol.interceptProtocol 2015-08-13 20:10:05 +08:00
Cheng Zhao
374d83ed9c Implement protocol.isHandledProtocol 2015-08-13 19:33:53 +08:00
Cheng Zhao
05fd81ebdc Implement protocol.unregisterProtocol 2015-08-13 19:26:18 +08:00
Cheng Zhao
777f99193f Update native_mate to fix VS compilation error 2015-08-13 13:44:37 +08:00
Cheng Zhao
d0ef43bd12 Completion callback is called on IO thread 2015-08-12 23:16:17 +08:00
Cheng Zhao
78171e2072 Don't use C++11 to not crash VS 2015-08-12 23:14:20 +08:00
Cheng Zhao
94c1fb32a7 Try work around VS's bug 2015-08-12 23:07:15 +08:00
Cheng Zhao
d9b845fcdf Make session parameter work with null value 2015-08-12 22:57:25 +08:00
Cheng Zhao
225321b580 Make the completion callback optional 2015-08-12 21:32:52 +08:00
Cheng Zhao
f493eb34ae Implement protocol.registerHttpProtocol 2015-08-12 21:09:44 +08:00
Cheng Zhao
1f2d7d1cd8 Implement protocol.registerBufferProtocol 2015-08-12 20:37:52 +08:00
Cheng Zhao
ebb1ddc0df Support converting Buffer to Value 2015-08-12 15:39:33 +08:00
Cheng Zhao
d2681d2ba1 Implement protocol.registerFileProtocol 2015-08-12 15:22:19 +08:00
Cheng Zhao
337460cdc2 Enable return error for arbitray request job 2015-08-12 13:50:31 +08:00
Cheng Zhao
ee51e37db7 Guard against callback being called twice 2015-08-12 13:43:27 +08:00
Cheng Zhao
96d53d279e Initial implementation of new protocol API 2015-08-12 13:30:19 +08:00
Cheng Zhao
1e9eaba423 win: Fix compiler warning 2015-08-11 23:41:43 +08:00
Cheng Zhao
a8681b0072 Fix emitting did-attach event 2015-08-11 15:59:16 +08:00
Cheng Zhao
e6a2b0a479 Fix finding the WebContents of a pending renderer process
Apparently after Chrome 44 a renderer process can be started before the
corresponding render view is created, though it can be patched but from
the source code Chromium is enforcing this everywhere now, so fixing it
on our side seems the only reliable solution.

This fix is very similar to what we did, but instead of blindly setting
swapped process, we now remember which process the pending process is
going to replace, so we should not have those race conditions.
2015-08-11 15:39:17 +08:00
Cheng Zhao
0f990d40cc Use blink's allocator in Node's Buffer 2015-08-11 12:31:41 +08:00
Cheng Zhao
2dc533c4b9 Fix search path of ffmpeg
It is somehow set to @load_path by Chromium.
2015-08-11 10:55:27 +08:00
Cheng Zhao
bc06195409 Link with a few more static libraries on Linux and OS X 2015-08-11 10:45:40 +08:00
Cheng Zhao
e43c63ae08 Update chrome_version.h 2015-08-11 10:40:41 +08:00
Cheng Zhao
cc34bc844d Tell compiler we want to ignore result of SetPrototype 2015-08-11 10:10:07 +08:00
Cheng Zhao
7423c89968 Fix compilation warnings caused by chrome44 update 2015-08-11 10:08:34 +08:00
Cheng Zhao
4337c07425 Define node_byteorder and node_release_urlbase 2015-08-11 10:02:46 +08:00
Cheng Zhao
5c57f92ba5 Update io.js to v3.0.0 2015-08-11 09:58:36 +08:00
Cheng Zhao
c5e540823b Update to Chrome 44 2015-08-11 09:50:19 +08:00
Haojian Wu
28093a4d2d Fix a crash issue in GetProcessOwner if no renderer view host is found. 2015-08-11 09:48:55 +08:00
Haojian Wu
4e3187fbbd No need to specify ffmpeg library as it's a normal built library in libchromiumcontent. 2015-08-11 09:48:55 +08:00
Haojian Wu
f9fee9174a net::URLFetcher::Create now returns object with scoped_ptr. 2015-08-11 09:48:55 +08:00
Haojian Wu
0e8a585157 Fix content::BrowserPluginDelegate::DidResizeElement API changes.
Chromium has removed old_size in DidResizeElement interface as the 'old_size'
is internal.
2015-08-11 09:48:55 +08:00
Haojian Wu
11ffb9dfb6 Fix node::Buffer API changes. 2015-08-11 09:48:29 +08:00
Haojian Wu
46c7ba734b Fix WillAttach API changes in content::BrowserPluginGuestDelegate. 2015-08-11 09:48:29 +08:00
Haojian Wu
fc4031ec26 Now the value in ScopedPtrHashMap is required to be scoped_ptr. 2015-08-11 09:48:29 +08:00
Haojian Wu
d003b1bb57 LoadV8Snapshot has been moved from gin::IsolateHolder to gin::V8Initializer. 2015-08-11 09:48:29 +08:00
Haojian Wu
8fda175264 Update base::Value::CreateNullValue API changes. 2015-08-11 09:48:29 +08:00
Haojian Wu
d08392a0c4 No need base/float_util.h since VS2013 supports well enough. 2015-08-11 09:48:29 +08:00
Haojian Wu
48ccb0f2ab No gfx::SingletonHwnd::Observer any more.
Using gfx::SingletonHwndObserver instead.
2015-08-11 09:48:29 +08: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
570 changed files with 29633 additions and 10709 deletions

1
.gitignore vendored
View File

@@ -1,4 +1,5 @@
.DS_Store
/.idea/
/build/
/dist/
/external_binaries/

View File

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

View File

@@ -29,7 +29,8 @@ possible with your report. If you can, please include:
* Include screenshots and animated GIFs in your pull request whenever possible.
* Follow the CoffeeScript, JavaScript, C++ and Python [coding style defined in docs](/docs/development/coding-style.md).
* Write documentation in [Markdown](https://daringfireball.net/projects/markdown).
* Use short, present tense commit messages. See [Commit Message Styleguide](#git-commit-messages-styleguide).
See the [Documentation Styleguide](/docs/styleguide.md).
* Use short, present tense commit messages. See [Commit Message Styleguide](#git-commit-messages).
## Styleguides

View File

@@ -1,4 +1,4 @@
[![Electron Logo](http://electron.atom.io/images/electron-logo.svg)](http://electron.atom.io/)
[![Electron Logo](http://electron.atom.io/images/electron-logo.svg)](http://electron.atom.io/)
[![Build Status](https://travis-ci.org/atom/electron.svg?branch=master)](https://travis-ci.org/atom/electron)
[![devDependency Status](https://david-dm.org/atom/electron/dev-status.svg)](https://david-dm.org/atom/electron#info=devDependencies)
@@ -6,25 +6,34 @@
### [Electron](https://github.com/atom/electron/) 한국어 참조문서
:zap: *전까지 Atom Shell로 알려져 있었습니다* :zap:
:zap: *프레임워크 이름이 Atom Shell에서 Electron으로 변경되었습니다* :zap:
Electron 프레임워크는 JavaScript, HTML 그리고 CSS를 사용하여
Cross-Platform 데스크톱 어플리케이션을 개발할 수 있도록 해주는 프레임워크입니다.
[Node.js](https://nodejs.org/)와 [Chromium](http://www.chromium.org)을 기반으로
만들어졌으며 [Atom Editor](https://github.com/atom/atom)에 사용되고 있습니다.
Electron은 JavaScript, HTML 그리고 CSS를 이용하여 Cross-Platform 데스크톱 어플리케이션을 개발할 수 있도록 해주는 프레임워크입니다. 이 프레임워크는 [io.js](http://iojs.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)를 Follow하세요.
이 프로젝트는 [기여자 규약 1.2](http://contributor-covenant.org/version/1/2/0/)을
준수합니다. 따라서 이 프로젝트의 개발에 참여하려면 이 계약을 지켜야 합니다. 받아들일 수
없는 행위를 발견했을 경우 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` 등록하고 전역에 설치합니다.
# $PATH에 `electron` 커맨드를 등록하고 전역에 설치합니다.
npm install electron-prebuilt -g
# 개발용 dependency로 설치합니다.
# 개발 의존성 모듈 형태로 설치합니다.
npm install electron-prebuilt --save-dev
```
@@ -32,13 +41,34 @@ npm install electron-prebuilt --save-dev
- [China](https://npm.taobao.org/mirrors/electron)
## 참조문서
## 참조 문서
[docs](https://github.com/atom/electron/tree/master/docs/README-ko.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/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)
## 시작하기
[`atom/electron-quick-start`](https://github.com/atom/electron-quick-start)
저장소를 클론하여 Electron을 간단히 접해볼 수 있습니다.
## 커뮤니티
[Atom 포럼내의 `electron` 카테고리](http://discuss.atom.io/category/electron) 와 Freenode `#atom-shell` 채팅채널이 있습니다.
다음 링크를 통해 커뮤니티에 질문을 올리거나 토론을 나눌 수 있습니다:
[awesome-electron](https://github.com/sindresorhus/awesome-electron) 에 커뮤니티가 운영중인 유용한 예제 앱과 툴, 리소스가 있으니 한번 탐색해 보시기 바랍니다.
- Atom 포럼의 [`electron`](http://discuss.atom.io/c/electron) 카테고리
- Freenode 채팅의 `#atom-shell` 채널
- Slack의 [`Atom`](http://atom-slack.herokuapp.com/) 채널
[awesome-electron](https://github.com/sindresorhus/awesome-electron) 프로젝트에
커뮤니티가 운영중인 유용한 예제 어플리케이션과 도구, 리소스가 있으니 한번 참고해 보시기
바랍니다.

View File

@@ -4,22 +4,23 @@
[![devDependency Status](https://david-dm.org/atom/electron/dev-status.svg)](https://david-dm.org/atom/electron#info=devDependencies)
[![Join the Electron Community on Slack](http://atom-slack.herokuapp.com/badge.svg)](http://atom-slack.herokuapp.com/)
:zap: *formerly known as Atom Shell* :zap:
: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 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.
## 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
@@ -43,9 +44,28 @@ Guides and the API reference are located in the
[docs](https://github.com/atom/electron/tree/master/docs) directory. It also
contains documents describing how to build and contribute to Electron.
## Documentation Translations
- [Brazilian Portuguese](https://github.com/atom/electron/tree/master/docs-translations/pt-BR)
- [Korean](https://github.com/atom/electron/tree/master/docs-translations/ko-KR)
- [Japanese](https://github.com/atom/electron/tree/master/docs-translations/jp)
- [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)
## 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
There is an [`electron` category on the Atom forums](http://discuss.atom.io/category/electron)
as well as an `#atom-shell` channel on Freenode.
You can ask questions and interact with the community in the following
locations:
- [`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
Check out [awesome-electron](https://github.com/sindresorhus/awesome-electron) for a community maintained list of useful example apps, tools and resources.
Check out [awesome-electron](https://github.com/sindresorhus/awesome-electron)
for a community maintained list of useful example apps, tools and resources.

View File

@@ -4,7 +4,7 @@
'product_name%': 'Electron',
'company_name%': 'GitHub, Inc',
'company_abbr%': 'github',
'version%': '0.30.6',
'version%': '0.35.1',
},
'includes': [
'filenames.gypi',
@@ -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,7 +106,21 @@
'<@(locale_dirs)',
],
},
]
],
'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"
'dependencies': [
'make_locale_paks',
@@ -144,7 +155,6 @@
'destination': '<(PRODUCT_DIR)',
'files': [
'<@(copied_libraries)',
'<(libchromiumcontent_dir)/ffmpegsumo.dll',
'<(libchromiumcontent_dir)/libEGL.dll',
'<(libchromiumcontent_dir)/libGLESv2.dll',
'<(libchromiumcontent_dir)/icudtl.dat',
@@ -193,7 +203,6 @@
'destination': '<(PRODUCT_DIR)',
'files': [
'<@(copied_libraries)',
'<(libchromiumcontent_dir)/libffmpegsumo.so',
'<(libchromiumcontent_dir)/icudtl.dat',
'<(libchromiumcontent_dir)/content_shell.pak',
'<(libchromiumcontent_dir)/natives_blob.bin',
@@ -226,8 +235,6 @@
# Defined in Chromium but not exposed in its gyp file.
'V8_USE_EXTERNAL_STARTUP_DATA',
'ENABLE_PLUGINS',
# Needed by Node.
'NODE_WANT_INTERNALS=1',
],
'sources': [
'<@(lib_sources)',
@@ -289,12 +296,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': [
@@ -397,9 +420,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,
@@ -441,13 +461,6 @@
'destination': '<(PRODUCT_DIR)/<(product_name) Framework.framework/Versions/A/Libraries',
'files': [
'<@(copied_libraries)',
'<(libchromiumcontent_dir)/ffmpegsumo.so',
],
},
{
'destination': '<(PRODUCT_DIR)/<(product_name) Framework.framework/Versions/A/Resources',
'files': [
'<(PRODUCT_DIR)/crashpad_handler',
],
},
],
@@ -462,6 +475,16 @@
'${BUILT_PRODUCTS_DIR}/<(product_name) Framework.framework/Versions/A/<(product_name) Framework',
],
},
{
'postbuild_name': 'Fix path of ffmpeg',
'action': [
'install_name_tool',
'-change',
'@loader_path/libffmpeg.dylib',
'@rpath/libffmpeg.dylib',
'${BUILT_PRODUCTS_DIR}/<(product_name) Framework.framework/Versions/A/<(product_name) Framework',
],
},
{
'postbuild_name': 'Add symlinks for framework subdirectories',
'action': [
@@ -471,6 +494,25 @@
],
},
],
'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
{
'target_name': '<(project_name)_helper',

View File

@@ -7,6 +7,7 @@
#include <string>
#include <vector>
#include "atom/common/atom_version.h"
#include "atom/common/chrome_version.h"
#include "atom/common/options_switches.h"
#include "base/command_line.h"
@@ -14,6 +15,7 @@
#include "base/strings/string_util.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"
namespace atom {
@@ -72,6 +74,12 @@ std::string AtomContentClient::GetProduct() const {
return "Chrome/" CHROME_VERSION_STRING;
}
std::string AtomContentClient::GetUserAgent() const {
return content::BuildUserAgentFromProduct(
"Chrome/" CHROME_VERSION_STRING " "
ATOM_PRODUCT_NAME "/" ATOM_VERSION_STRING);
}
void AtomContentClient::AddAdditionalSchemes(
std::vector<std::string>* standard_schemes,
std::vector<std::string>* savable_schemes) {
@@ -91,7 +99,7 @@ void AtomContentClient::AddAdditionalSchemes(
void AtomContentClient::AddPepperPlugins(
std::vector<content::PepperPluginInfo>* plugins) {
auto command_line = base::CommandLine::ForCurrentProcess();
auto flash_path = command_line->GetSwitchValueNative(
auto flash_path = command_line->GetSwitchValuePath(
switches::kPpapiFlashPath);
if (flash_path.empty())
return;
@@ -100,7 +108,7 @@ void AtomContentClient::AddPepperPlugins(
switches::kPpapiFlashVersion);
plugins->push_back(
CreatePepperFlashInfo(base::FilePath(flash_path), flash_version));
CreatePepperFlashInfo(flash_path, flash_version));
}
} // namespace atom

View File

@@ -20,6 +20,7 @@ class AtomContentClient : public brightray::ContentClient {
protected:
// content::ContentClient:
std::string GetProduct() const override;
std::string GetUserAgent() const override;
void AddAdditionalSchemes(
std::vector<std::string>* standard_schemes,
std::vector<std::string>* savable_schemes) override;

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

@@ -33,6 +33,7 @@
#include "atom/app/node_main.h"
#include "atom/common/atom_command_line.h"
#include "base/at_exit.h"
#include "base/i18n/icu_util.h"
#if defined(OS_WIN)
@@ -134,6 +135,7 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd, int) {
if (env->GetVar("ATOM_SHELL_INTERNAL_RUN_AS_NODE", &node_indicator) &&
node_indicator == "1") {
// 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",
@@ -165,6 +167,7 @@ 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) {
base::i18n::InitializeICU();
base::AtExitManager atexit_manager;
return atom::NodeMain(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,21 @@
#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/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 +38,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;
@@ -38,16 +55,32 @@ bool AtomMainDelegate::BasicStartupComplete(int* exit_code) {
#else
settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
#endif // defined(DEBUG)
#endif // defined(OS_WIN)
#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);
}
@@ -69,16 +102,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);

View File

@@ -4,42 +4,48 @@
#include "atom/app/node_main.h"
#include "atom/app/uv_task_runner.h"
#include "atom/browser/javascript_environment.h"
#include "atom/browser/node_debugger.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"
#include "gin/v8_initializer.h"
namespace atom {
int NodeMain(int argc, char *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);
base::CommandLine::Init(argc, argv);
int exit_code = 1;
{
gin::IsolateHolder::LoadV8Snapshot();
gin::IsolateHolder::Initialize(
gin::IsolateHolder::kNonStrictMode,
gin::ArrayBufferAllocator::SharedInstance());
// 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();
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(), uv_default_loop(), gin_env.context(), argc, argv,
gin_env.isolate(), loop, gin_env.context(), argc, argv,
exec_argc, exec_argv);
// Start debugger.
node::node_isolate = gin_env.isolate();
if (node::use_debug_agent)
node::StartDebug(env, node::debug_wait_connect);
// Start our custom debugger implementation.
NodeDebugger node_debugger(gin_env.isolate());
if (node_debugger.IsRunning())
env->AssignToContext(v8::Debug::GetDebugContext());
node::LoadEnvironment(env);
// Enable debugger.
if (node::use_debug_agent)
node::EnableDebug(env);
bool more;
do {
more = uv_run(env->event_loop(), UV_RUN_ONCE);

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.
#include "atom/app/uv_task_runner.h"
#include "base/stl_util.h"
namespace atom {
UvTaskRunner::UvTaskRunner(uv_loop_t* loop) : loop_(loop) {
}
UvTaskRunner::~UvTaskRunner() {
for (auto& iter : tasks_) {
uv_unref(reinterpret_cast<uv_handle_t*>(iter.first));
delete iter.first;
}
}
bool UvTaskRunner::PostDelayedTask(const tracked_objects::Location& from_here,
const base::Closure& task,
base::TimeDelta delay) {
uv_timer_t* timer = new uv_timer_t;
timer->data = this;
uv_timer_init(loop_, timer);
uv_timer_start(timer, UvTaskRunner::OnTimeout, delay.InMilliseconds(), 0);
tasks_[timer] = task;
return true;
}
bool UvTaskRunner::RunsTasksOnCurrentThread() const {
return true;
}
bool UvTaskRunner::PostNonNestableDelayedTask(
const tracked_objects::Location& from_here,
const base::Closure& task,
base::TimeDelta delay) {
return PostDelayedTask(from_here, task, delay);;
}
// static
void UvTaskRunner::OnTimeout(uv_timer_t* timer) {
UvTaskRunner* self = static_cast<UvTaskRunner*>(timer->data);
if (!ContainsKey(self->tasks_, timer))
return;
self->tasks_[timer].Run();
self->tasks_.erase(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

45
atom/app/uv_task_runner.h Normal file
View File

@@ -0,0 +1,45 @@
// 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_APP_UV_TASK_RUNNER_H_
#define ATOM_APP_UV_TASK_RUNNER_H_
#include <map>
#include "base/callback.h"
#include "base/single_thread_task_runner.h"
#include "vendor/node/deps/uv/include/uv.h"
namespace atom {
// TaskRunner implementation that posts tasks into libuv's default loop.
class UvTaskRunner : public base::SingleThreadTaskRunner {
public:
explicit UvTaskRunner(uv_loop_t* loop);
~UvTaskRunner() override;
// base::SingleThreadTaskRunner:
bool PostDelayedTask(const tracked_objects::Location& from_here,
const base::Closure& task,
base::TimeDelta delay) override;
bool RunsTasksOnCurrentThread() const override;
bool PostNonNestableDelayedTask(
const tracked_objects::Location& from_here,
const base::Closure& task,
base::TimeDelta delay) override;
private:
static void OnTimeout(uv_timer_t* timer);
static void OnClose(uv_handle_t* handle);
uv_loop_t* loop_;
std::map<uv_timer_t*, base::Closure> tasks_;
DISALLOW_COPY_AND_ASSIGN(UvTaskRunner);
};
} // namespace atom
#endif // ATOM_APP_UV_TASK_RUNNER_H_

View File

@@ -7,35 +7,38 @@
#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/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"
#if defined(OS_WIN)
#include "base/strings/utf_string_conversions.h"
#endif
#include "atom/common/node_includes.h"
using atom::Browser;
namespace mate {
@@ -61,21 +64,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 +87,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 +141,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);
}
@@ -158,6 +182,11 @@ void App::OnWindowAllClosed() {
void App::OnQuit() {
Emit("quit");
if (process_singleton_.get()) {
process_singleton_->Cleanup();
process_singleton_.reset();
}
}
void App::OnOpenFile(bool* prevent_default, const std::string& file_path) {
@@ -168,8 +197,8 @@ void App::OnOpenURL(const std::string& url) {
Emit("open-url", url);
}
void App::OnActivateWithNoOpenWindows() {
Emit("activate-with-no-open-windows");
void App::OnActivate(bool has_visible_windows) {
Emit("activate", has_visible_windows);
}
void App::OnWillFinishLaunching() {
@@ -177,26 +206,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,18 +307,36 @@ 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);
}
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_);
std::string App::GetLocale() {
return l10n_util::GetApplicationLocale("");
}
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(
@@ -261,6 +344,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))
@@ -271,6 +355,8 @@ 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_WIN)
.SetMethod("setUserTasks",
base::Bind(&Browser::SetUserTasks, browser))
@@ -278,8 +364,10 @@ mate::ObjectTemplateBuilder App::GetObjectTemplateBuilder(
.SetMethod("setPath", &App::SetPath)
.SetMethod("getPath", &App::GetPath)
.SetMethod("setDesktopName", &App::SetDesktopName)
.SetMethod("setAppUserModelId", &App::SetAppUserModelId)
.SetProperty("defaultSession", &App::DefaultSession);
.SetMethod("allowNTLMCredentialsForAllDomains",
&App::AllowNTLMCredentialsForAllDomains)
.SetMethod("getLocale", &App::GetLocale)
.SetMethod("makeSingleInstance", &App::MakeSingleInstance);
}
// static
@@ -296,6 +384,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);

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:
@@ -41,10 +45,25 @@ class App : public mate::EventEmitter,
void OnQuit() override;
void OnOpenFile(bool* prevent_default, const std::string& file_path) override;
void OnOpenURL(const std::string& url) override;
void OnActivateWithNoOpenWindows() override;
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,10 +83,12 @@ class App : public mate::EventEmitter,
const base::FilePath& path);
void SetDesktopName(const std::string& desktop_name);
void SetAppUserModelId(const std::string& app_id);
v8::Local<v8::Value> DefaultSession(v8::Isolate* isolate);
void AllowNTLMCredentialsForAllDomains(bool should_allow);
bool MakeSingleInstance(
const ProcessSingleton::NotificationCallback& callback);
std::string GetLocale();
v8::Global<v8::Value> default_session_;
scoped_ptr<ProcessSingleton> process_singleton_;
DISALLOW_COPY_AND_ASSIGN(App);
};

View File

@@ -5,12 +5,30 @@
#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"
#include "atom/common/node_includes.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 {
@@ -21,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() {
@@ -43,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,39 +7,30 @@
#include "atom/common/native_mate_converters/callback.h"
#include "atom/common/native_mate_converters/file_path_converter.h"
#include "atom/common/node_includes.h"
#include "base/bind.h"
#include "base/files/file_util.h"
#include "content/public/browser/tracing_controller.h"
#include "native_mate/dictionary.h"
#include "atom/common/node_includes.h"
using content::TracingController;
namespace mate {
template<>
struct Converter<base::trace_event::CategoryFilter> {
struct Converter<base::trace_event::TraceConfig> {
static bool FromV8(v8::Isolate* isolate,
v8::Local<v8::Value> val,
base::trace_event::CategoryFilter* out) {
std::string filter;
if (!ConvertFromV8(isolate, val, &filter))
return false;
*out = base::trace_event::CategoryFilter(filter);
return true;
}
};
template<>
struct Converter<base::trace_event::TraceOptions> {
static bool FromV8(v8::Isolate* isolate,
v8::Local<v8::Value> val,
base::trace_event::TraceOptions* out) {
std::string options;
base::trace_event::TraceConfig* out) {
Dictionary options;
if (!ConvertFromV8(isolate, val, &options))
return false;
return out->SetFromString(options);
std::string category_filter, trace_options;
if (!options.Get("categoryFilter", &category_filter) ||
!options.Get("traceOptions", &trace_options))
return false;
*out = base::trace_event::TraceConfig(category_filter, trace_options);
return true;
}
};

View File

@@ -20,8 +20,6 @@
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_getter.h"
#include "atom/common/node_includes.h"
using atom::api::Cookies;
using content::BrowserThread;
@@ -206,7 +204,7 @@ void Cookies::GetCookiesOnIOThread(scoped_ptr<base::DictionaryValue> filter,
Passed(&filter), callback))) {
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
base::Bind(&RunGetCookiesCallbackOnUIThread, isolate(),
"Url is not valid", net::CookieList(), callback));
"URL is not valid", net::CookieList(), callback));
}
}
@@ -231,7 +229,7 @@ void Cookies::Remove(const mate::Dictionary& details,
error_message = "Details(url, name) of removing cookie are required.";
}
if (error_message.empty() && !url.is_valid()) {
error_message = "Url is not valid.";
error_message = "URL is not valid.";
}
if (!error_message.empty()) {
RunRemoveCookiesCallbackOnUIThread(isolate(), error_message, callback);
@@ -263,7 +261,7 @@ void Cookies::Set(const base::DictionaryValue& options,
GURL gurl(url);
if (error_message.empty() && !gurl.is_valid()) {
error_message = "Url is not valid.";
error_message = "URL is not valid.";
}
if (!error_message.empty()) {

View File

@@ -78,7 +78,7 @@ class Cookies : public mate::Wrappable {
// Must be called on IO thread.
net::CookieStore* GetCookieStore();
scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
net::URLRequestContextGetter* request_context_getter_;
DISALLOW_COPY_AND_ASSIGN(Cookies);
};

View File

@@ -0,0 +1,205 @@
// 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/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;
char kDownloadItemSavePathKey[] = "DownloadItemSavePathKey";
std::map<uint32, linked_ptr<v8::Global<v8::Value>>> g_download_item_objects;
} // namespace
DownloadItem::SavePathData::SavePathData(const base::FilePath& path) :
path_(path) {
}
const base::FilePath& DownloadItem::SavePathData::path() {
return path_;
}
DownloadItem::DownloadItem(content::DownloadItem* download_item) :
download_item_(download_item) {
download_item_->AddObserver(this);
}
DownloadItem::~DownloadItem() {
Destroy();
}
void DownloadItem::Destroy() {
if (download_item_) {
download_item_->RemoveObserver(this);
auto iter = g_download_item_objects.find(download_item_->GetId());
if (iter != g_download_item_objects.end())
g_download_item_objects.erase(iter);
download_item_ = nullptr;
}
}
bool DownloadItem::IsDestroyed() const {
return download_item_ == nullptr;
}
void DownloadItem::OnDownloadUpdated(content::DownloadItem* item) {
download_item_->IsDone() ? Emit("done", item->GetState()) : Emit("updated");
}
void DownloadItem::OnDownloadDestroyed(content::DownloadItem* download) {
Destroy();
}
int64 DownloadItem::GetReceivedBytes() {
return download_item_->GetReceivedBytes();
}
int64 DownloadItem::GetTotalBytes() {
return download_item_->GetTotalBytes();
}
const GURL& DownloadItem::GetURL() {
return download_item_->GetURL();
}
std::string DownloadItem::GetMimeType() {
return download_item_->GetMimeType();
}
bool DownloadItem::HasUserGesture() {
return download_item_->HasUserGesture();
}
std::string DownloadItem::GetFilename() {
return base::UTF16ToUTF8(net::GenerateFileName(GetURL(),
GetContentDisposition(),
std::string(),
download_item_->GetSuggestedFilename(),
GetMimeType(),
std::string()).LossyDisplayName());
}
std::string DownloadItem::GetContentDisposition() {
return download_item_->GetContentDisposition();
}
void DownloadItem::SetSavePath(const base::FilePath& path) {
download_item_->SetUserData(UserDataKey(), new SavePathData(path));
}
void DownloadItem::Pause() {
download_item_->Pause();
}
void DownloadItem::Resume() {
download_item_->Resume();
}
void DownloadItem::Cancel() {
download_item_->Cancel(true);
}
mate::ObjectTemplateBuilder DownloadItem::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return mate::ObjectTemplateBuilder(isolate)
.SetMethod("pause", &DownloadItem::Pause)
.SetMethod("resume", &DownloadItem::Resume)
.SetMethod("cancel", &DownloadItem::Cancel)
.SetMethod("getReceivedBytes", &DownloadItem::GetReceivedBytes)
.SetMethod("getTotalBytes", &DownloadItem::GetTotalBytes)
.SetMethod("getURL", &DownloadItem::GetURL)
.SetMethod("getMimeType", &DownloadItem::GetMimeType)
.SetMethod("hasUserGesture", &DownloadItem::HasUserGesture)
.SetMethod("getFilename", &DownloadItem::GetFilename)
.SetMethod("getContentDisposition", &DownloadItem::GetContentDisposition)
.SetMethod("setSavePath", &DownloadItem::SetSavePath);
}
// static
mate::Handle<DownloadItem> DownloadItem::Create(
v8::Isolate* isolate, content::DownloadItem* item) {
auto handle = mate::CreateHandle(isolate, new DownloadItem(item));
g_wrap_download_item.Run(handle.ToV8());
g_download_item_objects[item->GetId()] = make_linked_ptr(
new v8::Global<v8::Value>(isolate, handle.ToV8()));
return handle;
}
// static
void* DownloadItem::UserDataKey() {
return &kDownloadItemSavePathKey;
}
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,72 @@
// 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::EventEmitter,
public content::DownloadItem::Observer {
public:
class SavePathData : public base::SupportsUserData::Data {
public:
explicit SavePathData(const base::FilePath& path);
const base::FilePath& path();
private:
base::FilePath path_;
};
static mate::Handle<DownloadItem> Create(v8::Isolate* isolate,
content::DownloadItem* item);
static void* UserDataKey();
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;
void Pause();
void Resume();
void Cancel();
int64 GetReceivedBytes();
int64 GetTotalBytes();
std::string GetMimeType();
bool HasUserGesture();
std::string GetFilename();
std::string GetContentDisposition();
const GURL& GetURL();
void SetSavePath(const base::FilePath& path);
private:
// mate::Wrappable:
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
v8::Isolate* isolate) override;
bool IsDestroyed() const override;
void Destroy();
content::DownloadItem* download_item_;
DISALLOW_COPY_AND_ASSIGN(DownloadItem);
};
} // namespace api
} // namespace atom
#endif // ATOM_BROWSER_API_ATOM_API_DOWNLOAD_ITEM_H_

View File

@@ -23,6 +23,9 @@ GlobalShortcut::GlobalShortcut() {
}
GlobalShortcut::~GlobalShortcut() {
}
void GlobalShortcut::Destroy() {
UnregisterAll();
}

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,16 @@ 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::TrackableObject:
void Destroy() override;
// mate::Wrappable implementations:
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(

View File

@@ -27,6 +27,14 @@ Menu::Menu()
Menu::~Menu() {
}
void Menu::Destroy() {
model_.reset();
}
bool Menu::IsDestroyed() const {
return !model_;
}
void Menu::AfterInit(v8::Isolate* isolate) {
mate::Dictionary wrappable(isolate, GetWrapper(isolate));
mate::Dictionary delegate;
@@ -107,6 +115,10 @@ void Menu::SetSublabel(int index, const base::string16& sublabel) {
model_->SetSublabel(index, sublabel);
}
void Menu::SetRole(int index, const base::string16& role) {
model_->SetRole(index, role);
}
void Menu::Clear() {
model_->Clear();
}
@@ -154,6 +166,7 @@ void Menu::BuildPrototype(v8::Isolate* isolate,
.SetMethod("insertSubMenu", &Menu::InsertSubMenuAt)
.SetMethod("setIcon", &Menu::SetIcon)
.SetMethod("setSublabel", &Menu::SetSublabel)
.SetMethod("setRole", &Menu::SetRole)
.SetMethod("clear", &Menu::Clear)
.SetMethod("getIndexOfCommandId", &Menu::GetIndexOfCommandId)
.SetMethod("getItemCount", &Menu::GetItemCount)

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,9 +37,13 @@ class Menu : public mate::Wrappable,
protected:
Menu();
virtual ~Menu();
~Menu() override;
// mate::TrackableObject:
void Destroy() override;
// mate::Wrappable:
bool IsDestroyed() const override;
void AfterInit(v8::Isolate* isolate) override;
// ui::SimpleMenuModel::Delegate:
@@ -73,6 +77,7 @@ class Menu : public mate::Wrappable,
Menu* menu);
void SetIcon(int index, const gfx::Image& image);
void SetSublabel(int index, const base::string16& sublabel);
void SetRole(int index, const base::string16& role);
void Clear();
int GetIndexOfCommandId(int command_id);
int GetItemCount() const;

View File

@@ -19,6 +19,7 @@ class MenuMac : public Menu {
protected:
MenuMac();
void Destroy() override;
void Popup(Window* window) override;
void PopupAt(Window* window, int x, int y) override;

View File

@@ -18,6 +18,11 @@ namespace api {
MenuMac::MenuMac() {
}
void MenuMac::Destroy() {
menu_controller_.reset();
Menu::Destroy();
}
void MenuMac::Popup(Window* window) {
NativeWindow* native_window = window->window();
if (!native_window)

View File

@@ -5,12 +5,11 @@
#include "atom/browser/api/atom_api_power_monitor.h"
#include "atom/browser/browser.h"
#include "atom/common/node_includes.h"
#include "base/power_monitor/power_monitor.h"
#include "base/power_monitor/power_monitor_device_source.h"
#include "native_mate/dictionary.h"
#include "atom/common/node_includes.h"
namespace atom {
namespace api {
@@ -20,6 +19,9 @@ PowerMonitor::PowerMonitor() {
}
PowerMonitor::~PowerMonitor() {
}
void PowerMonitor::Destroy() {
base::PowerMonitor::Get()->RemoveObserver(this);
}
@@ -41,9 +43,9 @@ void PowerMonitor::OnResume() {
// static
v8::Local<v8::Value> PowerMonitor::Create(v8::Isolate* isolate) {
if (!Browser::Get()->is_ready()) {
node::ThrowError(
isolate->ThrowException(v8::Exception::Error(mate::StringToV8(
isolate,
"Cannot initialize \"power-monitor\" module before app is ready");
"Cannot initialize \"power-monitor\" module before app is ready")));
return v8::Null(isolate);
}

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,17 @@ 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;
// mate::TrackableObject:
void Destroy() override;
// base::PowerObserver implementations:
void OnPowerStateChange(bool on_battery_power) override;

View File

@@ -6,9 +6,9 @@
#include <string>
#include "atom/common/node_includes.h"
#include "content/public/browser/power_save_blocker.h"
#include "native_mate/dictionary.h"
#include "atom/common/node_includes.h"
namespace mate {
@@ -45,6 +45,11 @@ PowerSaveBlocker::PowerSaveBlocker()
PowerSaveBlocker::~PowerSaveBlocker() {
}
void PowerSaveBlocker::Destroy() {
power_save_blocker_types_.clear();
power_save_blocker_.reset();
}
void PowerSaveBlocker::UpdatePowerSaveBlocker() {
if (power_save_blocker_types_.empty()) {
power_save_blocker_.reset();

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,16 @@ 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::TrackableObject:
void Destroy() override;
// mate::Wrappable implementations:
mate::ObjectTemplateBuilder GetObjectTemplateBuilder(
@@ -48,7 +51,6 @@ class PowerSaveBlocker : public mate::Wrappable {
std::map<int, content::PowerSaveBlocker::PowerSaveBlockerType>;
PowerSaveBlockerTypeMap power_save_blocker_types_;
DISALLOW_COPY_AND_ASSIGN(PowerSaveBlocker);
};

View File

@@ -7,264 +7,50 @@
#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/api/atom_api_session.h"
#include "atom/browser/net/adapter_request_job.h"
#include "atom/browser/net/atom_url_request_job_factory.h"
#include "atom/browser/net/url_request_async_asar_job.h"
#include "atom/browser/net/url_request_buffer_job.h"
#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/file_path_converter.h"
#include "atom/common/native_mate_converters/gurl_converter.h"
#include "content/public/browser/browser_thread.h"
#include "native_mate/dictionary.h"
#include "net/url_request/url_request_context.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 {
namespace {
typedef net::URLRequestJobFactory::ProtocolHandler ProtocolHandler;
scoped_refptr<base::RefCountedBytes> BufferToRefCountedBytes(
v8::Local<v8::Value> buf) {
scoped_refptr<base::RefCountedBytes> data(new base::RefCountedBytes);
auto start = reinterpret_cast<const unsigned char*>(node::Buffer::Data(buf));
data->data().assign(start, start + node::Buffer::Length(buf));
return data;
}
class CustomProtocolRequestJob : public AdapterRequestJob {
public:
CustomProtocolRequestJob(Protocol* registry,
ProtocolHandler* protocol_handler,
net::URLRequest* request,
net::NetworkDelegate* network_delegate)
: AdapterRequestJob(protocol_handler, request, network_delegate),
registry_(registry) {
}
void GetJobTypeInUI(const Protocol::JsProtocolHandler& callback) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
v8::Locker locker(registry_->isolate());
v8::HandleScope handle_scope(registry_->isolate());
// Call the JS handler.
v8::Local<v8::Value> result = callback.Run(request());
// Determine the type of the job we are going to create.
if (result->IsString()) {
std::string data = mate::V8ToString(result);
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&AdapterRequestJob::CreateStringJobAndStart,
GetWeakPtr(), "text/plain", "UTF-8", data));
return;
} else if (result->IsObject()) {
v8::Local<v8::Object> obj = result->ToObject();
mate::Dictionary dict(registry_->isolate(), obj);
std::string name = mate::V8ToString(obj->GetConstructorName());
if (name == "RequestStringJob") {
std::string mime_type, charset, data;
dict.Get("mimeType", &mime_type);
dict.Get("charset", &charset);
dict.Get("data", &data);
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&AdapterRequestJob::CreateStringJobAndStart,
GetWeakPtr(), mime_type, charset, data));
return;
} else if (name == "RequestBufferJob") {
std::string mime_type, encoding;
v8::Local<v8::Value> buffer;
dict.Get("mimeType", &mime_type);
dict.Get("encoding", &encoding);
dict.Get("data", &buffer);
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&AdapterRequestJob::CreateBufferJobAndStart,
GetWeakPtr(), mime_type, encoding,
BufferToRefCountedBytes(buffer)));
return;
} else if (name == "RequestFileJob") {
base::FilePath path;
dict.Get("path", &path);
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&AdapterRequestJob::CreateFileJobAndStart,
GetWeakPtr(), path));
return;
} else if (name == "RequestErrorJob") {
int error = net::ERR_NOT_IMPLEMENTED;
dict.Get("error", &error);
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&AdapterRequestJob::CreateErrorJobAndStart,
GetWeakPtr(), error));
return;
} else if (name == "RequestHttpJob") {
GURL url;
std::string method, referrer;
dict.Get("url", &url);
dict.Get("method", &method);
dict.Get("referrer", &referrer);
v8::Local<v8::Value> value;
mate::Handle<Session> session;
scoped_refptr<net::URLRequestContextGetter> request_context_getter;
// "session" null -> pass nullptr;
// "session" a Session object -> use passed session.
// "session" undefined -> use current session;
if (dict.Get("session", &session))
request_context_getter =
session->browser_context()->GetRequestContext();
else if (dict.Get("session", &value) && value->IsNull())
request_context_getter = nullptr;
else
request_context_getter = registry_->request_context_getter();
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&AdapterRequestJob::CreateHttpJobAndStart, GetWeakPtr(),
request_context_getter, url, method, referrer));
return;
}
}
// Try the default protocol handler if we have.
if (default_protocol_handler()) {
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&AdapterRequestJob::CreateJobFromProtocolHandlerAndStart,
GetWeakPtr()));
return;
}
// Fallback to the not implemented error.
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(&AdapterRequestJob::CreateErrorJobAndStart,
GetWeakPtr(), net::ERR_NOT_IMPLEMENTED));
}
// AdapterRequestJob:
void GetJobType() override {
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
base::Bind(&CustomProtocolRequestJob::GetJobTypeInUI,
base::Unretained(this),
registry_->GetProtocolHandler(request()->url().scheme())));
}
private:
Protocol* registry_; // Weak, the Protocol class is expected to live forever.
};
// Always return the same CustomProtocolRequestJob for all requests, because
// the content API needs the ProtocolHandler to return a job immediately, and
// getting the real job from the JS requires asynchronous calls, so we have
// to create an adapter job first.
// Users can also pass an extra ProtocolHandler as the fallback one when
// registered handler doesn't want to deal with the request.
class CustomProtocolHandler : public ProtocolHandler {
public:
CustomProtocolHandler(api::Protocol* registry,
ProtocolHandler* protocol_handler = NULL)
: registry_(registry), protocol_handler_(protocol_handler) {
}
net::URLRequestJob* MaybeCreateJob(
net::URLRequest* request,
net::NetworkDelegate* network_delegate) const override {
return new CustomProtocolRequestJob(registry_, protocol_handler_.get(),
request, network_delegate);
}
ProtocolHandler* ReleaseDefaultProtocolHandler() {
return protocol_handler_.release();
}
ProtocolHandler* original_handler() { return protocol_handler_.get(); }
private:
Protocol* registry_; // Weak, the Protocol class is expected to live forever.
scoped_ptr<ProtocolHandler> protocol_handler_;
DISALLOW_COPY_AND_ASSIGN(CustomProtocolHandler);
};
std::string ConvertErrorCode(int error_code) {
switch (error_code) {
case Protocol::ERR_SCHEME_REGISTERED:
return "The Scheme is already registered";
case Protocol::ERR_SCHEME_UNREGISTERED:
return "The Scheme has not been registered";
case Protocol::ERR_SCHEME_INTERCEPTED:
return "There is no protocol handler to intercept";
case Protocol::ERR_SCHEME_UNINTERCEPTED:
return "The protocol is not intercepted";
case Protocol::ERR_NO_SCHEME:
return "The Scheme does not exist.";
case Protocol::ERR_SCHEME:
return "Cannot intercept custom protocols";
default:
NOTREACHED();
return std::string();
}
}
} // namespace
Protocol::Protocol(AtomBrowserContext* browser_context)
: request_context_getter_(browser_context->GetRequestContext()),
job_factory_(browser_context->job_factory()) {
CHECK(job_factory_);
}
Protocol::JsProtocolHandler Protocol::GetProtocolHandler(
const std::string& scheme) {
return protocol_handlers_[scheme];
}
void Protocol::OnIOActionCompleted(const JsCompletionCallback& callback,
int error) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
if (error) {
callback.Run(v8::Exception::Error(
mate::StringToV8(isolate(), ConvertErrorCode(error))));
return;
}
callback.Run(v8::Null(isolate()));
}
mate::ObjectTemplateBuilder Protocol::GetObjectTemplateBuilder(
v8::Isolate* isolate) {
return mate::ObjectTemplateBuilder(isolate)
.SetMethod("registerStandardSchemes", &Protocol::RegisterStandardSchemes)
.SetMethod("isHandledProtocol", &Protocol::IsHandledProtocol)
.SetMethod("_registerProtocol", &Protocol::RegisterProtocol)
.SetMethod("_unregisterProtocol", &Protocol::UnregisterProtocol)
.SetMethod("_interceptProtocol", &Protocol::InterceptProtocol)
.SetMethod("_uninterceptProtocol", &Protocol::UninterceptProtocol);
.SetMethod("registerStringProtocol",
&Protocol::RegisterProtocol<URLRequestStringJob>)
.SetMethod("registerBufferProtocol",
&Protocol::RegisterProtocol<URLRequestBufferJob>)
.SetMethod("registerFileProtocol",
&Protocol::RegisterProtocol<URLRequestAsyncAsarJob>)
.SetMethod("registerHttpProtocol",
&Protocol::RegisterProtocol<URLRequestFetchJob>)
.SetMethod("unregisterProtocol", &Protocol::UnregisterProtocol)
.SetMethod("isProtocolHandled", &Protocol::IsProtocolHandled)
.SetMethod("interceptStringProtocol",
&Protocol::InterceptProtocol<URLRequestStringJob>)
.SetMethod("interceptBufferProtocol",
&Protocol::InterceptProtocol<URLRequestBufferJob>)
.SetMethod("interceptFileProtocol",
&Protocol::InterceptProtocol<URLRequestAsyncAsarJob>)
.SetMethod("interceptHttpProtocol",
&Protocol::InterceptProtocol<URLRequestFetchJob>)
.SetMethod("uninterceptProtocol", &Protocol::UninterceptProtocol);
}
void Protocol::RegisterStandardSchemes(
@@ -272,131 +58,86 @@ void Protocol::RegisterStandardSchemes(
atom::AtomBrowserClient::SetCustomSchemes(schemes);
}
void Protocol::IsHandledProtocol(const std::string& scheme,
const net::CompletionCallback& callback) {
BrowserThread::PostTaskAndReplyWithResult(BrowserThread::IO, FROM_HERE,
base::Bind(&AtomURLRequestJobFactory::IsHandledProtocol,
base::Unretained(job_factory_), scheme),
void Protocol::UnregisterProtocol(
const std::string& scheme, mate::Arguments* args) {
CompletionCallback callback;
args->GetNext(&callback);
content::BrowserThread::PostTaskAndReplyWithResult(
content::BrowserThread::IO, FROM_HERE,
base::Bind(&Protocol::UnregisterProtocolInIO,
base::Unretained(this), scheme),
base::Bind(&Protocol::OnIOCompleted,
base::Unretained(this), callback));
}
Protocol::ProtocolError Protocol::UnregisterProtocolInIO(
const std::string& scheme) {
if (!job_factory_->HasProtocolHandler(scheme))
return PROTOCOL_NOT_REGISTERED;
job_factory_->SetProtocolHandler(scheme, nullptr);
return PROTOCOL_OK;
}
void Protocol::IsProtocolHandled(const std::string& scheme,
const BooleanCallback& callback) {
content::BrowserThread::PostTaskAndReplyWithResult(
content::BrowserThread::IO, FROM_HERE,
base::Bind(&Protocol::IsProtocolHandledInIO,
base::Unretained(this), scheme),
callback);
}
void Protocol::RegisterProtocol(v8::Isolate* isolate,
const std::string& scheme,
const JsProtocolHandler& handler,
const JsCompletionCallback& callback) {
BrowserThread::PostTaskAndReplyWithResult(BrowserThread::IO, FROM_HERE,
base::Bind(&Protocol::RegisterProtocolInIO,
base::Unretained(this), scheme, handler),
base::Bind(&Protocol::OnIOActionCompleted,
base::Unretained(this), callback));
bool Protocol::IsProtocolHandledInIO(const std::string& scheme) {
return job_factory_->IsHandledProtocol(scheme);
}
void Protocol::UnregisterProtocol(v8::Isolate* isolate,
const std::string& scheme,
const JsCompletionCallback& callback) {
BrowserThread::PostTaskAndReplyWithResult(BrowserThread::IO, FROM_HERE,
base::Bind(&Protocol::UnregisterProtocolInIO,
base::Unretained(this), scheme),
base::Bind(&Protocol::OnIOActionCompleted,
base::Unretained(this), callback));
}
void Protocol::InterceptProtocol(v8::Isolate* isolate,
const std::string& scheme,
const JsProtocolHandler& handler,
const JsCompletionCallback& callback) {
BrowserThread::PostTaskAndReplyWithResult(BrowserThread::IO, FROM_HERE,
base::Bind(&Protocol::InterceptProtocolInIO,
base::Unretained(this), scheme, handler),
base::Bind(&Protocol::OnIOActionCompleted,
base::Unretained(this), callback));
}
void Protocol::UninterceptProtocol(v8::Isolate* isolate,
const std::string& scheme,
const JsCompletionCallback& callback) {
BrowserThread::PostTaskAndReplyWithResult(BrowserThread::IO, FROM_HERE,
void Protocol::UninterceptProtocol(
const std::string& scheme, mate::Arguments* args) {
CompletionCallback callback;
args->GetNext(&callback);
content::BrowserThread::PostTaskAndReplyWithResult(
content::BrowserThread::IO, FROM_HERE,
base::Bind(&Protocol::UninterceptProtocolInIO,
base::Unretained(this), scheme),
base::Bind(&Protocol::OnIOActionCompleted,
base::Bind(&Protocol::OnIOCompleted,
base::Unretained(this), callback));
}
int Protocol::RegisterProtocolInIO(const std::string& scheme,
const JsProtocolHandler& handler) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
if (ContainsKey(protocol_handlers_, scheme) ||
job_factory_->IsHandledProtocol(scheme)) {
return ERR_SCHEME_REGISTERED;
}
protocol_handlers_[scheme] = handler;
job_factory_->SetProtocolHandler(scheme, new CustomProtocolHandler(this));
return OK;
Protocol::ProtocolError Protocol::UninterceptProtocolInIO(
const std::string& scheme) {
if (!original_protocols_.contains(scheme))
return PROTOCOL_NOT_INTERCEPTED;
job_factory_->ReplaceProtocol(scheme,
original_protocols_.take_and_erase(scheme));
return PROTOCOL_OK;
}
int Protocol::UnregisterProtocolInIO(const std::string& scheme) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
void Protocol::OnIOCompleted(
const CompletionCallback& callback, ProtocolError error) {
// The completion callback is optional.
if (callback.is_null())
return;
ProtocolHandlersMap::iterator it(protocol_handlers_.find(scheme));
if (it == protocol_handlers_.end()) {
return ERR_SCHEME_UNREGISTERED;
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
if (error == PROTOCOL_OK) {
callback.Run(v8::Null(isolate()));
} else {
std::string str = ErrorCodeToString(error);
callback.Run(v8::Exception::Error(mate::StringToV8(isolate(), str)));
}
protocol_handlers_.erase(it);
job_factory_->SetProtocolHandler(scheme, NULL);
return OK;
}
int Protocol::InterceptProtocolInIO(const std::string& scheme,
const JsProtocolHandler& handler) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
// Force the request context to initialize, otherwise we might have nothing
// to intercept.
request_context_getter_->GetURLRequestContext();
if (!job_factory_->HasProtocolHandler(scheme))
return ERR_NO_SCHEME;
if (ContainsKey(protocol_handlers_, scheme))
return ERR_SCHEME;
protocol_handlers_[scheme] = handler;
ProtocolHandler* original_handler = job_factory_->GetProtocolHandler(scheme);
if (original_handler == nullptr) {
return ERR_SCHEME_INTERCEPTED;
std::string Protocol::ErrorCodeToString(ProtocolError error) {
switch (error) {
case PROTOCOL_FAIL: return "Failed to manipulate protocol factory";
case PROTOCOL_REGISTERED: return "The scheme has been registred";
case PROTOCOL_NOT_REGISTERED: return "The scheme has not been registred";
case PROTOCOL_INTERCEPTED: return "The scheme has been intercepted";
case PROTOCOL_NOT_INTERCEPTED: return "The scheme has not been intercepted";
default: return "Unexpected error";
}
job_factory_->ReplaceProtocol(
scheme, new CustomProtocolHandler(this, original_handler));
return OK;
}
int Protocol::UninterceptProtocolInIO(const std::string& scheme) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
ProtocolHandlersMap::iterator it(protocol_handlers_.find(scheme));
if (it == protocol_handlers_.end())
return ERR_SCHEME_UNREGISTERED;
protocol_handlers_.erase(it);
CustomProtocolHandler* handler = static_cast<CustomProtocolHandler*>(
job_factory_->GetProtocolHandler(scheme));
if (handler->original_handler() == nullptr) {
return ERR_SCHEME_UNINTERCEPTED;
}
// Reset the protocol handler to the orignal one and delete current protocol
// handler.
ProtocolHandler* original_handler = handler->ReleaseDefaultProtocolHandler();
delete job_factory_->ReplaceProtocol(scheme, original_handler);
return OK;
}
// static

View File

@@ -9,10 +9,14 @@
#include <map>
#include <vector>
#include "atom/browser/api/event_emitter.h"
#include "atom/browser/net/atom_url_request_job_factory.h"
#include "base/callback.h"
#include "base/containers/scoped_ptr_hash_map.h"
#include "content/public/browser/browser_thread.h"
#include "native_mate/arguments.h"
#include "native_mate/dictionary.h"
#include "native_mate/handle.h"
#include "net/base/completion_callback.h"
#include "native_mate/wrappable.h"
namespace net {
class URLRequest;
@@ -26,31 +30,16 @@ class AtomURLRequestJobFactory;
namespace api {
class Protocol : public mate::EventEmitter {
class Protocol : public mate::Wrappable {
public:
using JsProtocolHandler =
base::Callback<v8::Local<v8::Value>(const net::URLRequest*)>;
using JsCompletionCallback = base::Callback<void(v8::Local<v8::Value>)>;
enum {
OK = 0,
ERR_SCHEME_REGISTERED,
ERR_SCHEME_UNREGISTERED,
ERR_SCHEME_INTERCEPTED,
ERR_SCHEME_UNINTERCEPTED,
ERR_NO_SCHEME,
ERR_SCHEME
};
using Handler =
base::Callback<void(const net::URLRequest*, v8::Local<v8::Value>)>;
using CompletionCallback = base::Callback<void(v8::Local<v8::Value>)>;
using BooleanCallback = base::Callback<void(bool)>;
static mate::Handle<Protocol> Create(
v8::Isolate* isolate, AtomBrowserContext* browser_context);
JsProtocolHandler GetProtocolHandler(const std::string& scheme);
net::URLRequestContextGetter* request_context_getter() {
return request_context_getter_.get();
}
protected:
explicit Protocol(AtomBrowserContext* browser_context);
@@ -59,48 +48,139 @@ class Protocol : public mate::EventEmitter {
v8::Isolate* isolate);
private:
typedef std::map<std::string, JsProtocolHandler> ProtocolHandlersMap;
// Possible errors.
enum ProtocolError {
PROTOCOL_OK, // no error
PROTOCOL_FAIL, // operation failed, should never occur
PROTOCOL_REGISTERED,
PROTOCOL_NOT_REGISTERED,
PROTOCOL_INTERCEPTED,
PROTOCOL_NOT_INTERCEPTED,
};
// Callback called after performing action on IO thread.
void OnIOActionCompleted(const JsCompletionCallback& callback,
int error);
// The protocol handler that will create a protocol handler for certain
// request job.
template<typename RequestJob>
class CustomProtocolHandler
: public net::URLRequestJobFactory::ProtocolHandler {
public:
CustomProtocolHandler(
v8::Isolate* isolate,
net::URLRequestContextGetter* request_context,
const Handler& handler)
: isolate_(isolate),
request_context_(request_context),
handler_(handler) {}
~CustomProtocolHandler() override {}
net::URLRequestJob* MaybeCreateJob(
net::URLRequest* request,
net::NetworkDelegate* network_delegate) const override {
RequestJob* request_job = new RequestJob(request, network_delegate);
request_job->SetHandlerInfo(isolate_, request_context_, handler_);
return request_job;
}
private:
v8::Isolate* isolate_;
net::URLRequestContextGetter* request_context_;
Protocol::Handler handler_;
DISALLOW_COPY_AND_ASSIGN(CustomProtocolHandler);
};
// Register schemes to standard scheme list.
void RegisterStandardSchemes(const std::vector<std::string>& schemes);
// Returns whether a scheme has been registered.
void IsHandledProtocol(const std::string& scheme,
const net::CompletionCallback& callback);
// Register the protocol with certain request job.
template<typename RequestJob>
void RegisterProtocol(const std::string& scheme,
const Handler& handler,
mate::Arguments* args) {
CompletionCallback callback;
args->GetNext(&callback);
content::BrowserThread::PostTaskAndReplyWithResult(
content::BrowserThread::IO, FROM_HERE,
base::Bind(&Protocol::RegisterProtocolInIO<RequestJob>,
base::Unretained(this), scheme, handler),
base::Bind(&Protocol::OnIOCompleted,
base::Unretained(this), callback));
}
template<typename RequestJob>
ProtocolError RegisterProtocolInIO(const std::string& scheme,
const Handler& handler) {
if (job_factory_->IsHandledProtocol(scheme))
return PROTOCOL_REGISTERED;
scoped_ptr<CustomProtocolHandler<RequestJob>> protocol_handler(
new CustomProtocolHandler<RequestJob>(
isolate(), request_context_getter_, handler));
if (job_factory_->SetProtocolHandler(scheme, protocol_handler.Pass()))
return PROTOCOL_OK;
else
return PROTOCOL_FAIL;
}
// Register/unregister an networking |scheme| which would be handled by
// |callback|.
void RegisterProtocol(v8::Isolate* isolate,
const std::string& scheme,
const JsProtocolHandler& handler,
const JsCompletionCallback& callback);
void UnregisterProtocol(v8::Isolate* isolate, const std::string& scheme,
const JsCompletionCallback& callback);
// Unregister the protocol handler that handles |scheme|.
void UnregisterProtocol(const std::string& scheme, mate::Arguments* args);
ProtocolError UnregisterProtocolInIO(const std::string& scheme);
// Intercept/unintercept an existing protocol handler.
void InterceptProtocol(v8::Isolate* isolate,
const std::string& scheme,
const JsProtocolHandler& handler,
const JsCompletionCallback& callback);
void UninterceptProtocol(v8::Isolate* isolate, const std::string& scheme,
const JsCompletionCallback& callback);
// Whether the protocol has handler registered.
void IsProtocolHandled(const std::string& scheme,
const BooleanCallback& callback);
bool IsProtocolHandledInIO(const std::string& scheme);
// The networking related operations have to be done in IO thread.
int RegisterProtocolInIO(const std::string& scheme,
const JsProtocolHandler& handler);
int UnregisterProtocolInIO(const std::string& scheme);
int InterceptProtocolInIO(const std::string& scheme,
const JsProtocolHandler& handler);
int UninterceptProtocolInIO(const std::string& scheme);
// Replace the protocol handler with a new one.
template<typename RequestJob>
void InterceptProtocol(const std::string& scheme,
const Handler& handler,
mate::Arguments* args) {
CompletionCallback callback;
args->GetNext(&callback);
content::BrowserThread::PostTaskAndReplyWithResult(
content::BrowserThread::IO, FROM_HERE,
base::Bind(&Protocol::InterceptProtocolInIO<RequestJob>,
base::Unretained(this), scheme, handler),
base::Bind(&Protocol::OnIOCompleted,
base::Unretained(this), callback));
}
template<typename RequestJob>
ProtocolError InterceptProtocolInIO(const std::string& scheme,
const Handler& handler) {
if (!job_factory_->IsHandledProtocol(scheme))
return PROTOCOL_NOT_REGISTERED;
// It is possible a protocol is handled but can not be intercepted.
if (!job_factory_->HasProtocolHandler(scheme))
return PROTOCOL_FAIL;
if (ContainsKey(original_protocols_, scheme))
return PROTOCOL_INTERCEPTED;
scoped_ptr<CustomProtocolHandler<RequestJob>> protocol_handler(
new CustomProtocolHandler<RequestJob>(
isolate(), request_context_getter_, handler));
original_protocols_.set(
scheme,
job_factory_->ReplaceProtocol(scheme, protocol_handler.Pass()));
return PROTOCOL_OK;
}
scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
// Restore the |scheme| to its original protocol handler.
void UninterceptProtocol(const std::string& scheme, mate::Arguments* args);
ProtocolError UninterceptProtocolInIO(const std::string& scheme);
AtomURLRequestJobFactory* job_factory_;
ProtocolHandlersMap protocol_handlers_;
// Convert error code to JS exception and call the callback.
void OnIOCompleted(const CompletionCallback& callback, ProtocolError error);
// Convert error code to string.
std::string ErrorCodeToString(ProtocolError error);
net::URLRequestContextGetter* request_context_getter_;
// Map that stores the original protocols of schemes.
using OriginalProtocolsMap = base::ScopedPtrHashMap<
std::string,
scoped_ptr<net::URLRequestJobFactory::ProtocolHandler>>;
OriginalProtocolsMap original_protocols_;
AtomURLRequestJobFactory* job_factory_; // weak ref
DISALLOW_COPY_AND_ASSIGN(Protocol);
};

View File

@@ -113,14 +113,16 @@ mate::ObjectTemplateBuilder Screen::GetObjectTemplateBuilder(
// static
v8::Local<v8::Value> Screen::Create(v8::Isolate* isolate) {
if (!Browser::Get()->is_ready()) {
node::ThrowError(isolate,
"Cannot initialize \"screen\" module before app is ready");
isolate->ThrowException(v8::Exception::Error(mate::StringToV8(
isolate,
"Cannot initialize \"screen\" module before app is ready")));
return v8::Null(isolate);
}
gfx::Screen* screen = gfx::Screen::GetNativeScreen();
if (!screen) {
node::ThrowError(isolate, "Failed to get screen information");
isolate->ThrowException(v8::Exception::Error(mate::StringToV8(
isolate, "Failed to get screen information")));
return v8::Null(isolate);
}

View File

@@ -8,14 +8,23 @@
#include <vector>
#include "atom/browser/api/atom_api_cookies.h"
#include "atom/browser/api/atom_api_download_item.h"
#include "atom/browser/api/atom_api_web_contents.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/net/atom_cert_verifier.h"
#include "atom/common/native_mate_converters/callback.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_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"
@@ -28,8 +37,6 @@
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_context_getter.h"
#include "atom/common/node_includes.h"
using content::BrowserThread;
using content::StoragePartition;
@@ -101,6 +108,24 @@ struct Converter<ClearStorageDataOptions> {
}
};
template<>
struct Converter<net::ProxyConfig> {
static bool FromV8(v8::Isolate* isolate,
v8::Local<v8::Value> val,
net::ProxyConfig* out) {
std::string proxy;
if (!ConvertFromV8(isolate, val, &proxy))
return false;
auto pac_url = GURL(proxy);
if (pac_url.is_valid()) {
out->set_pac_url(pac_url);
} else {
out->proxy_rules().ParseFromString(proxy);
}
return true;
}
};
} // namespace mate
namespace atom {
@@ -109,6 +134,10 @@ namespace api {
namespace {
// The wrapSession funtion which is implemented in JavaScript
using WrapSessionCallback = base::Callback<void(v8::Local<v8::Value>)>;
WrapSessionCallback g_wrap_session;
class ResolveProxyHelper {
public:
ResolveProxyHelper(AtomBrowserContext* browser_context,
@@ -201,12 +230,12 @@ void ClearHttpCacheInIO(
}
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));
// Refetches and applies the new pac script if provided.
proxy_service->ForceReloadProxyConfig();
RunCallbackInUI(callback);
}
@@ -215,13 +244,43 @@ void SetProxyInIO(net::URLRequestContextGetter* getter,
Session::Session(AtomBrowserContext* browser_context)
: browser_context_(browser_context) {
AttachAsUserData(browser_context);
// Observe DownloadManger to get download notifications.
content::BrowserContext::GetDownloadManager(browser_context)->
AddObserver(this);
}
Session::~Session() {
content::BrowserContext::GetDownloadManager(browser_context())->
RemoveObserver(this);
Destroy();
}
void Session::OnDownloadCreated(content::DownloadManager* manager,
content::DownloadItem* item) {
auto web_contents = item->GetWebContents();
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);
new ResolveProxyHelper(browser_context(), url, callback);
}
void Session::ClearCache(const net::CompletionCallback& callback) {
@@ -242,18 +301,18 @@ void Session::ClearStorageData(mate::Arguments* args) {
}
auto storage_partition =
content::BrowserContext::GetStoragePartition(browser_context_, nullptr);
content::BrowserContext::GetStoragePartition(browser_context(), nullptr);
storage_partition->ClearData(
options.storage_types, options.quota_types, options.origin,
content::StoragePartition::OriginMatcherFunction(),
base::Time(), base::Time::Max(), callback);
}
void Session::SetProxy(const std::string& proxy,
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) {
@@ -261,9 +320,57 @@ 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);
}
v8::Local<v8::Value> Session::Cookies(v8::Isolate* isolate) {
if (cookies_.IsEmpty()) {
auto handle = atom::api::Cookies::Create(isolate, browser_context_);
auto handle = atom::api::Cookies::Create(isolate, browser_context());
cookies_.Reset(isolate, handle.ToV8());
}
return v8::Local<v8::Value>::New(isolate, cookies_);
@@ -277,20 +384,58 @@ mate::ObjectTemplateBuilder Session::GetObjectTemplateBuilder(
.SetMethod("clearStorageData", &Session::ClearStorageData)
.SetMethod("setProxy", &Session::SetProxy)
.SetMethod("setDownloadPath", &Session::SetDownloadPath)
.SetMethod("enableNetworkEmulation", &Session::EnableNetworkEmulation)
.SetMethod("disableNetworkEmulation", &Session::DisableNetworkEmulation)
.SetMethod("setCertificateVerifyProc", &Session::SetCertVerifyProc)
.SetProperty("cookies", &Session::Cookies);
}
// static
mate::Handle<Session> Session::CreateFrom(
v8::Isolate* isolate,
AtomBrowserContext* browser_context) {
v8::Isolate* isolate, AtomBrowserContext* browser_context) {
auto existing = TrackableObject::FromWrappedClass(isolate, browser_context);
if (existing)
return mate::CreateHandle(isolate, static_cast<Session*>(existing));
return mate::CreateHandle(isolate, new Session(browser_context));
auto handle = mate::CreateHandle(isolate, new Session(browser_context));
g_wrap_session.Run(handle.ToV8());
return handle;
}
// static
mate::Handle<Session> Session::FromPartition(
v8::Isolate* isolate, const std::string& partition, bool in_memory) {
auto browser_context = brightray::BrowserContext::From(partition, in_memory);
return CreateFrom(isolate,
static_cast<AtomBrowserContext*>(browser_context.get()));
}
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
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("fromPartition", &atom::api::Session::FromPartition);
dict.SetMethod("_setWrapSession", &atom::api::SetWrapSession);
}
} // namespace
NODE_MODULE_CONTEXT_AWARE_BUILTIN(atom_browser_session, Initialize)

View File

@@ -8,6 +8,7 @@
#include <string>
#include "atom/browser/api/trackable_object.h"
#include "content/public/browser/download_manager.h"
#include "native_mate/handle.h"
#include "net/base/completion_callback.h"
@@ -19,6 +20,11 @@ class FilePath;
namespace mate {
class Arguments;
class Dictionary;
}
namespace net {
class ProxyConfig;
}
namespace atom {
@@ -27,7 +33,8 @@ class AtomBrowserContext;
namespace api {
class Session: public mate::TrackableObject<Session> {
class Session: public mate::TrackableObject<Session>,
public content::DownloadManager::Observer {
public:
using ResolveProxyCallback = base::Callback<void(std::string)>;
@@ -35,27 +42,43 @@ class Session: public mate::TrackableObject<Session> {
static mate::Handle<Session> CreateFrom(
v8::Isolate* isolate, AtomBrowserContext* browser_context);
AtomBrowserContext* browser_context() const { return browser_context_; }
// Gets the Session of |partition| and |in_memory|.
static mate::Handle<Session> FromPartition(
v8::Isolate* isolate, const std::string& partition, bool in_memory);
AtomBrowserContext* browser_context() const { return browser_context_.get(); }
protected:
explicit Session(AtomBrowserContext* browser_context);
~Session();
// mate::Wrappable implementations:
// content::DownloadManager::Observer:
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);
void ClearStorageData(mate::Arguments* args);
void SetProxy(const std::string& proxy, const base::Closure& callback);
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);
v8::Local<v8::Value> Cookies(v8::Isolate* isolate);
// Cached object for cookies API.
v8::Global<v8::Value> cookies_;
AtomBrowserContext* browser_context_; // weak ref
scoped_refptr<AtomBrowserContext> browser_context_;
DISALLOW_COPY_AND_ASSIGN(Session);
};

View File

@@ -12,13 +12,12 @@
#include "atom/common/native_mate_converters/gfx_converter.h"
#include "atom/common/native_mate_converters/image_converter.h"
#include "atom/common/native_mate_converters/string16_converter.h"
#include "atom/common/node_includes.h"
#include "native_mate/constructor.h"
#include "native_mate/dictionary.h"
#include "ui/events/event_constants.h"
#include "ui/gfx/image/image.h"
#include "atom/common/node_includes.h"
namespace atom {
namespace api {
@@ -35,7 +34,8 @@ Tray::~Tray() {
// static
mate::Wrappable* Tray::New(v8::Isolate* isolate, const gfx::Image& image) {
if (!Browser::Get()->is_ready()) {
node::ThrowError(isolate, "Cannot create Tray before app is ready");
isolate->ThrowException(v8::Exception::Error(mate::StringToV8(
isolate, "Cannot create Tray before app is ready")));
return nullptr;
}
return new Tray(image);
@@ -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,17 +67,33 @@ 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);
}
void Tray::OnDragEntered() {
Emit("drag-enter");
}
void Tray::OnDragExited() {
Emit("drag-leave");
}
void Tray::OnDragEnded() {
Emit("drag-end");
}
bool Tray::IsDestroyed() const {
return !tray_icon_;
}
@@ -145,6 +161,7 @@ void Tray::BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::ObjectTemplate> prototype) {
mate::ObjectTemplateBuilder(isolate, prototype)
.SetMethod("destroy", &Tray::Destroy, true)
.SetMethod("isDestroyed", &Tray::IsDestroyed, true)
.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,18 @@ 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();
// mate::TrackableObject:
void Destroy() override;
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

@@ -7,14 +7,18 @@
#include <set>
#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_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"
@@ -24,25 +28,33 @@
#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"
#include "content/public/browser/browser_plugin_guest_manager.h"
#include "content/public/browser/favicon_status.h"
#include "content/public/browser/native_web_keyboard_event.h"
#include "content/public/browser/navigation_details.h"
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/plugin_service.h"
#include "content/public/browser/render_frame_host.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_widget_host_view.h"
#include "content/public/browser/resource_request_details.h"
#include "content/public/browser/service_worker_context.h"
#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"
@@ -54,9 +66,21 @@ 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));
}
bool NotifyZoomLevelChanged(
double level, content::WebContents* guest_web_contents) {
guest_web_contents->SendToAllFrames(
new AtomViewMsg_SetZoomLevel(MSG_ROUTING_NONE, level));
// Return false to iterate over all guests.
return false;
}
} // namespace
@@ -114,6 +138,53 @@ struct Converter<WindowOpenDisposition> {
}
};
template<>
struct Converter<net::HttpResponseHeaders*> {
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
net::HttpResponseHeaders* headers) {
base::DictionaryValue response_headers;
if (headers) {
void* iter = nullptr;
std::string key;
std::string value;
while (headers->EnumerateHeaderLines(&iter, &key, &value)) {
key = base::StringToLowerASCII(key);
if (response_headers.HasKey(key)) {
base::ListValue* values = nullptr;
if (response_headers.GetList(key, &values))
values->AppendString(value);
} else {
scoped_ptr<base::ListValue> values(new base::ListValue());
values->AppendString(value);
response_headers.Set(key, values.Pass());
}
}
}
return ConvertToV8(isolate, response_headers);
}
};
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::StringToLowerASCII(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
@@ -125,7 +196,7 @@ namespace {
v8::Persistent<v8::ObjectTemplate> template_;
// The wrapWebContents funtion which is implemented in JavaScript
// The wrapWebContents function which is implemented in JavaScript
using WrapWebContentsCallback = base::Callback<void(v8::Local<v8::Value>)>;
WrapWebContentsCallback g_wrap_web_contents;
@@ -153,23 +224,41 @@ WebContents::WebContents(content::WebContents* web_contents)
web_contents->SetUserAgentOverride(GetBrowserContext()->GetUserAgent());
}
WebContents::WebContents(const mate::Dictionary& options) {
WebContents::WebContents(v8::Isolate* isolate,
const mate::Dictionary& options) {
// Whether it is a guest WebContents.
bool is_guest = false;
options.Get("isGuest", &is_guest);
type_ = is_guest ? WEB_VIEW : BROWSER_WINDOW;
auto browser_context = AtomBrowserMainParts::Get()->browser_context();
// Obtain the session.
std::string partition;
mate::Handle<api::Session> session;
if (options.Get("session", &session)) {
} else if (options.Get("partition", &partition) && !partition.empty()) {
bool in_memory = true;
if (base::StartsWith(partition, "persist:", base::CompareCase::SENSITIVE)) {
in_memory = false;
partition = partition.substr(8);
}
session = Session::FromPartition(isolate, partition, in_memory);
} else {
// Use the default session if not specified.
session = Session::FromPartition(isolate, "", false);
}
session_.Reset(isolate, session.ToV8());
content::WebContents* web_contents;
if (is_guest) {
content::SiteInstance* site_instance = content::SiteInstance::CreateForURL(
browser_context, GURL("chrome-guest://fake-host"));
content::WebContents::CreateParams params(browser_context, site_instance);
session->browser_context(), GURL("chrome-guest://fake-host"));
content::WebContents::CreateParams params(
session->browser_context(), site_instance);
guest_delegate_.reset(new WebViewGuestDelegate);
params.guest_delegate = guest_delegate_.get();
web_contents = content::WebContents::Create(params);
} else {
content::WebContents::CreateParams params(browser_context);
content::WebContents::CreateParams params(session->browser_context());
web_contents = content::WebContents::Create(params);
}
@@ -177,6 +266,11 @@ WebContents::WebContents(const mate::Dictionary& options) {
AttachAsUserData(web_contents);
InitWithWebContents(web_contents);
managed_web_contents()->GetView()->SetDelegate(this);
// Save the preferences in C++.
new WebContentsPreferences(web_contents, options);
web_contents->SetUserAgentOverride(GetBrowserContext()->GetUserAgent());
if (is_guest) {
@@ -217,7 +311,7 @@ bool WebContents::ShouldCreateWebContents(
int route_id,
int main_frame_route_id,
WindowContainerType window_container_type,
const base::string16& frame_name,
const std::string& frame_name,
const GURL& target_url,
const std::string& partition_id,
content::SessionStorageNamespace* session_storage_namespace) {
@@ -277,7 +371,10 @@ bool WebContents::IsPopupOrPanel(const content::WebContents* source) const {
void WebContents::HandleKeyboardEvent(
content::WebContents* source,
const content::NativeWebKeyboardEvent& event) {
if (type_ == BROWSER_WINDOW) {
if (event.windowsKeyCode == ui::VKEY_ESCAPE && is_html_fullscreen()) {
// Escape exits tabbed fullscreen mode.
ExitFullscreenModeForTab(source);
} else if (type_ == BROWSER_WINDOW) {
owner_window()->HandleKeyboardEvent(source, event);
} else if (type_ == WEB_VIEW && guest_delegate_) {
// Send the unhandled keyboard events back to the embedder.
@@ -308,6 +405,15 @@ 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;
}
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.
@@ -359,15 +465,17 @@ void WebContents::DidFailProvisionalLoad(
content::RenderFrameHost* render_frame_host,
const GURL& validated_url,
int error_code,
const base::string16& error_description) {
Emit("did-fail-load", error_code, error_description);
const base::string16& error_description,
bool was_ignored_by_handler) {
Emit("did-fail-load", error_code, error_description, validated_url);
}
void WebContents::DidFailLoad(content::RenderFrameHost* render_frame_host,
const GURL& validated_url,
int error_code,
const base::string16& error_description) {
Emit("did-fail-load", error_code, error_description);
const base::string16& error_description,
bool was_ignored_by_handler) {
Emit("did-fail-load", error_code, error_description, validated_url);
}
void WebContents::DidStartLoading() {
@@ -380,30 +488,6 @@ void WebContents::DidStopLoading() {
void WebContents::DidGetResourceResponseStart(
const content::ResourceRequestDetails& details) {
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
base::DictionaryValue response_headers;
net::HttpResponseHeaders* headers = details.headers.get();
if (!headers)
return;
void* iter = nullptr;
std::string key;
std::string value;
while (headers->EnumerateHeaderLines(&iter, &key, &value)) {
key = base::StringToLowerASCII(key);
value = base::StringToLowerASCII(value);
if (response_headers.HasKey(key)) {
base::ListValue* values = nullptr;
if (response_headers.GetList(key, &values))
values->AppendString(value);
} else {
scoped_ptr<base::ListValue> values(new base::ListValue());
values->AppendString(value);
response_headers.Set(key, values.Pass());
}
}
Emit("did-get-response-details",
details.socket_address.IsEmpty(),
details.url,
@@ -411,7 +495,7 @@ void WebContents::DidGetResourceResponseStart(
details.http_response_code,
details.method,
details.referrer,
response_headers);
details.headers.get());
}
void WebContents::DidGetRedirectForResourceRequest(
@@ -420,7 +504,11 @@ void WebContents::DidGetRedirectForResourceRequest(
Emit("did-get-redirect-request",
details.url,
details.new_url,
(details.resource_type == content::RESOURCE_TYPE_MAIN_FRAME));
(details.resource_type == content::RESOURCE_TYPE_MAIN_FRAME),
details.http_response_code,
details.method,
details.referrer,
details.headers.get());
}
void WebContents::DidNavigateMainFrame(
@@ -450,12 +538,40 @@ 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(AtomViewHostMsg_ZoomLevelChanged, OnZoomLevelChanged)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
@@ -476,6 +592,7 @@ void WebContents::NavigationEntryCommitted(
}
void WebContents::Destroy() {
session_.Reset();
if (type_ == WEB_VIEW && managed_web_contents()) {
// When force destroying the "destroyed" event is not emitted.
WebContentsDestroyed();
@@ -487,10 +604,6 @@ void WebContents::Destroy() {
}
}
bool WebContents::IsAlive() const {
return web_contents() != NULL;
}
int WebContents::GetID() const {
return web_contents()->GetRenderProcessHost()->GetID();
}
@@ -511,12 +624,20 @@ 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);
}
GURL WebContents::GetURL() const {
return web_contents()->GetURL();
}
base::string16 WebContents::GetTitle() const {
return web_contents()->GetTitle();
}
@@ -533,10 +654,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();
@@ -560,8 +677,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() {
@@ -572,6 +691,13 @@ void WebContents::InsertCSS(const std::string& css) {
web_contents()->InsertCSS(css);
}
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::ExecuteJavaScript(const base::string16& code,
bool has_user_gesture) {
Send(new AtomViewMsg_ExecuteJavaScript(routing_id(), code, has_user_gesture));
@@ -606,6 +732,21 @@ bool WebContents::IsDevToolsOpened() {
return managed_web_contents()->IsDevToolsViewShowing();
}
void WebContents::EnableDeviceEmulation(
const blink::WebDeviceEmulationParams& params) {
if (type_ == REMOTE)
return;
Send(new ViewMsg_EnableDeviceEmulation(routing_id(), params));
}
void WebContents::DisableDeviceEmulation() {
if (type_ == REMOTE)
return;
Send(new ViewMsg_DisableDeviceEmulation(routing_id()));
}
void WebContents::ToggleDevTools() {
if (IsDevToolsOpened())
CloseDevTools();
@@ -637,14 +778,6 @@ void WebContents::InspectServiceWorker() {
}
}
v8::Local<v8::Value> WebContents::Session(v8::Isolate* isolate) {
if (session_.IsEmpty()) {
auto handle = Session::CreateFrom(isolate, GetBrowserContext());
session_.Reset(isolate, handle.ToV8());
}
return v8::Local<v8::Value>::New(isolate, session_);
}
void WebContents::HasServiceWorker(
const base::Callback<void(bool)>& callback) {
auto context = GetServiceWorkerContext(web_contents());
@@ -691,17 +824,19 @@ void WebContents::PrintToPDF(const base::DictionaryValue& setting,
PrintToPDF(setting, callback);
}
void WebContents::AddWorkSpace(const base::FilePath& path) {
void WebContents::AddWorkSpace(mate::Arguments* args,
const base::FilePath& path) {
if (path.empty()) {
node::ThrowError(isolate(), "path cannot be empty");
args->ThrowError("path cannot be empty");
return;
}
DevToolsAddFileSystem(path);
}
void WebContents::RemoveWorkSpace(const base::FilePath& path) {
void WebContents::RemoveWorkSpace(mate::Arguments* args,
const base::FilePath& path) {
if (path.empty()) {
node::ThrowError(isolate(), "path cannot be empty");
args->ThrowError("path cannot be empty");
return;
}
DevToolsRemoveFileSystem(path);
@@ -764,6 +899,56 @@ bool WebContents::SendIPCMessage(const base::string16& channel,
return Send(new AtomViewMsg_Message(routing_id(), channel, args));
}
void WebContents::SendInputEvent(v8::Isolate* isolate,
v8::Local<v8::Value> input_event) {
const auto view = web_contents()->GetRenderWidgetHostView();
if (!view)
return;
const auto host = view->GetRenderWidgetHost();
if (!host)
return;
int type = mate::GetWebInputEventType(isolate, input_event);
if (blink::WebInputEvent::isMouseEventType(type)) {
blink::WebMouseEvent mouse_event;
if (mate::ConvertFromV8(isolate, input_event, &mouse_event)) {
host->ForwardMouseEvent(mouse_event);
return;
}
} else if (blink::WebInputEvent::isKeyboardEventType(type)) {
content::NativeWebKeyboardEvent keyboard_event;;
if (mate::ConvertFromV8(isolate, input_event, &keyboard_event)) {
host->ForwardKeyboardEvent(keyboard_event);
return;
}
} else if (type == blink::WebInputEvent::MouseWheel) {
blink::WebMouseWheelEvent mouse_wheel_event;
if (mate::ConvertFromV8(isolate, input_event, &mouse_wheel_event)) {
host->ForwardWheelEvent(mouse_wheel_event);
return;
}
}
isolate->ThrowException(v8::Exception::Error(mate::StringToV8(
isolate, "Invalid event object")));
}
void WebContents::BeginFrameSubscription(
const FrameSubscriber::FrameCaptureCallback& callback) {
const auto view = web_contents()->GetRenderWidgetHostView();
if (view) {
scoped_ptr<FrameSubscriber> frame_subscriber(new FrameSubscriber(
isolate(), view->GetVisibleViewportSize(), callback));
view->BeginFrameSubscription(frame_subscriber.Pass());
}
}
void WebContents::EndFrameSubscription() {
const auto view = web_contents()->GetRenderWidgetHostView();
if (view)
view->EndFrameSubscription();
}
void WebContents::SetSize(const SetSizeParams& params) {
if (guest_delegate_)
guest_delegate_->SetSize(params);
@@ -778,20 +963,44 @@ bool WebContents::IsGuest() const {
return type_ == WEB_VIEW;
}
v8::Local<v8::Value> WebContents::GetWebPreferences(v8::Isolate* isolate) {
WebContentsPreferences* web_preferences =
WebContentsPreferences::FromWebContents(web_contents());
return mate::ConvertToV8(isolate, *web_preferences->web_preferences());
}
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_);
}
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_);
}
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("isDestroyed", &WebContents::IsDestroyed, true)
.SetMethod("getId", &WebContents::GetID)
.SetMethod("equal", &WebContents::Equal)
.SetMethod("_loadUrl", &WebContents::LoadURL)
.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)
@@ -799,10 +1008,15 @@ mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
.SetMethod("setUserAgent", &WebContents::SetUserAgent)
.SetMethod("getUserAgent", &WebContents::GetUserAgent)
.SetMethod("insertCSS", &WebContents::InsertCSS)
.SetMethod("savePage", &WebContents::SavePage)
.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)
@@ -821,9 +1035,15 @@ mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
.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("getWebPreferences", &WebContents::GetWebPreferences)
.SetMethod("getOwnerBrowserWindow", &WebContents::GetOwnerBrowserWindow)
.SetMethod("hasServiceWorker", &WebContents::HasServiceWorker)
.SetMethod("unregisterServiceWorker",
&WebContents::UnregisterServiceWorker)
@@ -832,7 +1052,9 @@ mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
.SetMethod("_printToPDF", &WebContents::PrintToPDF)
.SetMethod("addWorkSpace", &WebContents::AddWorkSpace)
.SetMethod("removeWorkSpace", &WebContents::RemoveWorkSpace)
.SetProperty("session", &WebContents::Session)
.SetProperty("session", &WebContents::Session, true)
.SetProperty("devToolsWebContents",
&WebContents::DevToolsWebContents, true)
.Build());
return mate::ObjectTemplateBuilder(
@@ -840,7 +1062,7 @@ mate::ObjectTemplateBuilder WebContents::GetObjectTemplateBuilder(
}
bool WebContents::IsDestroyed() const {
return !IsAlive();
return !web_contents();
}
AtomBrowserContext* WebContents::GetBrowserContext() const {
@@ -860,6 +1082,15 @@ void WebContents::OnRendererMessageSync(const base::string16& channel,
EmitWithSender(base::UTF16ToUTF8(channel), web_contents(), message, args);
}
void WebContents::OnZoomLevelChanged(double level) {
auto manager = web_contents()->GetBrowserContext()->GetGuestManager();
if (!manager)
return;
manager->ForEachGuest(web_contents(),
base::Bind(&NotifyZoomLevelChanged,
level));
}
// static
mate::Handle<WebContents> WebContents::CreateFrom(
v8::Isolate* isolate, content::WebContents* web_contents) {
@@ -877,19 +1108,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(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
@@ -903,7 +1138,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

@@ -8,13 +8,19 @@
#include <string>
#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/common/favicon_url.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/common/favicon_url.h"
#include "native_mate/handle.h"
#include "ui/gfx/image/image.h"
namespace blink {
struct WebDeviceEmulationParams;
}
namespace brightray {
class InspectableWebContents;
}
@@ -48,11 +54,13 @@ class WebContents : public mate::TrackableObject<WebContents>,
static mate::Handle<WebContents> Create(
v8::Isolate* isolate, const mate::Dictionary& options);
void Destroy();
bool IsAlive() const;
// mate::TrackableObject:
void Destroy() override;
int GetID() const;
bool Equal(const WebContents* web_contents) const;
void LoadURL(const GURL& url, const mate::Dictionary& options);
GURL GetURL() const;
base::string16 GetTitle() const;
bool IsLoading() const;
bool IsWaitingForResponse() const;
@@ -65,15 +73,19 @@ class WebContents : public mate::TrackableObject<WebContents>,
void SetUserAgent(const std::string& user_agent);
std::string GetUserAgent();
void InsertCSS(const std::string& css);
bool SavePage(const base::FilePath& full_file_path,
const content::SavePageType& save_type,
const SavePageHandler::SavePageCallback& callback);
void ExecuteJavaScript(const base::string16& code,
bool has_user_gesture);
void OpenDevTools(mate::Arguments* args);
void CloseDevTools();
bool IsDevToolsOpened();
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);
@@ -85,8 +97,8 @@ class WebContents : public mate::TrackableObject<WebContents>,
const PrintToPDFCallback& callback);
// DevTools workspace api.
void AddWorkSpace(const base::FilePath& path);
void RemoveWorkSpace(const base::FilePath& path);
void AddWorkSpace(mate::Arguments* args, const base::FilePath& path);
void RemoveWorkSpace(mate::Arguments* args, const base::FilePath& path);
// Editing commands.
void Undo();
@@ -105,18 +117,36 @@ class WebContents : public mate::TrackableObject<WebContents>,
void Focus();
void TabTraverse(bool reverse);
// Sending messages to browser.
// Send messages to browser.
bool SendIPCMessage(const base::string16& channel,
const base::ListValue& args);
// Send WebInputEvent to the page.
void SendInputEvent(v8::Isolate* isolate, v8::Local<v8::Value> input_event);
// Subscribe to the frame updates.
void BeginFrameSubscription(
const FrameSubscriber::FrameCaptureCallback& callback);
void EndFrameSubscription();
// Methods for creating <webview>.
void SetSize(const SetSizeParams& params);
void SetAllowTransparency(bool allow);
bool IsGuest() const;
// 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);
v8::Local<v8::Value> DevToolsWebContents(v8::Isolate* isolate);
protected:
explicit WebContents(content::WebContents* web_contents);
explicit WebContents(const mate::Dictionary& options);
WebContents(v8::Isolate* isolate, const mate::Dictionary& options);
~WebContents();
// mate::Wrappable:
@@ -135,7 +165,7 @@ class WebContents : public mate::TrackableObject<WebContents>,
int route_id,
int main_frame_route_id,
WindowContainerType window_container_type,
const base::string16& frame_name,
const std::string& frame_name,
const GURL& target_url,
const std::string& partition_id,
content::SessionStorageNamespace* session_storage_namespace) override;
@@ -158,6 +188,7 @@ 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;
// content::WebContentsObserver:
void BeforeUnloadFired(const base::TimeTicks& proceed_time) override;
@@ -170,11 +201,13 @@ class WebContents : public mate::TrackableObject<WebContents>,
void DidFailLoad(content::RenderFrameHost* render_frame_host,
const GURL& validated_url,
int error_code,
const base::string16& error_description) override;
const base::string16& error_description,
bool was_ignored_by_handler) override;
void DidFailProvisionalLoad(content::RenderFrameHost* render_frame_host,
const GURL& validated_url,
int error_code,
const base::string16& error_description) override;
const base::string16& error_description,
bool was_ignored_by_handler) override;
void DidStartLoading() override;
void DidStopLoading() override;
void DidGetResourceResponseStart(
@@ -195,6 +228,11 @@ class WebContents : public mate::TrackableObject<WebContents>,
void PluginCrashed(const base::FilePath& plugin_path,
base::ProcessId plugin_pid) override;
// brightray::InspectableWebContentsViewDelegate:
void DevToolsFocused() override;
void DevToolsOpened() override;
void DevToolsClosed() override;
private:
enum Type {
BROWSER_WINDOW, // Used by BrowserWindow.
@@ -213,7 +251,12 @@ class WebContents : public mate::TrackableObject<WebContents>,
const base::ListValue& args,
IPC::Message* message);
// Called when guests need to be notified of
// embedders' zoom level change.
void OnZoomLevelChanged(double level);
v8::Global<v8::Value> session_;
v8::Global<v8::Value> devtools_web_contents_;
scoped_ptr<WebViewGuestDelegate> guest_delegate_;

View File

@@ -3,13 +3,14 @@
// found in the LICENSE file.
#include "atom/browser/api/atom_api_web_contents.h"
#include "atom/browser/web_contents_preferences.h"
#include "atom/browser/web_view_manager.h"
#include "atom/common/native_mate_converters/gurl_converter.h"
#include "atom/common/native_mate_converters/value_converter.h"
#include "atom/common/node_includes.h"
#include "content/public/browser/browser_context.h"
#include "native_mate/dictionary.h"
#include "net/base/filename_util.h"
#include "atom/common/node_includes.h"
using atom::WebContentsPreferences;
namespace mate {
@@ -25,28 +26,6 @@ struct Converter<content::WebContents*> {
}
};
template<>
struct Converter<atom::WebViewManager::WebViewInfo> {
static bool FromV8(v8::Isolate* isolate, v8::Local<v8::Value> val,
atom::WebViewManager::WebViewInfo* out) {
Dictionary options;
if (!ConvertFromV8(isolate, val, &options))
return false;
GURL preload_url;
if (!options.Get("preloadUrl", &preload_url))
return false;
if (!preload_url.is_empty() &&
!net::FileURLToFilePath(preload_url, &(out->preload_script)))
return false;
return options.Get("nodeIntegration", &(out->node_integration)) &&
options.Get("plugins", &(out->plugins)) &&
options.Get("disableWebSecurity", &(out->disable_web_security));
}
};
} // namespace mate
namespace {
@@ -65,14 +44,13 @@ void AddGuest(int guest_instance_id,
int element_instance_id,
content::WebContents* embedder,
content::WebContents* guest_web_contents,
atom::WebViewManager::WebViewInfo info) {
const base::DictionaryValue& options) {
auto manager = GetWebViewManager(embedder);
if (manager) {
info.guest_instance_id = guest_instance_id;
info.embedder = embedder;
if (manager)
manager->AddGuest(guest_instance_id, element_instance_id, embedder,
guest_web_contents, info);
}
guest_web_contents);
WebContentsPreferences::FromWebContents(guest_web_contents)->Merge(options);
}
void RemoveGuest(content::WebContents* embedder, int guest_instance_id) {

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"
@@ -13,6 +14,8 @@
#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/node_includes.h"
#include "atom/common/options_switches.h"
#include "content/public/browser/render_process_host.h"
#include "native_mate/constructor.h"
#include "native_mate/dictionary.h"
@@ -23,8 +26,6 @@
#include "atom/browser/ui/win/taskbar_host.h"
#endif
#include "atom/common/node_includes.h"
#if defined(OS_WIN)
namespace mate {
@@ -60,22 +61,99 @@ 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);
}
}
}
#if defined(OS_WIN)
// Converts binary data to Buffer.
v8::Local<v8::Value> ToBuffer(v8::Isolate* isolate, void* val, int size) {
auto buffer = node::Buffer::New(isolate, static_cast<char*>(val), size);
if (buffer.IsEmpty())
return v8::Null(isolate);
else
return buffer.ToLocalChecked();
}
#endif
} // namespace
Window::Window(v8::Isolate* isolate, const mate::Dictionary& options) {
// 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(options::kWebPreferences, &web_preferences);
// Be compatible with old options which are now in web_preferences.
v8::Local<v8::Value> 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.
mate::Dictionary web_contents_options(isolate, v8::Object::New(isolate));
auto web_contents = WebContents::Create(isolate, web_contents_options);
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() {
@@ -103,6 +181,9 @@ void Window::OnWindowClosed() {
window_->RemoveObserver(this);
Emit("closed");
// Clean up the resources after window has been closed.
base::MessageLoop::current()->DeleteSoon(FROM_HERE, window_.release());
}
void Window::OnWindowBlur() {
@@ -165,38 +246,26 @@ void Window::OnRendererResponsive() {
Emit("responsive");
}
void Window::OnDevToolsFocus() {
Emit("devtools-focused");
}
void Window::OnDevToolsOpened() {
Emit("devtools-opened");
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());
}
void Window::OnDevToolsClosed() {
Emit("devtools-closed");
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
devtools_web_contents_.Reset();
}
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) {
if (!Browser::Get()->is_ready()) {
node::ThrowError(isolate,
"Cannot create BrowserWindow before app is ready");
isolate->ThrowException(v8::Exception::Error(mate::StringToV8(
isolate, "Cannot create BrowserWindow before app is ready")));
return nullptr;
}
return new Window(isolate, options);
@@ -207,17 +276,14 @@ bool Window::IsDestroyed() const {
}
void Window::Destroy() {
window_->CloseContents(nullptr);
if (window_)
window_->CloseContents(nullptr);
}
void Window::Close() {
window_->Close();
}
bool Window::IsClosed() {
return window_->IsClosed();
}
void Window::Focus() {
window_->Focus(true);
}
@@ -386,6 +452,10 @@ bool Window::IsKiosk() {
return window_->IsKiosk();
}
void Window::SetBackgroundColor(const std::string& color_name) {
window_->SetBackgroundColor(color_name);
}
void Window::FocusOnWebView() {
window_->FocusOnWebView();
}
@@ -398,6 +468,10 @@ bool Window::IsWebViewFocused() {
return window_->IsWebViewFocused();
}
bool Window::IsDevToolsFocused() {
return window_->IsDevToolsFocused();
}
void Window::SetRepresentedFilename(const std::string& filename) {
window_->SetRepresentedFilename(filename);
}
@@ -485,6 +559,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();
@@ -516,20 +613,13 @@ 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)
.SetMethod("isDestroyed", &Window::IsDestroyed, true)
.SetMethod("close", &Window::Close)
.SetMethod("isClosed", &Window::IsClosed)
.SetMethod("focus", &Window::Focus)
.SetMethod("isFocused", &Window::IsFocused)
.SetMethod("show", &Window::Show)
@@ -568,6 +658,7 @@ void Window::BuildPrototype(v8::Isolate* isolate,
.SetMethod("setSkipTaskbar", &Window::SetSkipTaskbar)
.SetMethod("setKiosk", &Window::SetKiosk)
.SetMethod("isKiosk", &Window::IsKiosk)
.SetMethod("setBackgroundColor", &Window::SetBackgroundColor)
.SetMethod("setRepresentedFilename", &Window::SetRepresentedFilename)
.SetMethod("getRepresentedFilename", &Window::GetRepresentedFilename)
.SetMethod("setDocumentEdited", &Window::SetDocumentEdited)
@@ -575,6 +666,7 @@ void Window::BuildPrototype(v8::Isolate* isolate,
.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)
@@ -588,13 +680,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("webContents", &Window::WebContents, true);
}
// 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>
@@ -43,6 +44,10 @@ class Window : public mate::TrackableObject<Window>,
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:
@@ -69,19 +74,21 @@ class Window : public mate::TrackableObject<Window>,
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;
#if defined(OS_WIN)
void OnWindowMessage(UINT message, WPARAM w_param, LPARAM l_param) override;
#endif
// mate::Wrappable:
bool IsDestroyed() const override;
private:
// mate::TrackableObject:
void Destroy() override;
// APIs for NativeWindow.
void Destroy();
void Close();
bool IsClosed();
void Focus();
bool IsFocused();
void Show();
@@ -119,9 +126,11 @@ class Window : public mate::TrackableObject<Window>,
void SetSkipTaskbar(bool skip);
void SetKiosk(bool kiosk);
bool IsKiosk();
void SetBackgroundColor(const std::string& color_name);
void FocusOnWebView();
void BlurWebView();
bool IsWebViewFocused();
bool IsDevToolsFocused();
void SetRepresentedFilename(const std::string& filename);
std::string GetRepresentedFilename();
void SetDocumentEdited(bool edited);
@@ -138,6 +147,16 @@ class Window : public mate::TrackableObject<Window>,
bool IsMenuBarVisible();
void SetAspectRatio(double aspect_ratio, mate::Arguments* args);
#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();
#endif
@@ -147,10 +166,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

@@ -56,7 +56,7 @@ v8::Local<v8::Object> EventEmitter::CreateJSEvent(
v8::Local<v8::Object> EventEmitter::CreateCustomEvent(
v8::Isolate* isolate, v8::Local<v8::Object> custom_event) {
v8::Local<v8::Object> event = CreateEventObject(isolate);
event->SetPrototype(custom_event->CreationContext(), custom_event);
(void)event->SetPrototype(custom_event->CreationContext(), custom_event);
mate::Dictionary(isolate, event).Set("sender", GetWrapper(isolate));
return event;
}

View File

@@ -45,6 +45,8 @@ class EventEmitter : public Wrappable {
content::WebContents* sender,
IPC::Message* message,
const Args&... args) {
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
v8::Local<v8::Object> event = CreateJSEvent(isolate(), sender, message);
return EmitWithEvent(name, event, args...);
}

View File

@@ -0,0 +1,67 @@
// 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/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"
namespace atom {
namespace api {
FrameSubscriber::FrameSubscriber(v8::Isolate* isolate,
const gfx::Size& size,
const FrameCaptureCallback& callback)
: isolate_(isolate), size_(size), callback_(callback) {
}
bool FrameSubscriber::ShouldCaptureFrame(
const gfx::Rect& damage_rect,
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;
}
void FrameSubscriber::OnFrameDelivered(
scoped_refptr<media::VideoFrame> frame, base::TimeTicks, bool result) {
if (!result)
return;
v8::Locker locker(isolate_);
v8::HandleScope handle_scope(isolate_);
gfx::Rect rect = frame->visible_rect();
size_t rgb_arr_size = rect.width() * rect.height() * 4;
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);
callback_.Run(buffer.ToLocalChecked());
}
} // namespace api
} // namespace atom

View File

@@ -0,0 +1,45 @@
// 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_FRAME_SUBSCRIBER_H_
#define ATOM_BROWSER_API_FRAME_SUBSCRIBER_H_
#include "base/callback.h"
#include "content/public/browser/render_widget_host_view_frame_subscriber.h"
#include "ui/gfx/geometry/size.h"
#include "v8/include/v8.h"
namespace atom {
namespace api {
class FrameSubscriber : public content::RenderWidgetHostViewFrameSubscriber {
public:
using FrameCaptureCallback = base::Callback<void(v8::Local<v8::Value>)>;
FrameSubscriber(v8::Isolate* isolate,
const gfx::Size& size,
const FrameCaptureCallback& callback);
bool ShouldCaptureFrame(const gfx::Rect& damage_rect,
base::TimeTicks present_time,
scoped_refptr<media::VideoFrame>* storage,
DeliverFrameCallback* callback) override;
private:
void OnFrameDelivered(
scoped_refptr<media::VideoFrame> frame, base::TimeTicks, bool);
v8::Isolate* isolate_;
gfx::Size size_;
FrameCaptureCallback callback_;
DISALLOW_COPY_AND_ASSIGN(FrameSubscriber);
};
} // namespace api
} // namespace atom
#endif // ATOM_BROWSER_API_FRAME_SUBSCRIBER_H_

View File

@@ -1,15 +1,17 @@
EventEmitter = require('events').EventEmitter
{deprecate, session, Menu} = require 'electron'
{EventEmitter} = require 'events'
bindings = process.atomBinding 'app'
downloadItemBindings = process.atomBinding 'download_item'
app = bindings.app
app.__proto__ = EventEmitter.prototype
app.setApplicationMenu = (menu) ->
require('menu').setApplicationMenu menu
Menu.setApplicationMenu menu
app.getApplicationMenu = ->
require('menu').getApplicationMenu()
Menu.getApplicationMenu()
app.commandLine =
appendSwitch: bindings.appendSwitch,
@@ -32,14 +34,40 @@ app.setAppPath = (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
# Routes the events to webContents.
for name in ['login', 'certificate-error', 'select-client-certificate']
do (name) ->
app.on name, (event, webContents, args...) ->
webContents.emit name, event, args...
# Deprecated.
app.getHomeDir = deprecate 'app.getHomeDir', 'app.getPath', ->
@getPath 'home'
app.getDataPath = deprecate 'app.getDataPath', 'app.getPath', ->
@getPath 'userData'
app.setDataPath = deprecate 'app.setDataPath', 'app.setPath', (path) ->
@setPath 'userData', path
app.resolveProxy = deprecate 'app.resolveProxy', 'session.defaultSession.resolveProxy', (url, callback) ->
session.defaultSession.resolveProxy url, callback
deprecate.rename app, 'terminate', 'quit'
deprecate.event app, 'finish-launching', 'ready', ->
setImmediate => # give default app a chance to setup default menu.
@emit 'finish-launching'
deprecate.event app, 'activate-with-no-open-windows', 'activate', (event, hasVisibleWindows) ->
@emit 'activate-with-no-open-windows' if not hasVisibleWindows
deprecate.event app, 'select-certificate', 'select-client-certificate'
# Wrappers for native classes.
wrapDownloadItem = (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'
deprecate.property downloadItem, 'hasUserGesture', 'hasUserGesture'
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 +1,12 @@
autoUpdater = process.atomBinding('auto_updater').autoUpdater
EventEmitter = require('events').EventEmitter
{deprecate} = require 'electron'
autoUpdater.__proto__ = EventEmitter.prototype
autoUpdater =
if process.platform is 'win32'
require './auto-updater/auto-updater-win'
else
require './auto-updater/auto-updater-native'
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
# Deprecated.
deprecate.rename autoUpdater, 'setFeedUrl', 'setFeedURL'
module.exports = autoUpdater

View File

@@ -0,0 +1,6 @@
{EventEmitter} = require 'events'
{autoUpdater} = process.atomBinding 'auto_updater'
autoUpdater.__proto__ = EventEmitter.prototype
module.exports = autoUpdater

View File

@@ -0,0 +1,42 @@
{app} = require 'electron'
{EventEmitter} = require 'events'
url = require 'url'
squirrelUpdate = require './squirrel-update-win'
class AutoUpdater extends EventEmitter
quitAndInstall: ->
squirrelUpdate.processStart()
app.quit()
setFeedURL: (updateURL) ->
@updateURL = updateURL
checkForUpdates: ->
return @emitError 'Update URL is not set' unless @updateURL
return @emitError 'Can not find Squirrel' unless squirrelUpdate.supported()
@emit 'checking-for-update'
squirrelUpdate.download @updateURL, (error, update) =>
return @emitError error if error?
return @emit 'update-not-available' unless update?
@emit 'update-available'
squirrelUpdate.update @updateURL, (error) =>
return @emitError error if error?
{releaseNotes, version} = update
# Following information is not available on Windows, so fake them.
date = new Date
url = @updateURL
@emit 'update-downloaded', {}, releaseNotes, version, date, url, => @quitAndInstall()
# Private: Emit both error object and message, this is to keep compatibility
# with Old APIs.
emitError: (message) ->
@emit 'error', new Error(message), message
module.exports = new AutoUpdater

View File

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

View File

@@ -1,11 +1,12 @@
EventEmitter = require('events').EventEmitter
app = require 'app'
ipc = require 'ipc'
{ipcMain, deprecate} = require 'electron'
{EventEmitter} = require 'events'
BrowserWindow = process.atomBinding('window').BrowserWindow
{BrowserWindow} = process.atomBinding 'window'
BrowserWindow::__proto__ = EventEmitter.prototype
BrowserWindow::_init = ->
{app} = require 'electron' # avoid recursive require.
# Simulate the application menu on platforms other than OS X.
if process.platform isnt 'darwin'
menu = app.getApplicationMenu()
@@ -14,7 +15,7 @@ BrowserWindow::_init = ->
# 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
ipcMain.emit 'ATOM_SHELL_GUEST_WINDOW_MANAGER_WINDOW_OPEN', event, url, frameName, options
# window.resizeTo(...)
# window.moveTo(...)
@@ -45,6 +46,18 @@ BrowserWindow::_init = ->
@on 'focus', (event) =>
app.emit 'browser-window-focus', event, this
# Notify the creation of the window.
app.emit 'browser-window-created', {}, this
# Be compatible with old APIs.
@webContents.on 'devtools-focused', => @emit 'devtools-focused'
@webContents.on 'devtools-opened', => @emit 'devtools-opened'
@webContents.on 'devtools-closed', => @emit 'devtools-closed'
Object.defineProperty this, 'devToolsWebContents',
enumerable: true,
configurable: false,
get: -> @webContents.devToolsWebContents
BrowserWindow.getFocusedWindow = ->
windows = BrowserWindow.getAllWindows()
return window for window in windows when window.isFocused()
@@ -58,27 +71,35 @@ BrowserWindow.fromDevToolsWebContents = (webContents) ->
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::restart = -> @webContents.reload()
BrowserWindow::getUrl = -> @webContents.getUrl()
BrowserWindow::loadURL = -> @webContents.loadURL.apply @webContents, arguments
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::send = -> @webContents.send.apply @webContents, arguments
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
# 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, 'getPageTitle', 'webContents'
deprecate.member BrowserWindow, 'isLoading', 'webContents'
deprecate.member BrowserWindow, 'isWaitingForResponse', 'webContents'
deprecate.member BrowserWindow, 'stop', 'webContents'
deprecate.member BrowserWindow, 'isCrashed', 'webContents'
deprecate.member BrowserWindow, 'executeJavaScriptInDevTools', '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'
module.exports = BrowserWindow

View File

@@ -1,7 +1,7 @@
{app, BrowserWindow} = require 'electron'
binding = process.atomBinding 'dialog'
v8Util = process.atomBinding 'v8_util'
app = require 'app'
BrowserWindow = require 'browser-window'
fileDialogProperties =
openFile: 1 << 0

View File

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

View File

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

View File

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

View File

@@ -1,3 +1,6 @@
EventEmitter = require('events').EventEmitter
{deprecate, ipcMain} = require 'electron'
module.exports = new EventEmitter
# This module is deprecated, we mirror everything from ipcMain.
deprecate.warn 'ipc module', 'ipcMain module'
module.exports = ipcMain

View File

@@ -1,20 +1,31 @@
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'
{Menu} = require 'electron'
{click, @selector, @type, @label, @sublabel, @accelerator, @icon, @enabled, @visible, @checked, @submenu} = options
{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'
@@ -27,12 +38,14 @@ class MenuItem
throw new Error("Unknown menu type #{@type}") if MenuItem.types.indexOf(@type) is -1
@commandId = ++nextCommandId
@click = =>
@click = (focusedWindow) =>
# Manually flip the checked flags when clicked.
@checked = !@checked if @type in ['checkbox', 'radio']
if typeof click is 'function'
click this, BrowserWindow.getFocusedWindow()
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

View File

@@ -1,8 +1,7 @@
BrowserWindow = require 'browser-window'
EventEmitter = require('events').EventEmitter
MenuItem = require 'menu-item'
v8Util = process.atomBinding 'v8_util'
{BrowserWindow, MenuItem} = require 'electron'
{EventEmitter} = require 'events'
v8Util = process.atomBinding 'v8_util'
bindings = process.atomBinding 'menu'
# Automatically generated radio menu item's group id.
@@ -67,7 +66,8 @@ Menu::_init = ->
isCommandIdVisible: (commandId) => @commandsMap[commandId]?.visible
getAcceleratorForCommandId: (commandId) => @commandsMap[commandId]?.accelerator
getIconForCommandId: (commandId) => @commandsMap[commandId]?.icon
executeCommand: (commandId) => @commandsMap[commandId]?.click()
executeCommand: (commandId) =>
@commandsMap[commandId]?.click BrowserWindow.getFocusedWindow()
menuWillShow: =>
# Make sure radio groups have at least one menu item seleted.
for id, group of @groupsMap
@@ -78,7 +78,11 @@ Menu::_init = ->
v8Util.setHiddenValue group[0], 'checked', true unless checked
Menu::popup = (window, x, y) ->
throw new TypeError('Invalid window') unless window?.constructor is BrowserWindow
unless window?.constructor is BrowserWindow
# Shift.
y = x
x = window
window = BrowserWindow.getFocusedWindow()
if x? and y?
@_popupAt(window, x, y)
else
@@ -115,6 +119,7 @@ Menu::insert = (pos, item) ->
@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

View File

@@ -1,21 +1,26 @@
ipc = require 'ipc'
{ipcMain} = require 'electron'
# The history operation in renderer is redirected to browser.
ipc.on 'ATOM_SHELL_NAVIGATION_CONTROLLER', (event, method, args...) ->
ipcMain.on 'ATOM_SHELL_NAVIGATION_CONTROLLER', (event, method, args...) ->
event.sender[method] args...
ipc.on 'ATOM_SHELL_SYNC_NAVIGATION_CONTROLLER', (event, method, args...) ->
ipcMain.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.
# 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.
@@ -37,12 +42,12 @@ class NavigationController
@currentIndex++
@history.push url
loadUrl: (url, options={}) ->
loadURL: (url, options={}) ->
@pendingIndex = -1
@webContents._loadUrl url, options
@webContents._loadURL url, options
@webContents.emit 'load-url', url, options
getUrl: ->
getURL: ->
if @currentIndex is -1
''
else
@@ -54,11 +59,11 @@ class NavigationController
reload: ->
@pendingIndex = @currentIndex
@webContents._loadUrl @getUrl(), {}
@webContents._loadURL @getURL(), {}
reloadIgnoringCache: ->
@webContents._reloadIgnoringCache() # Rely on WebContents to clear cache.
@reload()
@pendingIndex = @currentIndex
@webContents._loadURL @getURL(), {extraHeaders: "pragma: no-cache\n"}
canGoBack: ->
@getActiveIndex() > 0
@@ -84,7 +89,7 @@ class NavigationController
if @inPageIndex > -1 and @pendingIndex >= @inPageIndex
@webContents._goBack()
else
@webContents._loadUrl @history[@pendingIndex], {}
@webContents._loadURL @history[@pendingIndex], {}
goForward: ->
return unless @canGoForward()
@@ -92,12 +97,12 @@ class NavigationController
if @inPageIndex > -1 and @pendingIndex >= @inPageIndex
@webContents._goForward()
else
@webContents._loadUrl @history[@pendingIndex], {}
@webContents._loadURL @history[@pendingIndex], {}
goToIndex: (index) ->
return unless @canGoToIndex index
@pendingIndex = index
@webContents._loadUrl @history[@pendingIndex], {}
@webContents._loadURL @history[@pendingIndex], {}
goToOffset: (offset) ->
return unless @canGoToOffset offset

View File

@@ -1,5 +1,6 @@
powerMonitor = process.atomBinding('power_monitor').powerMonitor
EventEmitter = require('events').EventEmitter
{EventEmitter} = require 'events'
{powerMonitor} = process.atomBinding 'power_monitor'
powerMonitor.__proto__ = EventEmitter.prototype

View File

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

View File

@@ -1,64 +1,25 @@
app = require 'app'
{app} = require 'electron'
throw new Error('Can not initialize protocol module before app is ready') unless app.isReady()
protocol = process.atomBinding('protocol').protocol
EventEmitter = require('events').EventEmitter
{protocol} = process.atomBinding 'protocol'
protocol.__proto__ = EventEmitter.prototype
GetWrappedCallback = (scheme, callback, notification) ->
wrappedCallback = (error) ->
if not callback?
if error
throw error
else
protocol.emit notification, scheme
else
callback error, scheme
# Compatibility with old api.
# 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) ->
protocol._registerProtocol scheme, handler, GetWrappedCallback(scheme, callback, 'registered')
protocol.unregisterProtocol = (scheme, callback) ->
protocol._unregisterProtocol scheme, GetWrappedCallback(scheme, callback, 'unregistered')
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) ->
protocol._interceptProtocol scheme, handler, GetWrappedCallback(scheme, callback, 'intercepted')
protocol.uninterceptProtocol = (scheme, callback) ->
protocol._uninterceptProtocol scheme, GetWrappedCallback(scheme, callback, 'unintercepted')
protocol.RequestStringJob =
class RequestStringJob
constructor: ({mimeType, charset, data}) ->
if typeof data isnt 'string' and not data instanceof Buffer
throw new TypeError('Data should be string or Buffer')
@mimeType = mimeType ? 'text/plain'
@charset = charset ? 'UTF-8'
@data = String data
protocol.RequestBufferJob =
class RequestBufferJob
constructor: ({mimeType, encoding, data}) ->
if not data instanceof Buffer
throw new TypeError('Data should be Buffer')
@mimeType = mimeType ? 'application/octet-stream'
@encoding = encoding ? 'utf8'
@data = new Buffer(data)
protocol.RequestFileJob =
class RequestFileJob
constructor: (@path) ->
protocol.RequestErrorJob =
class RequestErrorJob
constructor: (@error) ->
protocol.RequestHttpJob =
class RequestHttpJob
constructor: ({@session, @url, @method, @referrer}) ->
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 +1,6 @@
EventEmitter = require('events').EventEmitter
{EventEmitter} = require 'events'
{screen} = process.atomBinding 'screen'
screen = process.atomBinding('screen').screen
screen.__proto__ = EventEmitter.prototype
module.exports = screen

View File

@@ -0,0 +1,23 @@
{EventEmitter} = require 'events'
bindings = process.atomBinding 'session'
PERSIST_PERFIX = 'persist:'
# Returns the Session from |partition| string.
exports.fromPartition = (partition='') ->
if partition.startsWith PERSIST_PERFIX
bindings.fromPartition partition.substr(PERSIST_PERFIX.length), false
else
bindings.fromPartition partition, true
# Returns the default session.
Object.defineProperty exports, 'defaultSession',
enumerable: true
get: -> exports.fromPartition ''
wrapSession = (session) ->
# session is an EventEmitter.
session.__proto__ = EventEmitter.prototype
bindings._setWrapSession wrapSession

View File

@@ -1,14 +1,19 @@
EventEmitter = require('events').EventEmitter
bindings = process.atomBinding 'tray'
{deprecate} = require 'electron'
{EventEmitter} = require 'events'
Tray = bindings.Tray
{Tray} = process.atomBinding 'tray'
Tray::__proto__ = EventEmitter.prototype
Tray::_init = ->
# 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'
deprecate.event this, 'balloon-clicked', 'balloon-click'
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

@@ -1,7 +1,7 @@
EventEmitter = require('events').EventEmitter
NavigationController = require './navigation-controller'
{EventEmitter} = require 'events'
{deprecate, ipcMain, session, NavigationController, Menu} = require 'electron'
binding = process.atomBinding 'web_contents'
ipc = require 'ipc'
nextId = 0
getNextId = -> ++nextId
@@ -44,10 +44,8 @@ wrapWebContents = (webContents) ->
# Make sure webContents.executeJavaScript would run the code only when the
# web contents has been loaded.
webContents.loaded = false
webContents.once 'did-finish-load', -> @loaded = true
webContents.executeJavaScript = (code, hasUserGesture=false) ->
if @loaded
if @getURL() and not @isLoading()
@_executeJavaScript code, hasUserGesture
else
webContents.once 'did-finish-load', @_executeJavaScript.bind(this, code, hasUserGesture)
@@ -61,11 +59,20 @@ wrapWebContents = (webContents) ->
# Dispatch IPC messages to the ipc module.
webContents.on 'ipc-message', (event, packed) ->
[channel, args...] = packed
ipc.emit channel, event, args...
ipcMain.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...
ipcMain.emit channel, event, args...
# Handle context menu action request from pepper plugin.
webContents.on 'pepper-context-menu', (event, params) ->
menu = Menu.buildFromTemplate params.menu
menu.popup params.x, params.y
# Deprecated.
deprecate.rename webContents, 'loadUrl', 'loadURL'
deprecate.rename webContents, 'getUrl', 'getURL'
webContents.printToPDF = (options, callback) ->
printingSetting =
@@ -108,7 +115,6 @@ wrapWebContents = (webContents) ->
@_printToPDF printingSetting, callback
binding._setWrapWebContents wrapWebContents
process.once 'exit', binding._clearWrapWebContents
module.exports.create = (options={}) ->
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

@@ -29,7 +29,9 @@ class IDUserData : public base::SupportsUserData::Data {
} // namespace
TrackableObjectBase::TrackableObjectBase()
: weak_map_id_(0), wrapped_(nullptr) {
: weak_map_id_(0), wrapped_(nullptr), weak_factory_(this) {
RegisterDestructionCallback(
base::Bind(&TrackableObjectBase::Destroy, weak_factory_.GetWeakPtr()));
}
TrackableObjectBase::~TrackableObjectBase() {
@@ -61,8 +63,9 @@ int32_t TrackableObjectBase::GetIDFromWrappedClass(base::SupportsUserData* w) {
}
// static
void TrackableObjectBase::RegisterDestructionCallback(void (*c)()) {
atom::AtomBrowserMainParts::Get()->RegisterDestructionCallback(base::Bind(c));
void TrackableObjectBase::RegisterDestructionCallback(
const base::Closure& closure) {
atom::AtomBrowserMainParts::Get()->RegisterDestructionCallback(closure);
}
} // namespace mate

View File

@@ -9,7 +9,9 @@
#include "atom/browser/api/event_emitter.h"
#include "atom/common/id_weak_map.h"
#include "base/bind.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
namespace base {
class SupportsUserData;
@@ -28,6 +30,9 @@ 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;
@@ -39,12 +44,14 @@ class TrackableObjectBase : public mate::EventEmitter {
// Register a callback that should be destroyed before JavaScript environment
// gets destroyed.
static void RegisterDestructionCallback(void (*callback)());
static void RegisterDestructionCallback(const base::Closure& closure);
int32_t weak_map_id_;
base::SupportsUserData* wrapped_;
private:
base::WeakPtrFactory<TrackableObjectBase> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(TrackableObjectBase);
};
@@ -85,7 +92,8 @@ class TrackableObject : public TrackableObjectBase {
}
TrackableObject() {
RegisterDestructionCallback(&TrackableObject<T>::ReleaseAllWeakReferences);
RegisterDestructionCallback(
base::Bind(&TrackableObject<T>::ReleaseAllWeakReferences));
}
// Removes this instance from the weak map.

View File

@@ -9,6 +9,7 @@
#include "atom/browser/atom_browser_context.h"
#include "atom/browser/atom_browser_main_parts.h"
#include "atom/common/google_api_key.h"
#include "content/public/browser/geolocation_provider.h"
namespace atom {
@@ -17,13 +18,14 @@ 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;
} // namespace
AtomAccessTokenStore::AtomAccessTokenStore() {
content::GeolocationProvider::GetInstance()->UserDidOptIntoLocationServices();
}
AtomAccessTokenStore::~AtomAccessTokenStore() {
@@ -33,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();

View File

@@ -12,14 +12,15 @@
#include "atom/browser/atom_browser_context.h"
#include "atom/browser/atom_browser_main_parts.h"
#include "atom/browser/atom_quota_permission_context.h"
#include "atom/browser/atom_resource_dispatcher_host_delegate.h"
#include "atom/browser/atom_speech_recognition_manager_delegate.h"
#include "atom/browser/browser.h"
#include "atom/browser/native_window.h"
#include "atom/browser/web_view_manager.h"
#include "atom/browser/web_contents_preferences.h"
#include "atom/browser/window_list.h"
#include "atom/common/options_switches.h"
#include "base/command_line.h"
#include "base/files/file_util.h"
#include "base/stl_util.h"
#include "base/strings/string_util.h"
#include "base/strings/string_number_conversions.h"
#include "chrome/browser/printing/printing_message_filter.h"
@@ -29,6 +30,7 @@
#include "content/public/browser/client_certificate_delegate.h"
#include "content/public/browser/render_process_host.h"
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/resource_dispatcher_host.h"
#include "content/public/browser/site_instance.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/web_preferences.h"
@@ -36,6 +38,7 @@
#include "net/ssl/ssl_cert_request_info.h"
#include "ppapi/host/ppapi_host.h"
#include "ui/base/l10n/l10n_util.h"
#include "v8/include/v8.h"
namespace atom {
@@ -52,34 +55,6 @@ bool g_suppress_renderer_process_restart = false;
// Custom schemes to be registered to standard.
std::string g_custom_schemes = "";
// Find out the owner of the child process according to |process_id|.
enum ProcessOwner {
OWNER_NATIVE_WINDOW,
OWNER_GUEST_WEB_CONTENTS,
OWNER_NONE, // it might be devtools though.
};
ProcessOwner GetProcessOwner(int process_id,
NativeWindow** window,
WebViewManager::WebViewInfo* info) {
auto web_contents = content::WebContents::FromRenderViewHost(
content::RenderViewHost::FromID(process_id, kDefaultRoutingID));
if (!web_contents)
return OWNER_NONE;
// First search for NativeWindow.
for (auto native_window : *WindowList::GetInstance())
if (web_contents == native_window->web_contents()) {
*window = native_window;
return OWNER_NATIVE_WINDOW;
}
// Then search for guest WebContents.
if (WebViewManager::GetInfoForWebContents(web_contents, info))
return OWNER_GUEST_WEB_CONTENTS;
return OWNER_NONE;
}
scoped_refptr<net::X509Certificate> ImportCertFromFile(
const base::FilePath& path) {
if (path.empty())
@@ -112,7 +87,7 @@ void AtomBrowserClient::SetCustomSchemes(
g_custom_schemes = JoinString(schemes, ',');
}
AtomBrowserClient::AtomBrowserClient() {
AtomBrowserClient::AtomBrowserClient() : delegate_(nullptr) {
}
AtomBrowserClient::~AtomBrowserClient() {
@@ -155,15 +130,7 @@ void AtomBrowserClient::OverrideWebkitPrefs(
// Custom preferences of guest page.
auto web_contents = content::WebContents::FromRenderViewHost(host);
WebViewManager::WebViewInfo info;
if (WebViewManager::GetInfoForWebContents(web_contents, &info)) {
prefs->web_security_enabled = !info.disable_web_security;
return;
}
NativeWindow* window = NativeWindow::FromWebContents(web_contents);
if (window)
window->OverrideWebkitPrefs(prefs);
WebContentsPreferences::OverrideWebkitPrefs(web_contents, prefs);
}
std::string AtomBrowserClient::GetApplicationLocale() {
@@ -185,6 +152,13 @@ void AtomBrowserClient::OverrideSiteInstanceForNavigation(
return;
*new_instance = content::SiteInstance::CreateForURL(browser_context, url);
// Remember the original renderer process of the pending renderer process.
auto current_process = current_instance->GetProcess();
auto pending_process = (*new_instance)->GetProcess();
pending_processes_[pending_process->GetID()] = current_process->GetID();
// Clear the entry in map when process ends.
current_process->AddObserver(this);
}
void AtomBrowserClient::AppendExtraCommandLineSwitches(
@@ -208,23 +182,18 @@ void AtomBrowserClient::AppendExtraCommandLineSwitches(
}
#endif
NativeWindow* window;
WebViewManager::WebViewInfo info;
ProcessOwner owner = GetProcessOwner(process_id, &window, &info);
// If the process is a pending process, we should use the old one.
if (ContainsKey(pending_processes_, process_id))
process_id = pending_processes_[process_id];
if (owner == OWNER_NATIVE_WINDOW) {
window->AppendExtraCommandLineSwitches(command_line);
} else if (owner == OWNER_GUEST_WEB_CONTENTS) {
command_line->AppendSwitchASCII(
switches::kGuestInstanceID, base::IntToString(info.guest_instance_id));
command_line->AppendSwitchASCII(
switches::kNodeIntegration, info.node_integration ? "true" : "false");
if (info.plugins)
command_line->AppendSwitch(switches::kEnablePlugins);
if (!info.preload_script.empty())
command_line->AppendSwitchPath(
switches::kPreloadScript, info.preload_script);
}
// Get the WebContents of the render process.
content::WebContents* web_contents = content::WebContents::FromRenderViewHost(
content::RenderViewHost::FromID(process_id, kDefaultRoutingID));
if (!web_contents)
return;
WebContentsPreferences::AppendExtraCommandLineSwitches(
web_contents, command_line);
}
void AtomBrowserClient::DidCreatePpapiPlugin(
@@ -238,6 +207,26 @@ content::QuotaPermissionContext*
return new AtomQuotaPermissionContext;
}
void AtomBrowserClient::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) {
if (delegate_) {
delegate_->AllowCertificateError(
render_process_id, render_frame_id, cert_error, ssl_info, request_url,
resource_type, overridable, strict_enforcement,
expired_previous_decision, callback, request);
}
}
void AtomBrowserClient::SelectClientCertificate(
content::WebContents* web_contents,
net::SSLCertRequestInfo* cert_request_info,
@@ -252,10 +241,17 @@ void AtomBrowserClient::SelectClientCertificate(
return;
}
if (!cert_request_info->client_certs.empty())
Browser::Get()->ClientCertificateSelector(web_contents,
cert_request_info,
delegate.Pass());
if (!cert_request_info->client_certs.empty() && delegate_) {
delegate_->SelectClientCertificate(
web_contents, cert_request_info, delegate.Pass());
}
}
void AtomBrowserClient::ResourceDispatcherHostCreated() {
resource_dispatcher_host_delegate_.reset(
new AtomResourceDispatcherHostDelegate);
content::ResourceDispatcherHost::Get()->SetDelegate(
resource_dispatcher_host_delegate_.get());
}
brightray::BrowserMainParts* AtomBrowserClient::OverrideCreateBrowserMainParts(
@@ -264,4 +260,15 @@ brightray::BrowserMainParts* AtomBrowserClient::OverrideCreateBrowserMainParts(
return new AtomBrowserMainParts;
}
void AtomBrowserClient::RenderProcessHostDestroyed(
content::RenderProcessHost* host) {
int process_id = host->GetID();
for (const auto& entry : pending_processes_) {
if (entry.first == process_id || entry.second == process_id) {
pending_processes_.erase(entry.first);
break;
}
}
}
} // namespace atom

View File

@@ -5,10 +5,12 @@
#ifndef ATOM_BROWSER_ATOM_BROWSER_CLIENT_H_
#define ATOM_BROWSER_ATOM_BROWSER_CLIENT_H_
#include <map>
#include <string>
#include <vector>
#include "brightray/browser/browser_client.h"
#include "content/public/browser/render_process_host_observer.h"
namespace content {
class QuotaPermissionContext;
@@ -21,11 +23,17 @@ class SSLCertRequestInfo;
namespace atom {
class AtomBrowserClient : public brightray::BrowserClient {
class AtomResourceDispatcherHostDelegate;
class AtomBrowserClient : public brightray::BrowserClient,
public content::RenderProcessHostObserver {
public:
AtomBrowserClient();
virtual ~AtomBrowserClient();
using Delegate = content::ContentBrowserClient;
void set_delegate(Delegate* delegate) { delegate_ = delegate; }
// Don't force renderer process to restart for once.
static void SuppressRendererProcessRestartForOnce();
// Custom schemes to be registered to standard.
@@ -49,15 +57,40 @@ class AtomBrowserClient : public brightray::BrowserClient {
int child_process_id) override;
void DidCreatePpapiPlugin(content::BrowserPpapiHost* browser_host) override;
content::QuotaPermissionContext* CreateQuotaPermissionContext() override;
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;
void ResourceDispatcherHostCreated() override;
private:
// brightray::BrowserClient:
brightray::BrowserMainParts* OverrideCreateBrowserMainParts(
const content::MainFunctionParams&) override;
// content::RenderProcessHostObserver:
void RenderProcessHostDestroyed(content::RenderProcessHost* host) override;
private:
// pending_render_process => current_render_process.
std::map<int, int> pending_processes_;
scoped_ptr<AtomResourceDispatcherHostDelegate>
resource_dispatcher_host_delegate_;
Delegate* delegate_;
DISALLOW_COPY_AND_ASSIGN(AtomBrowserClient);
};

View File

@@ -7,6 +7,8 @@
#include "atom/browser/atom_browser_main_parts.h"
#include "atom/browser/atom_download_manager_delegate.h"
#include "atom/browser/browser.h"
#include "atom/browser/net/atom_cert_verifier.h"
#include "atom/browser/net/atom_ssl_config_service.h"
#include "atom/browser/net/atom_url_request_job_factory.h"
#include "atom/browser/net/asar/asar_protocol_handler.h"
#include "atom/browser/net/http_protocol_handler.h"
@@ -56,8 +58,12 @@ std::string RemoveWhitespace(const std::string& str) {
} // namespace
AtomBrowserContext::AtomBrowserContext()
: job_factory_(new AtomURLRequestJobFactory) {
AtomBrowserContext::AtomBrowserContext(const std::string& partition,
bool in_memory)
: brightray::BrowserContext(partition, in_memory),
cert_verifier_(new AtomCertVerifier),
job_factory_(new AtomURLRequestJobFactory),
allow_ntlm_everywhere_(false) {
}
AtomBrowserContext::~AtomBrowserContext() {
@@ -85,32 +91,37 @@ net::URLRequestJobFactory* AtomBrowserContext::CreateURLRequestJobFactory(
content::URLRequestInterceptorScopedVector* interceptors) {
scoped_ptr<AtomURLRequestJobFactory> job_factory(job_factory_);
for (content::ProtocolHandlerMap::iterator it = handlers->begin();
it != handlers->end(); ++it)
job_factory->SetProtocolHandler(it->first, it->second.release());
for (auto& it : *handlers) {
job_factory->SetProtocolHandler(it.first,
make_scoped_ptr(it.second.release()));
}
handlers->clear();
job_factory->SetProtocolHandler(
url::kDataScheme, new net::DataProtocolHandler);
url::kDataScheme, make_scoped_ptr(new net::DataProtocolHandler));
job_factory->SetProtocolHandler(
url::kFileScheme, new asar::AsarProtocolHandler(
url::kFileScheme, make_scoped_ptr(new asar::AsarProtocolHandler(
BrowserThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior(
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)));
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN))));
job_factory->SetProtocolHandler(
url::kHttpScheme, new HttpProtocolHandler(url::kHttpScheme));
url::kHttpScheme,
make_scoped_ptr(new HttpProtocolHandler(url::kHttpScheme)));
job_factory->SetProtocolHandler(
url::kHttpsScheme, new HttpProtocolHandler(url::kHttpsScheme));
url::kHttpsScheme,
make_scoped_ptr(new HttpProtocolHandler(url::kHttpsScheme)));
job_factory->SetProtocolHandler(
url::kWsScheme, new HttpProtocolHandler(url::kWsScheme));
url::kWsScheme,
make_scoped_ptr(new HttpProtocolHandler(url::kWsScheme)));
job_factory->SetProtocolHandler(
url::kWssScheme, new HttpProtocolHandler(url::kWssScheme));
url::kWssScheme,
make_scoped_ptr(new HttpProtocolHandler(url::kWssScheme)));
auto host_resolver = url_request_context_getter()
->GetURLRequestContext()
->host_resolver();
auto host_resolver =
url_request_context_getter()->GetURLRequestContext()->host_resolver();
job_factory->SetProtocolHandler(
url::kFtpScheme, new net::FtpProtocolHandler(
new net::FtpNetworkLayer(host_resolver)));
url::kFtpScheme,
make_scoped_ptr(new net::FtpProtocolHandler(
new net::FtpNetworkLayer(host_resolver))));
// Set up interceptors in the reverse order.
scoped_ptr<net::URLRequestJobFactory> top_job_factory = job_factory.Pass();
@@ -145,10 +156,18 @@ AtomBrowserContext::GetDownloadManagerDelegate() {
content::BrowserPluginGuestManager* AtomBrowserContext::GetGuestManager() {
if (!guest_manager_)
guest_manager_.reset(new WebViewManager(this));
guest_manager_.reset(new WebViewManager);
return guest_manager_.get();
}
net::CertVerifier* AtomBrowserContext::CreateCertVerifier() {
return cert_verifier_;
}
net::SSLConfigService* AtomBrowserContext::CreateSSLConfigService() {
return new AtomSSLConfigService;
}
void AtomBrowserContext::RegisterPrefs(PrefRegistrySimple* pref_registry) {
pref_registry->RegisterFilePathPref(prefs::kSelectFileLastDirectory,
base::FilePath());
@@ -156,4 +175,24 @@ void AtomBrowserContext::RegisterPrefs(PrefRegistrySimple* pref_registry) {
base::FilePath());
}
bool AtomBrowserContext::AllowNTLMCredentialsForDomain(const GURL& origin) {
if (allow_ntlm_everywhere_)
return true;
return Delegate::AllowNTLMCredentialsForDomain(origin);
}
void AtomBrowserContext::AllowNTLMCredentialsForAllDomains(bool should_allow) {
allow_ntlm_everywhere_ = should_allow;
}
} // namespace atom
namespace brightray {
// static
scoped_refptr<BrowserContext> BrowserContext::Create(
const std::string& partition, bool in_memory) {
return make_scoped_refptr(new atom::AtomBrowserContext(partition, in_memory));
}
} // namespace brightray

View File

@@ -12,13 +12,14 @@
namespace atom {
class AtomDownloadManagerDelegate;
class AtomCertVerifier;
class AtomURLRequestJobFactory;
class WebViewManager;
class AtomBrowserContext : public brightray::BrowserContext {
public:
AtomBrowserContext();
virtual ~AtomBrowserContext();
AtomBrowserContext(const std::string& partition, bool in_memory);
~AtomBrowserContext() override;
// brightray::URLRequestContextGetter::Delegate:
std::string GetUserAgent() override;
@@ -27,6 +28,9 @@ class AtomBrowserContext : public brightray::BrowserContext {
content::URLRequestInterceptorScopedVector* interceptors) override;
net::HttpCache::BackendFactory* CreateHttpCacheBackendFactory(
const base::FilePath& base_path) override;
net::CertVerifier* CreateCertVerifier() override;
net::SSLConfigService* CreateSSLConfigService() override;
bool AllowNTLMCredentialsForDomain(const GURL& auth_origin) override;
// content::BrowserContext:
content::DownloadManagerDelegate* GetDownloadManagerDelegate() override;
@@ -35,13 +39,21 @@ class AtomBrowserContext : public brightray::BrowserContext {
// brightray::BrowserContext:
void RegisterPrefs(PrefRegistrySimple* pref_registry) override;
void AllowNTLMCredentialsForAllDomains(bool should_allow);
AtomCertVerifier* cert_verifier() const { return cert_verifier_; }
AtomURLRequestJobFactory* job_factory() const { return job_factory_; }
private:
scoped_ptr<AtomDownloadManagerDelegate> download_manager_delegate_;
scoped_ptr<WebViewManager> guest_manager_;
AtomURLRequestJobFactory* job_factory_; // Weak reference.
// Managed by brightray::BrowserContext.
AtomCertVerifier* cert_verifier_;
AtomURLRequestJobFactory* job_factory_;
bool allow_ntlm_everywhere_;
DISALLOW_COPY_AND_ASSIGN(AtomBrowserContext);
};

View File

@@ -7,11 +7,15 @@
#include "atom/browser/api/trackable_object.h"
#include "atom/browser/atom_browser_client.h"
#include "atom/browser/atom_browser_context.h"
#include "atom/browser/bridge_task_runner.h"
#include "atom/browser/browser.h"
#include "atom/browser/javascript_environment.h"
#include "atom/browser/node_debugger.h"
#include "atom/common/api/atom_bindings.h"
#include "atom/common/node_bindings.h"
#include "atom/common/node_includes.h"
#include "base/command_line.h"
#include "base/thread_task_runner_handle.h"
#include "chrome/browser/browser_process.h"
#include "v8/include/v8-debug.h"
@@ -19,8 +23,6 @@
#include "chrome/browser/ui/libgtk2ui/gtk2_util.h"
#endif
#include "atom/common/node_includes.h"
namespace atom {
// static
@@ -28,6 +30,7 @@ AtomBrowserMainParts* AtomBrowserMainParts::self_ = NULL;
AtomBrowserMainParts::AtomBrowserMainParts()
: fake_browser_process_(new BrowserProcess),
exit_code_(nullptr),
browser_(new Browser),
node_bindings_(NodeBindings::Create(true)),
atom_bindings_(new AtomBindings),
@@ -37,8 +40,6 @@ AtomBrowserMainParts::AtomBrowserMainParts()
}
AtomBrowserMainParts::~AtomBrowserMainParts() {
for (const auto& callback : destruction_callbacks_)
callback.Run();
}
// static
@@ -47,31 +48,51 @@ AtomBrowserMainParts* AtomBrowserMainParts::Get() {
return self_;
}
bool AtomBrowserMainParts::SetExitCode(int code) {
if (!exit_code_)
return false;
*exit_code_ = code;
return true;
}
void AtomBrowserMainParts::RegisterDestructionCallback(
const base::Closure& callback) {
destruction_callbacks_.push_back(callback);
}
brightray::BrowserContext* AtomBrowserMainParts::CreateBrowserContext() {
return new AtomBrowserContext();
void AtomBrowserMainParts::PreEarlyInitialization() {
brightray::BrowserMainParts::PreEarlyInitialization();
#if defined(OS_POSIX)
HandleSIGCHLD();
#endif
}
void AtomBrowserMainParts::PostEarlyInitialization() {
brightray::BrowserMainParts::PostEarlyInitialization();
#if defined(USE_X11)
SetDPIFromGSettings();
#endif
// Temporary set the bridge_task_runner_ as current thread's task runner,
// so we can fool gin::PerIsolateData to use it as its task runner, instead
// of getting current message loop's task runner, which is null for now.
bridge_task_runner_ = new BridgeTaskRunner;
base::ThreadTaskRunnerHandle handle(bridge_task_runner_);
// The ProxyResolverV8 has setup a complete V8 environment, in order to avoid
// conflicts we only initialize our V8 environment after that.
// The ProxyResolverV8 has setup a complete V8 environment, in order to
// avoid conflicts we only initialize our V8 environment after that.
js_env_.reset(new JavascriptEnvironment);
node_bindings_->Initialize();
// Support the "--debug" switch.
node_debugger_.reset(new NodeDebugger(js_env_->isolate()));
// Create the global environment.
global_env = node_bindings_->CreateEnvironment(js_env_->context());
// Make sure node can get correct environment when debugging.
if (node_debugger_->IsRunning())
global_env->AssignToContext(v8::Debug::GetDebugContext());
// Add atom-shell extended APIs.
atom_bindings_->BindTo(js_env_->isolate(), global_env->process_object());
@@ -93,6 +114,7 @@ void AtomBrowserMainParts::PreMainMessageLoopRun() {
1000));
brightray::BrowserMainParts::PreMainMessageLoopRun();
BridgeTaskRunner::MessageLoopIsReady();
#if defined(USE_X11)
libgtk2ui::GtkInitFromCommandLine(*base::CommandLine::ForCurrentProcess());
@@ -105,4 +127,38 @@ void AtomBrowserMainParts::PreMainMessageLoopRun() {
#endif
}
bool AtomBrowserMainParts::MainMessageLoopRun(int* result_code) {
exit_code_ = result_code;
return brightray::BrowserMainParts::MainMessageLoopRun(result_code);
}
void AtomBrowserMainParts::PostMainMessageLoopStart() {
brightray::BrowserMainParts::PostMainMessageLoopStart();
#if defined(OS_POSIX)
HandleShutdownSignals();
#endif
}
void AtomBrowserMainParts::PostMainMessageLoopRun() {
brightray::BrowserMainParts::PostMainMessageLoopRun();
#if defined(OS_MACOSX)
FreeAppDelegate();
#endif
// Make sure destruction callbacks are called before message loop is
// destroyed, otherwise some objects that need to be deleted on IO thread
// won't be freed.
for (const auto& callback : destruction_callbacks_)
callback.Run();
// Destroy JavaScript environment immediately after running destruction
// callbacks.
gc_timer_.Stop();
node_debugger_.reset();
atom_bindings_.reset();
node_bindings_.reset();
js_env_.reset();
}
} // namespace atom

View File

@@ -6,10 +6,12 @@
#define ATOM_BROWSER_ATOM_BROWSER_MAIN_PARTS_H_
#include <list>
#include <string>
#include "base/callback.h"
#include "base/timer/timer.h"
#include "brightray/browser/browser_main_parts.h"
#include "content/public/browser/browser_context.h"
class BrowserProcess;
@@ -19,6 +21,8 @@ class AtomBindings;
class Browser;
class JavascriptEnvironment;
class NodeBindings;
class NodeDebugger;
class BridgeTaskRunner;
class AtomBrowserMainParts : public brightray::BrowserMainParts {
public:
@@ -27,6 +31,9 @@ class AtomBrowserMainParts : public brightray::BrowserMainParts {
static AtomBrowserMainParts* Get();
// Sets the exit code, will fail if the the message loop is not ready.
bool SetExitCode(int code);
// Register a callback that should be destroyed before JavaScript environment
// gets destroyed.
void RegisterDestructionCallback(const base::Closure& callback);
@@ -34,29 +41,43 @@ class AtomBrowserMainParts : public brightray::BrowserMainParts {
Browser* browser() { return browser_.get(); }
protected:
// Implementations of brightray::BrowserMainParts.
brightray::BrowserContext* CreateBrowserContext() override;
// Implementations of content::BrowserMainParts.
// content::BrowserMainParts:
void PreEarlyInitialization() override;
void PostEarlyInitialization() override;
void PreMainMessageLoopRun() override;
bool MainMessageLoopRun(int* result_code) override;
void PostMainMessageLoopStart() override;
void PostMainMessageLoopRun() override;
#if defined(OS_MACOSX)
void PreMainMessageLoopStart() override;
void PostDestroyThreads() override;
#endif
private:
#if defined(USE_X11)
void SetDPIFromGSettings();
#if defined(OS_POSIX)
// Set signal handlers.
void HandleSIGCHLD();
void HandleShutdownSignals();
#endif
#if defined(OS_MACOSX)
void FreeAppDelegate();
#endif
// A fake BrowserProcess object that used to feed the source code from chrome.
scoped_ptr<BrowserProcess> fake_browser_process_;
// The gin::PerIsolateData requires a task runner to create, so we feed it
// with a task runner that will post all work to main loop.
scoped_refptr<BridgeTaskRunner> bridge_task_runner_;
// Pointer to exit code.
int* exit_code_;
scoped_ptr<Browser> browser_;
scoped_ptr<JavascriptEnvironment> js_env_;
scoped_ptr<NodeBindings> node_bindings_;
scoped_ptr<AtomBindings> atom_bindings_;
scoped_ptr<NodeDebugger> node_debugger_;
base::Timer gc_timer_;

View File

@@ -1,73 +0,0 @@
// Copyright (c) 2014 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/atom_browser_main_parts.h"
#include <gio/gio.h>
#include "base/command_line.h"
#include "base/strings/string_number_conversions.h"
#include "ui/gfx/switches.h"
namespace atom {
namespace {
const char* kInterfaceSchema = "org.gnome.desktop.interface";
const char* kScaleFactor = "scaling-factor";
bool SchemaExists(const char* schema_name) {
const gchar* const* schemas = g_settings_list_schemas();
while (*schemas) {
if (strcmp(schema_name, static_cast<const char*>(*schemas)) == 0)
return true;
schemas++;
}
return false;
}
bool KeyExists(GSettings* client, const char* key) {
gchar** keys = g_settings_list_keys(client);
if (!keys)
return false;
gchar** iter = keys;
while (*iter) {
if (strcmp(*iter, key) == 0)
break;
iter++;
}
bool exists = *iter != NULL;
g_strfreev(keys);
return exists;
}
void GetDPIFromGSettings(guint* scale_factor) {
GSettings* client = nullptr;
if (!SchemaExists(kInterfaceSchema) ||
!(client = g_settings_new(kInterfaceSchema))) {
VLOG(1) << "Cannot create gsettings client.";
return;
}
if (KeyExists(client, kScaleFactor))
*scale_factor = g_settings_get_uint(client, kScaleFactor);
g_object_unref(client);
}
} // namespace
void AtomBrowserMainParts::SetDPIFromGSettings() {
guint scale_factor = 1;
GetDPIFromGSettings(&scale_factor);
if (scale_factor == 0)
scale_factor = 1;
base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
switches::kForceDeviceScaleFactor, base::UintToString(scale_factor));
}
} // namespace atom

View File

@@ -34,7 +34,7 @@ void AtomBrowserMainParts::PreMainMessageLoopStart() {
setObject:@"NO" forKey:@"NSTreatUnknownArgumentsAsOpen"];
}
void AtomBrowserMainParts::PostDestroyThreads() {
void AtomBrowserMainParts::FreeAppDelegate() {
[[NSApp delegate] release];
[NSApp setDelegate:nil];
}

View File

@@ -0,0 +1,225 @@
// Copyright (c) 2015 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
// Most code came from: chrome/browser/chrome_browser_main_posix.cc.
#include "atom/browser/atom_browser_main_parts.h"
#include <errno.h>
#include <limits.h>
#include <pthread.h>
#include <signal.h>
#include <sys/resource.h>
#include <unistd.h>
#include "atom/browser/browser.h"
#include "base/posix/eintr_wrapper.h"
#include "content/public/browser/browser_thread.h"
using content::BrowserThread;
namespace atom {
namespace {
// See comment in |PreEarlyInitialization()|, where sigaction is called.
void SIGCHLDHandler(int signal) {
}
// The OSX fork() implementation can crash in the child process before
// fork() returns. In that case, the shutdown pipe will still be
// shared with the parent process. To prevent child crashes from
// causing parent shutdowns, |g_pipe_pid| is the pid for the process
// which registered |g_shutdown_pipe_write_fd|.
// See <http://crbug.com/175341>.
pid_t g_pipe_pid = -1;
int g_shutdown_pipe_write_fd = -1;
int g_shutdown_pipe_read_fd = -1;
// Common code between SIG{HUP, INT, TERM}Handler.
void GracefulShutdownHandler(int signal) {
// Reinstall the default handler. We had one shot at graceful shutdown.
struct sigaction action;
memset(&action, 0, sizeof(action));
action.sa_handler = SIG_DFL;
RAW_CHECK(sigaction(signal, &action, NULL) == 0);
RAW_CHECK(g_pipe_pid == getpid());
RAW_CHECK(g_shutdown_pipe_write_fd != -1);
RAW_CHECK(g_shutdown_pipe_read_fd != -1);
size_t bytes_written = 0;
do {
int rv = HANDLE_EINTR(
write(g_shutdown_pipe_write_fd,
reinterpret_cast<const char*>(&signal) + bytes_written,
sizeof(signal) - bytes_written));
RAW_CHECK(rv >= 0);
bytes_written += rv;
} while (bytes_written < sizeof(signal));
}
// See comment in |PostMainMessageLoopStart()|, where sigaction is called.
void SIGHUPHandler(int signal) {
RAW_CHECK(signal == SIGHUP);
GracefulShutdownHandler(signal);
}
// See comment in |PostMainMessageLoopStart()|, where sigaction is called.
void SIGINTHandler(int signal) {
RAW_CHECK(signal == SIGINT);
GracefulShutdownHandler(signal);
}
// See comment in |PostMainMessageLoopStart()|, where sigaction is called.
void SIGTERMHandler(int signal) {
RAW_CHECK(signal == SIGTERM);
GracefulShutdownHandler(signal);
}
class ShutdownDetector : public base::PlatformThread::Delegate {
public:
explicit ShutdownDetector(int shutdown_fd);
void ThreadMain() override;
private:
const int shutdown_fd_;
DISALLOW_COPY_AND_ASSIGN(ShutdownDetector);
};
ShutdownDetector::ShutdownDetector(int shutdown_fd)
: shutdown_fd_(shutdown_fd) {
CHECK_NE(shutdown_fd_, -1);
}
// These functions are used to help us diagnose crash dumps that happen
// during the shutdown process.
NOINLINE void ShutdownFDReadError() {
// Ensure function isn't optimized away.
asm("");
sleep(UINT_MAX);
}
NOINLINE void ShutdownFDClosedError() {
// Ensure function isn't optimized away.
asm("");
sleep(UINT_MAX);
}
NOINLINE void ExitPosted() {
// Ensure function isn't optimized away.
asm("");
sleep(UINT_MAX);
}
void ShutdownDetector::ThreadMain() {
base::PlatformThread::SetName("CrShutdownDetector");
int signal;
size_t bytes_read = 0;
ssize_t ret;
do {
ret = HANDLE_EINTR(
read(shutdown_fd_,
reinterpret_cast<char*>(&signal) + bytes_read,
sizeof(signal) - bytes_read));
if (ret < 0) {
NOTREACHED() << "Unexpected error: " << strerror(errno);
ShutdownFDReadError();
break;
} else if (ret == 0) {
NOTREACHED() << "Unexpected closure of shutdown pipe.";
ShutdownFDClosedError();
break;
}
bytes_read += ret;
} while (bytes_read < sizeof(signal));
VLOG(1) << "Handling shutdown for signal " << signal << ".";
base::Closure task =
base::Bind(&Browser::Quit, base::Unretained(Browser::Get()));
if (!BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, task)) {
// Without a UI thread to post the exit task to, there aren't many
// options. Raise the signal again. The default handler will pick it up
// and cause an ungraceful exit.
RAW_LOG(WARNING, "No UI thread, exiting ungracefully.");
kill(getpid(), signal);
// The signal may be handled on another thread. Give that a chance to
// happen.
sleep(3);
// We really should be dead by now. For whatever reason, we're not. Exit
// immediately, with the exit status set to the signal number with bit 8
// set. On the systems that we care about, this exit status is what is
// normally used to indicate an exit by this signal's default handler.
// This mechanism isn't a de jure standard, but even in the worst case, it
// should at least result in an immediate exit.
RAW_LOG(WARNING, "Still here, exiting really ungracefully.");
_exit(signal | (1 << 7));
}
ExitPosted();
}
} // namespace
void AtomBrowserMainParts::HandleSIGCHLD() {
// We need to accept SIGCHLD, even though our handler is a no-op because
// otherwise we cannot wait on children. (According to POSIX 2001.)
struct sigaction action;
memset(&action, 0, sizeof(action));
action.sa_handler = SIGCHLDHandler;
CHECK_EQ(sigaction(SIGCHLD, &action, NULL), 0);
}
void AtomBrowserMainParts::HandleShutdownSignals() {
int pipefd[2];
int ret = pipe(pipefd);
if (ret < 0) {
PLOG(DFATAL) << "Failed to create pipe";
} else {
g_pipe_pid = getpid();
g_shutdown_pipe_read_fd = pipefd[0];
g_shutdown_pipe_write_fd = pipefd[1];
#if !defined(ADDRESS_SANITIZER) && !defined(KEEP_SHADOW_STACKS)
const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 2;
#else
// ASan instrumentation and -finstrument-functions (used for keeping the
// shadow stacks) bloat the stack frames, so we need to increase the stack
// size to avoid hitting the guard page.
const size_t kShutdownDetectorThreadStackSize = PTHREAD_STACK_MIN * 4;
#endif
// TODO(viettrungluu,willchan): crbug.com/29675 - This currently leaks, so
// if you change this, you'll probably need to change the suppression.
if (!base::PlatformThread::CreateNonJoinable(
kShutdownDetectorThreadStackSize,
new ShutdownDetector(g_shutdown_pipe_read_fd))) {
LOG(DFATAL) << "Failed to create shutdown detector task.";
}
}
// Setup signal handlers for shutdown AFTER shutdown pipe is setup because
// it may be called right away after handler is set.
// If adding to this list of signal handlers, note the new signal probably
// needs to be reset in child processes. See
// base/process_util_posix.cc:LaunchProcess.
// We need to handle SIGTERM, because that is how many POSIX-based distros ask
// processes to quit gracefully at shutdown time.
struct sigaction action;
memset(&action, 0, sizeof(action));
action.sa_handler = SIGTERMHandler;
CHECK_EQ(sigaction(SIGTERM, &action, NULL), 0);
// Also handle SIGINT - when the user terminates the browser via Ctrl+C. If
// the browser process is being debugged, GDB will catch the SIGINT first.
action.sa_handler = SIGINTHandler;
CHECK_EQ(sigaction(SIGINT, &action, NULL), 0);
// And SIGHUP, for when the terminal disappears. On shutdown, many Linux
// distros send SIGHUP, SIGTERM, and then SIGKILL.
action.sa_handler = SIGHUPHandler;
CHECK_EQ(sigaction(SIGHUP, &action, NULL), 0);
}
} // namespace atom

View File

@@ -6,6 +6,7 @@
#include <string>
#include "atom/browser/api/atom_api_download_item.h"
#include "atom/browser/atom_browser_context.h"
#include "atom/browser/native_window.h"
#include "atom/browser/ui/file_dialog.h"
@@ -73,18 +74,19 @@ void AtomDownloadManagerDelegate::OnDownloadPathGenerated(
if (relay)
window = relay->window.get();
file_dialog::Filters filters;
base::FilePath path;
if (!file_dialog::ShowSaveDialog(window, item->GetURL().spec(), default_path,
filters, &path)) {
return;
if (file_dialog::ShowSaveDialog(window, item->GetURL().spec(), default_path,
file_dialog::Filters(), &path)) {
// Remember the last selected download directory.
AtomBrowserContext* browser_context = static_cast<AtomBrowserContext*>(
download_manager_->GetBrowserContext());
browser_context->prefs()->SetFilePath(prefs::kDownloadDefaultDirectory,
path.DirName());
}
// Remeber the last selected download directory.
AtomBrowserContext* browser_context = static_cast<AtomBrowserContext*>(
download_manager_->GetBrowserContext());
browser_context->prefs()->SetFilePath(prefs::kDownloadDefaultDirectory,
path.DirName());
// Running the DownloadTargetCallback with an empty FilePath signals that the
// download should be cancelled.
// If user cancels the file save dialog, run the callback with empty FilePath.
callback.Run(path,
content::DownloadItem::TARGET_DISPOSITION_PROMPT,
content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS, path);
@@ -100,6 +102,25 @@ bool AtomDownloadManagerDelegate::DetermineDownloadTarget(
const content::DownloadTargetCallback& callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
if (!download->GetForcedFilePath().empty()) {
callback.Run(download->GetForcedFilePath(),
content::DownloadItem::TARGET_DISPOSITION_OVERWRITE,
content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
download->GetForcedFilePath());
return true;
}
base::SupportsUserData::Data* save_path = download->GetUserData(
atom::api::DownloadItem::UserDataKey());
if (save_path) {
const base::FilePath& default_download_path =
static_cast<api::DownloadItem::SavePathData*>(save_path)->path();
callback.Run(default_download_path,
content::DownloadItem::TARGET_DISPOSITION_OVERWRITE,
content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
default_download_path);
return true;
}
AtomBrowserContext* browser_context = static_cast<AtomBrowserContext*>(
download_manager_->GetBrowserContext());
base::FilePath default_download_path = browser_context->prefs()->GetFilePath(
@@ -110,14 +131,6 @@ bool AtomDownloadManagerDelegate::DetermineDownloadTarget(
default_download_path = path.Append(FILE_PATH_LITERAL("Downloads"));
}
if (!download->GetForcedFilePath().empty()) {
callback.Run(download->GetForcedFilePath(),
content::DownloadItem::TARGET_DISPOSITION_OVERWRITE,
content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS,
download->GetForcedFilePath());
return true;
}
CreateDownloadPathCallback download_path_callback =
base::Bind(&AtomDownloadManagerDelegate::OnDownloadPathGenerated,
weak_ptr_factory_.GetWeakPtr(),

View File

@@ -0,0 +1,40 @@
// 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/atom_resource_dispatcher_host_delegate.h"
#include "atom/browser/login_handler.h"
#include "atom/common/platform_util.h"
#include "content/public/browser/browser_thread.h"
#include "net/base/escape.h"
#include "url/gurl.h"
using content::BrowserThread;
namespace atom {
AtomResourceDispatcherHostDelegate::AtomResourceDispatcherHostDelegate() {
}
bool AtomResourceDispatcherHostDelegate::HandleExternalProtocol(
const GURL& url,
int render_process_id,
int render_view_id,
bool is_main_frame,
ui::PageTransition transition,
bool has_user_gesture) {
GURL escaped_url(net::EscapeExternalHandlerValue(url.spec()));
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
base::Bind(base::IgnoreResult(platform_util::OpenExternal), escaped_url));
return true;
}
content::ResourceDispatcherHostLoginDelegate*
AtomResourceDispatcherHostDelegate::CreateLoginDelegate(
net::AuthChallengeInfo* auth_info,
net::URLRequest* request) {
return new LoginHandler(auth_info, request);
}
} // namespace atom

View File

@@ -0,0 +1,31 @@
// 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_ATOM_RESOURCE_DISPATCHER_HOST_DELEGATE_H_
#define ATOM_BROWSER_ATOM_RESOURCE_DISPATCHER_HOST_DELEGATE_H_
#include "content/public/browser/resource_dispatcher_host_delegate.h"
namespace atom {
class AtomResourceDispatcherHostDelegate
: public content::ResourceDispatcherHostDelegate {
public:
AtomResourceDispatcherHostDelegate();
// content::ResourceDispatcherHostDelegate:
bool HandleExternalProtocol(const GURL& url,
int render_process_id,
int render_view_id,
bool is_main_frame,
ui::PageTransition transition,
bool has_user_gesture) override;
content::ResourceDispatcherHostLoginDelegate* CreateLoginDelegate(
net::AuthChallengeInfo* auth_info,
net::URLRequest* request) override;
};
} // namespace atom
#endif // ATOM_BROWSER_ATOM_RESOURCE_DISPATCHER_HOST_DELEGATE_H_

View File

@@ -6,14 +6,25 @@
namespace auto_updater {
AutoUpdaterDelegate* AutoUpdater::delegate_ = NULL;
Delegate* AutoUpdater::delegate_ = nullptr;
AutoUpdaterDelegate* AutoUpdater::GetDelegate() {
Delegate* AutoUpdater::GetDelegate() {
return delegate_;
}
void AutoUpdater::SetDelegate(AutoUpdaterDelegate* delegate) {
void AutoUpdater::SetDelegate(Delegate* delegate) {
delegate_ = delegate;
}
#if !defined(OS_MACOSX) || defined(MAS_BUILD)
void AutoUpdater::SetFeedURL(const std::string& url) {
}
void AutoUpdater::CheckForUpdates() {
}
void AutoUpdater::QuitAndInstall() {
}
#endif
} // namespace auto_updater

View File

@@ -9,21 +9,48 @@
#include "base/basictypes.h"
namespace base {
class Time;
}
namespace auto_updater {
class AutoUpdaterDelegate;
class Delegate {
public:
// An error happened.
virtual void OnError(const std::string& error) {}
// Checking to see if there is an update
virtual void OnCheckingForUpdate() {}
// There is an update available and it is being downloaded
virtual void OnUpdateAvailable() {}
// There is no available update.
virtual void OnUpdateNotAvailable() {}
// There is a new update which has been downloaded.
virtual void OnUpdateDownloaded(const std::string& release_notes,
const std::string& release_name,
const base::Time& release_date,
const std::string& update_url) {}
protected:
virtual ~Delegate() {}
};
class AutoUpdater {
public:
// Gets/Sets the delegate.
static AutoUpdaterDelegate* GetDelegate();
static void SetDelegate(AutoUpdaterDelegate* delegate);
static Delegate* GetDelegate();
static void SetDelegate(Delegate* delegate);
static void SetFeedURL(const std::string& url);
static void CheckForUpdates();
static void QuitAndInstall();
private:
static AutoUpdaterDelegate* delegate_;
static Delegate* delegate_;
DISALLOW_IMPLICIT_CONSTRUCTORS(AutoUpdater);
};

View File

@@ -1,45 +0,0 @@
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ATOM_BROWSER_AUTO_UPDATER_DELEGATE_H_
#define ATOM_BROWSER_AUTO_UPDATER_DELEGATE_H_
#include <string>
#include "base/callback_forward.h"
namespace base {
class Time;
}
namespace auto_updater {
class AutoUpdaterDelegate {
public:
// An error happened.
virtual void OnError(const std::string& error) {}
// Checking to see if there is an update
virtual void OnCheckingForUpdate() {}
// There is an update available and it is being downloaded
virtual void OnUpdateAvailable() {}
// There is no available update.
virtual void OnUpdateNotAvailable() {}
// There is a new update which has been downloaded.
virtual 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) {}
protected:
virtual ~AutoUpdaterDelegate() {}
};
} // namespace auto_updater
#endif // ATOM_BROWSER_AUTO_UPDATER_DELEGATE_H_

View File

@@ -1,17 +0,0 @@
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/auto_updater.h"
namespace auto_updater {
// static
void AutoUpdater::SetFeedURL(const std::string& url) {
}
// static
void AutoUpdater::CheckForUpdates() {
}
} // namespace auto_updater

View File

@@ -12,9 +12,6 @@
#include "base/bind.h"
#include "base/time/time.h"
#include "base/strings/sys_string_conversions.h"
#include "atom/browser/auto_updater_delegate.h"
#include <iostream>
namespace auto_updater {
@@ -23,20 +20,12 @@ namespace {
// The gloal SQRLUpdater object.
SQRLUpdater* g_updater = nil;
void RelaunchToInstallUpdate() {
[[g_updater relaunchToInstallUpdate] subscribeError:^(NSError* error) {
AutoUpdaterDelegate* delegate = AutoUpdater::GetDelegate();
if (delegate)
delegate->OnError(base::SysNSStringToUTF8(error.localizedDescription));
}];
}
} // namespace
// static
void AutoUpdater::SetFeedURL(const std::string& feed) {
if (g_updater == nil) {
AutoUpdaterDelegate* delegate = GetDelegate();
Delegate* delegate = GetDelegate();
if (!delegate)
return;
@@ -67,7 +56,7 @@ void AutoUpdater::SetFeedURL(const std::string& feed) {
// static
void AutoUpdater::CheckForUpdates() {
AutoUpdaterDelegate* delegate = GetDelegate();
Delegate* delegate = GetDelegate();
if (!delegate)
return;
@@ -86,8 +75,7 @@ void AutoUpdater::CheckForUpdates() {
base::SysNSStringToUTF8(update.releaseNotes),
base::SysNSStringToUTF8(update.releaseName),
base::Time::FromDoubleT(update.releaseDate.timeIntervalSince1970),
base::SysNSStringToUTF8(update.updateURL.absoluteString),
base::Bind(RelaunchToInstallUpdate));
base::SysNSStringToUTF8(update.updateURL.absoluteString));
} else {
// When the completed event is sent with no update, then we know there
// is no update available.
@@ -100,4 +88,12 @@ void AutoUpdater::CheckForUpdates() {
}];
}
void AutoUpdater::QuitAndInstall() {
[[g_updater relaunchToInstallUpdate] subscribeError:^(NSError* error) {
Delegate* delegate = AutoUpdater::GetDelegate();
if (delegate)
delegate->OnError(base::SysNSStringToUTF8(error.localizedDescription));
}];
}
} // namespace auto_updater

View File

@@ -1,17 +0,0 @@
// Copyright (c) 2013 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/auto_updater.h"
namespace auto_updater {
// static
void AutoUpdater::SetFeedURL(const std::string& url) {
}
// static
void AutoUpdater::CheckForUpdates() {
}
} // namespace auto_updater

View File

@@ -0,0 +1,64 @@
// 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/bridge_task_runner.h"
#include "base/message_loop/message_loop.h"
namespace atom {
// static
std::vector<BridgeTaskRunner::TaskPair> BridgeTaskRunner::tasks_;
std::vector<BridgeTaskRunner::TaskPair> BridgeTaskRunner::non_nestable_tasks_;
// static
void BridgeTaskRunner::MessageLoopIsReady() {
auto message_loop = base::MessageLoop::current();
CHECK(message_loop);
for (const TaskPair& task : tasks_) {
message_loop->task_runner()->PostDelayedTask(
base::get<0>(task), base::get<1>(task), base::get<2>(task));
}
for (const TaskPair& task : non_nestable_tasks_) {
message_loop->task_runner()->PostNonNestableDelayedTask(
base::get<0>(task), base::get<1>(task), base::get<2>(task));
}
}
bool BridgeTaskRunner::PostDelayedTask(
const tracked_objects::Location& from_here,
const base::Closure& task,
base::TimeDelta delay) {
auto message_loop = base::MessageLoop::current();
if (!message_loop) {
tasks_.push_back(base::MakeTuple(from_here, task, delay));
return true;
}
return message_loop->task_runner()->PostDelayedTask(from_here, task, delay);
}
bool BridgeTaskRunner::RunsTasksOnCurrentThread() const {
auto message_loop = base::MessageLoop::current();
if (!message_loop)
return true;
return message_loop->task_runner()->RunsTasksOnCurrentThread();
}
bool BridgeTaskRunner::PostNonNestableDelayedTask(
const tracked_objects::Location& from_here,
const base::Closure& task,
base::TimeDelta delay) {
auto message_loop = base::MessageLoop::current();
if (!message_loop) {
non_nestable_tasks_.push_back(base::MakeTuple(from_here, task, delay));
return true;
}
return message_loop->task_runner()->PostNonNestableDelayedTask(
from_here, task, delay);
}
} // namespace atom

View File

@@ -0,0 +1,46 @@
// 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_BRIDGE_TASK_RUNNER_H_
#define ATOM_BROWSER_BRIDGE_TASK_RUNNER_H_
#include <vector>
#include "base/single_thread_task_runner.h"
#include "base/tuple.h"
namespace atom {
// Post all tasks to the current message loop's task runner if available,
// otherwise delay the work until message loop is ready.
class BridgeTaskRunner : public base::SingleThreadTaskRunner {
public:
BridgeTaskRunner() {}
~BridgeTaskRunner() override {}
// Called when message loop is ready.
static void MessageLoopIsReady();
// base::SingleThreadTaskRunner:
bool PostDelayedTask(const tracked_objects::Location& from_here,
const base::Closure& task,
base::TimeDelta delay) override;
bool RunsTasksOnCurrentThread() const override;
bool PostNonNestableDelayedTask(
const tracked_objects::Location& from_here,
const base::Closure& task,
base::TimeDelta delay) override;
private:
using TaskPair = base::Tuple<
tracked_objects::Location, base::Closure, base::TimeDelta>;
static std::vector<TaskPair> tasks_;
static std::vector<TaskPair> non_nestable_tasks_;
DISALLOW_COPY_AND_ASSIGN(BridgeTaskRunner);
};
} // namespace atom
#endif // ATOM_BROWSER_BRIDGE_TASK_RUNNER_H_

View File

@@ -7,16 +7,16 @@
#include <string>
#include "atom/browser/atom_browser_main_parts.h"
#include "atom/browser/native_window.h"
#include "atom/browser/window_list.h"
#include "base/message_loop/message_loop.h"
#include "content/public/browser/client_certificate_delegate.h"
#include "net/ssl/ssl_cert_request_info.h"
namespace atom {
Browser::Browser()
: is_quiting_(false),
is_ready_(false) {
is_ready_(false),
is_shutdown_(false) {
WindowList::AddObserver(this);
}
@@ -30,6 +30,9 @@ Browser* Browser::Get() {
}
void Browser::Quit() {
if (is_quiting_)
return;
is_quiting_ = HandleBeforeQuit();
if (!is_quiting_)
return;
@@ -41,11 +44,43 @@ void Browser::Quit() {
window_list->CloseAllWindows();
}
void Browser::Exit(int code) {
if (!AtomBrowserMainParts::Get()->SetExitCode(code)) {
// Message loop is not ready, quit directly.
exit(code);
} else {
// Prepare to quit when all windows have been closed..
is_quiting_ = true;
// Must destroy windows before quitting, otherwise bad things can happen.
atom::WindowList* window_list = atom::WindowList::GetInstance();
if (window_list->size() == 0) {
NotifyAndShutdown();
} else {
// Unlike Quit(), we do not ask to close window, but destroy the window
// without asking.
for (NativeWindow* window : *window_list)
window->CloseContents(nullptr); // e.g. Destroy()
}
}
}
void Browser::Shutdown() {
if (is_shutdown_)
return;
is_shutdown_ = true;
is_quiting_ = true;
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnQuit());
is_quiting_ = true;
base::MessageLoop::current()->Quit();
if (base::MessageLoop::current()) {
base::MessageLoop::current()->PostTask(
FROM_HERE, base::MessageLoop::QuitWhenIdleClosure());
} else {
// There is no message loop available so we are in early stage.
exit(0);
}
}
std::string Browser::GetVersion() const {
@@ -74,10 +109,6 @@ std::string Browser::GetName() const {
void Browser::SetName(const std::string& name) {
name_override_ = name;
#if defined(OS_WIN)
SetAppUserModelID(name);
#endif
}
bool Browser::OpenFile(const std::string& file_path) {
@@ -93,8 +124,10 @@ void Browser::OpenURL(const std::string& url) {
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnOpenURL(url));
}
void Browser::ActivateWithNoOpenWindows() {
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnActivateWithNoOpenWindows());
void Browser::Activate(bool has_visible_windows) {
FOR_EACH_OBSERVER(BrowserObserver,
observers_,
OnActivate(has_visible_windows));
}
void Browser::WillFinishLaunching() {
@@ -106,18 +139,14 @@ void Browser::DidFinishLaunching() {
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnFinishLaunching());
}
void Browser::ClientCertificateSelector(
content::WebContents* web_contents,
net::SSLCertRequestInfo* cert_request_info,
scoped_ptr<content::ClientCertificateDelegate> delegate) {
FOR_EACH_OBSERVER(BrowserObserver,
observers_,
OnSelectCertificate(web_contents,
cert_request_info,
delegate.Pass()));
void Browser::RequestLogin(LoginHandler* login_handler) {
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnLogin(login_handler));
}
void Browser::NotifyAndShutdown() {
if (is_shutdown_)
return;
bool prevent_default = false;
FOR_EACH_OBSERVER(BrowserObserver, observers_, OnWillQuit(&prevent_default));

View File

@@ -11,12 +11,12 @@
#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "base/observer_list.h"
#include "base/strings/string16.h"
#include "atom/browser/browser_observer.h"
#include "atom/browser/window_list_observer.h"
#if defined(OS_WIN)
#include "base/files/file_path.h"
#include "base/strings/string16.h"
#endif
namespace base {
@@ -29,6 +29,8 @@ class MenuModel;
namespace atom {
class LoginHandler;
// This class is used for control application-wide operations.
class Browser : public WindowListObserver {
public:
@@ -40,6 +42,9 @@ class Browser : public WindowListObserver {
// Try to close all windows and quit the application.
void Quit();
// Exit the application immediately and set exit code.
void Exit(int code);
// Cleanup everything and shutdown the application gracefully.
void Shutdown();
@@ -64,6 +69,9 @@ class Browser : public WindowListObserver {
// Clear the recent documents list.
void ClearRecentDocuments();
// Set the application user model ID.
void SetAppUserModelID(const base::string16& name);
#if defined(OS_MACOSX)
// Bounce the dock icon.
enum BounceType {
@@ -98,8 +106,10 @@ class Browser : public WindowListObserver {
// Add a custom task to jump list.
void SetUserTasks(const std::vector<UserTask>& tasks);
// Set the application user model ID, called when "SetName" is called.
void SetAppUserModelID(const std::string& name);
// Returns the application user model ID, if there isn't one, then create
// one from app's name.
// The returned string managed by Browser, and should not be modified.
PCWSTR GetAppUserModelID();
#endif
// Tell the application to open a file.
@@ -108,18 +118,16 @@ class Browser : public WindowListObserver {
// Tell the application to open a url.
void OpenURL(const std::string& url);
// Tell the application that application is activated with no open windows.
void ActivateWithNoOpenWindows();
// Tell the application that application is activated with visible/invisible
// windows.
void Activate(bool has_visible_windows);
// Tell the application the loading has been done.
void WillFinishLaunching();
void DidFinishLaunching();
// Called when client certificate is required.
void ClientCertificateSelector(
content::WebContents* web_contents,
net::SSLCertRequestInfo* cert_request_info,
scoped_ptr<content::ClientCertificateDelegate> delegate);
// Request basic auth login.
void RequestLogin(LoginHandler* login_handler);
void AddObserver(BrowserObserver* obs) {
observers_.AddObserver(obs);
@@ -129,6 +137,7 @@ class Browser : public WindowListObserver {
observers_.RemoveObserver(obs);
}
bool is_shutting_down() const { return is_shutdown_; }
bool is_quiting() const { return is_quiting_; }
bool is_ready() const { return is_ready_; }
@@ -153,11 +162,14 @@ class Browser : public WindowListObserver {
void OnWindowAllClosed() override;
// Observers of the browser.
ObserverList<BrowserObserver> observers_;
base::ObserverList<BrowserObserver> observers_;
// Whether "ready" event has been emitted.
bool is_ready_;
// The browse is being shutdown.
bool is_shutdown_;
std::string version_override_;
std::string name_override_;

View File

@@ -31,6 +31,9 @@ void Browser::AddRecentDocument(const base::FilePath& path) {
void Browser::ClearRecentDocuments() {
}
void Browser::SetAppUserModelID(const base::string16& name) {
}
std::string Browser::GetExecutableFileVersion() const {
return brightray::GetApplicationVersion();
}

View File

@@ -26,6 +26,9 @@ void Browser::AddRecentDocument(const base::FilePath& path) {
void Browser::ClearRecentDocuments() {
}
void Browser::SetAppUserModelID(const base::string16& name) {
}
std::string Browser::GetExecutableFileVersion() const {
return brightray::GetApplicationVersion();
}

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