Compare commits

...

875 Commits

Author SHA1 Message Date
John Kleinschmidt
afcbb589b6 Bump v2.0.0-beta.1 2018-02-21 14:45:36 -05:00
John Kleinschmidt
4159103467 Use new release job 2018-02-21 14:41:18 -05:00
John Kleinschmidt
2a97e48465 Merge pull request #11968 from electron/refactor-menu-popup
Refactor menu.popup
2018-02-21 14:29:52 -05:00
John Kleinschmidt
b4ae41b484 Merge pull request #11999 from electron/no_execstack
Explicitly disable executable stack
2018-02-21 14:00:47 -05:00
Shelley Vohr
e3d4358068 bump electron-typescript-defs to 1.3.2 2018-02-21 12:42:07 -05:00
Ales Pergl
89d5e4a2f0 Explicitly disable executable stack in all Linux binaries 2018-02-21 17:57:53 +01:00
Ales Pergl
c3dbba00a6 Use --icf=all on architectures where it's supported 2018-02-21 17:55:28 +01:00
shelley vohr
77b8c81096 Merge pull request #11963 from perlun/patch-1
security.md: Reformat security recommendation checklist
2018-02-21 10:01:15 -05:00
shelley vohr
0ef8f1bdad Add deprecation warnings fot html/rtf methods (#11995) 2018-02-21 06:53:48 -06:00
Cheng Zhao
f7ec346e9f Merge pull request #11956 from brenca/transparent-window-devtools-fix
Fix transparent windows losing transparency when devtools detaches
2018-02-21 19:54:35 +09:00
Heilig Benedek
6f2609f9d2 Remove outdated comments 2018-02-21 11:28:53 +01:00
shelley vohr
772a69e24a deprecate autoSubmit in favor of uploadToServer (#11992) 2018-02-20 22:31:48 -06:00
shelley vohr
193febd18c deprecate boolean highlightMode param (#11993)
* deprecate boolean highlightMode param

* add process.noDeprecations check

* fix native method override

* add todo
2018-02-20 22:30:32 -06:00
shelley vohr
719e5a93b4 deprecation for webContents.openDevTools (#11986)
* deprecate old openDevTools param

* add deprecation check and existence check

* fix method issues
2018-02-20 22:30:02 -06:00
Charles Kerr
f59d078eea Use more idiomatic JS in WebContents' init() 2018-02-20 19:20:11 -06:00
shelley vohr
c2575c4944 remove app.getAppMemoryInfo (#11985)
* remove app.getMemoryInfo

* semicolons are important
2018-02-20 18:52:33 -06:00
Charles Kerr
9c56b81b71 Throw an error if menu.popup() has no window 2018-02-20 18:38:05 -06:00
Charles Kerr
5a25b88b50 Fix browserWindow detection in menu.popup() 2018-02-20 18:35:39 -06:00
Charles Kerr
21de806c80 document menu.popup() option's window argument 2018-02-20 14:30:37 -06:00
Charles Kerr
708f39a1a5 update a few menu.popup() calls to use the new API 2018-02-20 14:02:24 -06:00
John Kleinschmidt
dcaff20cfd Merge pull request #11981 from electron/set-tray-highlightmode
no longer support bool param for setHighlightMode
2018-02-20 12:57:52 -05:00
Charles Kerr
35e90f742b fix menu.popup() sample code 2018-02-20 11:18:57 -06:00
shelley vohr
846be03f1d remove support for hidden-inset (#11975) 2018-02-20 11:09:54 -06:00
shelley vohr
7bcccdec41 remove atom-shell process name (#11979) 2018-02-20 10:33:38 -06:00
Shelley Vohr
5065e159f1 positionItem => positioningItem 2018-02-20 11:28:34 -05:00
shelley vohr
6a3fde6e20 Merge pull request #11973 from electron/remove-clipboard-methods
Remove html/rtf methods marked for 2.0
2018-02-20 11:21:10 -05:00
Charles Kerr
8d086a43cb Fix brightray::GetApplicationName(), ..Version() on Linux (#11980)
* add brightray API to override app version

* in atom browser, use brightray app version API

* on Linux, have GetApplicationVersion() use brightray version API

* on Linux, implement brightray::GetApplicationName()

* fix typo in brightray API

* make browser.GetName() logic follow GetVersion() logic

* improve variable name in OverrideApplicationVersion declaration

* fix typo in brightray impl
2018-02-20 10:16:51 -06:00
Shelley Vohr
ba933ef085 update docs for single param popup 2018-02-20 11:12:39 -05:00
Cheng Zhao
dc62e51ba4 Fix the cyclic reference in menu delegate (#11967)
* Fix the cyclic reference in menu delegate

* Fix menu tests due to delegate change
2018-02-20 10:11:35 -06:00
Shelley Vohr
fb7fb4972d options all the things 2018-02-20 11:10:53 -05:00
shelley vohr
e1b81b8a62 remove support for crashReporter autoSubmit (#11976) 2018-02-20 10:10:35 -06:00
shelley vohr
8d4bf3e29a Merge pull request #11974 from electron/remove-setZoomLevelLimits
remove setZoomLevelLimits
2018-02-20 10:51:41 -05:00
shelley vohr
a2856db982 Remove nativeImage deprecated methods (#11978)
* remove deprecated nativeimage methods

* remove .only from spec
2018-02-20 09:15:27 -06:00
Shelley Vohr
57738e6981 no longer support bool param for setHighlightMode 2018-02-20 10:06:59 -05:00
shelley vohr
98ba120ae2 Merge pull request #11972 from electron/remove-setextra-param
remove setExtraParameter for 2.0
2018-02-20 09:10:38 -05:00
Shelley Vohr
211b542ae4 remove setZoomLevelLimits 2018-02-20 08:57:48 -05:00
Charles Kerr
2a16b28be4 Cache libnotify server caps (#11965)
* cache libnotify server capabilities

* fix broken production cache in NotifierSupportsActions()

* log a warning if LibnotifyNotification::Initialize() fails
2018-02-20 07:53:10 -06:00
Shelley Vohr
e4e20d667b remove html/rtf methods marked for 2.0 2018-02-20 08:41:58 -05:00
Shelley Vohr
1a3661206e remove unused deprecate module from crashreporter 2018-02-20 08:31:38 -05:00
Shelley Vohr
fc025064f7 remove setExtraParameter for 2.0 2018-02-20 08:26:10 -05:00
Shelley Vohr
56f06187d5 forgot to remove old method 2018-02-19 21:03:10 -05:00
Shelley Vohr
73ab87b87f add new and changed specs 2018-02-19 20:59:47 -05:00
Shelley Vohr
6e11a3e53d add restructured window.popup 2018-02-19 20:59:27 -05:00
shelley vohr
459a5e3a1f Merge pull request #11961 from electron/fix-bw-callback
add conditional for menu.popup(window, callback)
2018-02-19 19:54:20 -05:00
Zeke Sikelianos
35faab89a4 add typing cat to first PR comment (#11964)
* add typing cat to first PR comment

* update cat URL
2018-02-19 17:45:14 -06:00
Zeke Sikelianos
af82b2037e Merge pull request #11950 from electron/semver-doc-tweaks
semver documentation tweaks
2018-02-19 13:07:33 -08:00
Per Lundberg
8375d21cae security.md: Update security recommendation checklist 2018-02-19 23:07:03 +02:00
Shelley Vohr
9c52d273dd add spec for menu.popup(window, callback) 2018-02-19 13:15:49 -05:00
Shelley Vohr
cd9e7142e4 add conditional for menu.popup(window, callback) 2018-02-19 13:06:37 -05:00
Heilig Benedek
d31d2087a3 use SK_ColorTRANSPARENT as the default color to fix issue with transparent window devtools detach 2018-02-19 15:07:28 +01:00
Charles Kerr
56859531cd fix floating reference glib warning (#11948)
use gtk_widget_destroy() rather than g_object_unref() on the floating temporary menubar widget that we use to calculate colors
2018-02-19 00:12:54 -06:00
Charles Kerr
fbce7bafd7 capitalize 'Node.js' 2018-02-18 23:14:08 -06:00
Charles Kerr
e3efe4b378 make the table a real table 2018-02-18 11:04:21 -06:00
Charles Kerr
ac57c7625a minor copyediting 2018-02-18 11:00:06 -06:00
shelley vohr
55d4d74624 Merge pull request #11944 from electron/update-native-mate
update native_mate ref
2018-02-18 09:20:22 -05:00
Shelley Vohr
2a46a63833 update native_mate ref 2018-02-18 08:57:22 -05:00
John Kleinschmidt
f3415c04cd Merge pull request #11804 from electron/fix-protocol-origin-filtering
Fix protocol filtering of net.request
2018-02-16 14:17:46 -05:00
Paul Frazee
01a6104727 Add download from custom protocol test (#11931) 2018-02-16 13:03:53 -05:00
Thiago de Arruda
bc76f35691 Fix protocol filtering of net.request
net::URLRequest inherits from base::SupportsUserData, which allows
associating arbitrary data with the request. Use this mechanism as a
condition for filtering requests from custom protocols.

Close #11657
2018-02-16 13:03:53 -05:00
John Kleinschmidt
78ccfa0612 Merge pull request #11879 from electron/fix-gtk-deprecations
Fix GTK+ 3 deprecations
2018-02-16 10:01:01 -05:00
Cheng Zhao
67fa13d7cf Merge pull request #11925 from electron/squirrel-mac-cdn
Update to use Squirrel.Mac that supports CDN releases
2018-02-16 15:28:39 +09:00
Samuel Attard
a20b379f26 fix windows tests 2018-02-16 16:02:10 +11:00
Samuel Attard
549042160f requestHeaders --> headers 2018-02-16 13:41:21 +11:00
Samuel Attard
f84b8bbfdc Update deps for new squirrel 2018-02-16 13:01:00 +11:00
Charles Kerr
5e7a5ce3a9 run clang-format on changed sources 2018-02-15 15:20:55 -06:00
Charles Kerr
d30310a2f2 don't build libgtkui files on non-GTK+ platforms 2018-02-15 15:15:26 -06:00
Charles Kerr
b0469702ad replace gtk2 with gtk3 in cibuild script 2018-02-15 15:10:21 -06:00
Charles Kerr
4774f32065 replace gtk2 with gtk3 in docs 2018-02-15 15:08:55 -06:00
Charles Kerr
c8e64ff870 replace gtk2 with gtk3 in dockerfiles 2018-02-15 15:03:14 -06:00
Charles Kerr
381ed2e2b2 remove GTK+ 2 specific code 2018-02-15 14:57:45 -06:00
Cheng Zhao
af92b04eb9 Merge pull request #11654 from sethlu/set-notification-close-button-text
feat: Set macOS notification close button title
2018-02-15 16:01:30 +09:00
Cheng Zhao
fdda1c55c5 Merge pull request #11647 from sethlu/accept-additional-notification-actions
feat: Accept additional notification actions
2018-02-15 15:46:36 +09:00
Samuel Attard
6318cd781d Update to use Squirrel.Mac that supports CDN releases 2018-02-15 14:00:46 +11:00
shelley vohr
7e2f7602c1 Merge pull request #11921 from electron/allow-osr-console-message
Emit console-message in OSR mode
2018-02-14 11:02:18 -05:00
Zeke Sikelianos
6f0080be4c Merge pull request #11918 from dakeshi/fix-typo-docs
fix typo in electron-versioning.md
2018-02-14 06:46:37 -08:00
Shelley Vohr
31b074ff0e change to return emit 2018-02-14 09:28:21 -05:00
Shelley Vohr
c3d11a51cc emit console-message in OSR mode 2018-02-14 09:09:45 -05:00
Charles Kerr
402201ac39 Fix cppcheck warnings (#11883)
* remove unused variable

* limit scope of variable 'ret'

* pass shared_ptr<SkBitmap> by reference

* silence warning: value reassign before read

* fix oops

* don't refer to 'response' after std::move()ing it

* make the linter happy
2018-02-14 02:21:46 -06:00
shelley vohr
f8b7145c6b update libcc ref (#11916) 2018-02-13 23:13:38 -05:00
Sangjoon Moon
8a84bd8d19 fix typo in electron-versioning.md
- backport
- stabilization branch
- and some typo
2018-02-14 13:04:57 +09:00
shelley vohr
a55fd06aa2 Revert "Merge pull request #11737 from kwonoj/feat-cache-capacity" (#11906)
This reverts commit 181169b743, reversing
changes made to baced3152f.
2018-02-13 10:49:27 -05:00
Cheng Zhao
eba9abdbe5 Merge pull request #11501 from emmkimme/Enh_WebPrefs_Affinity_Option
Feature : Affinity option for gathering several pages in a single process
2018-02-13 16:21:48 +09:00
Cheng Zhao
affa21600c Remove unnecessary methods on WebContentsPreferences 2018-02-13 15:57:54 +09:00
Cheng Zhao
2b623f5d86 docs: More explaination to affinity option 2018-02-13 15:33:11 +09:00
Emmanuel Kimmerlin
9c1b47361f Add an "affinity" option to webPreferences 2018-02-13 15:18:55 +09:00
John Eismeier
8d55334016 Propose fix some typos (#11905) 2018-02-13 00:18:27 -05:00
John Kleinschmidt
546bd6da5e Merge pull request #11903 from electron/update-release-for2
Change release process for 2.0
2018-02-12 16:52:41 -05:00
Felix Rieseberg
4ed5bb9901 fix: Update touch bar type documentation (#11563)
* fix: Update touch bar type documentation

Tiny change: The `escapeItem` in the touch bar constructor accepts a `null`, but our typings do not reflect that.

* Also uppdate the escapeItem instance property type docs
2018-02-12 14:59:01 -05:00
Samuel Attard
9bd7d53cf8 Handle empty handles (#11598)
* Handle empty handles

* Close and dispose window at end of void test

* Dispose of existing window before running void 0 spec
2018-02-12 14:46:29 -05:00
John Kleinschmidt
12a8d90ef0 Change release process for 2.0
Tag release as soon as version bumps
No longer use release branch
Remove merge step as it is no longer needed.
2018-02-12 14:06:09 -05:00
Samuel Attard
181169b743 Merge pull request #11737 from kwonoj/feat-cache-capacity
feat(webframe): export set cache capacity interface
2018-02-13 06:02:25 +11:00
Samuel Attard
baced3152f Mark securityScopedBookmarks as optional and a boolean (#11901) 2018-02-12 13:48:45 -05:00
Samuel Attard
ae65938752 Fix frameless windows with vibrancy (#11886) 2018-02-12 13:38:37 -05:00
acheronfail
d1d50a4c92 Implement App-Scoped Security scoped bookmarks (#11711)
* implementation of security scoped bookmarks

* option is now only available on mas builds
2018-02-12 13:25:06 -05:00
Samuel Attard
9f78ef0179 Merge pull request #11595 from YurySolovyov/fileicon-task-scheduler
Use task scheduler for app.getFileIcon API
2018-02-13 05:11:22 +11:00
Samuel Attard
01dcddef35 Merge pull request #11819 from kwonoj/feat-worditerator
feat(worditerator): bump up worditerator into latest
2018-02-13 05:11:01 +11:00
Samuel Attard
b3234f634b Add ability to set arbitrary arguments in a renderer process (#11850) 2018-02-12 11:54:31 -06:00
Samuel Attard
66b57858b8 Fix child touch bar items not updating (#11812)
* Fix child touch bar items not updating

Deep children of a TouchBar didn't cause the top level touch bar to update, now they do

Fixes #11761.

* Remove unused newValue property in TB setter
2018-02-12 12:53:04 -05:00
shelley vohr
6943ada7e8 Merge pull request #11897 from electron/fix-contrib-links
add links to new contrib docs
2018-02-12 12:48:47 -05:00
John Kleinschmidt
e6ac2637d3 Merge pull request #11728 from brenca/osr-gpu-update-master
Improve OSR API (master)
2018-02-12 12:29:11 -05:00
shelley vohr
fae71f9987 Merge pull request #11880 from nitsakh/better-ipc-logging
Add ability to log atom ipc messages
2018-02-12 09:20:37 -05:00
Shelley Vohr
8987828ecd add links to new contrib docs 2018-02-12 09:16:29 -05:00
shelley vohr
533dfc42a8 enhance documentation around contributing to electron (#11887)
* add issues document

* add documentation coding style to doc

* copyediting

* replace `nodejs/node` with `electron/electron`
* fix commasplice
* fix two most important... s/is/are/
* omit unnecessary words

* add pull requests doc

* copyediting

* add general code style to styleguide

* updates to CONTRIBUTING.md

* copyediting

* mark shell blocks as ```sh
* mitigate phrase duplication e.g. 'best practice'
* lots of opinionated changes to omit unnecessary words

* fix numbering & re-apply changes that I overwrote
2018-02-12 08:09:38 -06:00
shelley vohr
31e0bc02ba add pr template (#11888) 2018-02-12 08:08:32 -06:00
universeroc
069c6187cf Fix #11893 Remove unused member variable content_client_ (#11894) 2018-02-12 08:07:12 -06:00
Nitish Sakhawalkar
e19e2b9242 Address review comments 2018-02-11 10:25:11 -08:00
shelley vohr
647f0f3a57 Merge pull request #11873 from electron/add-file-format-picker
add accessory view for format picker
2018-02-10 23:32:08 -05:00
Shelley Vohr
36cf548114 change weak ptr ref to strong 2018-02-10 21:04:26 -05:00
shelley vohr
1657c37761 Merge pull request #11881 from electron/update-zoom-level-doc
add formula to setZoomLevel doc
2018-02-10 09:08:59 -05:00
Zhuo Lu
e3b70dd029 Fix grammar 2018-02-10 03:20:20 -08:00
Zhuo Lu
d05791c1ac Tweak wording 2018-02-10 03:20:20 -08:00
Zhuo Lu
bf11b09d35 Mention change of default value scenario in doc 2018-02-10 03:20:20 -08:00
Zhuo Lu
69e65e0d5e Update NotificationAction doc 2018-02-10 03:20:20 -08:00
Zhuo Lu
0b7a629a41 Overload method for naming consistency 2018-02-10 03:20:20 -08:00
Zhuo Lu
75b990faff Use std::string::empty to check 2018-02-10 03:20:20 -08:00
Zhuo Lu
1e1087abbb Simplify formatting 2018-02-10 03:20:20 -08:00
Zhuo Lu
31baafab3b NSUserNotification should respond
NSUserNotification is expected to responsd to `@selector(setContentImage:)` with macOS ^10.9
2018-02-10 03:20:20 -08:00
Zhuo Lu
3ee3e9a3e8 Fix typo 2018-02-10 03:20:20 -08:00
Zhuo Lu
09d51f0a3d Fix include order 2018-02-10 03:20:20 -08:00
Zhuo Lu
844ee0a3f4 Accept additional notification actions
Change to the existing API definition: The first action with type `button` seen will be displayed on the notification, the rest listed as additional actions (shown when holding down on the primary action button)
2018-02-10 03:20:20 -08:00
Zhuo Lu
38d284590f Add Notification tests 2018-02-10 03:19:47 -08:00
Zhuo Lu
29f9929703 Organize code 2018-02-10 03:19:47 -08:00
Zhuo Lu
0d4c6e327f Update Notification API doc 2018-02-10 03:19:47 -08:00
Zhuo Lu
be118d4f13 Make it able to set close button text 2018-02-10 03:19:47 -08:00
Shelley Vohr
5818353ebc add formula to setZoomLevel doc 2018-02-09 23:20:45 -05:00
Shelley Vohr
3085c78bcf implement selectFormat selector 2018-02-09 21:38:21 -05:00
Nitish Sakhawalkar
5194288fce Add ability to log atom ipc messages 2018-02-09 18:01:14 -08:00
Charles Kerr
3710e0e38b make the linter happier 2018-02-09 19:34:37 -06:00
Charles Kerr
4b766d26df make the linter happy 2018-02-09 19:29:32 -06:00
Charles Kerr
3f5ce6d74f fix gtk3 deprecation warnings setting menubar colors 2018-02-09 19:04:59 -06:00
Charles Kerr
b107d3f440 remove icons from messageboxes on gtk
Icons are deprecated in GtkMessageBoxes as of GTK+ 3.12. The GNOME HIG no longer shows icons in example dialogs; see https://developer.gnome.org/hig/stable/dialogs.html.en and https://developer.gnome.org/gtk3/stable/GtkMessageDialog.html
2018-02-09 17:53:02 -06:00
Charles Kerr
ffff400236 fix 'GTK_STOCK_*' deprecation warnings 2018-02-09 17:45:34 -06:00
shelley vohr
647d04cf92 Add brightray to src code structure (#11878)
* add brightray to src code structure

* try new code flag
2018-02-09 13:21:50 -06:00
Charles Kerr
e5eeab6e29 fix 'GTK_STOCK_*' deprecation warnings 2018-02-09 09:57:39 -06:00
Shelley Vohr
0fff336481 add accessory view for format picker 2018-02-09 09:08:04 -05:00
Aleš Pergl
efb44050db Enable official build (#11847)
* Updated libchromiumcontent submodule

* Use same LTO settings as libcc

* Use whole program optimization, favour speed, remove redundancies

* Don't use variable template as it confuses LTCG

* Use lld and ThinLTO only on limited set of architectures
2018-02-08 13:26:23 -06:00
shelley vohr
8b9b1e5595 Merge pull request #11863 from electron/move-locale-test
Move locale doc to command line switches
2018-02-08 14:10:19 -05:00
Shelley Vohr
1e090b9ee7 remove .only 2018-02-08 13:50:44 -05:00
Shelley Vohr
f6d389b159 fix child process import 2018-02-08 13:50:19 -05:00
Shelley Vohr
e10b5e13e9 move spec to chromium_spec 2018-02-08 13:00:41 -05:00
Shelley Vohr
1018cdc225 move locale doc to command line switches 2018-02-08 11:49:28 -05:00
shelley vohr
ca34978e73 add app.setLocale() (#11469)
* infrastructure for setLocale via klang

* add documentation for setLocale

* add test for setLocale

* fix spec

* add spec and update docs

* fix carriage feeds on windows

* SetLocale() sets LC_ALL on Linux

* in SetLocale() on Linux, use g_setenv()

* fix tyop: '#ifdef OSX_POSIX'

* make the linter happy

* improvements from review
2018-02-08 08:26:37 -06:00
Vanessa Yuen
e3f1d90854 Merge pull request #11855 from electron/vanessayuenn-patch-1
Delete `upgradeing-chrome.md`
2018-02-07 17:53:34 +01:00
Vanessa Yuen
4ab13d9e90 Delete upgradeing-chrome.md 2018-02-07 17:11:16 +01:00
OJ Kwon
e869c27041 feat(worditerator): bump up worditerator into latest 2018-02-06 15:31:18 -08:00
Felix Rieseberg
6c6fa3190f Fix PRE_RELEASE_VERSION (on master) (#11844)
* 🔧 Fix PRE_RELEASE_VERSION

* 🔧 Fix spacing

* 🔧 Fix this, but harder
2018-02-06 16:33:51 -06:00
shelley vohr
64f509ea7a Merge pull request #11832 from electron/enable-window
Add API to enable/disable a window
2018-02-06 14:14:45 -05:00
Shelley Vohr
5b901d9f82 revert TOOLKIT_VIEWS check change 2018-02-06 13:34:27 -05:00
John Kleinschmidt
6fd5b168bc Merge pull request #11841 from electron/vanessayuenn-patch-1
Update snapcraft.md
2018-02-06 11:45:14 -05:00
Vanessa Yuen
4685c46b04 Update snapcraft.md
fix super teeny tiny typo 😬
2018-02-06 17:28:40 +01:00
John Kleinschmidt
a0e584efeb Merge pull request #11793 from electron/release-updates
Improvements to release process
2018-02-06 11:12:41 -05:00
Shelley Vohr
3f6d2eb3ab remove extraneous variable 2018-02-06 09:27:30 -05:00
Shelley Vohr
80aa399f8a updates to mac enable method 2018-02-06 09:16:22 -05:00
Shelley Vohr
131aa38768 typo fix 2018-02-06 08:30:33 -05:00
Shelley Vohr
faf08b2b77 add documentation 2018-02-06 08:28:41 -05:00
Shelley Vohr
ae632193c0 migrate to virtual void and start mac impl 2018-02-06 08:21:53 -05:00
Samuel Attard
8c2c7c3634 Merge pull request #11836 from kaylieEB/master
Replace custom function with Object.values()
2018-02-06 15:45:02 +11:00
kaylie
3c64062f69 Replace custom function with Object.values() 2018-02-05 20:03:28 -08:00
Shelley Vohr
97589bbe33 first pass at api method to enable window 2018-02-05 14:49:59 -05:00
shelley vohr
5240352326 Remove extra menu separators (#11827)
* add function to remove leading/trailing separators

* change const  name for clarity

* add spec to check filtered separators

* clean method and add edge case spec per review
2018-02-05 11:55:12 -06:00
shelley vohr
e6a5990b95 Merge pull request #11774 from nitsakh/fix-invalid-utf
Handle invalid utf8 characters for debugger
2018-02-05 12:44:41 -05:00
John Kleinschmidt
e924781ee5 Improvements to release process
1. Prompt user to verify version before version is created.
2. Fix validateRelease instructions and usage
3. Fix ci-release-build so that you don't have to pass in --ghRelease=true; just --ghRelease will work.
2018-02-05 10:57:48 -05:00
Cheng Zhao
42fa018277 Merge pull request #11492 from timmyhadwen/master
Fixed Bluetooth chooser bug. Closes #11399
2018-02-05 20:44:42 +09:00
Cheng Zhao
8ac52b418b Coding style fixes 2018-02-05 17:29:59 +09:00
Samuel Attard
9676c0a4f9 Fix build and ensure no breaking change 2018-02-05 17:29:59 +09:00
Cheng Zhao
1c43768104 Coding style fixes 2018-02-05 17:29:59 +09:00
Samuel Attard
87c2f0f14f Fix build and ensure no breaking change 2018-02-05 17:29:59 +09:00
Samuel Attard
5f7a173d1d Add missing header import 2018-02-05 17:29:59 +09:00
Samuel Attard
72464a6db5 Fix implicit appUserModelId set 2018-02-05 17:29:59 +09:00
Cheng Zhao
ab015e573b Merge pull request #11417 from electron/power-monitor-shutdown-event-and-delay-api
[RFC] New API: powerMonitor "shutdown" event
2018-02-05 17:29:31 +09:00
Cheng Zhao
9337959f51 The tryToTerminateApp is not really needed 2018-02-05 16:25:50 +09:00
Cheng Zhao
983e1b1a70 Implement shutdown event for macOS 2018-02-05 16:20:57 +09:00
Cheng Zhao
c470e758cc Remove the AllocateSystemIOPorts call
It is no longer needed and it is crashing.
2018-02-05 16:15:49 +09:00
Cheng Zhao
109e2c760f Do not use virtual function to request shutdown
Would make it easier to port to other platforms.
2018-02-05 15:50:55 +09:00
Cheng Zhao
8ae3d9dd0b Simplify the public PowerObserver interface 2018-02-05 15:28:58 +09:00
Thiago de Arruda
e0e7dd2a8f fixup! Implement powerMonitor 'shutdown' event for Linux. 2018-02-05 15:21:31 +09:00
Thiago de Arruda
176c03fa15 Add doc for powerMonitor shutdown event 2018-02-05 15:21:31 +09:00
Thiago de Arruda
f0e210360f fixup! Implement powerMonitor 'shutdown' event for Linux 2018-02-05 15:21:31 +09:00
Thiago de Arruda
45763c0afb fixup! Implement powerMonitor 'shutdown' event for Linux 2018-02-05 15:21:31 +09:00
Thiago de Arruda
df6328e5d7 Add some tests for powerMonitor "shutdown" event 2018-02-05 15:21:31 +09:00
Thiago de Arruda
56b53e71aa Implement powerMonitor 'shutdown' event for Linux.
The event is emitted when the OS is rebooting/shutting down, and allows
an electron app to call `e.preventDefault()` in order to delay shutdown
and exit cleanly.
2018-02-05 15:21:31 +09:00
Cheng Zhao
28d96e2d29 Merge pull request #11354 from elegos/feature/create-dist-chromium-dir-option
Adds --chromium_dir argument to script/create-dist.py
2018-02-05 15:08:57 +09:00
Pranjal
732af93fc9 Updated for arm and armv7l documentation (#11825)
* Updated for arm and armv7l documentation

Cleared up the confusion caused by arm or armv7l  mentioned somewhere and not mentioned elsewhere

* 📝 Improve wording a bit.
2018-02-04 18:29:19 -07:00
Felix Rieseberg
d586ef2f39 feature: Hot security tips (#11810)
* 🔧 Add security issue detection (and logs)

* 🔧 Check for it on load

* 👷 Add some tests

* 👷 Make the linter happy

* 🔧 Allow them to be enabled by force

* 📝 Make message slightly prettier

* 🔧 Fix a typo in the code comment

* 🔧 Classic mistake

* 🚀 Optimize things a bit more

* 👷 Add tests, fix tests

* 📝 Document things

* 🔧 Make linter happy

* 🔧 One more piece of cleanup
2018-02-03 07:50:12 -07:00
Nitish Sakhawalkar
62d2a3472f Fix test BrowserWindow.addTabbedWindow() (#11795)
* Fix test BrowserWindow.addTabbedWindow()

* Address review comments
2018-02-02 19:31:02 -07:00
Charles Kerr
bd06abd523 Merge pull request #11806 from electron/security-docs-improvements
docs: Fixs some errors in the security documentation
2018-02-02 07:47:37 -07:00
Zeke Sikelianos
a033a9cd5d Merge pull request #11794 from electron/snapcraft-documentation
Add snapcraft documentation
2018-02-01 19:22:10 -08:00
Nitish Sakhawalkar
e411b49f4e Fix and update debugger UTF char test 2018-02-01 16:47:52 -08:00
Felix Rieseberg
6cf0c56eaf 📝 Some more words 2018-02-01 16:32:58 -08:00
Charles Kerr
714838d65e Merge pull request #11796 from electron/case-insensitive-blacklist
Case insensitive blacklist
2018-02-01 15:51:02 -07:00
shelley vohr
1545a95782 Merge pull request #11799 from electron/browserview-inherit-fix
Don't inherit isBrowserView preference
2018-02-01 14:36:56 -05:00
Felix Rieseberg
ce969c9326 📝 Fix some errors 2018-02-01 09:58:02 -08:00
Felix Rieseberg
be7e46b3fe 📝 A word on strict 2018-02-01 09:47:15 -08:00
Felix Rieseberg
495c6dcff5 📝 Some more words 2018-02-01 09:43:26 -08:00
Charles Kerr
e51c78f10c fix oops
because compiling before pushing is for wusses
2018-01-31 22:25:57 -07:00
Shelley Vohr
db6d84de74 don't inherit isBrowserView for spawned child windows 2018-02-01 00:09:37 -05:00
Charles Kerr
b32a7d4cb4 Merge pull request #11798 from electron/shadowroot-deprecate-fix
Migrate deprecated web-view method
2018-01-31 22:09:33 -07:00
Felix Rieseberg
77dcddf157 📝 Even more words 2018-01-31 17:00:19 -08:00
Felix Rieseberg
9d0d83a002 📝 Some more words 2018-01-31 16:57:45 -08:00
Felix Rieseberg
45119845e8 📝 Callout forge/builder as easiest 2018-01-31 16:56:46 -08:00
Felix Rieseberg
311c0873db 📝 Link to the guide 2018-01-31 16:54:23 -08:00
Felix Rieseberg
1184eca581 🔧 Fix various typos, implement feedback 2018-01-31 16:52:38 -08:00
Charles Kerr
1106cde687 fix oops 2018-01-31 17:40:11 -07:00
Charles Kerr
09a2c80443 use std::binary_search to search switch blacklist 2018-01-31 17:36:06 -07:00
Charles Kerr
8405fe763e Make a copy-paste recipe for rebuilding the blacklist 2018-01-31 17:35:34 -07:00
Samuel Attard
ce361a12e3 Use case-insensitive switch comparisons 2018-01-31 17:35:09 -07:00
Shelley Vohr
b74304145e createShadowRoot => attachShadow 2018-01-31 19:29:23 -05:00
Felix Rieseberg
b49a284ccf 📝 Add snapcraft documentation 2018-01-31 16:01:38 -08:00
John Kleinschmidt
278c58055e Merge pull request #11776 from electron/parallel-releases
Allow multiple releases to run at once
2018-01-31 13:14:09 -05:00
John Kleinschmidt
7e9131d82b Allow multiple releases to run at once
Find draft release by draft flag and tag name
2018-01-30 17:35:16 -07:00
Charles Kerr
67196bdd3e Merge pull request #11770 from electron/security-documentation
Enhance security documentation
2018-01-30 15:03:43 -07:00
shelley vohr
f24eab74d8 Merge pull request #11726 from electron/faster-compare-blacklist
Make use of sorted list to speed up searching
2018-01-30 09:46:38 -05:00
Felix Rieseberg
93dc38a17b 👷 Put ESLint's mind at ease 2018-01-29 16:27:41 -08:00
Felix Rieseberg
d8d19baad3 ❤️ Even more feedback 2018-01-29 16:02:39 -08:00
Felix Rieseberg
1e1729adad ❤️ More feedback 2018-01-29 16:01:05 -08:00
Zeke Sikelianos
aea06ed95f Merge pull request #11758 from nicknish/nn/fix-typo-remote-api-docs
Fix typo in remote api docs
2018-01-29 14:33:16 -08:00
Felix Rieseberg
8f685e9329 👷 Linter errors 2018-01-29 12:36:51 -08:00
Felix Rieseberg
8804b09188 ❤️ Implement @zeke’s feedback 2018-01-29 12:34:46 -08:00
Felix Rieseberg
536ff0b7e2 👷 Fix failed test 2018-01-29 11:29:15 -08:00
Felix Rieseberg
fb8606dd0c 📝 General cleanup 2018-01-29 11:19:43 -08:00
Felix Rieseberg
c4dc8dacbf 📝 Context Isolation 2018-01-29 11:19:21 -08:00
Felix Rieseberg
4cb22dd2ff 📝 allowpopups 2018-01-29 11:04:02 -08:00
Felix Rieseberg
cdb20d2692 🔧 WebSecurity 2018-01-29 11:03:51 -08:00
Felix Rieseberg
7e79ae750f 📝 Blink Features 2018-01-29 11:03:38 -08:00
Felix Rieseberg
39e0efd9a4 📝 Experimental Features 2018-01-29 11:03:27 -08:00
Felix Rieseberg
e73f142adc 📝 allowRunningInsecureContent 2018-01-29 11:03:06 -08:00
Felix Rieseberg
5418866e87 📝 eval() 2018-01-29 11:02:52 -08:00
Felix Rieseberg
c793ee3aeb 📝 Content Security Policy 2018-01-29 11:02:30 -08:00
Felix Rieseberg
a5c900ac7a 📝 Context Isolation 2018-01-29 11:01:22 -08:00
shelley vohr
12d4f984f3 Merge pull request #11754 from electron/menu-events
Add and document menu events
2018-01-29 12:40:57 -05:00
Felix Rieseberg
f790c24c27 📝 Verify WebView creation 2018-01-28 18:19:49 -08:00
Felix Rieseberg
d67c64b6fa 📝 Disable Node Integration 2018-01-28 17:25:05 -08:00
Felix Rieseberg
2db125890c 📝 Secure content 2018-01-28 16:55:11 -08:00
Felix Rieseberg
601fbc8731 📝 Link to security tutorial 2018-01-28 16:54:58 -08:00
Shelley Vohr
c886803d0f change doc to show working on all platforms 2018-01-28 18:57:44 -05:00
Shelley Vohr
a9dd4c927d update menu docs description string 2018-01-28 13:59:53 -05:00
nicknish
30581f78a2 📝 Fix typo in remote api docs [ci skip] 2018-01-28 04:37:13 +08:00
Shelley Vohr
3d032c2b57 forgot to remove .only from spec 2018-01-27 12:38:55 -05:00
Shelley Vohr
3679a9c37a fix event callback placement in spec 2018-01-27 12:36:51 -05:00
Shelley Vohr
e81265bc7f add documentation for new menu events 2018-01-27 11:28:42 -05:00
Shelley Vohr
e345342e36 add first pass at menu event specs 2018-01-27 11:23:46 -05:00
Shelley Vohr
bef4c84799 turn class into observer 2018-01-27 10:40:50 -05:00
Shelley Vohr
3399480304 first pass at menu event emission 2018-01-27 09:35:58 -05:00
Samuel Attard
b0a1575bb7 Merge pull request #11747 from timfish/patch-1
CrashReport structure in docs does not match API output
2018-01-27 23:24:43 +11:00
Tim Fish
e3383c82d1 CrashReport structure does not match API output
Electron 1.7

Docs:
```typescript
  interface CrashReport {
    date: string;
    ID: number;
  }
```
Actual output of `getLastCrashReport`:
```javascript
{ 
  date: 2018-01-26T21:50:05.000Z,
  id: '989d0469-9eb7-4f70-ba58-3425bc6ffa3b' 
}
```
2018-01-27 12:21:09 +01:00
OJ Kwon
1ab92f7866 docs(webframe): reword api instructions 2018-01-26 10:58:25 -08:00
OJ Kwon
690a9e9483 test(webframe): add basic test case 2018-01-26 10:57:52 -08:00
OJ Kwon
004c9427eb docs(webframe): add interface instruction 2018-01-26 10:57:52 -08:00
Heilig Benedek
df3d94b20d Remove web_contents_impl() helper to clarify code and remove unnecessary guard 2018-01-26 10:30:20 +01:00
OJ Kwon
d172e29270 feat(webframe): export set cache capacity interface 2018-01-25 20:43:01 -08:00
Heilig Benedek
406f171c88 Move OSR api to OsrWCV to allow api calls to take effect sooner 2018-01-25 16:11:56 +01:00
Heilig Benedek
1a8916ed47 Call SetAuthoritativeVsyncInterval on the Compositor directly 2018-01-25 16:11:44 +01:00
Heilig Benedek
099bbfbafb Raise maximum OSR framerate to 240 2018-01-25 16:11:31 +01:00
Heilig Benedek
304fd49e84 Don't generate a frame with GPU OSR if IsPainting is false 2018-01-25 16:11:22 +01:00
Heilig Benedek
708cde92cf Don't generate a paint when StartPainting is called inside paint cb 2018-01-25 16:11:12 +01:00
Heilig Benedek
17d85318c3 Use null accelerated widget to avoid showing GPU accelerated OSR surface 2018-01-25 16:10:38 +01:00
Cheng Zhao
b5d5eca224 Make use of sorted order to speed up searching 2018-01-25 14:42:56 +09:00
Cheng Zhao
b9c0bab8f1 Merge pull request #11704 from brenca/fix-10678
Remove WS_EX_COMPOSITED style from window (master)
2018-01-24 14:44:52 +09:00
Cheng Zhao
0207aebad1 Merge pull request #11664 from loc/use_directx_capturer_win
Use same screen capturer settings for thumbnails as getUserMedia
2018-01-24 14:38:32 +09:00
Aleš Pergl
868e792572 Make run-as-node mode optional (#11701) 2018-01-23 18:17:15 -05:00
shelley vohr
19a5ebce66 update submodule ref for updated node (#11706) 2018-01-23 18:14:04 -05:00
shelley vohr
4757980f9c add license file to npm publish (#11705) 2018-01-23 18:09:08 -05:00
Heilig Benedek
50690d25f1 Remove WS_EX_COMPOSITED style from window 2018-01-23 20:14:34 +01:00
Aleš Pergl
39554566cc Allow IO while constructing an absolute path (prevents DCHECK failure) (#11697) 2018-01-23 10:25:01 -05:00
Aleš Pergl
c49cb29ddf Disallow launching unknown apps via browser client.
CVE-2018-1000006
2018-01-22 16:49:30 -06:00
Samuel Attard
32a1395bcf Merge pull request #11565 from electron/add-load-file-helper
Add window.loadFile and webContents.loadFile helper methods
2018-01-23 09:08:23 +11:00
Shelley Vohr
365fe6b067 fix code fence lint failure 2018-01-22 12:41:46 -05:00
Felix Rieseberg
8a4c76d655 docs: Document custom installation (#11640)
* 📝 Document custom installation

* ❤️ Implement feedback

* 🔧 Fix linting errors
2018-01-19 16:33:36 -05:00
Nitish Sakhawalkar
2b4cc0a525 Fix macos Full Screen Toggle menu item label (#11633) 2018-01-19 09:27:36 -05:00
Charles Kerr
d0af17e601 Merge pull request #11644 from brenca/tooltip-fix-master
Explicitly hide tooltip when the window is deactivated (master)
2018-01-18 23:35:06 -06:00
Ryan Baxley
8387d92cd5 Update CONTRIBUTING.md with link to development docs (#11529)
* Update CONTRIBUTING.md with link to development docs

[ci skip]

* Use relative link to development documentation

[ci skip]
2018-01-18 21:29:10 -05:00
Heilig Benedek
f36fda3f5d don't dereference tooltip_controller if it's null 2018-01-18 20:35:19 +01:00
Heilig Benedek
8d8b8c590d update calls to use new namespaces 2018-01-18 15:23:38 +01:00
Heilig Benedek
5e198d9dc6 add todo comment 2018-01-18 15:23:38 +01:00
Heilig Benedek
8233890e39 lint fix 2018-01-18 15:23:38 +01:00
Heilig Benedek
c6c618acdb explicitly hide tooltip on window deactivation 2018-01-18 15:23:38 +01:00
Andy Locascio
ae65c26469 fix lint 2018-01-17 17:04:57 -08:00
Andy Locascio
8253e50e9c use same settings for screen thumbnails as chrome does webrtc capturing
Following along from http://crrev.com/2961193002: make sure the
thumbnail capturers initialize with the same settings as the capturer
from a getUserMedia request does. Otherwise, there is no guarentee that the
sources on Windows will match.
2018-01-17 15:55:10 -08:00
John Kleinschmidt
ea1da93e5e Merge pull request #11662 from electron/fix-ia32-testing-for-forks
Set DISPLAY variable for xvfb
2018-01-17 13:47:41 -05:00
John Kleinschmidt
565946cdff Set DISPLAY variable for xvfb
PRs submitted from forks need this value for xvfb to run properly.
2018-01-17 12:57:42 -05:00
shelley vohr
4f0e1826e5 properly check checkbox state on callback (#11658) 2018-01-17 08:51:49 -05:00
Cheng Zhao
4dab824c6b Merge pull request #11625 from nitsakh/mac-terminate
Change macos app termination process
2018-01-17 16:28:56 +09:00
Nitish Sakhawalkar
ea2056b513 Replace arrow function 2018-01-17 15:27:11 +09:00
Nitish Sakhawalkar
7aefc73ffd Fix lint 2018-01-17 15:27:11 +09:00
Nitish Sakhawalkar
28f1abcb05 Change macos app termination process 2018-01-17 15:27:11 +09:00
Cheng Zhao
d69c17a96a Merge pull request #11656 from electron/update-gyp
Update gyp: Add Visual Studio 2017 support
2018-01-17 11:43:46 +09:00
Cheng Zhao
b45ce8ff2d Update gyp: Add Visual Studio 2017 support 2018-01-17 10:19:02 +09:00
John Kleinschmidt
a6d3dee321 Removing core dump check (#11621)
It appears that the arm build failing with a core dump is a false positive.  Testing the latest arm build from master on a raspberry pi 2, it does not core dump.
2018-01-13 23:02:10 -05:00
Tiago Danin
74769da9a7 [Docs] Fix URLs and Paths (#11584)
* Fix URLs and Paths in docs/

* Avoiding link break to /docs/development/updgrading-chrome.md

* Fix URLs and Paths in docs/ #2

* Removed double spaces in docs
2018-01-12 10:24:48 -05:00
Charles Kerr
fa43cb6ef0 Merge pull request #11557 from josimi/master
Fixes hexColorDWORDToRGBA for transparent colors
2018-01-11 10:28:53 -06:00
Lee Dohm
f5962538f4 Merge pull request #11545 from m1guelpf-forks/patch-1
Update license year
2018-01-10 09:19:12 -08:00
Cheng Zhao
fce84fbe99 Merge pull request #11292 from AdrienFery/in-app-purchase
Add in-app purchase for MacOS
2018-01-10 19:42:03 +09:00
Cheng Zhao
bd271cffb9 Throw when inAppPurchase is used on unsupported platforms 2018-01-10 18:53:55 +09:00
Cheng Zhao
a883d3d50d Fix build on other platforms 2018-01-10 17:39:16 +09:00
Cheng Zhao
839df0ee5a Remove observer on cleanup 2018-01-10 17:30:30 +09:00
Cheng Zhao
6d9c6645a8 Add inAppPurchase to docs index 2018-01-10 17:25:04 +09:00
Cheng Zhao
e77ddd3221 Pass multiple transactions at the same time
This follows the design of SKPayment API.
2018-01-10 17:19:44 +09:00
Cheng Zhao
2dd545ebda Payment should be part of Transaction
This follows The SKPayment API, and makes our JS wrappers easier to
implement.
2018-01-10 17:06:27 +09:00
Cheng Zhao
635b753ecd No need for SKPaymentTransactionState prefix for states 2018-01-10 16:59:17 +09:00
Cheng Zhao
133bef3deb Turn addTransactionListener into transaction-updated event 2018-01-10 16:57:52 +09:00
Cheng Zhao
ac6f895f64 Turn InAppPurchase into an EventEmitter 2018-01-10 16:37:05 +09:00
Cheng Zhao
400bfb3c5a mac: SKProductsRequest should be freed on end 2018-01-10 15:29:32 +09:00
Cheng Zhao
bdeb979d41 spec: Simple tests for inAppPurchase module 2018-01-10 15:21:53 +09:00
Cheng Zhao
5f1c76c688 Reorgnize the platform-specific files 2018-01-10 14:45:42 +09:00
Adrien Fery
b2542a27c3 Update code style 2018-01-10 13:14:18 +09:00
Adrien Fery
d32632f768 Update filenames.gypi 2018-01-10 13:14:18 +09:00
Adrien Fery
eb2520488f Adapt code style 2018-01-10 13:14:18 +09:00
Adrien Fery
329fddaed1 Put in-app purchase files under macOS check 2018-01-10 13:14:18 +09:00
Adrien Fery
f3ae566164 Add in-app purchase for MacOS 2018-01-10 13:14:18 +09:00
Cheng Zhao
143816bee1 Merge pull request #11272 from syntropy-ai/1-7-x
Removed tracking area for tray to prevent mouse leave race condition crash
2018-01-10 13:13:10 +09:00
Matt Way
5504294a6a Replaces tracking removal with proper mem management 2018-01-10 10:24:37 +09:00
Matt Way
8df4402722 removed unnecessary braces 2018-01-10 10:24:13 +09:00
Matt Way
638d8219c4 Removed tracking area when removing icon to prevent mouse exit race condition crash 2018-01-10 10:24:11 +09:00
Jonathon Simister
9c018744f4 Fixes hexColorDWORDToRGBA for transparent colors 2018-01-09 11:07:29 -08:00
John Kleinschmidt
83b351a8fd Merge pull request #11487 from electron/circleci-cross-arch-testing
Add testing for arm, arm64 and ia32 linux builds
2018-01-08 11:01:55 -05:00
Yury Solovyov
49844b6e5b Move the IconLoader to use the task scheduler.
This follows https://codereview.chromium.org/2953633002
2018-01-08 13:21:22 +03:00
Yury Solovyov
b3743058c0 Make gfx::Image instance a local variable.
This follows https://codereview.chromium.org/2709683002
2018-01-08 12:47:25 +03:00
Cheng Zhao
c1d68974ab Merge pull request #11589 from electron/fix-accelerator-problem
Update libcc: Fix Shift not showing  in menu for certain accelerators
2018-01-08 16:15:28 +09:00
Cheng Zhao
f201969f12 Update libcc: Fix Shift not showing
Fix the Shift key not showing in menu for certain accelerators like
Control+Shift+F.
2018-01-08 12:33:43 +09:00
Cheng Zhao
4298aecb7c Merge pull request #11547 from electron/draggable_regions_patch
fix: draggable region ipc should be frame based
2018-01-07 21:15:50 +09:00
Zeke Sikelianos
4e328a2a08 Merge pull request #11481 from teiles/master
docs: change getBlobData return type from Blob to Buffer
2018-01-05 20:43:26 -08:00
Zeke Sikelianos
33da3153b6 Merge pull request #11538 from TiagoDanin-Forks/MD-PATH
Doc update: New path for web-contents.md
2018-01-05 08:43:08 -08:00
Zeke Sikelianos
c272a18204 Merge pull request #11428 from TechnicalSoup/patch-1
docs: specify string values for DownloadItem
2018-01-05 08:42:10 -08:00
Zeke Sikelianos
aeffef766a Merge pull request #11420 from joeydlee95/master
 Add test to check for relative links in docs
2018-01-05 08:39:34 -08:00
Charles Kerr
435c9c1486 Force uv loop cleanup (#11465)
* ensure all uv handles are closed before ending worker's loop

* add DCHECK to test that the Worker loop is finished

* don't call deprecated uv_loop_new(), uv_loop_delete()

* make cpplint happy

* fix comment error

* empty commit for CI

* tweak DCHECK expression

* extract-method: stop_and_close_uv_loop()

* fix DCHECK oops
2018-01-04 11:16:06 -08:00
Zeke Sikelianos
eb89e12c5b Merge pull request #11532 from sethlu/camelcase-menuitem-role
Make MenuItem roles camelCase-compatible
2018-01-04 09:53:58 -08:00
Cheng Zhao
6bc7c8cc49 Merge pull request #11396 from electron/enable_base_dchecks
fix: enable additional dchecks
2018-01-04 21:19:12 +09:00
Cheng Zhao
9bd192ea17 Update libcc to latest 2018-01-04 16:14:01 +09:00
Zhuo Lu
df841fa397 Revert changes made to test case
The MenuItem role should be lowercase
2018-01-04 14:38:58 +08:00
Samuel Attard
1553b54779 Add window.loadFile and webContents.loadFile helper methods 2018-01-04 11:38:56 +13:00
Cheng Zhao
1ff872519c posix: Fix assertion when freeing ProcessSingleton 2018-01-03 19:47:01 +09:00
Cheng Zhao
1072c75e38 Closing asar file should be syncronous 2018-01-03 19:12:16 +09:00
Cheng Zhao
fb78052b3d Remove unnecessary scope 2018-01-03 19:10:48 +09:00
Cheng Zhao
104585e772 Do not create DIR_USER_DATA on IO thread
It would slowdown the startup time of apps since we have wait for two
message posts between threads.
2018-01-03 19:07:24 +09:00
Cheng Zhao
952928dc79 Singleton must be created on request
The creation of singleton relies on the `userData` dir, which can be
changed by user, we have to ensure singleton uses the `userData` dir set
by user.
2018-01-03 18:59:12 +09:00
Cheng Zhao
0cce6b3d21 Fix cpplint warning 2018-01-03 17:32:18 +09:00
Cheng Zhao
d6068759b6 win: Fix assertion when creating Notification 2018-01-03 17:25:19 +09:00
TechnicalSoup
0ea296b1cb docs: specify string values for DownloadItem
Explicitly list the possible string return values for the updated and done events so that the typescript declaration file can model them more accurately. At present they are represented as a string type.

Fixes : https://github.com/electron/electron-typescript-definitions/issues/71
2018-01-03 13:34:19 +11:00
deepak1556
14de22a8c7 Use cached application locale as default for generating accept-lang header 2018-01-02 17:33:46 +05:30
deepak1556
cbc433d4cb update libcc to fix DCHECK errors in ui::clipboard on windows 2018-01-02 16:32:07 +05:30
Cheng Zhao
de93b30d3c win: Fix assertion when getting exe version 2018-01-02 17:02:12 +09:00
Cheng Zhao
82452e7924 win: Fix assertion when getting printers 2018-01-02 16:54:36 +09:00
Cheng Zhao
7bf156d197 win: Fix assertion "IsWprintfFormatPortable(format)" 2018-01-02 16:45:43 +09:00
deepak1556
7b9dd81018 update libcc for macOS render widget dcheck crash fix 2018-01-02 16:37:12 +09:00
deepak1556
b9ace16959 update libcc for using custom platform with gin 2018-01-02 16:37:12 +09:00
deepak1556
769fbd0d3b REVIEW: register BrowserChildProcessObserver once main message loop is ready 2018-01-02 16:37:11 +09:00
deepak1556
1b30cac372 Don't delay node module initialization 2018-01-02 16:37:11 +09:00
Cheng Zhao
1043f07b42 Fix compilation on Windows 2018-01-02 16:37:11 +09:00
deepak1556
237bd6790b FIXME: allow IO access on main thread for crash reporter 2018-01-02 16:37:11 +09:00
deepak1556
abe1faea5c REVIEW: setup request context for NSS OCSP only once 2018-01-02 16:37:11 +09:00
deepak1556
e3a56240c9 REVIEW: fix base::File helper usage on incorrect task sequence 2018-01-02 16:37:10 +09:00
deepak1556
fd297722a8 Note about incorrect usage of blink::SchemeRegistry methods 2018-01-02 16:37:10 +09:00
deepak1556
73919ea91a update libcc 2018-01-02 16:37:10 +09:00
deepak1556
d27744f455 Some blink::WebSecurityPolicy methods should be invoked before other render threads are created 2018-01-02 16:37:10 +09:00
deepak1556
0df464e16a address review comments 2018-01-02 16:37:09 +09:00
deepak1556
ee80313666 opt into location service on main thread 2018-01-02 16:37:09 +09:00
deepak1556
d29c27dc78 REVIEW: obtain mime type from file path only on IO allowed sequence 2018-01-02 16:37:09 +09:00
deepak1556
e072213923 FIXME: dbus ObjectProxy methods should only be invoked on IO allowed sequence 2018-01-02 16:37:09 +09:00
deepak1556
a1592446da REVIEW: access GetApplicationLocale on sequence that allows IO 2018-01-02 16:37:08 +09:00
deepak1556
1912fbb073 reenable some specs 2018-01-02 16:37:08 +09:00
deepak1556
69bd44edbb REVIEW: add render process lifecycle observer only once 2018-01-02 16:37:08 +09:00
deepak1556
ebb0e46380 REVIEW: create AtomNetworkDelegate on the IO thread 2018-01-02 16:37:08 +09:00
Cheng Zhao
b2cef31bc0 Revert "Fix race condition when calling JsAsker::BeforeStartInUI"
This reverts commit 37317d74adb53afdcb22c85f2d3987fbae290ac7.
2018-01-02 16:37:08 +09:00
Cheng Zhao
6d9b186fa7 Fix race condition when calling JsAsker::BeforeStartInUI 2018-01-02 16:37:07 +09:00
deepak1556
e30131f30b Initialize isolate holder in standalone node mode 2018-01-02 16:37:07 +09:00
deepak1556
88e53b1b5e REVIEW: destroy process singleton on sequence where IO is allowed 2018-01-02 16:37:07 +09:00
deepak1556
c3154d86e0 FIXME: disable some specs 2018-01-02 16:37:07 +09:00
deepak1556
1d95241185 FIXME: refactor and remove usage of ScopedAllowIO where possible 2018-01-02 16:37:06 +09:00
deepak1556
90acb22a58 dont use UI methods on IO thread 2018-01-02 16:37:06 +09:00
deepak1556
a518c5c3c4 derefence weak ptr only on the same sequence runner it was created in 2018-01-02 16:37:06 +09:00
deepak1556
fedf1d889b handle NaN conversion from V8 2018-01-02 16:37:06 +09:00
deepak1556
db156865e7 pref store needs to be loaded on a thread that allows IO 2018-01-02 16:37:06 +09:00
deepak1556
b4e6516ad8 fix dcheck failure with invalid UTF8 string conversion for base::Value 2018-01-02 16:37:05 +09:00
deepak1556
5c25855ac5 create user data dir on thread that allows IO 2018-01-02 16:37:05 +09:00
Cheng Zhao
249bd41e11 Merge pull request #11546 from electron/menu-callback
Add callback parameter for Menu.popup
2018-01-02 16:20:58 +09:00
deepak1556
99e26b8318 fix: draggable region ipc should be frame based 2018-01-01 22:54:02 +05:30
Cheng Zhao
d04ae88426 The RenderWidgetHostView might not be available when showing menu 2018-01-01 19:37:59 +09:00
Cheng Zhao
bc61f2eafa Copy the callback instead of reference
I don't really see how this could be a problem, likely a bug of VS 2017?
2018-01-01 19:37:59 +09:00
Cheng Zhao
46330ac2a9 Remove the closed event of Menu
The callback of Menu.popup does more things, and there is actually no
request for the closed event.
2018-01-01 17:22:07 +09:00
Cheng Zhao
73d78d345a Make callback work for old-style Menu.popup call
While the old-style Menu.popup has been deprecated, it is still being
used widely in apps and even in Electron itself.
2018-01-01 17:17:01 +09:00
Cheng Zhao
2ec3b8ce76 spec: callback for Menu.popup 2018-01-01 16:56:22 +09:00
Cheng Zhao
c3eadd5b63 mac: Call callback when menu is programmely closed 2018-01-01 16:49:25 +09:00
Cheng Zhao
9c6aa9ce90 docs: callback of Menu.popup 2018-01-01 16:42:23 +09:00
Cheng Zhao
7b01a8b860 Add callback parameter to Menu.popup 2018-01-01 16:26:19 +09:00
Cheng Zhao
2e3d940749 Fix "test.py -g Menu" not working 2018-01-01 15:46:39 +09:00
Cheng Zhao
d7bc127c60 mac: Correctly close popup menu 2018-01-01 15:40:15 +09:00
Miguel Piedrafita
46121da765 Update license year 2018-01-01 00:51:40 +01:00
Zhuo Lu
b8ec84c761 Fix syntax 2018-01-01 02:23:32 +08:00
Tiago Danin
e9121936e8 Doc Update: New path for web-contents.md 2017-12-28 18:22:30 -02:00
Felix Rieseberg
5f4b62b6c8 feat: Allow testing of single spec modules (#11409)
* 🔧 ES6 for the spec

* 👷 Allow testing of single modules

* ❤️ Implement feedback

* 📝 Add a testing doc

* 📝 Link to it

* 📝 Cleanup
2017-12-28 06:18:33 -05:00
Zhuo Lu
d45914c3f7 MenuItem roles camelCase-compatible 2017-12-28 13:28:20 +08:00
Cheng Zhao
a161f6e368 Merge pull request #11527 from electron/fix-buffer-crash-master
master: Fix crash when using crypto module
2017-12-27 21:45:32 +09:00
Cheng Zhao
e45a125f65 Update node: Fix crash when doing crypto operation 2017-12-27 20:37:04 +09:00
Cheng Zhao
75ac7d9ff2 spec: Add test for crypto operation 2017-12-27 20:37:04 +09:00
Charles Kerr
0cafc3cf52 Merge pull request #11511 from HayateLaTech/patch-1
Update browser-window.md
2017-12-22 09:05:38 -06:00
Cheng Zhao
fe16e24406 Merge pull request #11510 from electron/gin-use-node-platform
Use Node's V8Platform instead of gin's
2017-12-22 23:40:19 +09:00
HayateLaTech
f2e32791b1 Update browser-window.md 2017-12-22 15:13:12 +01:00
Cheng Zhao
c0c2461245 Do not create duplicate V8Platform in NodeDebugger 2017-12-22 20:29:09 +09:00
Cheng Zhao
00afeaba9a Use Node's V8Platform instead of gin's 2017-12-22 20:29:08 +09:00
Charles Kerr
a0ebde0181 Merge pull request #11504 from kylecorry31/master
Add Support for Pop!_OS GNOME Session
2017-12-21 22:57:54 -06:00
Kyle Corry
5aac091f40 Add Support for Pop!_OS GNOME Session
Similar to this PR: https://github.com/electron/electron/pull/10355 , Pop!_OS suffers from the same problem. Using Ubuntu AppIndicator will not show the icon currently unless the XDG_CURRENT_DESKTOP variable is modified. This commit will add support for pop so that this workaround is not needed. 

Ref: https://github.com/pop-os/pop/issues/84
2017-12-21 14:16:15 -05:00
Cheng Zhao
65871cd567 Merge pull request #11238 from electron/spellchecker_iframe_patch
fix: manually set spellchecker for sub frames
2017-12-21 17:00:01 +09:00
Cheng Zhao
06e1fb923b Merge pull request #11495 from electron/libcc-latency-histogram-macros-patch
win: Correctly close popup menu
2017-12-21 16:59:47 +09:00
Cheng Zhao
7a8864063b mac: Handle the case when closing all menu runners 2017-12-21 15:57:27 +09:00
Cheng Zhao
088042841d win: Correctly close popup menu 2017-12-21 15:26:32 +09:00
Cheng Zhao
459db92052 Merge pull request #11493 from electron/libcc-latency-histogram-macros-patch
Update libcc for latency_histogram_macros.patch
2017-12-21 11:52:53 +09:00
Cheng Zhao
05bd5f456a Update libcc for latency_histogram_macros.patch 2017-12-21 11:20:03 +09:00
Charles Kerr
d3eeb84208 Merge pull request #11466 from electron/cppcheck-diff-mode
add changed-files-only mode to cpplint
2017-12-20 10:55:49 -06:00
John Kleinschmidt
06481b5630 Add testing for arm, arm64 and ia32 linux builds 2017-12-20 11:54:52 -05:00
Cheng Zhao
a6228b97cd Merge pull request #11264 from brenca/flash-menu-fix
Fix flash context menu
2017-12-20 19:37:44 +09:00
Cheng Zhao
e4770c7604 Coding style fixes 2017-12-20 18:48:09 +09:00
deepak1556
83d2917363 fix: manually set spellchecker for sub frames 2017-12-20 12:48:02 +05:30
Heilig Benedek
5bf16c2495 remove async:true from menu tests 2017-12-20 15:41:12 +09:00
Heilig Benedek
ef7357dedc update tests for menu closed event and call cancel on closePopup 2017-12-20 15:40:07 +09:00
Heilig Benedek
14b65467d8 add test for menu closed event 2017-12-20 15:40:07 +09:00
Heilig Benedek
bcef6eb3df document menu closed event and fix styling issue 2017-12-20 15:40:07 +09:00
Heilig Benedek
c586806609 fix flash menu being unresponsive to commands 2017-12-20 15:40:07 +09:00
Cheng Zhao
85ef42d99e Merge pull request #11233 from brenca/devtools-fix
Small devtools fixes
2017-12-20 15:35:09 +09:00
Cheng Zhao
0d9ff95526 Revert "dont change window background after devtools is closed"
This reverts commit fdcac8552f.

We are looking for a better fix.
2017-12-20 15:18:26 +09:00
Heilig Benedek
fdcac8552f dont change window background after devtools is closed 2017-12-20 12:57:02 +09:00
Heilig Benedek
d5ab691fdb fix osr devtools crash introduced during merge 2017-12-20 12:57:02 +09:00
Cheng Zhao
5a9221e1dc Merge pull request #11092 from electron/provide-scheme-with-open-external-request
Give user access to the URL that is attempting to be openExternal'ed
2017-12-20 12:56:00 +09:00
Ted Eiles
5ccfac81ed Reviewed getBlobData source, not return value (void) 2017-12-19 22:21:45 -05:00
Cheng Zhao
b2e6340622 Reduce the number of helpers 2017-12-20 10:49:49 +09:00
Cheng Zhao
4fd8b04329 Better field names for details object 2017-12-20 10:25:31 +09:00
Samuel Attard
4d7b85bd01 Appease the linter 2017-12-20 10:21:38 +09:00
Samuel Attard
98e9311669 Give user access to the URL that is attempting to be openExternal'ed 2017-12-20 10:21:38 +09:00
Cheng Zhao
39ec40b901 Merge pull request #11470 from electron/update-node-upgrade-doc
Update branching steps in upgrading-node.md
2017-12-20 10:08:09 +09:00
Ted Eiles
19f2d42c07 change getBlobData return type from Blob to Buffer, fixes doc and typescript def 2017-12-19 19:52:59 -05:00
Charles Kerr
d36e451301 make IGNORE_FILES more readable 2017-12-19 18:37:02 -06:00
Charles Kerr
0521302940 add atom/node/osfhandle.cc to the do-not-lint list 2017-12-19 17:41:34 -06:00
Charles Kerr
4f533dded3 Revert "fix previously-hidden cppcheck warnings in osfcheck.cc"
This reverts commit 8373e1bf41.
2017-12-19 17:39:03 -06:00
Charles Kerr
2f88e69ed4 fix inconsistent indentation 2017-12-19 16:23:27 -06:00
Charles Kerr
8373e1bf41 fix previously-hidden cppcheck warnings in osfcheck.cc 2017-12-19 16:09:53 -06:00
Charles Kerr
58edfc26ed flake8 --ignore=E111,E121 script/cpplint.py 2017-12-19 16:02:36 -06:00
Charles Kerr
30f8660a20 walk all files in atom/ and brightray/ 2017-12-19 15:57:03 -06:00
Charles Kerr
cab1b81026 give find_files() a filename tester function arg 2017-12-19 15:50:09 -06:00
Charles Kerr
f5f6d99cd7 make file list function names clearer
since they return sets rather than lists, don't use 'list' in the name
2017-12-19 15:40:11 -06:00
Charles Kerr
589c6a5b7e remove unnecessary ignore variable 2017-12-19 15:38:23 -06:00
Charles Kerr
512fb670b4 remove unnecessary changed_files variable 2017-12-19 15:37:41 -06:00
Charles Kerr
b6c16a520a only call cppcheck once 2017-12-19 15:07:11 -06:00
Charles Kerr
6f4e97c53a (copyediting) renumber steps 2017-12-19 09:09:35 -06:00
Charles Kerr
781311aa3c Merge pull request #11431 from electron/notifications-debugging
infra: Allow notifications debugging
2017-12-19 09:06:12 -06:00
Cheng Zhao
c15e2e4d92 Merge pull request #10912 from Ajeey/patch-1
Updated auto-updater.md
2017-12-19 16:22:25 +09:00
Cheng Zhao
5d86da48c7 The missing : 2017-12-19 15:44:58 +09:00
Cheng Zhao
4dee778212 Clearer wording 2017-12-19 15:39:57 +09:00
Ajey Charantimath
8953042ee3 Updated auto-updater.md
Missing documentation on the issue https://github.com/electron/electron/issues/10903
2017-12-19 15:33:13 +09:00
Cheng Zhao
90582dfa4f Merge pull request #11154 from electron/update-release-doc
Update release process for API invoked release builds
2017-12-19 15:30:51 +09:00
Cheng Zhao
81527b71ba Merge pull request #11279 from sethlu/openrecent
Update submenu's title at replacement
2017-12-19 15:28:02 +09:00
Cheng Zhao
a02cb8009e Merge pull request #11131 from hugomano/feature/isolated-world
Add Isolated World API
2017-12-19 11:03:28 +09:00
Cheng Zhao
b27e42f3f7 Fix indentions 2017-12-19 10:42:36 +09:00
Hugo Mano
ae7b96991c Add webFrame.setIsolatedWorldSecurityOrigin
Move vector to cc file

Map executed javascript in isolated world to url

Some 💅

Documentation

Use WebSource[] as argument in executeJavaScriptInIsolatedWorld

Refactor and lint with @poiru’s comments

Remove duplicate call

Typo

Lint
2017-12-19 10:36:03 +09:00
Hugo Mano
389edb6229 Add webFrame.setIsolatedWorldHumanReadableName 2017-12-19 10:36:03 +09:00
Hugo Mano
f74f113d23 Add webFrame.setIsolatedWorldContentSecurityPolicy 2017-12-19 10:36:03 +09:00
Alexandre Lachèze
936d8c1117 Add webframe. executeJavaScriptInIsolatedWorld
Attempt runInIsolatedWorldContext

Replace RunInIsolatedWorldContext by GetIsolatedWorldGlobalObject

Fix linting

Remove useless getIsolatedWorldGlobalObject

Add support for scriptExecutionType
2017-12-19 10:36:03 +09:00
Charles Kerr
f01cbf0482 Merge pull request #11467 from electron/leo-patch-1
Clarify Hazel's purpose
2017-12-18 16:17:14 -06:00
Leo Lamprecht
55db062242 Clarify Hazel's purpose 2017-12-18 21:18:11 +01:00
Charles Kerr
6198bbe963 add changed-only mode to cpplint 2017-12-18 10:22:51 -06:00
timmyhadwen
a6bab71215 Fixed BT bug 2017-12-18 20:46:06 +10:00
Giacomo Furlan
b8231b74f2 refs #11353: pylint 2017-12-16 13:11:04 +01:00
Giacomo Furlan
789dbb2dbb Adds --chromium_dir argument to script/create-dist.py 2017-12-16 13:11:04 +01:00
TheDancingCode
605f5472e5 📝 Fix mixed content warning [ci skip] (#11448) 2017-12-15 16:06:38 -05:00
joeydlee95
ac2caef37f test for relative links adheres to npm run lint 2017-12-13 19:06:16 -08:00
Felix Rieseberg
75cdd9ec70 🔧 Linter's gotta lint 2017-12-13 16:31:02 -08:00
Felix Rieseberg
8a8aaaf16c 🔧 Allow notifications debugging (Windows) 2017-12-13 16:25:49 -08:00
Felix Rieseberg
76d9756fb9 🔧 Use LOG instead of NSLOG 2017-12-13 14:47:23 -08:00
joeydlee95
a4db8e1c55 Add executable test to package.json 2017-12-13 14:39:13 -08:00
Charles Kerr
a8b76e1a80 Merge pull request #11418 from electron/add-reg-defaults
[WIP] add back systemPreferences.registerDefaults()
2017-12-13 15:48:20 -06:00
shelley vohr
5a35a5a2b3 Upgrade Node to v8.9.3 (#11422)
* update submodule referefences for node

* update libcc and node refs

* update for cherry-picked a15d0ce

* update libcc ref to master
2017-12-13 16:32:00 -05:00
Shelley Vohr
26ad37c4d1 remove key and value bullts 2017-12-13 16:02:15 -05:00
Shelley Vohr
3fc844c15a add loop to catch null values 2017-12-13 14:02:43 -05:00
Felix Rieseberg
61ec8df418 🔧 More detailed macOS notification logging 2017-12-13 10:31:59 -08:00
Charles Kerr
0ad99444af Merge pull request #11426 from mikoto2000/patch-1
Fix 'electron-versioning' link in README.md
2017-12-13 09:21:41 -06:00
mikoto2000
ef7c5c8e9c Fix 'electron-versioning' link in README.md 2017-12-13 22:18:00 +09:00
Shelley Vohr
d602a30bbc update a few steps in upgrading-node.md 2017-12-12 22:55:37 -05:00
Charles Kerr
057f08a1f8 Merge pull request #11421 from lurch/patch-1
Fix typos
2017-12-12 21:36:35 -06:00
Andrew Scheller
debe77a910 Fix typos 2017-12-13 03:13:41 +00:00
Charles Kerr
5b6b5fe835 Merge pull request #11419 from electron/menu-bugs-take-two
fix: Menu bugs (take two)
2017-12-12 20:56:41 -06:00
joeydlee95
996c914912 Add test to check for relative links in docs directory 2017-12-12 18:53:13 -08:00
Felix Rieseberg
ffd85bfaac 🔧 Allow notifications debugging (macOS) 2017-12-12 16:09:34 -08:00
Felix Rieseberg
317422f431 👷 Close popup in aftereach 2017-12-12 12:23:02 -08:00
Felix Rieseberg
8166a64f98 🔧 Last round of feedback 2017-12-12 11:25:01 -08:00
Felix Rieseberg
c4ec8b4545 🔧 Feedback 2017-12-12 11:25:01 -08:00
Felix Rieseberg
76df41b5d0 👷 Properly test x vs y 2017-12-12 11:25:01 -08:00
Felix Rieseberg
ace558f54a 👷 Hence, better testing 2017-12-12 11:25:01 -08:00
Felix Rieseberg
5b7f7c8a1a 🔧 Menu returns its properties now 2017-12-12 11:25:01 -08:00
Felix Rieseberg
ffc54967e9 🔧 Fix value shift 2017-12-12 11:25:01 -08:00
Felix Rieseberg
5a658fa5f6 👷 Add a spec 2017-12-12 11:25:01 -08:00
Felix Rieseberg
99031834ff 🔧 Cleanup 2017-12-12 11:25:01 -08:00
Felix Rieseberg
3719ee0b53 🔧 Allow for menu.popup({}) 2017-12-12 11:25:01 -08:00
Felix Rieseberg
9e660b1d32 🔧 Always find a window (or error) 2017-12-12 11:25:01 -08:00
Felix Rieseberg
4f901c6d24 🔧 Oh wow, that looks wrong 2017-12-12 11:25:01 -08:00
Shelley Vohr
6252ce466c remove failing badDefault 2017-12-12 13:39:38 -05:00
Shelley Vohr
8b447b9291 fixing error in registerDefaults 2017-12-12 13:08:09 -05:00
Charles Kerr
5720a8e7d5 Merge pull request #11415 from electron/revert-11385-async-menu
Revert "fix: Fix `menu.popup()` bugs"
2017-12-12 08:56:12 -06:00
Charles Kerr
da4af4c90b Merge pull request #11414 from electron/revert-11395-add-reg-defaults
Revert "Add systemPreferences.registerDefaults()"
2017-12-12 08:46:47 -06:00
Alexey Kuzmin
1c8eb03574 Revert "fix: Fix menu.popup() bugs" 2017-12-12 13:59:34 +03:00
Alexey Kuzmin
1caa04c0bf Revert "Add systemPreferences.registerDefaults()" 2017-12-12 13:59:15 +03:00
Cheng Zhao
19f1fef040 Merge pull request #11283 from electron/fix-event-subscriber-race
Fix race condition in event_subscriber.h
2017-12-12 10:49:17 +09:00
Charles Kerr
e73fe100d5 Merge pull request #11385 from electron/async-menu
fix: Fix `menu.popup()` bugs
2017-12-11 18:02:33 -06:00
Charles Kerr
76ee1e1cb6 Merge pull request #11406 from xxczaki/master
Added Polish Electron Community
2017-12-11 17:48:33 -06:00
Charles Kerr
99c980ab40 Merge pull request #11395 from electron/add-reg-defaults
Add systemPreferences.registerDefaults()
2017-12-11 17:45:32 -06:00
Shelley Vohr
a8e67e7f61 fixes from review 2017-12-11 18:20:12 -05:00
Felix Rieseberg
927c63b477 🔧 Last round of feedback 2017-12-11 15:19:33 -08:00
Felix Rieseberg
89b90be6a2 🔧 Feedback 2017-12-11 14:43:35 -08:00
Charles Kerr
dcf2a6f388 Make 'https' explicit in the link to electronpl.github.io 2017-12-11 16:37:14 -06:00
Felix Rieseberg
f7ebfff8ae 👷 Properly test x vs y 2017-12-11 14:05:07 -08:00
Felix Rieseberg
dfd7598d48 👷 Hence, better testing 2017-12-11 14:03:04 -08:00
Felix Rieseberg
22e9d665d2 🔧 Menu returns its properties now 2017-12-11 14:03:01 -08:00
Felix Rieseberg
93b46116f4 🔧 Fix value shift 2017-12-11 13:30:35 -08:00
Anthony
c8bb23a2ff Update README.md 2017-12-11 20:52:56 +01:00
Shelley Vohr
027e78639a update value type to Any 2017-12-11 14:06:02 -05:00
Shelley Vohr
84bab48627 improve error handling 2017-12-11 13:11:03 -05:00
Shelley Vohr
765f223fef update docs and spec 2017-12-11 13:06:23 -05:00
Charles Kerr
87f8bd4ea7 Merge pull request #11359 from electron/fix_spell_checker_crash
Fixed crash in `atom::api::SpellCheckClient`
2017-12-11 10:18:27 -06:00
Shelley Vohr
c5aeda1fdd fixes from code review 2017-12-11 00:20:26 -05:00
Shelley Vohr
5e51ab9791 fix doc parsing error 2017-12-10 14:55:14 -05:00
Shelley Vohr
9a40bbd082 update systemPreferences docs 2017-12-10 14:46:19 -05:00
Shelley Vohr
8a24733ee6 add fail spec and only run mac ci 2017-12-10 12:52:03 -05:00
Shelley Vohr
becabdfff2 add test for registerDefaults 2017-12-10 11:26:07 -05:00
Shelley Vohr
18ee34f1a1 add method binding and error guards 2017-12-10 11:25:43 -05:00
Shelley Vohr
1ccad4a7e9 fix capitalization and clean logic 2017-12-10 11:04:05 -05:00
Shelley Vohr
f82086e6d3 first pass at adding infra for registerDefaults 2017-12-10 00:45:49 -05:00
Felix Rieseberg
725f6c97d6 👷 Add a spec 2017-12-08 14:52:21 -08:00
Felix Rieseberg
abd56eda6f 🔧 Cleanup 2017-12-08 14:40:51 -08:00
Felix Rieseberg
955564abd7 🔧 Allow for menu.popup({}) 2017-12-08 14:37:16 -08:00
Felix Rieseberg
bd6767fac6 🔧 Always find a window (or error) 2017-12-08 14:36:52 -08:00
Felix Rieseberg
38bb9baac5 🔧 Oh wow, that looks wrong 2017-12-08 14:36:29 -08:00
Charles Kerr
6af18895c3 Merge pull request #11380 from electron/cifratila/enable-cfg
Security Improvement: Enable Control Flow Guard compile flag on Windows
2017-12-08 10:09:34 -06:00
Charles Kerr
de1edeea0b Merge pull request #11379 from TiagoDanin-Forks/upgrading_chromium_doc
Fix formatting in documentation
2017-12-08 10:08:44 -06:00
TiagoDanin
079310ab5a fix formatting in upgrading node doc 2017-12-08 11:49:39 -03:00
TiagoDanin
9314d8925e fix formatting in upgrading chromium doc 2017-12-08 11:24:05 -03:00
Catalin Fratila
7faec8e5eb Security Improvement: Enable Control Flow Guard on Windows - https://docs.microsoft.com/en-us/cpp/build/reference/guard-enable-control-flow-guard 2017-12-08 14:31:29 +01:00
John Kleinschmidt
6a29577ab3 Merge pull request #11356 from electron/replace-app-icon
Replace app icons
2017-12-07 16:53:45 -05:00
simurai
0f54e56389 Replace default_app icon 2017-12-07 16:10:45 -05:00
simurai
fe0f203312 Replace app icons 2017-12-07 16:10:45 -05:00
John Kleinschmidt
f10c279322 Merge pull request #11370 from electron/fix_dchecks
Fix: Re-enable some dchecks
2017-12-07 15:55:33 -05:00
shelley vohr
63c91e7dd3 Merge pull request #11321 from electron/add-setExtraParameter-deprecation
Add back setExtraParameter() deprecation warning
2017-12-07 14:49:18 -05:00
Shelley Vohr
276f758560 remove deprecated method call 2017-12-07 14:26:57 -05:00
Shelley Vohr
24f60dcd1b re-add warning removed in https://github.com/electron/electron/pull/11013 2017-12-07 11:42:18 -05:00
deepak1556
16d96a6ef2 Force MediaCaptureDevicesDispatcher to be created on UI thread 2017-12-07 09:47:32 +05:30
deepak1556
19de41b764 BrowserClient::CanCreateWindow is no longer called on the IO thread
https://codereview.chromium.org/2821473002
2017-12-07 09:47:32 +05:30
Charles Kerr
5fa29fcf58 Merge pull request #11329 from electron/remove-classes-key
fix: Properly cleanup in `removeAsDefaultProtocolClient`
2017-12-06 17:31:50 -06:00
Zeke Sikelianos
69c6a68c22 Merge pull request #11367 from electron/revert-to-old-name-of-versioning-doc
revert to old name of versioning doc
2017-12-06 15:05:01 -08:00
Zeke Sikelianos
61937eac0a fix more relative links 2017-12-06 15:01:09 -08:00
Zeke Sikelianos
fa09ff3cbb update links to versioning doc 2017-12-06 15:01:09 -08:00
Zeke Sikelianos
84c207750c revert to old name of versioning doc 2017-12-06 15:01:09 -08:00
Zeke Sikelianos
af756e2441 Merge pull request #11364 from electron/groundwater-patch-1
docs: README make versioning link relative
2017-12-06 15:00:42 -08:00
Jacob Groundwater
8efeb4b71a Update README.md 2017-12-06 14:32:11 -08:00
John Kleinschmidt
78fd6d6435 Merge pull request #11365 from electron/remove-appveyor-yml
Remove appveyor.yml
2017-12-06 16:26:32 -05:00
John Kleinschmidt
4e3e9c9dbc Remove appveyor.yml
This configuration isn't used anymore - appveyor setup is defined on server
2017-12-06 15:14:09 -05:00
Jacob Groundwater
d8368d36db docs: README make versioning link relative
I think we're making links relative within the docs, and not directly pointing to the electronjs.org website.
2017-12-06 11:15:10 -08:00
Ales Pergl
7a73b1d523 Fixed crash in atom::api::SpellCheckClient
The class didn't save the V8 context for the spell checking JS function. When
it later tried to call the JS function and there was no active context, V8
crashed.

I also optimized the spell checking loop by introducing `SpellCheckScope` and
reusing the V8 handles throughout the whole loop.
2017-12-06 14:50:20 +01:00
Cheng Zhao
4355f554cc Merge pull request #11355 from electron/fix-ci
Fix docs linting error
2017-12-06 19:31:03 +09:00
Cheng Zhao
da66e34dce Fix docs linting error 2017-12-06 19:09:10 +09:00
Cheng Zhao
d8610a3f56 Merge pull request #11342 from electron/add-python-dbusmock
Enable testing with python-dbusmock
2017-12-06 15:02:27 +09:00
Cheng Zhao
46f79146ad Merge pull request #11316 from electron/hide-update-exe
fix: Ensure that update.exe doesn't open up a console window
2017-12-06 14:50:12 +09:00
Cheng Zhao
9c109daa4b Merge pull request #11168 from sethlu/fix-icns-color
fix: Update icns
2017-12-06 14:45:36 +09:00
Felix Rieseberg
bd4c7a114a 👷 Fix the last broken test 2017-12-05 17:07:22 -08:00
Zeke Sikelianos
1e0a181f4b Merge pull request #11032 from electron/version2
New Version Policy for 2.x and Beyond
2017-12-05 14:45:50 -08:00
Zeke Sikelianos
032f5ebc6f update highlights 2017-12-05 14:35:16 -08:00
Zeke Sikelianos
4878cd8d5d update intro 2017-12-05 14:32:33 -08:00
Zeke Sikelianos
4101059323 update semantic commits section 2017-12-05 14:31:19 -08:00
Zeke Sikelianos
770778f9a2 update ignore comment 2017-12-05 14:17:15 -08:00
Jacob Groundwater
85b1cd08d3 docs: use relative links 2017-12-05 14:13:56 -08:00
Felix Rieseberg
bf043c92af 👷 Ugh, whitespace 2017-12-05 13:20:34 -08:00
Felix Rieseberg
e6cbb2f3aa 👷 Cleanup on Windows only 2017-12-05 12:14:19 -08:00
Jacob Groundwater
8eed8bdee7 docs: fix images 2017-12-05 12:08:41 -08:00
Jacob Groundwater
7598e31b16 docs: we _do_ follow semver 2017-12-05 12:04:23 -08:00
John Kleinschmidt
e59aa715fd Enable testing with python-dbusmock 2017-12-05 15:01:01 -05:00
Jacob Groundwater
1bce00545d docs: changes based on review 2017-12-05 11:43:59 -08:00
Jacob Groundwater
07a5d7957b use non-relative image paths to interop with website deploy 2017-12-05 11:38:41 -08:00
Jacob Groundwater
b65b939d18 docs: add tl;dr to version doc 2017-12-05 11:38:41 -08:00
Jacob Groundwater
06371a6082 docs: explain versioning policy 1.x, 2.x, and beyond 2017-12-05 11:38:36 -08:00
Felix Rieseberg
d519bfc5fb 👷 Linter fascism 2017-12-05 11:38:19 -08:00
Felix Rieseberg
997f3f31d2 👷 Cleanup after the test 2017-12-05 11:31:40 -08:00
Felix Rieseberg
e77751aab5 👷 Test registry interaction 2017-12-05 11:28:39 -08:00
Felix Rieseberg
60634cac42 📦 Install winreg 2017-12-05 11:28:19 -08:00
Charles Kerr
f2da3e9a14 Merge pull request #11306 from electron/implement-linux-power-monitor
Implement powerMonitor "suspend"/"resume" events for Linux.
2017-12-05 09:16:59 -06:00
Thiago de Arruda
dfd98e3428 Add linux powerMonitor tests using python-dbusmock 2017-12-05 08:33:36 -03:00
Thiago de Arruda
897712359f Implement powerMonitor "suspend"/"resume" events for Linux. 2017-12-05 08:12:44 -03:00
Cheng Zhao
95cb601f2b Merge pull request #10430 from electron/global-preloads
Add ability to set per-session preload scripts
2017-12-05 19:15:11 +09:00
Cheng Zhao
24b3ee3a4a Revert some unnecessary changes 2017-12-05 16:50:25 +09:00
Cheng Zhao
cb3a9c69ab Add a SessionPreferences to manage session related data
By design the BrowserClient should not be aware of the api:: classes.
2017-12-05 15:59:15 +09:00
Cheng Zhao
776e8afa2b Coding style changes 2017-12-05 11:50:06 +09:00
Samuel Attard
eaa4b71c24 Remove .only 2017-12-05 11:35:54 +09:00
Samuel Attard
009459bd38 Standard JS 2017-12-05 11:35:54 +09:00
Samuel Attard
e535ba4808 Don't know why we suddenly need this, but hey :/ 2017-12-05 11:35:54 +09:00
Samuel Attard
d1aded2831 Appease the almighty linter 2017-12-05 11:35:53 +09:00
Samuel Attard
d9359d8b6c s/global/session in constants 2017-12-05 11:35:53 +09:00
Samuel Attard
d2707315e6 s/global/session 2017-12-05 11:35:53 +09:00
Samuel Attard
3b80ee0655 Move global preload implementation to be session based 2017-12-05 11:35:53 +09:00
Samuel Attard
448ccc261d Use const references 2017-12-05 11:35:27 +09:00
Samuel Attard
0ddd078aaf Add ability to set global preload scripts 2017-12-05 11:35:27 +09:00
Cheng Zhao
d598aa1a67 Merge pull request #11300 from electron/external-devtools
Add API to set arbitrary WebContents as devtools
2017-12-05 10:35:49 +09:00
John Kleinschmidt
bdcdb6e9cf Merge pull request #11330 from electron/add-jenkins-timeout
Add 1 hour timeout to Jenkins CI
2017-12-04 14:49:32 -05:00
Felix Rieseberg
d4275b144b 🔧 Linter fascism 2017-12-04 10:46:53 -08:00
Felix Rieseberg
f62e0a4ed4 🔧 Make it actually work 2017-12-04 10:30:20 -08:00
John Kleinschmidt
e7edc6f24f Add 1 hour timeout 2017-12-04 13:19:51 -05:00
Charles Kerr
3e056eec9e Merge pull request #11297 from electron/remove-travis
Remove Travis references
2017-12-04 10:56:53 -06:00
John Kleinschmidt
1989075d54 Ignore all npmrc and package-lock 2017-12-04 11:05:04 -05:00
John Kleinschmidt
e989005122 Merge pull request #11271 from electron/dchecks
Build with dchecks disabled on subset of targets
2017-12-04 10:33:47 -05:00
Cheng Zhao
52c6f4bcc5 docs: responsiblity of destroying devtoolsWebContents 2017-12-04 18:42:42 +09:00
Charles Kerr
6beaafc7e5 Merge pull request #11282 from Toinane/fix-documentation
typographical revision in Documentation
2017-12-03 09:01:24 -06:00
Charles Kerr
851642f4b8 Merge pull request #11311 from electron/fix-typos-in-structures
fix typos in structures
2017-12-03 08:34:08 -06:00
Charles Kerr
2ffcb27abe Merge pull request #11315 from insideGen/patch-1
Update cookies.md
2017-12-02 08:27:42 -06:00
Charles Kerr
467cce6a8b Merge pull request #11317 from electron/asar-video
Make the asar-video test run faster
2017-12-02 08:26:12 -06:00
Ales Pergl
ecdbe79e29 Make the asar-video test run faster
I cut the video to 3 seconds and removed the audio track, which makes the test
finish a lot sooner. Also the asar file is 160 kB instead of 1 MB.
2017-12-02 11:30:57 +01:00
Ales Pergl
4cf6763e70 Updated libchromiumcontent submodule 2017-12-02 11:09:20 +01:00
Felix Rieseberg
b4b729609a 🔪 Delete classes key if empty 2017-12-01 17:39:54 -08:00
Felix Rieseberg
9646f0c99a 🔧 Sprinkle some ES6 across the file 2017-12-01 17:18:57 -08:00
Felix Rieseberg
c5abe96b39 🔧 Hide subprocess window 2017-12-01 17:18:37 -08:00
Zeke Sikelianos
7c8acb5ea8 Merge pull request #11314 from electron/docs--use-full-image-URL
use full image URL
2017-12-01 17:03:16 -08:00
Jonathan
f32f0fb774 Update cookies.md 2017-12-02 01:27:53 +01:00
Zeke Sikelianos
ba56e5ca65 docs: use full image URL 2017-12-01 15:20:49 -08:00
Charles Kerr
ff6596fd05 Merge pull request #11312 from electron/ipc-spec-split
Split ipc specs into three files
2017-12-01 16:03:51 -06:00
Shelley Vohr
45de1e6a7c remove extraneous variables 2017-12-01 16:11:54 -05:00
Shelley Vohr
af6489576a remove onlys 2017-12-01 16:01:03 -05:00
Shelley Vohr
00e8713eac split ipc tests into three files 2017-12-01 15:57:41 -05:00
Zeke Sikelianos
7dd921811f fix typos in structures 2017-12-01 11:43:04 -08:00
John Kleinschmidt
d182bacd00 Ignore/remove package-lock files 2017-12-01 12:55:55 -05:00
Ales Pergl
dadfbd3a4f Reset embedder_zoom_controller_ before assigning new one 2017-12-01 17:55:22 +01:00
Ales Pergl
fd7af5c1d9 Don't call ui::SetAtomArrayProperty with an empty vector (fails DCHECK) 2017-12-01 17:55:22 +01:00
Ales Pergl
7613afe6d7 Disabled DCHECKs that fail when running tests 2017-12-01 17:55:22 +01:00
Ales Pergl
8357a33d81 Don't leak the taskbar object, reuse it instead 2017-12-01 17:55:21 +01:00
deepak1556
903a5b5100 fix dcheck comparison between unsigned long vs int 2017-12-01 17:55:21 +01:00
John Kleinschmidt
db51dcbe7e Merge pull request #11301 from wlbentley/patch-1
🎨 Tweak for grammar.
2017-12-01 11:48:46 -05:00
John Kleinschmidt
3ab69f2358 Merge pull request #11186 from electron/update-linter-and-ts
update electron-docs-linter and electron-typescript-definitions
2017-12-01 11:47:29 -05:00
Cheng Zhao
c2ee0854f4 Merge pull request #11302 from electron/update_pdf_viewer
fix: update pdf viewer ui for chrome 61.0.3163.100
2017-12-01 19:57:25 +09:00
deepak1556
a48cec9b4a fix: update pdf viewer ui for chrome 61.0.3163.100 2017-12-01 14:09:06 +05:30
W L Bentley
6d779c6ec2 Two grammar tweaks. 2017-11-30 19:37:06 -08:00
Cheng Zhao
88c4fd3f2b docs: Remove unnecessary shows 2017-12-01 12:04:50 +09:00
Cheng Zhao
6b408de884 Allow using docked devtools for webview 2017-12-01 11:56:58 +09:00
Cheng Zhao
ea9771702b spec: setDevToolsWebContents 2017-12-01 10:35:23 +09:00
Cheng Zhao
25c5938c76 docs: Open detached devtools in example 2017-12-01 10:35:23 +09:00
Cheng Zhao
580abedbb7 docs: contents.setDevToolsWebContents 2017-12-01 10:35:23 +09:00
Cheng Zhao
59476f0b30 Create webContents for webview even when src is not set 2017-12-01 10:35:23 +09:00
Cheng Zhao
5e4914700e Enable using external WebContents as devtools 2017-12-01 10:35:23 +09:00
John Kleinschmidt
0ef8f58090 Remove Travis references 2017-11-30 15:39:32 -05:00
Zeke Sikelianos
aab35073ee Merge pull request #11255 from electron/fix-11245
Enable nativeImage module addRepresentation() tests
2017-11-30 10:48:11 -08:00
Zeke Sikelianos
c1728720a7 Merge pull request #11256 from electron/fix-11244
Enable "<webview> tag found-in-page event emits when a request is made"
2017-11-30 10:48:00 -08:00
shelley vohr
2bc8b33c2a Merge pull request #11291 from electron/fix-failing-spec
spec: Fix the failing coffee-script test
2017-11-30 13:43:58 -05:00
John Kleinschmidt
2d75eea82a Merge pull request #11254 from electron/fix-11246
Enable crashReporter module tests
2017-11-30 12:55:49 -05:00
Aleksei Kuzmin
b9ed7380aa Explicitly set alpha type of bitmaps with JPEG data to opaque
Actually fixes #11245.
2017-11-30 17:56:32 +01:00
Aleksei Kuzmin
c0c983d28d Light refactoring of the nativeImage module tests 2017-11-30 17:50:51 +01:00
Cheng Zhao
04872bb001 spec: Fix the failing coffee-script test
The latest version has some regression causing our test to fail.
2017-11-30 21:10:22 +09:00
Thiago de Arruda
68bceb9575 Fix race condition in event_subscriber.h 2017-11-29 12:57:47 -03:00
Aleksei Kuzmin
275815002f Inscrease timeout for crashReporter tests
Fixes #11246.
2017-11-29 12:27:06 +01:00
Toinane
3d4ef66775 add some markdown links 2017-11-29 12:13:45 +01:00
Toinane
0a0d88a5dc remove all double spaces not needed 2017-11-29 11:58:24 +01:00
Toinane
323ea2b27b fix(docs): fix all missing dots and add some links 2017-11-29 11:38:35 +01:00
Cheng Zhao
d09e8cc37f Merge pull request #11108 from oktapodia/feature/add-ansi-color-into-menu-title
Feature/add ansi color into menu title
2017-11-29 18:37:52 +09:00
Zhuo Lu
c274312a3a Update submenu's title 2017-11-28 19:38:07 -08:00
Toinane
59607c9a17 feat(docs): fix 'optional' wording 2017-11-28 18:15:15 +01:00
Cheng Zhao
0dc094fffc Do not change logic on highlighing 2017-11-28 17:37:58 +09:00
Cheng Zhao
d1ebce0395 Remove unused methods 2017-11-28 17:31:13 +09:00
Cheng Zhao
590578c187 Cache the attributed string 2017-11-28 17:26:09 +09:00
Cheng Zhao
eab3342065 Fix the detection of ANSI code 2017-11-28 16:36:07 +09:00
Cheng Zhao
c9acccaddc Fix memory leak in ANSCI parsing code
We do not have ARC enabled.
2017-11-28 16:36:07 +09:00
Cheng Zhao
4ded79801f Remove unused code in NSColor+Hex.h 2017-11-28 16:10:24 +09:00
Cheng Zhao
08f30e4ca6 Add license for the vendored files
Checked the original files and they were compatible with MIT.
2017-11-28 15:38:42 +09:00
Cheng Zhao
edede7f33f Fix cpplint warning 2017-11-28 15:36:45 +09:00
Sebastien Bramille
a4905b3c95 Lint 2017-11-28 15:34:13 +09:00
Sebastien Bramille
e8b0897ea1 Fix margin 2017-11-28 15:34:13 +09:00
Sebastien Bramille
71cfb7441c Update header file 2017-11-28 15:34:13 +09:00
Sebastien Bramille
7a8431086c Update doc 2017-11-28 15:34:13 +09:00
Sebastien Bramille
9f89bd8d8e Add isHighlighted method 2017-11-28 15:34:13 +09:00
Sebastien Bramille
6a1cfafbd8 Clean 2017-11-28 15:34:13 +09:00
Sebastien Bramille
85f254316c Add logic 2017-11-28 15:34:13 +09:00
Sebastien Bramille
d722d20974 Use NSString+ANSI on the Menu title 2017-11-28 15:34:13 +09:00
Sebastien Bramille
1d807c552e Add NSString+ANSI class 2017-11-28 15:34:13 +09:00
Cheng Zhao
124667c29b Merge pull request #11227 from emmkimme/Fix_10470_sandbox_preload
🐞 #10470 - prevent from loading preload in each iframe context
2017-11-28 15:25:34 +09:00
Cheng Zhao
b161a4f515 Merge pull request #11166 from sethlu/openrecent
feat: Recent documents menu item
2017-11-28 10:55:14 +09:00
Charles Kerr
2ad425955b Merge pull request #11249 from electron/upgrading-chromium-tweaks
Apply some of my summit notes to the upgrading-chrome docs.
2017-11-28 00:55:12 +01:00
Charles Kerr
18dc63ce77 fix conflicts 2017-11-27 16:40:10 -06:00
Zeke Sikelianos
2e3550b97f update electron-docs-linter and electron-typescript-definitions to latest 2017-11-27 12:44:24 -08:00
Charles Kerr
e24cd329d9 Merge pull request #11268 from electron/fix_crash
Don't access unique pointer after it was moved from
2017-11-27 19:20:44 +01:00
Ales Pergl
f8b683ca3d Don't access unique pointer after it was moved from 2017-11-27 17:55:21 +01:00
Charles Kerr
defa42b458 Merge pull request #11257 from electron/fix-11242
Remove "async" flag from the `menu.popup()` options
2017-11-27 16:41:56 +01:00
Cheng Zhao
141c4e9a0e Merge pull request #11241 from electron/update-to-the-latest-libcc
Use latest libcc with Chromium 61
2017-11-27 17:49:05 +09:00
Zhuo Lu
104d307a4a Use base::scoped_nsobject 2017-11-27 17:26:23 +09:00
Zhuo Lu
8fa3e71ce4 Format code 2017-11-27 17:26:22 +09:00
Zhuo Lu
2f73f4f77e Fix typo 2017-11-27 17:26:22 +09:00
Zhuo Lu
4934685f53 Declare with static 2017-11-27 17:26:22 +09:00
Zhuo Lu
0c4e425872 Do not autorelease global variables 2017-11-27 17:26:22 +09:00
Zhuo Lu
2de7b338ad Update API docs 2017-11-27 17:26:22 +09:00
Zhuo Lu
dcdc3621ac Rename roles 2017-11-27 17:26:22 +09:00
Zhuo Lu
1ab4504e94 No need to make visible 2017-11-27 17:26:22 +09:00
Zhuo Lu
cf73fb737f Small optimization 2017-11-27 17:26:22 +09:00
Zhuo Lu
3e6e327711 Remove redundant menu item
Already addressed with role: clearrecent
2017-11-27 17:26:22 +09:00
Zhuo Lu
5d44dbaf54 Redesign recent documents role API
- For more flexibility in designing the recent documents menu, now there can be one menu item (known issue: you may specify more but AppKit doens't display more than one) in the submenu list, rather than separating the labels with a tab.
- Also added is the role `clearrecent` that can be given to a menu item that can clear the recent documents.
2017-11-27 17:26:22 +09:00
Zhuo Lu
828d233f2a Rollback duplicated feature 2017-11-27 17:26:22 +09:00
Zhuo Lu
0b9cea334f Specify "Clear Menu" through label option
Like a bit of a hack right now, conforming to the existing menu item definition
2017-11-27 17:26:22 +09:00
Zhuo Lu
970babbfd7 Document openrecent menu item 2017-11-27 17:26:22 +09:00
Zhuo Lu
8b720c120d Hide "Open Recent" in xib 2017-11-27 17:26:22 +09:00
Zhuo Lu
4da2eb9366 Introduce openrecent role
- Does not yet accept any options except label--"Clear Menu" can't be modified through exposed node API
- If `openrecent` is present across multiple menu items, the last seen will be visible in the main menu due to that it is designed to behave like a singleton
2017-11-27 17:26:22 +09:00
Zhuo Lu
0ba2fa5cba Use else if 2017-11-27 17:26:22 +09:00
Zhuo Lu
f0bff74995 Add "Open Recent" submenu to default 2017-11-27 17:26:22 +09:00
Cheng Zhao
c0e9dbcc00 Merge pull request #11144 from dittos/mas-login-helper-again
Re-land MAS login helper (w/ regression fix)
2017-11-27 17:02:57 +09:00
Cheng Zhao
1c0ea0286e Merge pull request #11235 from electron/standard-10
infra: Upgrade to StandardJS 10
2017-11-27 15:42:52 +09:00
Charles Kerr
295945b806 copyediting 2017-11-26 08:44:37 +01:00
Charles Kerr
81bc0efc75 fix styleguide errors 2017-11-26 08:38:58 +01:00
Charles Kerr
a75a85449d sync with master 2017-11-26 08:28:27 +01:00
Charles Kerr
d1ac773e01 Merge pull request #11253 from electron/fix-a-codeblock-in-the-upgrading-node-md
Fix a codeblock markup
2017-11-26 08:00:47 +01:00
deepak1556
084292f3ab fix: focus the webview as a temp workaround 2017-11-25 20:18:01 +05:30
Aleksei Kuzmin
9c5acf6233 Remove "async" flag from the menu.popup() options
All menus have become async after the Chromium 61 upgrade.
Fixes #11242.
2017-11-25 13:31:58 +01:00
Aleksei Kuzmin
3e9f9429d1 Enable "<webview> tag found-in-page event emits when a request is made"
Fixes #11244.
2017-11-25 13:21:26 +01:00
Aleksei Kuzmin
91e4193622 Enable nativeImage module addRepresentation() tests
Fixes #11245.
2017-11-25 12:58:33 +01:00
Zeke Sikelianos
df0c7e2f74 Merge pull request #11250 from electron/docs-lint-fix
🔧 fix remark code flag error
2017-11-24 21:05:26 -08:00
Aleksei Kuzmin
ce6af85f98 Fix a codeblock markup 2017-11-25 00:56:07 +01:00
Aleksei Kuzmin
d9d2a8176e Use latest libcc with Chromium 61 2017-11-24 23:43:32 +01:00
Shelley Vohr
d9c7b95141 fix remark code flag error 2017-11-24 21:40:19 +01:00
Charles Kerr
22c15082a3 partial doc update from my sprint notes 2017-11-24 14:21:41 +01:00
shelley vohr
6941f93627 Merge pull request #11247 from electron/use_sh_in_docs
prefer `sh` to `bash` in the docs
2017-11-24 11:38:10 +01:00
Charles Kerr
b59557569c oops, the upgrading-chrome.md changes belonged in a separate PR 2017-11-24 11:19:53 +01:00
Charles Kerr
3e3cac6f1b prefer sh to bash in the docs 2017-11-24 11:17:43 +01:00
shelley vohr
00999a07d8 Merge pull request #11240 from electron/upgrading_docs
Upgrading docs for node, crashpad, and chromium
2017-11-24 11:16:18 +01:00
Shelley Vohr
bd70ec5e97 finalize node upgrade doc 2017-11-24 11:15:07 +01:00
Charles Kerr
1b0c1842ca prefer sh to bash in the docs 2017-11-24 11:13:57 +01:00
Shelley Vohr
ba6224039c make some things more explicit and style conformity 2017-11-24 11:06:04 +01:00
Shelley Vohr
178462b800 chrome -> chromium and updates to crashpad doc 2017-11-24 10:40:37 +01:00
Charles Kerr
f91020a04d add section for updating submodule references 2017-11-24 10:40:30 +01:00
Charles Kerr
f8858a7577 add rough draft of node, crashpad update notes 2017-11-24 10:40:21 +01:00
shelley vohr
c18afc924b Merge pull request #10213 from electron/upgrade-to-chromium-61
[WIP] Upgrade to Chromium 61
2017-11-24 10:17:52 +01:00
Charles Kerr
fcc8e0924e Merge pull request #11097 from brenca/resizable-win-fix
Fix resizable property not working when taskbar was resized
2017-11-24 10:04:43 +01:00
Cheng Zhao
c30faa4ee8 Use 2xlarge for ARM jobs 2017-11-24 11:03:02 +09:00
Aleksei Kuzmin
8e708692b8 Use latest libcc 2017-11-24 10:58:53 +09:00
Cheng Zhao
a34d45d8c4 Fix uninitialized NodePlatform 2017-11-24 10:58:53 +09:00
Cheng Zhao
3138c85218 Fix linking problem with NodePlatform 2017-11-24 10:58:53 +09:00
Aleksei Kuzmin
efd949ea83 Disable a couple of crashReporter tests 2017-11-24 10:58:53 +09:00
Aleksei Kuzmin
d61564bfb1 Disable "<webview> tag > found-in-page event > emits when a request is made" test 2017-11-24 10:58:53 +09:00
Aleksei Kuzmin
c73ba5802e Disable "nativeImage module > addRepresentation()" tests 2017-11-24 10:58:53 +09:00
deepak1556
0b88873e77 add basic inspector module test 2017-11-24 10:58:53 +09:00
deepak1556
ed4482d7a0 Fix node_debugger api changes
* _debugWaitConnect => _breakFirstLine
  * Use default thread pool size specified by node.cc
2017-11-24 10:58:53 +09:00
Aleksei Kuzmin
11f7bb34fc Fix "nghttp2" build 2017-11-24 10:58:53 +09:00
Tomas Rycl
207150c21c Adding node headers to native modules for tests so they will compile and run on Mac 2017-11-24 10:58:53 +09:00
Aleksei Kuzmin
1cf95d2a26 Use node::NodePlatform instead of v8::platform in atom::NodeDebugger 2017-11-24 10:58:53 +09:00
Aleksei Kuzmin
ad732b45d2 Use Node.js v8.7.0 2017-11-24 10:58:53 +09:00
Ales Pergl
9ca658238b Made NotificationDelegateImpl final
The class is designed to call `delete` on itself and because it doesn't have
a virtual destructor, it shouldn't be derived from.
2017-11-24 10:58:53 +09:00
deepak1556
505f2ab9e7 Fix crash when destroying NetLog 2017-11-24 10:58:53 +09:00
deepak1556
214cbf357a Fix cpp lint errors 2017-11-24 10:58:53 +09:00
deepak1556
e60557e2e6 simplify URLRequestContextGetter for HttpNetworkSession::Context 2017-11-24 10:58:53 +09:00
deepak1556
e0860ea7a0 Stop file observer of NetLog to finish writing to disk 2017-11-24 10:58:53 +09:00
Ales Pergl
f3c32647af Sanitized notification delegate implementation
I made `brightray::NotificationDelegate` back into just an interface and
extracted the implementation used by `PlatformNotificationService`, so that
the main process notification implementation can inherit only the interface.
2017-11-24 10:58:53 +09:00
Ales Pergl
8750fde6d3 Added libfreetype dependency to ARM64 build 2017-11-24 10:58:53 +09:00
Ales Pergl
19ef7d7a48 Added build dependency information for arm64 2017-11-24 10:58:53 +09:00
Aleksei Kuzmin
465f9009ff Update stack string parsing in the CallbacksRegistry
Fixes the "ipc module > remote listeners
> detaches listeners subscribed to destroyed renderers, and shows a warning"
test.
2017-11-24 10:58:53 +09:00
Ales Pergl
82394cc06d Use an existing host name so that it resolves quickly and tests don't time out. 2017-11-24 10:58:53 +09:00
deepak1556
7a9892f151 REVIEW: Inject devtools extensions API via browser
Behavior was changed in https://crbug.com/706169
2017-11-24 10:58:53 +09:00
Ales Pergl
531472bad4 Create a TaskScheduler when initializing run-as-node mode.
It fixes crashes when V8 tries to execute background tasks via the TaskScheduler.
2017-11-24 10:58:53 +09:00
Ales Pergl
334b39ef1e Fixed build issues 2017-11-24 10:58:53 +09:00
deepak1556
2fa0b3d33e Enable client certificate tests 2017-11-24 10:58:53 +09:00
deepak1556
a0be734ccb Fix client certificate private key handling api 2017-11-24 10:58:53 +09:00
Gellert Hegyi
a47497bf18 adds extra param for ui compositor creation 2017-11-24 10:58:53 +09:00
Gellert Hegyi
5d79dbc9a1 upgrades offscreen rendering to latest chromium 2017-11-24 10:58:53 +09:00
Tomas Rycl
c9b7fc2922 It fixes crash in tests on Windows
Notification delegate copies the notification ID string
instead of storing reference.
2017-11-24 10:58:53 +09:00
Tomas Rycl
e321a4a433 Setting raw pointer to nullptr as default so it can be detected as noninitialized 2017-11-24 10:58:53 +09:00
Aleksei Kuzmin
3a3eb69d0f Do not specify exception handling mode on Windows
Like Chromium does. Also disable related warnings.
2017-11-24 10:58:53 +09:00
Tomas Rycl
69cd33395a Fixed crash on startup on Windows 2017-11-24 10:58:53 +09:00
Aleksei Kuzmin
fe9ae41f98 Use gtk_toggle_button_get_active() 2017-11-24 10:58:53 +09:00
Aleksei Kuzmin
abcda097fb Use GTK3 instead of GTK2 2017-11-24 10:58:53 +09:00
Samuel Attard
ef40bd4786 Remove dead header file for notification delegate 2017-11-24 10:58:17 +09:00
Samuel Attard
797a58bee0 Result of RunMenuAt is now void, no need to ignore it 2017-11-24 10:58:17 +09:00
Samuel Attard
1b46b5ceda Fix printing_handler_win compilation errors 2017-11-24 10:58:17 +09:00
Tomas Rycl
a723e5a4c5 Fixed moved cert x509 function issue on Windows 2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
89c1b8043f Do not use SkBitmap.deepCopyTo(), it was removed
Copy of the `sk_tool_utils::copy_to()` is used instead.
Probsbly we should use the function itself.
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
9326ce8cfd allocator: rename use_experimental_allocator_shim to use_allocator_shim
https://codereview.chromium.org/2902043007
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
6d620c24b5 Update link_settings/libraries list in the brightray.gyp 2017-11-24 10:58:17 +09:00
Birunthan Mohanathas
4e859b4718 Remove "async" option from menu.popup()
All menus are async now. See "Cleanup MenuRunner API"
https://codereview.chromium.org/2790773002
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
338604239d Cleanup MenuRunner API
https://codereview.chromium.org/2790773002
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
14eb2af876 Give CustomButton a focus painter.
https://chromium-review.googlesource.com/c/chromium/src/+/516824
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
e0d7b7d0fc Clean up views::Background.
https://chromium-review.googlesource.com/c/chromium/src/+/520702
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
93b3d8cb49 Changed top/bottom & left/right border parameters on BoxLayout to take single gfx::Insets parameter.
https://chromium-review.googlesource.com/c/chromium/src/+/515902
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
4607a1fd13 make base::SharedMemoryHandle a class on POSIX.
https://codereview.chromium.org/2843113002
2017-11-24 10:58:17 +09:00
Tony Ganch
59550b203f Include objbase.h only for Windows 2017-11-24 10:58:17 +09:00
Tony Ganch
513d4fd225 Remove usage of X11AtomCache
See https://codereview.chromium.org/2914103002/
2017-11-24 10:58:17 +09:00
Tony Ganch
da04cbd4d8 Rename set_background to SetBackground 2017-11-24 10:58:17 +09:00
Tony Ganch
d7e4e8d6cc Rename GetPrefferedSize to CalculatePrefferedSize
See https://chromium-review.googlesource.com/c/chromium/src/+/516542
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
7f5fbb04e2 Migrate from ScopedComPtr::CreateInstance() to CoCreateInstance in chrome/...
https://codereview.chromium.org/2894483002
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
79e59a88b4 Rename ScopedComPtr::Receive to ScopedComPtr::GetAddressOf
https://codereview.chromium.org/2870263002
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
485e43636b Rename ScopedComPtr::get() to ScopedComPtr::Get()
https://codereview.chromium.org/2824773002
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
1073c9b1ed Fix compilation of atom/browser/api/atom_api_app.cc
Refactor client cert private key handling.
https://codereview.chromium.org/2898573002
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
8c40854983 Move handling of DraggableRegionsChanged notification from "view" to "frame".
https://codereview.chromium.org/2929493003
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
624b63a1ca Move "atom/common/node_includes.h" to the end of the includes list
https://github.com/electron/electron/issues/10363
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
3a7b3ba95e Update crashpad revision 2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
96ff534248 Update brightray link_settings on Mac 2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
7a23a79b58 Add protobuf defines and include_dirs 2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
56e7867455 Move IconURLs method from WebFrame to WebLocalFrame
https://codereview.chromium.org/2918903002
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
fe662ccbdc Remove obsolete Blink popup blocker.
https://chromium-review.googlesource.com/c/chromium/src/+/512347
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
dcb9925ddd Fix 'constructor cannot be redeclared' error
Upgrade ICU to 59
https://bugs.chromium.org/p/chromium/issues/detail?id=699469
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
5fb0f005c5 Convert SpellCheckPanel SpellCheckPanelHost IPC to mojo
https://chromium-review.googlesource.com/c/chromium/src/+/515323
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
c6333728d9 Fix brightray::URLRequestContextGetter::GetURLRequestContext()
Split HttpNetworkSession::Params into two structs.
https://codereview.chromium.org/2907463002

Make HttpNetworkSession::host_mapping_rules no longer a pointer.
https://codereview.chromium.org/2906463002
2017-11-24 10:58:17 +09:00
Tony Ganch
491249108e Fix WebLocalFrame API usage
Related CLs:
https://chromium-review.googlesource.com/c/chromium/src/+/506500
https://chromium-review.googlesource.com/c/chromium/src/+/542658
2017-11-24 10:58:17 +09:00
Tony Ganch
0ad967c9a5 Don't specify URLRequestContext when starting logging
Related CL: https://codereview.chromium.org/2698143004
2017-11-24 10:58:17 +09:00
Tony Ganch
4412836e77 Include header for net::URLRequestContext 2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
59b2fb054e Use blink::WebLocalFrame instead of blink::WebFrame in printing 2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
d817e23050 [c++11 library] Remove ScopedVector
https://bugs.chromium.org/p/chromium/issues/detail?id=554289
2017-11-24 10:58:17 +09:00
Aleksei Kuzmin
ac8c205fd7 Replace deprecated base::NonThreadSafe in chrome in favor of SequenceChecker.
https://codereview.chromium.org/2911983003
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
75b41102ef Remove unused includes 2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
a9eb0cbec0 Ban raw pointers to ref-counted types on base::Bind
https://chromium-review.googlesource.com/c/chromium/src/+/549537
2017-11-24 10:58:16 +09:00
deepak1556
12a4321e2b Reporting: Wire ReportingDelegate into ChromeNetworkDelegate
https://codereview.chromium.org/2891133003
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
7d1c1700f8 Implement GetBrowsingDataRemoverDelegate() for BrowserContext subclasses
https://codereview.chromium.org/2898443002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
edb7bc6572 Make BlobReader create its own file TaskRunner.
https://chromium-review.googlesource.com/c/chromium/src/+/570945
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
6ba372f9f2 Move some of IOThread's command line logic to network_session_configurator.
https://codereview.chromium.org/2914893002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
47d683f0ad DevTools: do not set visible size while emulating in case of device mode.
https://chromium-review.googlesource.com/c/chromium/src/+/572222
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
6c7ad3ac58 Remove the dependence on BrowserThread::FILE for
https://codereview.chromium.org/2944313003
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
b29c485ec4 Consolidate PowerSaveBlocker and WakeLock inside Device Service.
https://chromium-review.googlesource.com/c/chromium/src/+/563159
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
933bf77a1f printing: Remove BlockingPool use
https://chromium-review.googlesource.com/c/chromium/src/+/541856
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
5a4a1a5574 Use "blink::WebLocalFrame" for "GetMarginsForPdf()"
Fixes "error: no member named 'IsPrintScalingDisabledForPlugin' in 'blink::WebFrame'"
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
f0cda8d88c Move Get/SetScrollOffset methods from WebFrame to WebLocalFrame.
https://codereview.chromium.org/2936423003
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
4ac9659114 Move printing-related methods from WebFrame to WebLocalFrame.
https://codereview.chromium.org/2923343005
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
e4d9e12ee5 Use blink::WebLocalFrame instead of blink::WebFrame
Move GetDocument method from WebFrame to WebLocalFrame.
https://codereview.chromium.org/2928033002

Move MainWorldScriptContext accessor/method from WebFrame to WebLocalFrame.
https://codereview.chromium.org/2923053002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
61797b7802 Move GetDocument method from WebFrame to WebLocalFrame.
https://codereview.chromium.org/2928033002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
7608a0489c Network Traffic Annotation added to DownloadURLParams.
https://chromium-review.googlesource.com/c/530307
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
e926473e5a Partial revert of Provide WebContents::CreateParams to tab helpers.
https://chromium-review.googlesource.com/c/571285
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
9566904838 Speech recognition: Use BindOnce / OnceCallback / OnceClosure where applicable
https://chromium-review.googlesource.com/c/565762
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
5831a5ffa1 Refactor client cert private key handling.
https://codereview.chromium.org/2898573002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
b69913975b chromeos: Check both original and absolute paths for file: scheme
https://codereview.chromium.org/2786583002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
14c61a96af VR: Check focus state browser-side before sending input to renderer.
https://chromium-review.googlesource.com/c/565760
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
fe48a92422 Propagate opener to BackgroundsContents.
https://codereview.chromium.org/2882513005
2017-11-24 10:58:16 +09:00
Tony Ganch
f694b64d71 FIXME: DesktopNotificationDelegate has been removed
Related CL: https://codereview.chromium.org/2906883003
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
fe431a9e58 Add WebRTC related defines to the build config 2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
68cbfd9f40 Remove base::ListValue::Set(size_t, base::Value*)
https://codereview.chromium.org/2838893002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
2c063f93ff Remove raw base::DictionaryValue::Set
https://codereview.chromium.org/2911033002
2017-11-24 10:58:16 +09:00
Tony Ganch
cf00fc0661 Rename WriteToFileNetLogObserver to FileNetLogObserver 2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
370476c4af Remove unused RenderViewObserver methods.
https://chromium-review.googlesource.com/c/506027

`DidCreateDocumentElement()` observer method was removed.
So I have to use a different approach to check if a document element
has already been created on a web page.
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
1127452429 PlzNavigate: make NavigationResourceHandler a LayeredResourceHandler
https://codereview.chromium.org/2847443002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
a72a08bccc Convert iOS to use X509CertificateBytes.
https://codereview.chromium.org/2864133002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
ea8e113b19 SkBitmap and SkPixelRef no longer need lock/unlock
https://codereview.chromium.org/2823003002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
ea4a36039a Add Keyboard Latency UMA Metrics.
https://codereview.chromium.org/2756893002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
f03ca53af5 Add blink::WebInputEvent::IsPinchGestureEventType().
https://codereview.chromium.org/2861373004
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
650902c656 Renamed LoadCommittedDetails.is_in_page to is_same_document.
https://codereview.chromium.org/2841833002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
90b0984a14 Add missing IWYU message_loop.h includes.
https://codereview.chromium.org/2876013002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
e2a224c4e6 Remove rendundant WebLocalFrame parameter in various plugin code.
https://codereview.chromium.org/2855123003
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
11fa935359 Introduce TaskRunner::RunsTasksInCurrentSequence()
https://codereview.chromium.org/2823103003
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
f2bcdab037 Provide WebContents::CreateParams to tab helpers.
https://codereview.chromium.org/2894973002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
c402658c08 Replicate feature policy container policies.
https://codereview.chromium.org/2797813002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
971002a197 Switch to using scoped_ptr with UserData
https://codereview.chromium.org/2815913005
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
fe952d5c65 Get rid of SharedMemory::GiveToProcess.
https://codereview.chromium.org/2847033003

Changes copied from
"printing: Sandboxed processes must ask the browser to allocate shared memory."
https://codereview.chromium.org/1714643002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
ee9a547985 Service CreateNewWindow on the UI thread with a new mojo interface
https://codereview.chromium.org/2821473002
2017-11-24 10:58:16 +09:00
Aleksei Kuzmin
b81ae1c36f REVIEW: Move MediaDeviceIDSalt from ProfileIOData to ProfileImpl.
https://codereview.chromium.org/2820163002
2017-11-24 10:58:15 +09:00
Aleksei Kuzmin
ba6e8b4dff Merge ResourceRequestBodyImpl and ResourceRequestBody.
https://codereview.chromium.org/2954343005
2017-11-24 10:58:15 +09:00
Aleksei Kuzmin
b77b67bfbe Remove client_certs from SSLCertRequestInfo.
https://codereview.chromium.org/2838243002
2017-11-24 10:58:15 +09:00
Aleksei Kuzmin
364c330887 Replace uses of hash_map in //base
https://codereview.chromium.org/2830093003
2017-11-24 10:58:15 +09:00
Aleksei Kuzmin
ba2f33d629 Remove base::Value::GetAsBinary
https://codereview.chromium.org/2839753005
2017-11-24 10:58:15 +09:00
Aleksei Kuzmin
f847291272 [blink] Unique pointers in Platform.h
https://codereview.chromium.org/2846843002
2017-11-24 10:58:15 +09:00
Aleksei Kuzmin
7ad524fa34 Make base::DictionaryValue::Set* return pointers
https://codereview.chromium.org/2850773002
2017-11-24 10:58:15 +09:00
Aleksei Kuzmin
75d02f65d9 Remove base::SharedMemory::ShareToProcess
https://codereview.chromium.org/2852803002
2017-11-24 10:58:15 +09:00
Aleksei Kuzmin
58e0771e47 Remove base::Value::Get{Buffer,Size}
https://codereview.chromium.org/2841623003
2017-11-24 10:58:15 +09:00
Aleksei Kuzmin
132029ea32 Move components/display_compositor to components/viz/display_compositor
https://codereview.chromium.org/2873243002
2017-11-24 10:58:15 +09:00
Tony Ganch
5315a2e8dc Set clang revision to 307486 2017-11-24 10:58:15 +09:00
Aleksei Kuzmin
2bb95ce41e Update chrome_version.h 2017-11-24 10:58:15 +09:00
Aleksei Kuzmin
fed090a44c Use latest libcc with Chromium 61 2017-11-24 10:58:15 +09:00
Felix Rieseberg
9f0df695ca 🔧 Spec: Fix style issues 2017-11-23 14:22:58 -08:00
Felix Rieseberg
0278e380de 🔧 Spec: Don’t use deprecated new Buffer() 2017-11-23 14:22:31 -08:00
Felix Rieseberg
f7d6e3fa7b 🔧 Disable standard/no-callback-literal where necessary 2017-11-23 13:53:03 -08:00
Felix Rieseberg
f81bfb7b86 🔧 Fix style issues 2017-11-23 13:42:48 -08:00
Felix Rieseberg
97a084a591 🔧 Script: Reject with error 2017-11-23 13:42:31 -08:00
Felix Rieseberg
d0ef834b4f 🔧 Remove redundant await statements 2017-11-23 13:42:09 -08:00
Felix Rieseberg
451a44c4b5 🔧 Don’t use deprecated new Buffer() 2017-11-23 13:41:47 -08:00
Felix Rieseberg
19df1cf070 📦 Upgrade to StandardJS 10 2017-11-23 13:41:14 -08:00
Heilig Benedek
62594780e0 run the new test only on windows 2017-11-23 21:25:26 +01:00
Heilig Benedek
710ca230f3 update tests to reflect new behaviour 2017-11-23 21:25:25 +01:00
Heilig Benedek
bb5eecc16c Use SizeConstraints instead of window events 2017-11-23 21:25:25 +01:00
Heilig Benedek
ca76dda6a6 remove incorrect checks 2017-11-23 21:25:25 +01:00
Heilig Benedek
7a7f1ee711 dont resize on taskbar resize if resizable is false 2017-11-23 21:25:25 +01:00
Emmanuel Kimmerlin
5f658de19f 🐛 #10470 - prevent to load preload in each iframe context 2017-11-23 09:20:52 +01:00
Ted Kim
71c16ad76f lint 2017-11-20 10:17:34 +09:00
Ted Kim
1660fc8d13 Fix getLoginItemSettings timing issue 2017-11-20 10:15:45 +09:00
Zhuo Lu
367f7f123d Update icns 2017-11-19 00:33:33 -08:00
John Kleinschmidt
3e4b73ef8f Update branch determination 2017-11-17 16:21:14 -05:00
John Kleinschmidt
df891d2aae Update for API invoked release builds
Also, fixed links
2017-11-17 16:06:42 -05:00
Ted Kim
d9481430df Fix test failure 2017-11-17 10:53:21 +09:00
Taeho Kim
ada71eea39 📝 Use separate entitlements for login helper 2017-11-17 10:53:15 +09:00
Ted Kim
8184cbfb06 Implement login helper to manage login item in Mac App Store build 2017-11-17 10:53:09 +09:00
499 changed files with 11932 additions and 4707 deletions

View File

@@ -3,10 +3,10 @@ version: 2
jobs:
electron-linux-arm:
docker:
- image: electronbuilds/electron:0.0.3
- image: electronbuilds/electron:0.0.4
environment:
TARGET_ARCH: arm
resource_class: xlarge
resource_class: 2xlarge
steps:
- checkout
- run:
@@ -58,12 +58,48 @@ jobs:
else
echo 'Skipping upload distribution because build is not for release'
fi
- run:
name: Zip out directory
command: |
if [ "$ELECTRON_RELEASE" != "1" ]; then
zip -r electron.zip out/D
fi
- persist_to_workspace:
root: /home/builduser
paths:
- project/out
- store_artifacts:
path: electron.zip
electron-linux-arm-test:
machine: true
steps:
- attach_workspace:
at: /tmp/workspace
- checkout
- run:
name: Test in ARM docker container
command: |
if [ "$ELECTRON_RELEASE" != "1" ]; then
docker run --rm --privileged multiarch/qemu-user-static:register --reset
docker run -it \
--mount type=bind,source=/tmp/workspace,target=/tmp/workspace \
--rm electronbuilds/electronarm7:0.0.4 > version.txt
cat version.txt
if grep -q `script/get-version.py` version.txt; then
echo "Versions match"
else
echo "Versions do not match"
exit 1
fi
else
echo "Skipping test for release build"
fi
electron-linux-arm64:
docker:
- image: electronbuilds/electron:0.0.3
- image: electronbuilds/electron:0.0.4
environment:
TARGET_ARCH: arm64
resource_class: xlarge
resource_class: 2xlarge
steps:
- checkout
- run:
@@ -115,14 +151,54 @@ jobs:
else
echo 'Skipping upload distribution because build is not for release'
fi
- run:
name: Zip out directory
command: |
if [ "$ELECTRON_RELEASE" != "1" ]; then
zip -r electron.zip out/D
fi
- persist_to_workspace:
root: /home/builduser
paths:
- project/out
- store_artifacts:
path: electron.zip
electron-linux-arm64-test:
machine: true
steps:
- attach_workspace:
at: /tmp/workspace
- checkout
- run:
name: Test in ARM64 docker container
command: |
if [ "$ELECTRON_RELEASE" != "1" ]; then
docker run --rm --privileged multiarch/qemu-user-static:register --reset
docker run -it \
--mount type=bind,source=/tmp/workspace,target=/tmp/workspace \
--rm electronbuilds/electronarm64:0.0.5 > version.txt
cat version.txt
if grep -q `script/get-version.py` version.txt; then
echo "Versions match"
else
echo "Versions do not match"
exit 1
fi
else
echo "Skipping test for release build"
fi
electron-linux-ia32:
docker:
- image: electronbuilds/electron:0.0.3
- image: electronbuilds/electron:0.0.4
environment:
TARGET_ARCH: ia32
DISPLAY: ':99.0'
resource_class: xlarge
steps:
- checkout
- run:
name: Setup for headless testing
command: sh -e /etc/init.d/xvfb start
- run:
name: Check for release
command: |
@@ -172,9 +248,32 @@ jobs:
else
echo 'Skipping upload distribution because build is not for release'
fi
- run:
name: Test
environment:
MOCHA_FILE: junit/test-results.xml
MOCHA_REPORTER: mocha-junit-reporter
command: |
if [ "$ELECTRON_RELEASE" != "1" ]; then
echo 'Testing Electron debug build'
out/D/electron --version
mkdir junit
script/test.py --ci --rebuild_native_modules
else
echo 'Skipping testing on release build'
fi
- run:
name: Verify FFmpeg
command: |
if [ "$ELECTRON_RELEASE" != "1" ]; then
echo 'Verifying ffmpeg on debug build'
script/verify-ffmpeg.py
else
echo 'Skipping verify ffmpeg on release build'
fi
electron-linux-mips64el:
docker:
- image: electronbuilds/electron:0.0.3
- image: electronbuilds/electron:0.0.4
environment:
TARGET_ARCH: mips64el
resource_class: xlarge
@@ -232,7 +331,7 @@ jobs:
electron-linux-x64:
docker:
- image: electronbuilds/electron:0.0.3
- image: electronbuilds/electron:0.0.4
environment:
TARGET_ARCH: x64
DISPLAY: ':99.0'
@@ -330,12 +429,18 @@ workflows:
build-arm:
jobs:
- electron-linux-arm
- electron-linux-arm-test:
requires:
- electron-linux-arm
build-arm64:
jobs:
- electron-linux-arm64
- electron-linux-arm64-test:
requires:
- electron-linux-arm64
build-ia32:
jobs:
- electron-linux-ia32
build-x64:
jobs:
- electron-linux-x64
jobs:
- electron-linux-x64

View File

@@ -1,2 +1,3 @@
*
!tools/xvfb-init.sh
!tools/run-electron.sh

8
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@@ -0,0 +1,8 @@
<!--
Thank you for your Pull Request. Please provide a description above and review
the requirements below.
Bug fixes and new features should include tests and possibly benchmarks.
Contributors guide: https://github.com/electron/electron/blob/master/CONTRIBUTING.md
-->

8
.github/config.yml vendored
View File

@@ -3,7 +3,7 @@
# Comment to be posted to on first time issues
newIssueWelcomeComment: |
👋 Thanks for opening your first issue here! If you're reporting a 🐞 bug, please make sure you include steps to reproduce it. We get a lot of issues on this repo, so please be patient and we will get back to you as soon as we can.
To help make it easier for us to investigate your issue, please follow the [contributing guidelines](https://github.com/electron/electron/blob/master/CONTRIBUTING.md#submitting-issues).
# Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome
@@ -11,7 +11,9 @@ newIssueWelcomeComment: |
# Comment to be posted to on PRs from first time contributors in your repository
newPRWelcomeComment: |
💖 Thanks for opening this pull request! 💖
![typing cat](https://user-images.githubusercontent.com/2289/36400158-2c7c589e-1584-11e8-81c7-bd34fd3c392b.gif)
Here is a list of things that will help get it across the finish line:
- Follow the JavaScript, C++, and Python [coding style](https://github.com/electron/electron/blob/master/docs/development/coding-style.md).
- Run `npm run lint` locally to catch formatting errors earlier.
@@ -26,4 +28,4 @@ newPRWelcomeComment: |
firstPRMergeComment: >
Congrats on merging your first pull request! 🎉🎉🎉
# It is recommend to include as many gifs and emojis as possiblec
# It is recommend to include as many gifs and emojis as possible

4
.gitignore vendored
View File

@@ -1,7 +1,7 @@
.DS_Store
.env
.gclient_done
.npmrc
**/.npmrc
.tags*
.vs/
.vscode/
@@ -41,8 +41,8 @@
/vendor/download/
/vendor/llvm-build/
/vendor/llvm/
/vendor/node/deps/node-inspect/.npmrc
/vendor/npm/
/vendor/python_26/
node_modules/
SHASUMS256.txt
**/package-lock.json

View File

@@ -10,21 +10,15 @@ The following is a set of guidelines for contributing to Electron.
These are just guidelines, not rules, use your best judgment and feel free to
propose changes to this document in a pull request.
## Submitting Issues
## [Issues](https://electronjs.org/docs/development/issues)
### Creating Issues
* You can create an issue [here](https://github.com/electron/electron/issues/new),
but before doing that please read the notes below and include as many details as
possible with your report. If you can, please include:
* The version of Electron you are using
* The operating system you are using
* If applicable, what you were doing when the issue arose and what you
expected to happen
* Other things that will help resolve your issue:
* Screenshots and animated GIFs
* Error output that appears in your terminal, dev tools or as an alert
* Perform a [cursory search](https://github.com/electron/electron/issues?utf8=✓&q=is%3Aissue+)
to see if a similar issue has already been submitted
Issues are created [here](https://github.com/electron/electron/issues/new).
* [How to Contribute in Issues](https://electronjs.org/docs/development/issues#how-to-contribute-in-issues)
* [Asking for General Help](https://electronjs.org/docs/development/issues#asking-for-general-help)
* [Submitting a Bug Report](https://electronjs.org/docs/development/issues#submitting-a-bug-report)
* [Triaging a Bug Report](https://electronjs.org/docs/development/issues#triaging-a-bug-report)
* [Resolving a Bug Report](https://electronjs.org/docs/development/issues#resolving-a-bug-report)
### Issue Maintenance and Closure
* If an issue is inactive for 45 days (no activity of any kind), it will be
@@ -34,54 +28,29 @@ the issue will be closed.
* If an issue has been closed and you still feel it's relevant, feel free to
ping a maintainer or add a comment!
## [Pull Requests](https://electronjs.org/docs/development/pull-requests)
## Submitting Pull Requests
Pull Requests are the way concrete changes are made to the code, documentation,
dependencies, and tools contained in the `electron/electron` repository.
* Include screenshots and animated GIFs in your pull request whenever possible.
* Follow the JavaScript, C++, and Python [coding style defined in docs](/docs/development/coding-style.md).
* Write documentation in [Markdown](https://daringfireball.net/projects/markdown).
See the [Documentation Styleguide](/docs/styleguide.md).
* Use short, present tense commit messages. See [Commit Message Styleguide](#git-commit-messages).
* [Setting up your local environment](https://electronjs.org/docs/development/pull-requests#setting-up-your-local-environment)
* [Step 1: Fork](https://electronjs.org/docs/development/pull-requests#step-1-fork)
* [Step 2: Build](https://electronjs.org/docs/development/pull-requests#step-2-build)
* [Step 3: Branch](https://electronjs.org/docs/development/pull-requests#step-3-branch)
* [The Process of Making Changes](https://electronjs.org/docs/development/pull-requests#the-process-of-making-changes)
* [Step 4: Code](https://electronjs.org/docs/development/pull-requests#step-4-code)
* [Step 5: Commit](https://electronjs.org/docs/development/pull-requests#step-5-commit)
* [Commit message guidelines](https://electronjs.org/docs/development/pull-requests#commit-message-guidelines)
* [Step 6: Rebase](https://electronjs.org/docs/development/pull-requests#step-6-rebase)
* [Step 7: Test](https://electronjs.org/docs/development/pull-requests#step-7-test)
* [Step 8: Push](https://electronjs.org/docs/development/pull-requests#step-8-push)
* [Step 8: Opening the Pull Request](https://electronjs.org/docs/development/pull-requests#step-8-opening-the-pull-request)
* [Step 9: Discuss and Update](#step-9-discuss-and-update)
* [Approval and Request Changes Workflow](https://electronjs.org/docs/development/pull-requests#approval-and-request-changes-workflow)
* [Step 10: Landing](https://electronjs.org/docs/development/pull-requests#step-10-landing)
* [Continuous Integration Testing](https://electronjs.org/docs/development/pull-requests#continuous-integration-testing)
## Styleguides
## Style Guides
### General Code
See [Coding Style](https://electronjs.org/docs/development/coding-style) for information about which standards Electron adheres to in different parts of its codebase.
* End files with a newline.
* Place requires in the following order:
* Built in Node Modules (such as `path`)
* Built in Electron Modules (such as `ipc`, `app`)
* Local Modules (using relative paths)
* Place class properties in the following order:
* Class methods and properties (methods starting with a `@`)
* Instance methods and properties
* Avoid platform-dependent code:
* Use `path.join()` to concatenate filenames.
* Use `os.tmpdir()` rather than `/tmp` when you need to reference the
temporary directory.
* Using a plain `return` when returning explicitly at the end of a function.
* Not `return null`, `return undefined`, `null`, or `undefined`
### Git Commit Messages
* Use the present tense ("Add feature" not "Added feature")
* Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
* Limit the first line to 72 characters or less
* Reference issues and pull requests liberally
* When only changing documentation, include `[ci skip]` in the commit description
* Consider starting the commit message with an applicable emoji:
* :art: `:art:` when improving the format/structure of the code
* :racehorse: `:racehorse:` when improving performance
* :non-potable_water: `:non-potable_water:` when plugging memory leaks
* :memo: `:memo:` when writing docs
* :penguin: `:penguin:` when fixing something on Linux
* :apple: `:apple:` when fixing something on macOS
* :checkered_flag: `:checkered_flag:` when fixing something on Windows
* :bug: `:bug:` when fixing a bug
* :fire: `:fire:` when removing code or files
* :green_heart: `:green_heart:` when fixing the CI build
* :white_check_mark: `:white_check_mark:` when adding tests
* :lock: `:lock:` when dealing with security
* :arrow_up: `:arrow_up:` when upgrading dependencies
* :arrow_down: `:arrow_down:` when downgrading dependencies
* :shirt: `:shirt:` when removing linter warnings

View File

@@ -8,10 +8,13 @@ RUN chmod a+rwx /home
# Install node.js
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get update && apt-get install -y --force-yes nodejs
RUN apt-get update && apt-get install -y nodejs
# Install wget used by crash reporter
RUN apt-get install -y --force-yes wget
RUN apt-get install -y wget
# Install python-dbusmock
RUN apt-get install -y python-dbusmock
# Add xvfb init script
ADD tools/xvfb-init.sh /etc/init.d/xvfb

34
Dockerfile.arm64 Normal file
View File

@@ -0,0 +1,34 @@
FROM multiarch/debian-debootstrap:arm64-jessie
RUN apt-get update && apt-get install -y\
bison \
build-essential \
clang \
curl \
gperf \
libasound2 \
libasound2-dev \
libcap-dev \
libcups2-dev \
libdbus-1-dev \
libgconf-2-4 \
libgconf2-dev \
libgnome-keyring-dev \
libgtk-3-0 \
libgtk-3-dev \
libnotify-dev \
libnss3 \
libnss3-dev \
libx11-xcb-dev \
libxss1 \
libxtst-dev \
libxtst6 \
python-dbusmock \
wget \
xvfb
ADD tools/xvfb-init.sh /etc/init.d/xvfb
RUN chmod a+x /etc/init.d/xvfb
ADD tools/run-electron.sh /run-electron.sh
RUN chmod a+x /run-electron.sh
CMD sh /run-electron.sh

40
Dockerfile.armv7 Normal file
View File

@@ -0,0 +1,40 @@
FROM multiarch/debian-debootstrap:armhf-jessie
RUN apt-get update && apt-get install -y\
bison \
build-essential \
clang \
curl \
gperf \
libasound2 \
libasound2-dev \
libcap-dev \
libcups2-dev \
libdbus-1-dev \
libgconf-2-4 \
libgconf2-dev \
libgnome-keyring-dev \
libgtk-3-0 \
libgtk-3-dev \
libnotify-dev \
libnss3 \
libnss3-dev \
libx11-xcb-dev \
libxss1 \
libxtst-dev \
libxtst6 \
python-dbusmock \
git \
wget \
xvfb
# Install node.js
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get update && apt-get install -y nodejs
ADD tools/xvfb-init.sh /etc/init.d/xvfb
RUN chmod a+x /etc/init.d/xvfb
ADD tools/run-electron.sh /run-electron.sh
RUN chmod a+x /run-electron.sh
CMD sh /run-electron.sh

View File

@@ -4,10 +4,13 @@ USER root
# Install node.js
RUN curl -sL https://deb.nodesource.com/setup_6.x | bash -
RUN apt-get update && apt-get install -y --force-yes nodejs
RUN apt-get update && apt-get install -y nodejs
# Install wget used by crash reporter
RUN apt-get install -y --force-yes wget
RUN apt-get install -y wget
# Install python-dbusmock
RUN apt-get install -y python-dbusmock
# Add xvfb init script
ADD tools/xvfb-init.sh /etc/init.d/xvfb

20
Jenkinsfile vendored
View File

@@ -8,10 +8,12 @@ pipeline {
label 'osx'
}
steps {
sh 'script/bootstrap.py --target_arch=x64 --dev'
sh 'npm run lint'
sh 'script/build.py -c D'
sh 'script/test.py --ci --rebuild_native_modules'
timeout(60) {
sh 'script/bootstrap.py --target_arch=x64 --dev'
sh 'npm run lint'
sh 'script/build.py -c D'
sh 'script/test.py --ci --rebuild_native_modules'
}
}
post {
always {
@@ -27,10 +29,12 @@ pipeline {
MAS_BUILD = '1'
}
steps {
sh 'script/bootstrap.py --target_arch=x64 --dev'
sh 'npm run lint'
sh 'script/build.py -c D'
sh 'script/test.py --ci --rebuild_native_modules'
timeout(60) {
sh 'script/bootstrap.py --target_arch=x64 --dev'
sh 'npm run lint'
sh 'script/build.py -c D'
sh 'script/test.py --ci --rebuild_native_modules'
}
}
post {
always {

View File

@@ -1,4 +1,4 @@
Copyright (c) 2013-2017 GitHub Inc.
Copyright (c) 2013-2018 GitHub Inc.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the

View File

@@ -1,7 +1,9 @@
[![Electron Logo](https://electronjs.org/images/electron-logo.svg)](https://electronjs.org)
[![Travis Build Status](https://travis-ci.org/electron/electron.svg?branch=master)](https://travis-ci.org/electron/electron)
[![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/bc56v83355fi3369/branch/master?svg=true)](https://ci.appveyor.com/project/electron-bot/electron/branch/master)
[![CircleCI Build Status](https://circleci.com/gh/electron/electron/tree/master.svg?style=shield)](https://circleci.com/gh/electron/electron/tree/master)
[![AppVeyor Build Status](https://windows-ci.electronjs.org/api/projects/status/nilyf07hcef14dvj/branch/master?svg=true)](https://windows-ci.electronjs.org/project/AppVeyor/electron/branch/master)
[![Jenkins Build Status](https://mac-ci.electronjs.org/buildStatus/icon?job=Electron%20org/electron/master)](https://mac-ci.electronjs.org/blue/organizations/jenkins/Electron%20org%2Felectron/activity?branch=master)
[![devDependency Status](https://david-dm.org/electron/electron/dev-status.svg)](https://david-dm.org/electron/electron?type=dev)
[![Join the Electron Community on Slack](https://atom-slack.herokuapp.com/badge.svg)](https://atom-slack.herokuapp.com/)
@@ -33,10 +35,10 @@ npm install electron --save-dev --save-exact
The `--save-exact` flag is recommended as Electron does not follow semantic
versioning. For info on how to manage Electron versions in your apps, see
[Electron versioning](https://electronjs.org/docs/tutorial/electron-versioning).
[Electron versioning](docs/tutorial/electron-versioning.md).
For more installation options and troubleshooting tips, see
[installation](https://electronjs.org/docs/tutorial/installation).
[installation](docs/tutorial/installation.md).
## Quick start
@@ -99,6 +101,7 @@ forums
- [`electron-jp`](https://electron-jp.slack.com) *(Japanese)*
- [`electron-tr`](https://electron-tr.herokuapp.com) *(Turkish)*
- [`electron-id`](https://electron-id.slack.com) *(Indonesia)*
- [`electron-pl`](https://electronpl.github.io) *(Poland)*
Check out [awesome-electron](https://github.com/sindresorhus/awesome-electron)
for a community maintained list of useful example apps, tools and resources.

View File

@@ -7,3 +7,6 @@ To report a security issue, email [electron@github.com](mailto:electron@github.c
The Electron team will send a response indicating the next steps in handling your report. After the initial reply to your report, the security team will keep you informed of the progress towards a fix and full announcement, and may ask for additional information or guidance.
Report security bugs in third-party modules to the person or team maintaining the module. You can also report a vulnerability through the [Node Security Project](https://nodesecurity.io/report).
## Learning More About Security
To learn more about securing an Electron application, please see the [security tutorial](docs/tutorial/security.md).

View File

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

View File

@@ -10,7 +10,7 @@
#if defined(OS_MACOSX)
extern "C" {
__attribute__((visibility("default")))
int AtomMain(int argc, const char* argv[]);
int AtomMain(int argc, char* argv[]);
__attribute__((visibility("default")))
int AtomInitializeICUandStartNode(int argc, char *argv[]);

View File

@@ -15,11 +15,11 @@
#include "content/public/app/content_main.h"
#if defined(OS_MACOSX)
int AtomMain(int argc, const char* argv[]) {
int AtomMain(int argc, char* argv[]) {
atom::AtomMainDelegate delegate;
content::ContentMainParams params(&delegate);
params.argc = argc;
params.argv = argv;
params.argv = const_cast<const char**>(argv);
atom::AtomCommandLine::Init(argc, argv);
return content::ContentMain(params);
}

View File

@@ -0,0 +1,11 @@
#import <Cocoa/Cocoa.h>
int main(int argc, char* argv[]) {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSArray* pathComponents = [[[NSBundle mainBundle] bundlePath] pathComponents];
pathComponents = [pathComponents subarrayWithRange:NSMakeRange(0, [pathComponents count] - 4)];
NSString* path = [NSString pathWithComponents:pathComponents];
[[NSWorkspace sharedWorkspace] launchApplication:path];
[pool drain];
return 0;
}

View File

@@ -4,7 +4,8 @@
#include "atom/app/atom_main.h"
#include <stdlib.h>
#include <cstdlib>
#include <vector>
#if defined(OS_WIN)
#include <windows.h> // windows.h must be included first
@@ -15,9 +16,11 @@
#include <tchar.h>
#include "atom/app/atom_main_delegate.h"
#include "atom/app/command_line_args.h"
#include "atom/common/crash_reporter/win/crash_service_main.h"
#include "base/environment.h"
#include "base/process/launch.h"
#include "base/strings/utf_string_conversions.h"
#include "base/win/windows_version.h"
#include "content/public/app/sandbox_helper_win.h"
#include "sandbox/win/src/sandbox_types.h"
@@ -35,7 +38,9 @@
namespace {
#ifdef ENABLE_RUN_AS_NODE
const auto kRunAsNode = "ELECTRON_RUN_AS_NODE";
#endif
bool IsEnvSet(const char* name) {
#if defined(OS_WIN)
@@ -52,18 +57,23 @@ bool IsEnvSet(const char* name) {
#if defined(OS_WIN)
int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd, int) {
int argc = 0;
wchar_t** wargv = ::CommandLineToArgvW(::GetCommandLineW(), &argc);
struct Arguments {
int argc = 0;
wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc);
bool run_as_node = IsEnvSet(kRunAsNode);
~Arguments() { LocalFree(argv); }
} arguments;
if (!arguments.argv)
return -1;
#ifdef _DEBUG
// Don't display assert dialog boxes in CI test runs
static const auto kCI = "ELECTRON_CI";
bool is_ci = IsEnvSet(kCI);
if (!is_ci) {
for (int i = 0; i < argc; ++i) {
if (!_wcsicmp(wargv[i], L"--ci")) {
for (int i = 0; i < arguments.argc; ++i) {
if (!_wcsicmp(arguments.argv[i], L"--ci")) {
is_ci = true;
_putenv_s(kCI, "1"); // set flag for child processes
break;
@@ -81,44 +91,16 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd, int) {
}
#endif
#ifdef ENABLE_RUN_AS_NODE
bool run_as_node = IsEnvSet(kRunAsNode);
#else
bool run_as_node = false;
#endif
// Make sure the output is printed to console.
if (run_as_node || !IsEnvSet("ELECTRON_NO_ATTACH_CONSOLE"))
base::RouteStdioToConsole(false);
// Convert argv to to UTF8
char** argv = new char*[argc];
for (int i = 0; i < argc; i++) {
// Compute the size of the required buffer
DWORD size = WideCharToMultiByte(CP_UTF8,
0,
wargv[i],
-1,
NULL,
0,
NULL,
NULL);
if (size == 0) {
// This should never happen.
fprintf(stderr, "Could not convert arguments to utf8.");
exit(1);
}
// Do the actual conversion
argv[i] = new char[size];
DWORD result = WideCharToMultiByte(CP_UTF8,
0,
wargv[i],
-1,
argv[i],
size,
NULL,
NULL);
if (result == 0) {
// This should never happen.
fprintf(stderr, "Could not convert arguments to utf8.");
exit(1);
}
}
#ifndef DEBUG
// Chromium has its own TLS subsystem which supports automatic destruction
// of thread-local data, and also depends on memory allocation routines
@@ -138,15 +120,28 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd, int) {
});
#endif
#ifdef ENABLE_RUN_AS_NODE
if (run_as_node) {
// Now that argv conversion is done, we can finally start.
std::vector<char*> argv(arguments.argc);
std::transform(
arguments.argv, arguments.argv + arguments.argc, argv.begin(),
[](auto& a) { return _strdup(base::WideToUTF8(a).c_str()); });
base::AtExitManager atexit_manager;
base::i18n::InitializeICU();
return atom::NodeMain(argc, argv);
} else if (IsEnvSet("ELECTRON_INTERNAL_CRASH_SERVICE")) {
auto ret = atom::NodeMain(argv.size(), argv.data());
std::for_each(argv.begin(), argv.end(), free);
return ret;
}
#endif
if (IsEnvSet("ELECTRON_INTERNAL_CRASH_SERVICE")) {
return crash_service::Main(cmd);
}
if (!atom::CheckCommandLineArguments(arguments.argc, arguments.argv))
return -1;
sandbox::SandboxInterfaceInfo sandbox_info = {0};
content::InitializeSandboxInfo(&sandbox_info);
atom::AtomMainDelegate delegate;
@@ -154,34 +149,37 @@ int APIENTRY wWinMain(HINSTANCE instance, HINSTANCE, wchar_t* cmd, int) {
content::ContentMainParams params(&delegate);
params.instance = instance;
params.sandbox_info = &sandbox_info;
atom::AtomCommandLine::Init(argc, argv);
atom::AtomCommandLine::InitW(argc, wargv);
atom::AtomCommandLine::Init(arguments.argc, arguments.argv);
return content::ContentMain(params);
}
#elif defined(OS_LINUX) // defined(OS_WIN)
int main(int argc, const char* argv[]) {
int main(int argc, char* argv[]) {
#ifdef ENABLE_RUN_AS_NODE
if (IsEnvSet(kRunAsNode)) {
base::i18n::InitializeICU();
base::AtExitManager atexit_manager;
return atom::NodeMain(argc, const_cast<char**>(argv));
return atom::NodeMain(argc, argv);
}
#endif
atom::AtomMainDelegate delegate;
content::ContentMainParams params(&delegate);
params.argc = argc;
params.argv = argv;
params.argv = const_cast<const char**>(argv);
atom::AtomCommandLine::Init(argc, argv);
return content::ContentMain(params);
}
#else // defined(OS_LINUX)
int main(int argc, const char* argv[]) {
int main(int argc, char* argv[]) {
#ifdef ENABLE_RUN_AS_NODE
if (IsEnvSet(kRunAsNode)) {
return AtomInitializeICUandStartNode(argc, const_cast<char**>(argv));
return AtomInitializeICUandStartNode(argc, argv);
}
#endif
return AtomMain(argc, argv);
}

View File

@@ -21,9 +21,18 @@
#include "base/logging.h"
#include "chrome/common/chrome_paths.h"
#include "content/public/common/content_switches.h"
#include "ipc/ipc_features.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
#if BUILDFLAG(IPC_MESSAGE_LOG_ENABLED)
#define IPC_MESSAGE_MACROS_LOG_ENABLED
#include "content/public/common/content_ipc_logging.h"
#define IPC_LOG_TABLE_ADD_ENTRY(msg_id, logger) \
content::RegisterIPCLogger(msg_id, logger)
#include "atom/common/common_message_generator.h"
#endif
namespace atom {
namespace {
@@ -86,9 +95,10 @@ bool AtomMainDelegate::BasicStartupComplete(int* exit_code) {
logging::SetLogItems(true, false, true, false);
// Enable convient stack printing.
bool enable_stack_dumping = env->HasVar("ELECTRON_ENABLE_STACK_DUMPING");
#if defined(DEBUG) && defined(OS_LINUX)
enable_stack_dumping = true;
bool enable_stack_dumping = true;
#else
bool enable_stack_dumping = env->HasVar("ELECTRON_ENABLE_STACK_DUMPING");
#endif
if (enable_stack_dumping)
base::debug::EnableInProcessStackDumping();

View File

@@ -44,7 +44,6 @@ class AtomMainDelegate : public brightray::MainDelegate {
void SetUpBundleOverrides();
#endif
brightray::ContentClient content_client_;
std::unique_ptr<content::ContentBrowserClient> browser_client_;
std::unique_ptr<content::ContentRendererClient> renderer_client_;
std::unique_ptr<content::ContentUtilityClient> utility_client_;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,17 @@
// Copyright (c) 2018 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ATOM_APP_COMMAND_LINE_ARGS_H_
#define ATOM_APP_COMMAND_LINE_ARGS_H_
#include "base/command_line.h"
namespace atom {
bool CheckCommandLineArguments(int argc, base::CommandLine::CharType** argv);
} // namespace atom
#endif // ATOM_APP_COMMAND_LINE_ARGS_H_

View File

@@ -2,6 +2,8 @@
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifdef ENABLE_RUN_AS_NODE
#include "atom/app/node_main.h"
#include "atom/app/uv_task_runner.h"
@@ -12,6 +14,7 @@
#include "atom/common/native_mate_converters/string16_converter.h"
#include "base/command_line.h"
#include "base/feature_list.h"
#include "base/task_scheduler/task_scheduler.h"
#include "base/threading/thread_task_runner_handle.h"
#include "gin/array_buffer.h"
#include "gin/public/isolate_holder.h"
@@ -40,6 +43,11 @@ int NodeMain(int argc, char *argv[]) {
gin::V8Initializer::LoadV8Snapshot();
gin::V8Initializer::LoadV8Natives();
// V8 requires a task scheduler apparently
base::TaskScheduler::CreateAndStartWithDefaultParams("Electron");
// Initialize gin::IsolateHolder.
JavascriptEnvironment gin_env;
int exec_argc;
@@ -53,7 +61,7 @@ int NodeMain(int argc, char *argv[]) {
// Enable support for v8 inspector.
NodeDebugger node_debugger(env);
node_debugger.Start();
node_debugger.Start(gin_env.platform());
mate::Dictionary process(gin_env.isolate(), env->process_object());
#if defined(OS_WIN)
@@ -88,9 +96,18 @@ int NodeMain(int argc, char *argv[]) {
node::FreeEnvironment(env);
}
// According to "src/gin/shell/gin_main.cc":
//
// gin::IsolateHolder waits for tasks running in TaskScheduler in its
// destructor and thus must be destroyed before TaskScheduler starts skipping
// CONTINUE_ON_SHUTDOWN tasks.
base::TaskScheduler::GetInstance()->Shutdown();
v8::V8::Dispose();
return exit_code;
}
} // namespace atom
#endif // ENABLE_RUN_AS_NODE

View File

@@ -5,10 +5,14 @@
#ifndef ATOM_APP_NODE_MAIN_H_
#define ATOM_APP_NODE_MAIN_H_
#ifdef ENABLE_RUN_AS_NODE
namespace atom {
int NodeMain(int argc, char *argv[]);
} // namespace atom
#endif // ENABLE_RUN_AS_NODE
#endif // ATOM_APP_NODE_MAIN_H_

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIdentifier</key>
<string>${ATOM_BUNDLE_ID}</string>
<key>CFBundleName</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundleExecutable</key>
<string>${PRODUCT_NAME}</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>LSBackgroundOnly</key>
<true/>
</dict>
</plist>

View File

@@ -31,7 +31,7 @@ bool UvTaskRunner::PostDelayedTask(const tracked_objects::Location& from_here,
return true;
}
bool UvTaskRunner::RunsTasksOnCurrentThread() const {
bool UvTaskRunner::RunsTasksInCurrentSequence() const {
return true;
}

View File

@@ -23,7 +23,7 @@ class UvTaskRunner : public base::SingleThreadTaskRunner {
bool PostDelayedTask(const tracked_objects::Location& from_here,
base::OnceClosure task,
base::TimeDelta delay) override;
bool RunsTasksOnCurrentThread() const override;
bool RunsTasksInCurrentSequence() const override;
bool PostNonNestableDelayedTask(
const tracked_objects::Location& from_here,
base::OnceClosure task,

View File

@@ -45,6 +45,7 @@
#include "content/public/common/content_switches.h"
#include "media/audio/audio_manager.h"
#include "native_mate/object_template_builder.h"
#include "net/ssl/client_cert_identity.h"
#include "net/ssl/ssl_cert_request_info.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/image/image.h"
@@ -420,19 +421,26 @@ bool NotificationCallbackWrapper(
return !Browser::Get()->is_shutting_down();
}
void GotPrivateKey(std::shared_ptr<content::ClientCertificateDelegate> delegate,
scoped_refptr<net::X509Certificate> cert,
scoped_refptr<net::SSLPrivateKey> private_key) {
delegate->ContinueWithCertificate(cert, private_key);
}
void OnClientCertificateSelected(
v8::Isolate* isolate,
std::shared_ptr<content::ClientCertificateDelegate> delegate,
std::shared_ptr<net::ClientCertIdentityList> identities,
mate::Arguments* args) {
if (args->Length() == 2) {
delegate->ContinueWithCertificate(nullptr);
delegate->ContinueWithCertificate(nullptr, nullptr);
return;
}
v8::Local<v8::Value> val;
args->GetNext(&val);
if (val->IsNull()) {
delegate->ContinueWithCertificate(nullptr);
delegate->ContinueWithCertificate(nullptr, nullptr);
return;
}
@@ -448,8 +456,17 @@ void OnClientCertificateSelected(
auto certs = net::X509Certificate::CreateCertificateListFromBytes(
data.c_str(), data.length(), net::X509Certificate::FORMAT_AUTO);
if (!certs.empty())
delegate->ContinueWithCertificate(certs[0].get());
if (!certs.empty()) {
scoped_refptr<net::X509Certificate> cert(certs[0].get());
for (size_t i = 0; i < identities->size(); ++i) {
if (cert->Equals((*identities)[i]->certificate())) {
net::ClientCertIdentity::SelfOwningAcquirePrivateKey(
std::move((*identities)[i]),
base::Bind(&GotPrivateKey, delegate, std::move(cert)));
break;
}
}
}
}
void PassLoginInformation(scoped_refptr<LoginHandler> login_handler,
@@ -515,7 +532,6 @@ App::App(v8::Isolate* isolate) {
static_cast<AtomBrowserClient*>(AtomBrowserClient::Get())->set_delegate(this);
Browser::Get()->AddObserver(this);
content::GpuDataManager::GetInstance()->AddObserver(this);
content::BrowserChildProcessObserver::Add(this);
base::ProcessId pid = base::GetCurrentProcId();
std::unique_ptr<atom::ProcessMetric> process_metric(
new atom::ProcessMetric(
@@ -582,6 +598,7 @@ void App::OnFinishLaunching(const base::DictionaryValue& launch_info) {
}
void App::OnPreMainMessageLoopRun() {
content::BrowserChildProcessObserver::Add(this);
if (process_singleton_) {
process_singleton_->OnBrowserReady();
}
@@ -650,28 +667,33 @@ void App::OnLogin(LoginHandler* login_handler,
login_handler->CancelAuth();
}
void App::OnCreateWindow(
bool App::CanCreateWindow(
content::RenderFrameHost* opener,
const GURL& opener_url,
const GURL& opener_top_level_frame_url,
const GURL& source_origin,
content::mojom::WindowContainerType container_type,
const GURL& target_url,
const content::Referrer& referrer,
const std::string& frame_name,
WindowOpenDisposition disposition,
const std::vector<std::string>& features,
const scoped_refptr<content::ResourceRequestBodyImpl>& body,
int render_process_id,
int render_frame_id) {
const blink::mojom::WindowFeatures& features,
const std::vector<std::string>& additional_features,
const scoped_refptr<content::ResourceRequestBody>& body,
bool user_gesture,
bool opener_suppressed,
bool* no_javascript_access) {
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
content::RenderFrameHost* rfh =
content::RenderFrameHost::FromID(render_process_id, render_frame_id);
content::WebContents* web_contents =
content::WebContents::FromRenderFrameHost(rfh);
content::WebContents::FromRenderFrameHost(opener);
if (web_contents) {
auto api_web_contents = WebContents::CreateFrom(isolate(), web_contents);
api_web_contents->OnCreateWindow(target_url,
frame_name,
disposition,
features,
body);
api_web_contents->OnCreateWindow(target_url, frame_name, disposition,
additional_features, body);
}
return false;
}
void App::AllowCertificateError(
@@ -702,22 +724,35 @@ void App::AllowCertificateError(
void App::SelectClientCertificate(
content::WebContents* web_contents,
net::SSLCertRequestInfo* cert_request_info,
net::ClientCertIdentityList identities,
std::unique_ptr<content::ClientCertificateDelegate> delegate) {
std::shared_ptr<content::ClientCertificateDelegate>
shared_delegate(delegate.release());
// Convert the ClientCertIdentityList to a CertificateList
// to avoid changes in the API.
auto client_certs = net::CertificateList();
for (const std::unique_ptr<net::ClientCertIdentity>& identity : identities)
client_certs.push_back(identity->certificate());
auto shared_identities =
std::make_shared<net::ClientCertIdentityList>(std::move(identities));
bool prevent_default =
Emit("select-client-certificate",
WebContents::CreateFrom(isolate(), web_contents),
cert_request_info->host_and_port.ToString(),
cert_request_info->client_certs,
base::Bind(&OnClientCertificateSelected,
isolate(),
shared_delegate));
cert_request_info->host_and_port.ToString(), std::move(client_certs),
base::Bind(&OnClientCertificateSelected, isolate(), shared_delegate,
shared_identities));
// Default to first certificate from the platform store.
if (!prevent_default)
shared_delegate->ContinueWithCertificate(
cert_request_info->client_certs[0].get());
if (!prevent_default) {
scoped_refptr<net::X509Certificate> cert =
(*shared_identities)[0]->certificate();
net::ClientCertIdentity::SelfOwningAcquirePrivateKey(
std::move((*shared_identities)[0]),
base::Bind(&GotPrivateKey, shared_delegate, std::move(cert)));
}
}
void App::OnGpuProcessCrashed(base::TerminationStatus status) {
@@ -816,7 +851,7 @@ void App::SetDesktopName(const std::string& desktop_name) {
}
std::string App::GetLocale() {
return l10n_util::GetApplicationLocale("");
return g_browser_process->GetApplicationLocale();
}
bool App::MakeSingleInstance(
@@ -832,9 +867,10 @@ bool App::MakeSingleInstance(
switch (process_singleton_->NotifyOtherProcessOrCreate()) {
case ProcessSingleton::NotifyResult::LOCK_ERROR:
case ProcessSingleton::NotifyResult::PROFILE_IN_USE:
case ProcessSingleton::NotifyResult::PROCESS_NOTIFIED:
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;
@@ -861,11 +897,7 @@ bool App::Relaunch(mate::Arguments* js_args) {
}
if (!override_argv) {
#if defined(OS_WIN)
const relauncher::StringVector& argv = atom::AtomCommandLine::wargv();
#else
const relauncher::StringVector& argv = atom::AtomCommandLine::argv();
#endif
return relauncher::RelaunchApp(argv);
}
@@ -1224,13 +1256,16 @@ void App::BuildPrototype(
.SetMethod("getFileIcon", &App::GetFileIcon)
.SetMethod("getAppMetrics", &App::GetAppMetrics)
.SetMethod("getGPUFeatureStatus", &App::GetGPUFeatureStatus)
.SetMethod("enableMixedSandbox", &App::EnableMixedSandbox)
// TODO(juturu): Remove in 2.0, deprecate before then with warnings
#if defined(OS_MACOSX)
.SetMethod("moveToApplicationsFolder", &App::MoveToApplicationsFolder)
.SetMethod("isInApplicationsFolder", &App::IsInApplicationsFolder)
#endif
.SetMethod("getAppMemoryInfo", &App::GetAppMetrics);
#if defined(MAS_BUILD)
.SetMethod("startAccessingSecurityScopedResource",
&App::StartAccessingSecurityScopedResource)
#endif
.SetMethod("enableMixedSandbox", &App::EnableMixedSandbox);
}
} // namespace api

View File

@@ -25,6 +25,7 @@
#include "native_mate/dictionary.h"
#include "native_mate/handle.h"
#include "net/base/completion_callback.h"
#include "net/ssl/client_cert_identity.h"
#if defined(USE_NSS_CERTS)
#include "chrome/browser/certificate_manager_model.h"
@@ -74,16 +75,6 @@ class App : public AtomBrowserClient::Delegate,
static void BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::FunctionTemplate> prototype);
// Called when window with disposition needs to be created.
void OnCreateWindow(
const GURL& target_url,
const std::string& frame_name,
WindowOpenDisposition disposition,
const std::vector<std::string>& features,
const scoped_refptr<content::ResourceRequestBodyImpl>& body,
int render_process_id,
int render_frame_id);
#if defined(USE_NSS_CERTS)
void OnCertificateManagerModelCreated(
std::unique_ptr<base::DictionaryValue> options,
@@ -150,7 +141,23 @@ class App : public AtomBrowserClient::Delegate,
void SelectClientCertificate(
content::WebContents* web_contents,
net::SSLCertRequestInfo* cert_request_info,
net::ClientCertIdentityList client_certs,
std::unique_ptr<content::ClientCertificateDelegate> delegate) override;
bool CanCreateWindow(content::RenderFrameHost* opener,
const GURL& opener_url,
const GURL& opener_top_level_frame_url,
const GURL& source_origin,
content::mojom::WindowContainerType container_type,
const GURL& target_url,
const content::Referrer& referrer,
const std::string& frame_name,
WindowOpenDisposition disposition,
const blink::mojom::WindowFeatures& features,
const std::vector<std::string>& additional_features,
const scoped_refptr<content::ResourceRequestBody>& body,
bool user_gesture,
bool opener_suppressed,
bool* no_javascript_access) override;
// content::GpuDataManagerObserver:
void OnGpuProcessCrashed(base::TerminationStatus status) override;
@@ -202,6 +209,10 @@ class App : public AtomBrowserClient::Delegate,
bool MoveToApplicationsFolder(mate::Arguments* args);
bool IsInApplicationsFolder();
#endif
#if defined(MAS_BUILD)
base::Callback<void()> StartAccessingSecurityScopedResource(
mate::Arguments* args);
#endif
#if defined(OS_WIN)
// Get the current Jump List settings.

View File

@@ -0,0 +1,59 @@
// 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/api/atom_api_app.h"
#import <Cocoa/Cocoa.h>
#include "base/strings/sys_string_conversions.h"
namespace atom {
namespace api {
// Callback passed to js which will stop accessing the given bookmark.
void OnStopAccessingSecurityScopedResource(NSURL* bookmarkUrl) {
[bookmarkUrl stopAccessingSecurityScopedResource];
[bookmarkUrl release];
}
// Get base64 encoded NSData, create a bookmark for it and start accessing it.
base::Callback<void ()> App::StartAccessingSecurityScopedResource(mate::Arguments* args) {
std::string data;
args->GetNext(&data);
NSString *base64str = base::SysUTF8ToNSString(data);
NSData *bookmarkData = [[NSData alloc] initWithBase64EncodedString: base64str options: 0];
// Create bookmarkUrl from NSData.
BOOL isStale = false;
NSError *error = nil;
NSURL *bookmarkUrl = [NSURL URLByResolvingBookmarkData: bookmarkData
options: NSURLBookmarkResolutionWithSecurityScope
relativeToURL: nil
bookmarkDataIsStale: &isStale
error: &error];
if (error != nil) {
NSString *err = [NSString stringWithFormat: @"NSError: %@ %@", error, [error userInfo]];
args->ThrowError(base::SysNSStringToUTF8(err));
}
if (isStale) {
args->ThrowError("bookmarkDataIsStale - try recreating the bookmark");
}
if (error == nil && isStale == false) {
[bookmarkUrl startAccessingSecurityScopedResource];
}
// Stop the NSURL from being GC'd.
[bookmarkUrl retain];
// Return a js callback which will close the bookmark.
return base::Bind(&OnStopAccessingSecurityScopedResource, bookmarkUrl);
}
} // namespace atom
} // namespace api

View File

@@ -99,10 +99,8 @@ void AutoUpdater::OnWindowAllClosed() {
QuitAndInstall();
}
void AutoUpdater::SetFeedURL(const std::string& url, mate::Arguments* args) {
auto_updater::AutoUpdater::HeaderMap headers;
args->GetNext(&headers);
auto_updater::AutoUpdater::SetFeedURL(url, headers);
void AutoUpdater::SetFeedURL(mate::Arguments* args) {
auto_updater::AutoUpdater::SetFeedURL(args);
}
void AutoUpdater::QuitAndInstall() {

View File

@@ -47,7 +47,7 @@ class AutoUpdater : public mate::EventEmitter<AutoUpdater>,
private:
std::string GetFeedURL();
void SetFeedURL(const std::string& url, mate::Arguments* args);
void SetFeedURL(mate::Arguments* args);
void QuitAndInstall();
DISALLOW_COPY_AND_ASSIGN(AutoUpdater);

View File

@@ -9,7 +9,9 @@
#include "atom/browser/atom_browser_main_parts.h"
#include "atom/common/native_mate_converters/callback.h"
#include "atom/common/native_mate_converters/value_converter.h"
#include "base/json/json_reader.h"
#include "base/json/json_writer.h"
#include "base/memory/ptr_util.h"
#include "content/public/browser/devtools_agent_host.h"
#include "content/public/browser/web_contents.h"
#include "native_mate/dictionary.h"
@@ -47,20 +49,11 @@ void Debugger::DispatchProtocolMessage(DevToolsAgentHost* agent_host,
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
v8::Local<v8::String> local_message =
v8::String::NewFromUtf8(isolate(), message.data());
v8::MaybeLocal<v8::Value> parsed_message = v8::JSON::Parse(
isolate()->GetCurrentContext(), local_message);
if (parsed_message.IsEmpty()) {
std::unique_ptr<base::Value> parsed_message = base::JSONReader::Read(message);
if (!parsed_message || !parsed_message->is_dict())
return;
}
std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
if (!mate::ConvertFromV8(isolate(), parsed_message.ToLocalChecked(),
dict.get())) {
return;
}
base::DictionaryValue* dict =
static_cast<base::DictionaryValue*>(parsed_message.get());
int id;
if (!dict->GetInteger("id", &id)) {
std::string method;
@@ -143,7 +136,7 @@ void Debugger::SendCommand(mate::Arguments* args) {
request.SetInteger("id", request_id);
request.SetString("method", method);
if (!command_params.empty())
request.Set("params", command_params.DeepCopy());
request.Set("params", base::WrapUnique(command_params.DeepCopy()));
std::string json_args;
base::JSONWriter::Write(request, &json_args);

View File

@@ -10,6 +10,7 @@ using base::PlatformThreadRef;
#include "atom/common/native_mate_converters/gfx_converter.h"
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/media/desktop_media_list.h"
#include "content/public/browser/desktop_capture.h"
#include "native_mate/dictionary.h"
#include "third_party/webrtc/modules/desktop_capture/desktop_capture_options.h"
#include "third_party/webrtc/modules/desktop_capture/desktop_capturer.h"
@@ -50,17 +51,7 @@ void DesktopCapturer::StartHandling(bool capture_window,
bool capture_screen,
const gfx::Size& thumbnail_size) {
webrtc::DesktopCaptureOptions options =
webrtc::DesktopCaptureOptions::CreateDefault();
#if defined(OS_WIN)
// On windows, desktop effects (e.g. Aero) will be disabled when the Desktop
// capture API is active by default.
// We keep the desktop effects in most times. Howerver, the screen still
// fickers when the API is capturing the window due to limitation of current
// implemetation. This is a known and wontFix issue in webrtc (see:
// http://code.google.com/p/webrtc/issues/detail?id=3373)
options.set_disable_effects(false);
#endif
content::CreateDesktopCaptureOptions();
std::unique_ptr<webrtc::DesktopCapturer> screen_capturer(
capture_screen ? webrtc::DesktopCapturer::CreateScreenCapturer(options)

View File

@@ -54,6 +54,9 @@ struct Converter<file_dialog::DialogSettings> {
dict.Get("filters", &(out->filters));
dict.Get("properties", &(out->properties));
dict.Get("showsTagField", &(out->shows_tag_field));
#if defined(MAS_BUILD)
dict.Get("securityScopedBookmarks", &(out->security_scoped_bookmarks));
#endif
return true;
}
};

View File

@@ -0,0 +1,115 @@
// Copyright (c) 2017 Amaplex Software, 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_in_app_purchase.h"
#include <string>
#include <utility>
#include <vector>
#include "atom/common/native_mate_converters/callback.h"
#include "native_mate/dictionary.h"
#include "atom/common/node_includes.h"
namespace mate {
template <>
struct Converter<in_app_purchase::Payment> {
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
const in_app_purchase::Payment& payment) {
mate::Dictionary dict = mate::Dictionary::CreateEmpty(isolate);
dict.SetHidden("simple", true);
dict.Set("productIdentifier", payment.productIdentifier);
dict.Set("quantity", payment.quantity);
return dict.GetHandle();
}
};
template <>
struct Converter<in_app_purchase::Transaction> {
static v8::Local<v8::Value> ToV8(v8::Isolate* isolate,
const in_app_purchase::Transaction& val) {
mate::Dictionary dict = mate::Dictionary::CreateEmpty(isolate);
dict.SetHidden("simple", true);
dict.Set("transactionIdentifier", val.transactionIdentifier);
dict.Set("transactionDate", val.transactionDate);
dict.Set("originalTransactionIdentifier",
val.originalTransactionIdentifier);
dict.Set("transactionState", val.transactionState);
dict.Set("errorCode", val.errorCode);
dict.Set("errorMessage", val.errorMessage);
dict.Set("payment", val.payment);
return dict.GetHandle();
}
};
} // namespace mate
namespace atom {
namespace api {
#if defined(OS_MACOSX)
// static
mate::Handle<InAppPurchase> InAppPurchase::Create(v8::Isolate* isolate) {
return mate::CreateHandle(isolate, new InAppPurchase(isolate));
}
// static
void InAppPurchase::BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::FunctionTemplate> prototype) {
prototype->SetClassName(mate::StringToV8(isolate, "InAppPurchase"));
mate::ObjectTemplateBuilder(isolate, prototype->PrototypeTemplate())
.SetMethod("canMakePayments", &in_app_purchase::CanMakePayments)
.SetMethod("getReceiptURL", &in_app_purchase::GetReceiptURL)
.SetMethod("purchaseProduct", &InAppPurchase::PurchaseProduct);
}
InAppPurchase::InAppPurchase(v8::Isolate* isolate) {
Init(isolate);
}
InAppPurchase::~InAppPurchase() {
}
void InAppPurchase::PurchaseProduct(const std::string& product_id,
mate::Arguments* args) {
int quantity = 1;
in_app_purchase::InAppPurchaseCallback callback;
args->GetNext(&quantity);
args->GetNext(&callback);
in_app_purchase::PurchaseProduct(product_id, quantity, callback);
}
void InAppPurchase::OnTransactionsUpdated(
const std::vector<in_app_purchase::Transaction>& transactions) {
Emit("transactions-updated", transactions);
}
#endif
} // namespace api
} // namespace atom
namespace {
using atom::api::InAppPurchase;
void Initialize(v8::Local<v8::Object> exports,
v8::Local<v8::Value> unused,
v8::Local<v8::Context> context,
void* priv) {
#if defined(OS_MACOSX)
v8::Isolate* isolate = context->GetIsolate();
mate::Dictionary dict(isolate, exports);
dict.Set("inAppPurchase", InAppPurchase::Create(isolate));
dict.Set("InAppPurchase",
InAppPurchase::GetConstructor(isolate)->GetFunction());
#endif
}
} // namespace
NODE_MODULE_CONTEXT_AWARE_BUILTIN(atom_browser_in_app_purchase, Initialize)

View File

@@ -0,0 +1,46 @@
// Copyright (c) 2017 Amaplex Software, 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_IN_APP_PURCHASE_H_
#define ATOM_BROWSER_API_ATOM_API_IN_APP_PURCHASE_H_
#include <string>
#include <vector>
#include "atom/browser/api/event_emitter.h"
#include "atom/browser/mac/in_app_purchase.h"
#include "atom/browser/mac/in_app_purchase_observer.h"
#include "native_mate/handle.h"
namespace atom {
namespace api {
class InAppPurchase: public mate::EventEmitter<InAppPurchase>,
public in_app_purchase::TransactionObserver {
public:
static mate::Handle<InAppPurchase> Create(v8::Isolate* isolate);
static void BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::FunctionTemplate> prototype);
protected:
explicit InAppPurchase(v8::Isolate* isolate);
~InAppPurchase() override;
void PurchaseProduct(const std::string& product_id, mate::Arguments* args);
// TransactionObserver:
void OnTransactionsUpdated(
const std::vector<in_app_purchase::Transaction>& transactions) override;
private:
DISALLOW_COPY_AND_ASSIGN(InAppPurchase);
};
} // namespace api
} // namespace atom
#endif // ATOM_BROWSER_API_ATOM_API_IN_APP_PURCHASE_H_

View File

@@ -23,9 +23,13 @@ Menu::Menu(v8::Isolate* isolate, v8::Local<v8::Object> wrapper)
: model_(new AtomMenuModel(this)),
parent_(nullptr) {
InitWith(isolate, wrapper);
model_->AddObserver(this);
}
Menu::~Menu() {
if (model_) {
model_->RemoveObserver(this);
}
}
void Menu::AfterInit(v8::Isolate* isolate) {
@@ -43,15 +47,21 @@ void Menu::AfterInit(v8::Isolate* isolate) {
}
bool Menu::IsCommandIdChecked(int command_id) const {
return is_checked_.Run(command_id);
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
return is_checked_.Run(GetWrapper(), command_id);
}
bool Menu::IsCommandIdEnabled(int command_id) const {
return is_enabled_.Run(command_id);
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
return is_enabled_.Run(GetWrapper(), command_id);
}
bool Menu::IsCommandIdVisible(int command_id) const {
return is_visible_.Run(command_id);
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
return is_visible_.Run(GetWrapper(), command_id);
}
bool Menu::GetAcceleratorForCommandIdWithParams(
@@ -61,18 +71,23 @@ bool Menu::GetAcceleratorForCommandIdWithParams(
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
v8::Local<v8::Value> val = get_accelerator_.Run(
command_id, use_default_accelerator);
GetWrapper(), command_id, use_default_accelerator);
return mate::ConvertFromV8(isolate(), val, accelerator);
}
void Menu::ExecuteCommand(int command_id, int flags) {
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
execute_command_.Run(
GetWrapper(),
mate::internal::CreateEventFromFlags(isolate(), flags),
command_id);
}
void Menu::MenuWillShow(ui::SimpleMenuModel* source) {
menu_will_show_.Run();
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
menu_will_show_.Run(GetWrapper());
}
void Menu::InsertItemAt(
@@ -153,6 +168,14 @@ bool Menu::IsVisibleAt(int index) const {
return model_->IsVisibleAt(index);
}
void Menu::OnMenuWillClose() {
Emit("menu-will-close");
}
void Menu::OnMenuWillShow() {
Emit("menu-will-show");
}
// static
void Menu::BuildPrototype(v8::Isolate* isolate,
v8::Local<v8::FunctionTemplate> prototype) {

View File

@@ -18,7 +18,8 @@ namespace atom {
namespace api {
class Menu : public mate::TrackableObject<Menu>,
public AtomMenuModel::Delegate {
public AtomMenuModel::Delegate,
public AtomMenuModel::Observer {
public:
static mate::WrappableBase* New(mate::Arguments* args);
@@ -53,13 +54,17 @@ class Menu : public mate::TrackableObject<Menu>,
void ExecuteCommand(int command_id, int event_flags) override;
void MenuWillShow(ui::SimpleMenuModel* source) override;
virtual void PopupAt(
Window* window, int x, int y, int positioning_item, bool async) = 0;
virtual void PopupAt(Window* window, int x, int y, int positioning_item,
const base::Closure& callback) = 0;
virtual void ClosePopupAt(int32_t window_id) = 0;
std::unique_ptr<AtomMenuModel> model_;
Menu* parent_;
// Observable:
void OnMenuWillClose() override;
void OnMenuWillShow() override;
private:
void InsertItemAt(int index, int command_id, const base::string16& label);
void InsertSeparatorAt(int index);
@@ -88,12 +93,14 @@ class Menu : public mate::TrackableObject<Menu>,
bool IsVisibleAt(int index) const;
// Stored delegate methods.
base::Callback<bool(int)> is_checked_;
base::Callback<bool(int)> is_enabled_;
base::Callback<bool(int)> is_visible_;
base::Callback<v8::Local<v8::Value>(int, bool)> get_accelerator_;
base::Callback<void(v8::Local<v8::Value>, int)> execute_command_;
base::Callback<void()> menu_will_show_;
base::Callback<bool(v8::Local<v8::Value>, int)> is_checked_;
base::Callback<bool(v8::Local<v8::Value>, int)> is_enabled_;
base::Callback<bool(v8::Local<v8::Value>, int)> is_visible_;
base::Callback<v8::Local<v8::Value>(v8::Local<v8::Value>, int, bool)>
get_accelerator_;
base::Callback<void(v8::Local<v8::Value>, v8::Local<v8::Value>, int)>
execute_command_;
base::Callback<void(v8::Local<v8::Value>)> menu_will_show_;
DISALLOW_COPY_AND_ASSIGN(Menu);
};

View File

@@ -22,17 +22,20 @@ class MenuMac : public Menu {
protected:
MenuMac(v8::Isolate* isolate, v8::Local<v8::Object> wrapper);
void PopupAt(
Window* window, int x, int y, int positioning_item, bool async) override;
void PopupAt(Window* window, int x, int y, int positioning_item,
const base::Closure& callback) override;
void PopupOnUI(const base::WeakPtr<NativeWindow>& native_window,
int32_t window_id, int x, int y, int positioning_item,
bool async);
int32_t window_id,
int x,
int y,
int positioning_item,
base::Closure callback);
void ClosePopupAt(int32_t window_id) override;
private:
friend class Menu;
static void SendActionToFirstResponder(const std::string& action);
void OnClosed(int32_t window_id, base::Closure callback);
scoped_nsobject<AtomMenuController> menu_controller_;

View File

@@ -27,24 +27,24 @@ MenuMac::MenuMac(v8::Isolate* isolate, v8::Local<v8::Object> wrapper)
weak_factory_(this) {
}
void MenuMac::PopupAt(
Window* window, int x, int y, int positioning_item, bool async) {
void MenuMac::PopupAt(Window* window, int x, int y, int positioning_item,
const base::Closure& callback) {
NativeWindow* native_window = window->window();
if (!native_window)
return;
auto popup = base::Bind(&MenuMac::PopupOnUI, weak_factory_.GetWeakPtr(),
native_window->GetWeakPtr(), window->ID(), x, y,
positioning_item, async);
if (async)
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, popup);
else
popup.Run();
positioning_item, callback);
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, popup);
}
void MenuMac::PopupOnUI(const base::WeakPtr<NativeWindow>& native_window,
int32_t window_id, int x, int y, int positioning_item,
bool async) {
int32_t window_id,
int x,
int y,
int positioning_item,
base::Closure callback) {
if (!native_window)
return;
brightray::InspectableWebContents* web_contents =
@@ -52,8 +52,8 @@ void MenuMac::PopupOnUI(const base::WeakPtr<NativeWindow>& native_window,
if (!web_contents)
return;
auto close_callback = base::Bind(&MenuMac::ClosePopupAt,
weak_factory_.GetWeakPtr(), window_id);
auto close_callback = base::Bind(
&MenuMac::OnClosed, weak_factory_.GetWeakPtr(), window_id, callback);
popup_controllers_[window_id] = base::scoped_nsobject<AtomMenuController>(
[[AtomMenuController alloc] initWithModel:model()
useDefaultAccelerator:NO]);
@@ -92,33 +92,41 @@ void MenuMac::PopupOnUI(const base::WeakPtr<NativeWindow>& native_window,
if (rightmostMenuPoint > screenRight)
position.x = position.x - [menu size].width;
[popup_controllers_[window_id] setCloseCallback:close_callback];
// Make sure events can be pumped while the menu is up.
base::MessageLoop::ScopedNestableTaskAllower allow(
base::MessageLoop::current());
if (async) {
[popup_controllers_[window_id] setCloseCallback:close_callback];
// Make sure events can be pumped while the menu is up.
base::MessageLoop::ScopedNestableTaskAllower allow(
base::MessageLoop::current());
// One of the events that could be pumped is |window.close()|.
// User-initiated event-tracking loops protect against this by
// setting flags in -[CrApplication sendEvent:], but since
// web-content menus are initiated by IPC message the setup has to
// be done manually.
base::mac::ScopedSendingEvent sendingEventScoper;
// One of the events that could be pumped is |window.close()|.
// User-initiated event-tracking loops protect against this by
// setting flags in -[CrApplication sendEvent:], but since
// web-content menus are initiated by IPC message the setup has to
// be done manually.
base::mac::ScopedSendingEvent sendingEventScoper;
// Don't emit unresponsive event when showing menu.
atom::UnresponsiveSuppressor suppressor;
[menu popUpMenuPositioningItem:item atLocation:position inView:view];
} else {
// Don't emit unresponsive event when showing menu.
atom::UnresponsiveSuppressor suppressor;
[menu popUpMenuPositioningItem:item atLocation:position inView:view];
close_callback.Run();
}
// Don't emit unresponsive event when showing menu.
atom::UnresponsiveSuppressor suppressor;
[menu popUpMenuPositioningItem:item atLocation:position inView:view];
}
void MenuMac::ClosePopupAt(int32_t window_id) {
auto controller = popup_controllers_.find(window_id);
if (controller != popup_controllers_.end()) {
// Close the controller for the window.
[controller->second cancel];
} else if (window_id == -1) {
// Or just close all opened controllers.
for (auto it = popup_controllers_.begin();
it != popup_controllers_.end();) {
// The iterator is invalidated after the call.
[(it++)->second cancel];
}
}
}
void MenuMac::OnClosed(int32_t window_id, base::Closure callback) {
popup_controllers_.erase(window_id);
callback.Run();
}
// static

View File

@@ -6,7 +6,8 @@
#include "atom/browser/native_window_views.h"
#include "atom/browser/unresponsive_suppressor.h"
#include "content/public/browser/render_widget_host_view.h"
#include "brightray/browser/inspectable_web_contents.h"
#include "brightray/browser/inspectable_web_contents_view.h"
#include "ui/display/screen.h"
using views::MenuRunner;
@@ -20,30 +21,26 @@ MenuViews::MenuViews(v8::Isolate* isolate, v8::Local<v8::Object> wrapper)
weak_factory_(this) {
}
void MenuViews::PopupAt(
Window* window, int x, int y, int positioning_item, bool async) {
void MenuViews::PopupAt(Window* window, int x, int y, int positioning_item,
const base::Closure& callback) {
NativeWindow* native_window = static_cast<NativeWindow*>(window->window());
if (!native_window)
return;
content::WebContents* web_contents = native_window->web_contents();
auto* web_contents = native_window->inspectable_web_contents();
if (!web_contents)
return;
content::RenderWidgetHostView* view = web_contents->GetRenderWidgetHostView();
if (!view)
return;
// (-1, -1) means showing on mouse location.
gfx::Point location;
if (x == -1 || y == -1) {
location = display::Screen::GetScreen()->GetCursorScreenPoint();
} else {
gfx::Point origin = view->GetViewBounds().origin();
auto* view = web_contents->GetView()->GetWebView();
gfx::Point origin = view->bounds().origin();
location = gfx::Point(origin.x() + x, origin.y() + y);
}
int flags = MenuRunner::CONTEXT_MENU | MenuRunner::HAS_MNEMONICS;
if (async)
flags |= MenuRunner::ASYNC;
// Don't emit unresponsive event when showing menu.
atom::UnresponsiveSuppressor suppressor;
@@ -51,19 +48,34 @@ void MenuViews::PopupAt(
// Show the menu.
int32_t window_id = window->ID();
auto close_callback = base::Bind(
&MenuViews::ClosePopupAt, weak_factory_.GetWeakPtr(), window_id);
&MenuViews::OnClosed, weak_factory_.GetWeakPtr(), window_id, callback);
menu_runners_[window_id] = std::unique_ptr<MenuRunner>(new MenuRunner(
model(), flags, close_callback));
ignore_result(menu_runners_[window_id]->RunMenuAt(
menu_runners_[window_id]->RunMenuAt(
static_cast<NativeWindowViews*>(window->window())->widget(),
NULL,
gfx::Rect(location, gfx::Size()),
views::MENU_ANCHOR_TOPLEFT,
ui::MENU_SOURCE_MOUSE));
ui::MENU_SOURCE_MOUSE);
}
void MenuViews::ClosePopupAt(int32_t window_id) {
auto runner = menu_runners_.find(window_id);
if (runner != menu_runners_.end()) {
// Close the runner for the window.
runner->second->Cancel();
} else if (window_id == -1) {
// Or just close all opened runners.
for (auto it = menu_runners_.begin(); it != menu_runners_.end();) {
// The iterator is invalidated after the call.
(it++)->second->Cancel();
}
}
}
void MenuViews::OnClosed(int32_t window_id, base::Closure callback) {
menu_runners_.erase(window_id);
callback.Run();
}
// static

View File

@@ -21,11 +21,13 @@ class MenuViews : public Menu {
MenuViews(v8::Isolate* isolate, v8::Local<v8::Object> wrapper);
protected:
void PopupAt(
Window* window, int x, int y, int positioning_item, bool async) override;
void PopupAt(Window* window, int x, int y, int positioning_item,
const base::Closure& callback) override;
void ClosePopupAt(int32_t window_id) override;
private:
void OnClosed(int32_t window_id, base::Closure callback);
// window ID -> open context menu
std::map<int32_t, std::unique_ptr<views::MenuRunner>> menu_runners_;

View File

@@ -9,13 +9,15 @@
#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 "base/strings/utf_string_conversions.h"
#include "brightray/browser/browser_client.h"
#include "native_mate/constructor.h"
#include "native_mate/dictionary.h"
#include "native_mate/object_template_builder.h"
#include "url/gurl.h"
// Must be the last in the includes list.
// See https://github.com/electron/electron/issues/10363
#include "atom/common/node_includes.h"
namespace mate {
template<>
@@ -68,6 +70,7 @@ Notification::Notification(v8::Isolate* isolate,
opts.Get("hasReply", &has_reply_);
opts.Get("actions", &actions_);
opts.Get("sound", &sound_);
opts.Get("closeButtonText", &close_button_text_);
}
}
@@ -102,20 +105,24 @@ bool Notification::GetSilent() const {
return silent_;
}
bool Notification::GetHasReply() const {
return has_reply_;
}
base::string16 Notification::GetReplyPlaceholder() const {
return reply_placeholder_;
}
bool Notification::GetHasReply() const {
return has_reply_;
base::string16 Notification::GetSound() const {
return sound_;
}
std::vector<brightray::NotificationAction> Notification::GetActions() const {
return actions_;
}
base::string16 Notification::GetSound() const {
return sound_;
base::string16 Notification::GetCloseButtonText() const {
return close_button_text_;
}
// Setters
@@ -135,12 +142,16 @@ void Notification::SetSilent(bool new_silent) {
silent_ = new_silent;
}
void Notification::SetHasReply(bool new_has_reply) {
has_reply_ = new_has_reply;
}
void Notification::SetReplyPlaceholder(const base::string16& new_placeholder) {
reply_placeholder_ = new_placeholder;
}
void Notification::SetHasReply(bool new_has_reply) {
has_reply_ = new_has_reply;
void Notification::SetSound(const base::string16& new_sound) {
sound_ = new_sound;
}
void Notification::SetActions(
@@ -148,8 +159,8 @@ void Notification::SetActions(
actions_ = actions;
}
void Notification::SetSound(const base::string16& new_sound) {
sound_ = new_sound;
void Notification::SetCloseButtonText(const base::string16& text) {
close_button_text_ = text;
}
void Notification::NotificationAction(int index) {
@@ -199,6 +210,7 @@ void Notification::Show() {
options.reply_placeholder = reply_placeholder_;
options.actions = actions_;
options.sound = sound_;
options.close_button_text = close_button_text_;
notification_->Show(options);
}
}
@@ -220,15 +232,18 @@ void Notification::BuildPrototype(v8::Isolate* isolate,
.SetProperty("subtitle", &Notification::GetSubtitle,
&Notification::SetSubtitle)
.SetProperty("body", &Notification::GetBody, &Notification::SetBody)
.SetProperty("silent", &Notification::GetSilent, &Notification::SetSilent)
.SetProperty("replyPlaceholder", &Notification::GetReplyPlaceholder,
&Notification::SetReplyPlaceholder)
.SetProperty("silent", &Notification::GetSilent,
&Notification::SetSilent)
.SetProperty("hasReply", &Notification::GetHasReply,
&Notification::SetHasReply)
.SetProperty("replyPlaceholder", &Notification::GetReplyPlaceholder,
&Notification::SetReplyPlaceholder)
.SetProperty("sound", &Notification::GetSound,
&Notification::SetSound)
.SetProperty("actions", &Notification::GetActions,
&Notification::SetActions)
.SetProperty("sound", &Notification::GetSound,
&Notification::SetSound);
.SetProperty("closeButtonText", &Notification::GetCloseButtonText,
&Notification::SetCloseButtonText);
}
} // namespace api

View File

@@ -52,20 +52,22 @@ class Notification : public mate::TrackableObject<Notification>,
base::string16 GetSubtitle() const;
base::string16 GetBody() const;
bool GetSilent() const;
base::string16 GetReplyPlaceholder() const;
bool GetHasReply() const;
std::vector<brightray::NotificationAction> GetActions() const;
base::string16 GetReplyPlaceholder() const;
base::string16 GetSound() const;
std::vector<brightray::NotificationAction> GetActions() const;
base::string16 GetCloseButtonText() const;
// Prop Setters
void SetTitle(const base::string16& new_title);
void SetSubtitle(const base::string16& new_subtitle);
void SetBody(const base::string16& new_body);
void SetSilent(bool new_silent);
void SetReplyPlaceholder(const base::string16& new_reply_placeholder);
void SetHasReply(bool new_has_reply);
void SetActions(const std::vector<brightray::NotificationAction>& actions);
void SetReplyPlaceholder(const base::string16& new_reply_placeholder);
void SetSound(const base::string16& sound);
void SetActions(const std::vector<brightray::NotificationAction>& actions);
void SetCloseButtonText(const base::string16& text);
private:
base::string16 title_;
@@ -75,10 +77,11 @@ class Notification : public mate::TrackableObject<Notification>,
base::string16 icon_path_;
bool has_icon_ = false;
bool silent_ = false;
base::string16 reply_placeholder_;
bool has_reply_ = false;
std::vector<brightray::NotificationAction> actions_;
base::string16 reply_placeholder_;
base::string16 sound_;
std::vector<brightray::NotificationAction> actions_;
base::string16 close_button_text_;
brightray::NotificationPresenter* presenter_;

View File

@@ -16,6 +16,13 @@ namespace atom {
namespace api {
PowerMonitor::PowerMonitor(v8::Isolate* isolate) {
#if defined(OS_LINUX)
SetShutdownHandler(base::Bind(&PowerMonitor::ShouldShutdown,
base::Unretained(this)));
#elif defined(OS_MACOSX)
Browser::Get()->SetShutdownHandler(base::Bind(&PowerMonitor::ShouldShutdown,
base::Unretained(this)));
#endif
base::PowerMonitor::Get()->AddObserver(this);
Init(isolate);
}
@@ -24,6 +31,20 @@ PowerMonitor::~PowerMonitor() {
base::PowerMonitor::Get()->RemoveObserver(this);
}
bool PowerMonitor::ShouldShutdown() {
return !Emit("shutdown");
}
#if defined(OS_LINUX)
void PowerMonitor::BlockShutdown() {
PowerObserverLinux::BlockShutdown();
}
void PowerMonitor::UnblockShutdown() {
PowerObserverLinux::UnblockShutdown();
}
#endif
void PowerMonitor::OnPowerStateChange(bool on_battery_power) {
if (on_battery_power)
Emit("on-battery");
@@ -55,6 +76,11 @@ v8::Local<v8::Value> PowerMonitor::Create(v8::Isolate* isolate) {
void PowerMonitor::BuildPrototype(
v8::Isolate* isolate, v8::Local<v8::FunctionTemplate> prototype) {
prototype->SetClassName(mate::StringToV8(isolate, "PowerMonitor"));
#if defined(OS_LINUX)
mate::ObjectTemplateBuilder(isolate, prototype->PrototypeTemplate())
.SetMethod("blockShutdown", &PowerMonitor::BlockShutdown)
.SetMethod("unblockShutdown", &PowerMonitor::UnblockShutdown);
#endif
}
} // namespace api
@@ -68,10 +94,6 @@ using atom::api::PowerMonitor;
void Initialize(v8::Local<v8::Object> exports, v8::Local<v8::Value> unused,
v8::Local<v8::Context> context, void* priv) {
#if defined(OS_MACOSX)
base::PowerMonitorDeviceSource::AllocateSystemIOPorts();
#endif
v8::Isolate* isolate = context->GetIsolate();
mate::Dictionary dict(isolate, exports);
dict.Set("powerMonitor", PowerMonitor::Create(isolate));

View File

@@ -6,8 +6,8 @@
#define ATOM_BROWSER_API_ATOM_API_POWER_MONITOR_H_
#include "atom/browser/api/trackable_object.h"
#include "atom/browser/lib/power_observer.h"
#include "base/compiler_specific.h"
#include "base/power_monitor/power_observer.h"
#include "native_mate/handle.h"
namespace atom {
@@ -15,7 +15,7 @@ namespace atom {
namespace api {
class PowerMonitor : public mate::TrackableObject<PowerMonitor>,
public base::PowerObserver {
public PowerObserver {
public:
static v8::Local<v8::Value> Create(v8::Isolate* isolate);
@@ -26,6 +26,15 @@ class PowerMonitor : public mate::TrackableObject<PowerMonitor>,
explicit PowerMonitor(v8::Isolate* isolate);
~PowerMonitor() override;
// Called by native calles.
bool ShouldShutdown();
#if defined(OS_LINUX)
// Private JS APIs.
void BlockShutdown();
void UnblockShutdown();
#endif
// base::PowerObserver implementations:
void OnPowerStateChange(bool on_battery_power) override;
void OnSuspend() override;

View File

@@ -9,8 +9,8 @@
#include <memory>
#include "atom/browser/api/trackable_object.h"
#include "device/power_save_blocker/power_save_blocker.h"
#include "native_mate/handle.h"
#include "services/device/wake_lock/power_save_blocker/power_save_blocker.h"
namespace mate {
class Dictionary;

View File

@@ -78,10 +78,6 @@ class Protocol : public mate::TrackableObject<Protocol> {
net::URLRequestJob* MaybeCreateJob(
net::URLRequest* request,
net::NetworkDelegate* network_delegate) const override {
if (!request->initiator().has_value()) {
// Don't intercept this request as it was created by `net.request`.
return nullptr;
}
RequestJob* request_job = new RequestJob(request, network_delegate);
request_job->SetHandlerInfo(isolate_, request_context_.get(), handler_);
return request_job;

View File

@@ -17,6 +17,7 @@
#include "atom/browser/atom_permission_manager.h"
#include "atom/browser/browser.h"
#include "atom/browser/net/atom_cert_verifier.h"
#include "atom/browser/session_preferences.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"
@@ -32,6 +33,7 @@
#include "brightray/browser/media/media_device_id_salt.h"
#include "brightray/browser/net/devtools_network_conditions.h"
#include "brightray/browser/net/devtools_network_controller_handle.h"
#include "chrome/browser/browser_process.h"
#include "chrome/common/pref_names.h"
#include "components/prefs/pref_service.h"
#include "content/public/browser/browser_thread.h"
@@ -438,6 +440,17 @@ void DownloadIdCallback(content::DownloadManager* download_manager,
std::vector<content::DownloadItem::ReceivedSlice>());
}
void SetDevToolsNetworkEmulationClientIdInIO(
brightray::URLRequestContextGetter* context_getter,
const std::string& client_id) {
if (!context_getter)
return;
auto network_delegate =
static_cast<AtomNetworkDelegate*>(context_getter->network_delegate());
if (network_delegate)
network_delegate->SetDevToolsNetworkEmulationClientId(client_id);
}
} // namespace
Session::Session(v8::Isolate* isolate, AtomBrowserContext* browser_context)
@@ -447,6 +460,8 @@ Session::Session(v8::Isolate* isolate, AtomBrowserContext* browser_context)
content::BrowserContext::GetDownloadManager(browser_context)->
AddObserver(this);
new SessionPreferences(browser_context);
Init(isolate);
AttachAsUserData(browser_context);
}
@@ -545,16 +560,24 @@ void Session::EnableNetworkEmulation(const mate::Dictionary& options) {
browser_context_->network_controller_handle()->SetNetworkState(
devtools_network_emulation_client_id_, std::move(conditions));
browser_context_->network_delegate()->SetDevToolsNetworkEmulationClientId(
devtools_network_emulation_client_id_);
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(
&SetDevToolsNetworkEmulationClientIdInIO,
base::RetainedRef(browser_context_->url_request_context_getter()),
devtools_network_emulation_client_id_));
}
void Session::DisableNetworkEmulation() {
std::unique_ptr<brightray::DevToolsNetworkConditions> conditions;
browser_context_->network_controller_handle()->SetNetworkState(
devtools_network_emulation_client_id_, std::move(conditions));
browser_context_->network_delegate()->SetDevToolsNetworkEmulationClientId(
std::string());
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(
&SetDevToolsNetworkEmulationClientIdInIO,
base::RetainedRef(browser_context_->url_request_context_getter()),
std::string()));
}
void Session::SetCertVerifyProc(v8::Local<v8::Value> val,
@@ -620,10 +643,11 @@ void Session::SetUserAgent(const std::string& user_agent,
mate::Arguments* args) {
browser_context_->SetUserAgent(user_agent);
std::string accept_lang = l10n_util::GetApplicationLocale("");
std::string accept_lang = g_browser_process->GetApplicationLocale();
args->GetNext(&accept_lang);
auto getter = browser_context_->GetRequestContext();
scoped_refptr<brightray::URLRequestContextGetter> getter(
browser_context_->GetRequestContext());
getter->GetNetworkTaskRunner()->PostTask(
FROM_HERE,
base::Bind(&SetUserAgentInIO, getter, accept_lang, user_agent));
@@ -679,6 +703,19 @@ void Session::CreateInterruptedDownload(const mate::Dictionary& options) {
length, last_modified, etag, base::Time::FromDoubleT(start_time)));
}
void Session::SetPreloads(
const std::vector<base::FilePath::StringType>& preloads) {
auto* prefs = SessionPreferences::FromBrowserContext(browser_context());
DCHECK(prefs);
prefs->set_preloads(preloads);
}
std::vector<base::FilePath::StringType> Session::GetPreloads() const {
auto* prefs = SessionPreferences::FromBrowserContext(browser_context());
DCHECK(prefs);
return prefs->preloads();
}
v8::Local<v8::Value> Session::Cookies(v8::Isolate* isolate) {
if (cookies_.IsEmpty()) {
auto handle = Cookies::Create(isolate, browser_context());
@@ -765,6 +802,8 @@ void Session::BuildPrototype(v8::Isolate* isolate,
.SetMethod("getBlobData", &Session::GetBlobData)
.SetMethod("createInterruptedDownload",
&Session::CreateInterruptedDownload)
.SetMethod("setPreloads", &Session::SetPreloads)
.SetMethod("getPreloads", &Session::GetPreloads)
.SetProperty("cookies", &Session::Cookies)
.SetProperty("protocol", &Session::Protocol)
.SetProperty("webRequest", &Session::WebRequest);

View File

@@ -6,6 +6,7 @@
#define ATOM_BROWSER_API_ATOM_API_SESSION_H_
#include <string>
#include <vector>
#include "atom/browser/api/trackable_object.h"
#include "atom/browser/atom_blob_reader.h"
@@ -81,6 +82,8 @@ class Session: public mate::TrackableObject<Session>,
void GetBlobData(const std::string& uuid,
const AtomBlobReader::CompletionCallback& callback);
void CreateInterruptedDownload(const mate::Dictionary& options);
void SetPreloads(const std::vector<base::FilePath::StringType>& preloads);
std::vector<base::FilePath::StringType> GetPreloads() const;
v8::Local<v8::Value> Cookies(v8::Isolate* isolate);
v8::Local<v8::Value> Protocol(v8::Isolate* isolate);
v8::Local<v8::Value> WebRequest(v8::Isolate* isolate);

View File

@@ -65,6 +65,7 @@ void SystemPreferences::BuildPrototype(
&SystemPreferences::SubscribeLocalNotification)
.SetMethod("unsubscribeLocalNotification",
&SystemPreferences::UnsubscribeLocalNotification)
.SetMethod("registerDefaults", &SystemPreferences::RegisterDefaults)
.SetMethod("getUserDefault", &SystemPreferences::GetUserDefault)
.SetMethod("setUserDefault", &SystemPreferences::SetUserDefault)
.SetMethod("removeUserDefault", &SystemPreferences::RemoveUserDefault)

View File

@@ -73,6 +73,7 @@ class SystemPreferences : public mate::EventEmitter<SystemPreferences>
void UnsubscribeLocalNotification(int request_id);
v8::Local<v8::Value> GetUserDefault(const std::string& name,
const std::string& type);
void RegisterDefaults(mate::Arguments* args);
void SetUserDefault(const std::string& name,
const std::string& type,
mate::Arguments* args);

View File

@@ -144,6 +144,28 @@ v8::Local<v8::Value> SystemPreferences::GetUserDefault(
}
}
void SystemPreferences::RegisterDefaults(mate::Arguments* args) {
base::DictionaryValue value;
if(!args->GetNext(&value)) {
args->ThrowError("Invalid userDefault data provided");
} else {
@try {
NSDictionary* dict = DictionaryValueToNSDictionary(value);
for (id key in dict) {
id value = [dict objectForKey:key];
if ([value isKindOfClass:[NSNull class]] || value == nil) {
args->ThrowError("Invalid userDefault data provided");
return;
}
}
[[NSUserDefaults standardUserDefaults] registerDefaults:dict];
} @catch (NSException* exception) {
args->ThrowError("Invalid userDefault data provided");
}
}
}
void SystemPreferences::SetUserDefault(const std::string& name,
const std::string& type,
mate::Arguments* args) {

View File

@@ -2,6 +2,8 @@
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include <iomanip>
#include "atom/browser/api/atom_api_system_preferences.h"
#include "atom/common/color_util.h"
@@ -26,10 +28,10 @@ bool SystemPreferences::IsAeroGlassEnabled() {
}
std::string hexColorDWORDToRGBA(DWORD color) {
DWORD rgba = color << 8 | color >> 24;
std::ostringstream stream;
stream << std::hex << color;
std::string hexColor = stream.str();
return hexColor.substr(2) + hexColor.substr(0, 2);
stream << std::hex << std::setw(8) << std::setfill('0') << rgba;
return stream.str();
}
std::string SystemPreferences::GetAccentColor() {

View File

@@ -40,8 +40,6 @@ struct Converter<atom::TrayIcon::HighlightMode> {
}
}
// Support old boolean parameter
// TODO(kevinsawicki): Remove in 2.0, deprecate before then with warnings
bool highlight;
if (ConvertFromV8(isolate, val, &highlight)) {
if (highlight)

View File

@@ -43,6 +43,7 @@
#include "atom/common/native_mate_converters/string16_converter.h"
#include "atom/common/native_mate_converters/value_converter.h"
#include "atom/common/options_switches.h"
#include "base/message_loop/message_loop.h"
#include "base/process/process_handle.h"
#include "base/strings/utf_string_conversions.h"
#include "base/threading/thread_task_runner_handle.h"
@@ -339,7 +340,7 @@ WebContents::WebContents(v8::Isolate* isolate, const mate::Dictionary& options)
// Obtain the session.
std::string partition;
mate::Handle<api::Session> session;
if (options.Get("session", &session)) {
if (options.Get("session", &session) && !session.IsEmpty()) {
} else if (options.Get("partition", &partition)) {
session = Session::FromPartition(isolate, partition);
} else {
@@ -377,8 +378,8 @@ WebContents::WebContents(v8::Isolate* isolate, const mate::Dictionary& options)
options.Get("transparent", &transparent);
content::WebContents::CreateParams params(session->browser_context());
auto* view = new OffScreenWebContentsView(
transparent, base::Bind(&WebContents::OnPaint, base::Unretained(this)));
auto* view = new OffScreenWebContentsView(transparent,
base::Bind(&WebContents::OnPaint, base::Unretained(this)));
params.view = view;
params.delegate_view = view;
@@ -480,12 +481,7 @@ bool WebContents::DidAddMessageToConsole(content::WebContents* source,
const base::string16& message,
int32_t line_no,
const base::string16& source_id) {
if (type_ == OFF_SCREEN) {
return false;
} else {
Emit("console-message", level, message, line_no, source_id);
return true;
}
return Emit("console-message", level, message, line_no, source_id);
}
void WebContents::OnCreateWindow(
@@ -493,19 +489,20 @@ void WebContents::OnCreateWindow(
const std::string& frame_name,
WindowOpenDisposition disposition,
const std::vector<std::string>& features,
const scoped_refptr<content::ResourceRequestBodyImpl>& body) {
const scoped_refptr<content::ResourceRequestBody>& body) {
if (type_ == BROWSER_WINDOW || type_ == OFF_SCREEN)
Emit("-new-window", target_url, frame_name, disposition, features, body);
else
Emit("new-window", target_url, frame_name, disposition, features);
}
void WebContents::WebContentsCreated(content::WebContents* source_contents,
int opener_render_process_id,
int opener_render_frame_id,
const std::string& frame_name,
const GURL& target_url,
content::WebContents* new_contents) {
void WebContents::WebContentsCreated(
content::WebContents* source_contents,
int opener_render_process_id,
int opener_render_frame_id,
const std::string& frame_name,
const GURL& target_url,
content::WebContents* new_contents) {
v8::Locker locker(isolate());
v8::HandleScope handle_scope(isolate());
auto api_web_contents = CreateFrom(isolate(), new_contents, BROWSER_WINDOW);
@@ -651,8 +648,10 @@ void WebContents::RendererResponsive(content::WebContents* source) {
bool WebContents::HandleContextMenu(const content::ContextMenuParams& params) {
if (params.custom_context.is_pepper_menu) {
Emit("pepper-context-menu", std::make_pair(params, web_contents()));
web_contents()->NotifyContextMenuClosed(params.custom_context);
Emit("pepper-context-menu",
std::make_pair(params, web_contents()),
base::Bind(&content::WebContents::NotifyContextMenuClosed,
base::Unretained(web_contents()), params.custom_context));
} else {
Emit("context-menu", std::make_pair(params, web_contents()));
}
@@ -836,10 +835,10 @@ void WebContents::DidFinishNavigation(
bool is_main_frame = navigation_handle->IsInMainFrame();
if (navigation_handle->HasCommitted() && !navigation_handle->IsErrorPage()) {
auto url = navigation_handle->GetURL();
bool is_in_page = navigation_handle->IsSameDocument();
if (is_main_frame && !is_in_page) {
bool is_same_document = navigation_handle->IsSameDocument();
if (is_main_frame && !is_same_document) {
Emit("did-navigate", url);
} else if (is_in_page) {
} else if (is_same_document) {
Emit("did-navigate-in-page", url, is_main_frame);
}
} else {
@@ -864,7 +863,7 @@ void WebContents::DidUpdateFaviconURL(
const std::vector<content::FaviconURL>& urls) {
std::set<GURL> unique_urls;
for (const auto& iter : urls) {
if (iter.icon_type != content::FaviconURL::FAVICON)
if (iter.icon_type != content::FaviconURL::IconType::kFavicon)
continue;
const GURL& url = iter.icon_url;
if (url.is_valid())
@@ -893,10 +892,11 @@ void WebContents::DevToolsOpened() {
managed_web_contents()->CallClientFunction(
"DevToolsAPI.setInspectedTabId", &tab_id, nullptr, nullptr);
// Inherit owner window in devtools.
if (owner_window())
handle->SetOwnerWindow(managed_web_contents()->GetDevToolsWebContents(),
owner_window());
// Inherit owner window in devtools when it doesn't have one.
auto* devtools = managed_web_contents()->GetDevToolsWebContents();
bool has_window = devtools->GetUserData(NativeWindowRelay::UserDataKey());
if (owner_window() && !has_window)
handle->SetOwnerWindow(devtools, owner_window());
Emit("devtools-opened");
}
@@ -986,7 +986,7 @@ void WebContents::WebContentsDestroyed() {
void WebContents::NavigationEntryCommitted(
const content::LoadCommittedDetails& details) {
Emit("navigation-entry-commited", details.entry->GetURL(),
details.is_in_page, details.did_replace_entry);
details.is_same_document, details.did_replace_entry);
}
int64_t WebContents::GetID() const {
@@ -1042,7 +1042,7 @@ void WebContents::LoadURL(const GURL& url, const mate::Dictionary& options) {
if (options.Get("extraHeaders", &extra_headers))
params.extra_headers = extra_headers;
scoped_refptr<content::ResourceRequestBodyImpl> body;
scoped_refptr<content::ResourceRequestBody> body;
if (options.Get("postData", &body)) {
params.post_data = body;
params.load_type = content::NavigationController::LOAD_TYPE_HTTP_POST;
@@ -1083,7 +1083,7 @@ void WebContents::DownloadURL(const GURL& url) {
download_manager->DownloadUrl(
content::DownloadUrlParameters::CreateForWebContentsMainFrame(
web_contents(), url));
web_contents(), url, NO_TRAFFIC_ANNOTATION_YET));
}
GURL WebContents::GetURL() const {
@@ -1176,7 +1176,8 @@ void WebContents::OpenDevTools(mate::Arguments* args) {
std::string state;
if (type_ == WEB_VIEW || !owner_window()) {
state = "detach";
} else if (args && args->Length() == 1) {
}
if (args && args->Length() == 1) {
bool detach = false;
mate::Dictionary options;
if (args->GetNext(&options)) {
@@ -1335,6 +1336,7 @@ void WebContents::Print(mate::Arguments* args) {
std::vector<printing::PrinterBasicInfo> WebContents::GetPrinterList() {
std::vector<printing::PrinterBasicInfo> printers;
auto print_backend = printing::PrintBackend::CreateInstance(nullptr);
base::ThreadRestrictions::ScopedAllowIO allow_io;
print_backend->EnumeratePrinters(&printers);
return printers;
}
@@ -1476,7 +1478,8 @@ void WebContents::SendInputEvent(v8::Isolate* isolate,
if (!view)
return;
int type = mate::GetWebInputEventType(isolate, input_event);
blink::WebInputEvent::Type type = mate::GetWebInputEventType(isolate,
input_event);
if (blink::WebInputEvent::IsMouseEventType(type)) {
blink::WebMouseEvent mouse_event;
if (mate::ConvertFromV8(isolate, input_event, &mouse_event)) {
@@ -1489,7 +1492,7 @@ void WebContents::SendInputEvent(v8::Isolate* isolate,
blink::WebInputEvent::kNoModifiers,
ui::EventTimeForNow());
if (mate::ConvertFromV8(isolate, input_event, &keyboard_event)) {
view->ProcessKeyboardEvent(keyboard_event);
view->ProcessKeyboardEvent(keyboard_event, ui::LatencyInfo());
return;
}
} else if (type == blink::WebInputEvent::kMouseWheel) {
@@ -1644,10 +1647,10 @@ void WebContents::StartPainting() {
return;
#if defined(ENABLE_OSR)
auto* osr_rwhv = static_cast<OffScreenRenderWidgetHostView*>(
web_contents()->GetRenderWidgetHostView());
if (osr_rwhv)
osr_rwhv->SetPainting(true);
const auto* wc_impl = static_cast<content::WebContentsImpl*>(web_contents());
auto* osr_wcv = static_cast<OffScreenWebContentsView*>(wc_impl->GetView());
if (osr_wcv)
osr_wcv->SetPainting(true);
#endif
}
@@ -1656,10 +1659,10 @@ void WebContents::StopPainting() {
return;
#if defined(ENABLE_OSR)
auto* osr_rwhv = static_cast<OffScreenRenderWidgetHostView*>(
web_contents()->GetRenderWidgetHostView());
if (osr_rwhv)
osr_rwhv->SetPainting(false);
const auto* wc_impl = static_cast<content::WebContentsImpl*>(web_contents());
auto* osr_wcv = static_cast<OffScreenWebContentsView*>(wc_impl->GetView());
if (osr_wcv)
osr_wcv->SetPainting(false);
#endif
}
@@ -1668,9 +1671,10 @@ bool WebContents::IsPainting() const {
return false;
#if defined(ENABLE_OSR)
const auto* osr_rwhv = static_cast<OffScreenRenderWidgetHostView*>(
web_contents()->GetRenderWidgetHostView());
return osr_rwhv && osr_rwhv->IsPainting();
const auto* wc_impl = static_cast<content::WebContentsImpl*>(web_contents());
auto* osr_wcv = static_cast<OffScreenWebContentsView*>(wc_impl->GetView());
return osr_wcv && osr_wcv->IsPainting();
#else
return false;
#endif
@@ -1681,10 +1685,11 @@ void WebContents::SetFrameRate(int frame_rate) {
return;
#if defined(ENABLE_OSR)
auto* osr_rwhv = static_cast<OffScreenRenderWidgetHostView*>(
web_contents()->GetRenderWidgetHostView());
if (osr_rwhv)
osr_rwhv->SetFrameRate(frame_rate);
const auto* wc_impl = static_cast<content::WebContentsImpl*>(web_contents());
auto* osr_wcv = static_cast<OffScreenWebContentsView*>(wc_impl->GetView());
if (osr_wcv)
osr_wcv->SetFrameRate(frame_rate);
#endif
}
@@ -1693,9 +1698,10 @@ int WebContents::GetFrameRate() const {
return 0;
#if defined(ENABLE_OSR)
const auto* osr_rwhv = static_cast<OffScreenRenderWidgetHostView*>(
web_contents()->GetRenderWidgetHostView());
return osr_rwhv ? osr_rwhv->GetFrameRate() : 0;
const auto* wc_impl = static_cast<content::WebContentsImpl*>(web_contents());
auto* osr_wcv = static_cast<OffScreenWebContentsView*>(wc_impl->GetView());
return osr_wcv ? osr_wcv->GetFrameRate() : 0;
#else
return 0;
#endif
@@ -1805,6 +1811,11 @@ void WebContents::SetEmbedder(const WebContents* embedder) {
}
}
void WebContents::SetDevToolsWebContents(const WebContents* devtools) {
if (managed_web_contents())
managed_web_contents()->SetDevToolsWebContents(devtools->web_contents());
}
v8::Local<v8::Value> WebContents::GetNativeView() const {
gfx::NativeView ptr = web_contents()->GetNativeView();
auto buffer = node::Buffer::Copy(
@@ -1926,6 +1937,7 @@ void WebContents::BuildPrototype(v8::Isolate* isolate,
.SetMethod("copyImageAt", &WebContents::CopyImageAt)
.SetMethod("capturePage", &WebContents::CapturePage)
.SetMethod("setEmbedder", &WebContents::SetEmbedder)
.SetMethod("setDevToolsWebContents", &WebContents::SetDevToolsWebContents)
.SetMethod("getNativeView", &WebContents::GetNativeView)
.SetMethod("setWebRTCIPHandlingPolicy",
&WebContents::SetWebRTCIPHandlingPolicy)

View File

@@ -15,6 +15,7 @@
#include "atom/browser/ui/autofill_popup.h"
#include "content/common/cursors/webcursor.h"
#include "content/public/browser/keyboard_event_processing_result.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_observer.h"
#include "content/public/common/favicon_url.h"
#include "native_mate/handle.h"
@@ -30,7 +31,7 @@ class InspectableWebContents;
}
namespace content {
class ResourceRequestBodyImpl;
class ResourceRequestBody;
}
namespace mate {
@@ -125,6 +126,7 @@ class WebContents : public mate::TrackableObject<WebContents>,
void Print(mate::Arguments* args);
std::vector<printing::PrinterBasicInfo> GetPrinterList();
void SetEmbedder(const WebContents* embedder);
void SetDevToolsWebContents(const WebContents* devtools);
v8::Local<v8::Value> GetNativeView() const;
// Print current page as PDF.
@@ -208,7 +210,7 @@ class WebContents : public mate::TrackableObject<WebContents>,
const std::string& frame_name,
WindowOpenDisposition disposition,
const std::vector<std::string>& features,
const scoped_refptr<content::ResourceRequestBodyImpl>& body);
const scoped_refptr<content::ResourceRequestBody>& body);
// Returns the web preferences of current WebContents.
v8::Local<v8::Value> GetWebPreferences(v8::Isolate* isolate);
@@ -247,12 +249,14 @@ class WebContents : public mate::TrackableObject<WebContents>,
const base::string16& message,
int32_t line_no,
const base::string16& source_id) override;
void WebContentsCreated(content::WebContents* source_contents,
int opener_render_process_id,
int opener_render_frame_id,
const std::string& frame_name,
const GURL& target_url,
content::WebContents* new_contents) override;
void WebContentsCreated(
content::WebContents* source_contents,
int opener_render_process_id,
int opener_render_frame_id,
const std::string& frame_name,
const GURL& target_url,
content::WebContents* new_contents)
override;
void AddNewContents(content::WebContents* source,
content::WebContents* new_contents,
WindowOpenDisposition disposition,

View File

@@ -74,10 +74,16 @@ void WebRequest::SetListener(Method method, Event type, mate::Arguments* args) {
return;
}
auto delegate = browser_context_->network_delegate();
BrowserThread::PostTask(BrowserThread::IO, FROM_HERE,
base::Bind(method, base::Unretained(delegate), type,
patterns, listener));
auto url_request_context_getter =
browser_context_->url_request_context_getter();
if (!url_request_context_getter)
return;
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(method,
base::Unretained(static_cast<AtomNetworkDelegate*>(
url_request_context_getter->network_delegate())),
type, patterns, listener));
}
// static

View File

@@ -7,10 +7,12 @@
#include "atom/browser/web_view_manager.h"
#include "atom/common/native_mate_converters/content_converter.h"
#include "atom/common/native_mate_converters/value_converter.h"
#include "atom/common/node_includes.h"
#include "atom/common/options_switches.h"
#include "content/public/browser/browser_context.h"
#include "native_mate/dictionary.h"
// Must be the last in the includes list.
// See https://github.com/electron/electron/issues/10363
#include "atom/common/node_includes.h"
using atom::WebContentsPreferences;

View File

@@ -3,7 +3,6 @@
// 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_browser_view.h"
#include "atom/browser/api/atom_api_menu.h"
@@ -17,6 +16,7 @@
#include "atom/common/native_mate_converters/gurl_converter.h"
#include "atom/common/native_mate_converters/image_converter.h"
#include "atom/common/native_mate_converters/string16_converter.h"
#include "atom/common/native_mate_converters/value_converter.h"
#include "atom/common/options_switches.h"
#include "base/command_line.h"
#include "base/threading/thread_task_runner_handle.h"
@@ -101,7 +101,7 @@ Window::Window(v8::Isolate* isolate, v8::Local<v8::Object> wrapper,
}
#endif
if (options.Get("webContents", &web_contents)) {
if (options.Get("webContents", &web_contents) && !web_contents.IsEmpty()) {
// Set webPreferences from options if using an existing webContents.
// These preferences will be used when the webContent launches new
// render processes.
@@ -135,7 +135,7 @@ void Window::Init(v8::Isolate* isolate,
// The parent window.
mate::Handle<Window> parent;
if (options.Get("parent", &parent))
if (options.Get("parent", &parent) && !parent.IsEmpty())
parent_window_.Reset(isolate, parent.ToV8());
// Creates BrowserWindow.
@@ -149,7 +149,7 @@ void Window::Init(v8::Isolate* isolate,
#if defined(TOOLKIT_VIEWS)
// Sets the window icon.
mate::Handle<NativeImage> icon;
if (options.Get(options::kIcon, &icon))
if (options.Get(options::kIcon, &icon) && !icon.IsEmpty())
SetIcon(icon);
#endif
@@ -184,7 +184,7 @@ void Window::WillDestroyNativeObject() {
v8::HandleScope handle_scope(isolate());
for (v8::Local<v8::Value> value : child_windows_.Values(isolate())) {
mate::Handle<Window> child;
if (mate::ConvertFromV8(isolate(), value, &child))
if (mate::ConvertFromV8(isolate(), value, &child) && !child.IsEmpty())
child->window_->CloseImmediately();
}
}
@@ -393,6 +393,10 @@ bool Window::IsEnabled() {
return window_->IsEnabled();
}
void Window::SetEnabled(bool enable) {
window_->SetEnabled(enable);
}
void Window::Maximize() {
window_->Maximize();
}
@@ -727,7 +731,7 @@ void Window::SetMenu(v8::Isolate* isolate, v8::Local<v8::Value> value) {
mate::Handle<Menu> menu;
if (value->IsObject() &&
mate::V8ToString(value->ToObject()->GetConstructorName()) == "Menu" &&
mate::ConvertFromV8(isolate, value, &menu)) {
mate::ConvertFromV8(isolate, value, &menu) && !menu.IsEmpty()) {
menu_.Reset(isolate, menu.ToV8());
window_->SetMenu(menu->model());
} else if (value->IsNull()) {
@@ -847,7 +851,7 @@ void Window::SetParentWindow(v8::Local<v8::Value> value,
}
mate::Handle<Window> parent;
if (value->IsNull()) {
if (value->IsNull() || value->IsUndefined()) {
RemoveFromParentChildWindows();
parent_window_.Reset();
window_->SetParentWindow(nullptr);
@@ -883,7 +887,7 @@ void Window::SetBrowserView(v8::Local<v8::Value> value) {
ResetBrowserView();
mate::Handle<BrowserView> browser_view;
if (value->IsNull()) {
if (value->IsNull() || value->IsUndefined()) {
window_->SetBrowserView(nullptr);
} else if (mate::ConvertFromV8(isolate(), value, &browser_view)) {
window_->SetBrowserView(browser_view->view());
@@ -898,7 +902,8 @@ void Window::ResetBrowserView() {
}
mate::Handle<BrowserView> browser_view;
if (mate::ConvertFromV8(isolate(), GetBrowserView(), &browser_view)) {
if (mate::ConvertFromV8(isolate(), GetBrowserView(), &browser_view)
&& !browser_view.IsEmpty()) {
browser_view->web_contents()->SetOwnerWindow(nullptr);
}
@@ -987,8 +992,10 @@ void Window::RemoveFromParentChildWindows() {
return;
mate::Handle<Window> parent;
if (!mate::ConvertFromV8(isolate(), GetParentWindow(), &parent))
if (!mate::ConvertFromV8(isolate(), GetParentWindow(), &parent)
|| parent.IsEmpty()) {
return;
}
parent->child_windows_.Remove(ID());
}
@@ -1008,6 +1015,7 @@ void Window::BuildPrototype(v8::Isolate* isolate,
.SetMethod("hide", &Window::Hide)
.SetMethod("isVisible", &Window::IsVisible)
.SetMethod("isEnabled", &Window::IsEnabled)
.SetMethod("setEnabled", & Window::SetEnabled)
.SetMethod("maximize", &Window::Maximize)
.SetMethod("unmaximize", &Window::Unmaximize)
.SetMethod("isMaximized", &Window::IsMaximized)

View File

@@ -112,6 +112,7 @@ class Window : public mate::TrackableObject<Window>,
void Hide();
bool IsVisible();
bool IsEnabled();
void SetEnabled(bool enable);
void Maximize();
void Unmaximize();
bool IsMaximized();

View File

@@ -42,8 +42,10 @@ class EventEmitter : public Wrappable<T> {
// Make the convinient methods visible:
// https://isocpp.org/wiki/faq/templates#nondependent-name-lookup-members
v8::Local<v8::Object> GetWrapper() { return Wrappable<T>::GetWrapper(); }
v8::Isolate* isolate() const { return Wrappable<T>::isolate(); }
v8::Local<v8::Object> GetWrapper() const {
return Wrappable<T>::GetWrapper();
}
// this.emit(name, event, args...);
template<typename... Args>

View File

@@ -65,7 +65,7 @@ EventSubscriberBase::~EventSubscriberBase() {
}
RemoveAllListeners();
emitter_.Reset();
DCHECK_EQ(js_handlers_.size(), 0);
DCHECK_EQ(js_handlers_.size(), 0u);
}
void EventSubscriberBase::On(const std::string& event_name) {

View File

@@ -73,6 +73,13 @@ class EventSubscriber : internal::EventSubscriberBase {
content::BrowserThread::UI, FROM_HERE,
base::Bind(
[](EventSubscriber<HandlerType>* subscriber) {
{
// It is possible that this function will execute in the UI
// thread before the outer function has returned and destroyed
// its auto_lock. We need to acquire the lock before deleting
// or risk a crash.
base::AutoLock auto_lock(subscriber->handler_lock_);
}
delete subscriber;
},
ptr));

View File

@@ -89,7 +89,6 @@ void FrameSubscriber::OnFrameDelivered(const FrameCaptureCallback& callback,
auto local_buffer = buffer.ToLocalChecked();
{
SkAutoLockPixels lock(bitmap);
auto source = static_cast<const unsigned char*>(bitmap.getPixels());
auto target = node::Buffer::Data(local_buffer);

View File

@@ -29,8 +29,7 @@ class GeoURLRequestContextGetter : public net::URLRequestContextGetter {
net::URLRequestContextBuilder builder;
builder.set_proxy_config_service(
net::ProxyService::CreateSystemProxyConfigService(
BrowserThread::GetTaskRunnerForThread(BrowserThread::IO),
BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE)));
BrowserThread::GetTaskRunnerForThread(BrowserThread::IO)));
url_request_context_ = builder.Build();
}
return url_request_context_.get();
@@ -55,7 +54,6 @@ class GeoURLRequestContextGetter : public net::URLRequestContextGetter {
AtomAccessTokenStore::AtomAccessTokenStore()
: request_context_getter_(new internal::GeoURLRequestContextGetter) {
device::GeolocationProvider::GetInstance()->UserDidOptIntoLocationServices();
}
AtomAccessTokenStore::~AtomAccessTokenStore() {

View File

@@ -72,8 +72,7 @@ void AtomBlobReader::StartReading(
}
auto blob_reader = blob_data_handle->CreateReader(
file_system_context_.get(),
BrowserThread::GetTaskRunnerForThread(BrowserThread::FILE).get());
file_system_context_.get());
BlobReadHelper* blob_read_helper =
new BlobReadHelper(std::move(blob_reader), callback);
blob_read_helper->Read();

View File

@@ -17,6 +17,7 @@
#include "atom/browser/atom_speech_recognition_manager_delegate.h"
#include "atom/browser/child_web_contents_tracker.h"
#include "atom/browser/native_window.h"
#include "atom/browser/session_preferences.h"
#include "atom/browser/web_contents_permission_helper.h"
#include "atom/browser/web_contents_preferences.h"
#include "atom/browser/window_list.h"
@@ -30,7 +31,6 @@
#include "chrome/browser/renderer_host/pepper/chrome_browser_pepper_host_factory.h"
#include "chrome/browser/renderer_host/pepper/widevine_cdm_message_filter.h"
#include "chrome/browser/speech/tts_message_filter.h"
#include "content/common/resource_request_body_impl.h"
#include "content/public/browser/browser_ppapi_host.h"
#include "content/public/browser/client_certificate_delegate.h"
#include "content/public/browser/render_process_host.h"
@@ -38,7 +38,9 @@
#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/content_paths.h"
#include "content/public/common/content_switches.h"
#include "content/public/common/resource_request_body.h"
#include "content/public/common/url_constants.h"
#include "content/public/common/web_preferences.h"
#include "net/ssl/ssl_cert_request_info.h"
@@ -165,11 +167,14 @@ void AtomBrowserClient::RenderProcessWillLaunch(
content::WebContents* web_contents = GetWebContentsFromProcessID(process_id);
ProcessPreferences process_prefs;
process_prefs.sandbox = WebContentsPreferences::IsSandboxed(web_contents);
process_prefs.native_window_open
= WebContentsPreferences::UsesNativeWindowOpen(web_contents);
process_prefs.disable_popups
= WebContentsPreferences::DisablePopups(web_contents);
process_prefs.sandbox =
WebContentsPreferences::IsPreferenceEnabled("sandbox", web_contents);
process_prefs.native_window_open =
WebContentsPreferences::IsPreferenceEnabled("nativeWindowOpen",
web_contents);
process_prefs.disable_popups =
WebContentsPreferences::IsPreferenceEnabled("disablePopups",
web_contents);
AddProcessPreferences(host->GetID(), process_prefs);
// ensure the ProcessPreferences is removed later
host->AddObserver(this);
@@ -184,7 +189,6 @@ void AtomBrowserClient::OverrideWebkitPrefs(
content::RenderViewHost* host, content::WebPreferences* prefs) {
prefs->javascript_enabled = true;
prefs->web_security_enabled = true;
prefs->javascript_can_open_windows_automatically = true;
prefs->plugins_enabled = true;
prefs->dom_paste_enabled = true;
prefs->allow_scripts_to_close_windows = true;
@@ -202,12 +206,8 @@ void AtomBrowserClient::OverrideWebkitPrefs(
WebContentsPreferences::OverrideWebkitPrefs(web_contents, prefs);
}
std::string AtomBrowserClient::GetApplicationLocale() {
return l10n_util::GetApplicationLocale("");
}
void AtomBrowserClient::OverrideSiteInstanceForNavigation(
content::RenderFrameHost* render_frame_host,
content::RenderFrameHost* rfh,
content::BrowserContext* browser_context,
content::SiteInstance* current_instance,
const GURL& url,
@@ -217,32 +217,67 @@ void AtomBrowserClient::OverrideSiteInstanceForNavigation(
return;
}
if (!ShouldCreateNewSiteInstance(render_frame_host, browser_context,
current_instance, url))
if (!ShouldCreateNewSiteInstance(rfh, browser_context, current_instance, url))
return;
scoped_refptr<content::SiteInstance> site_instance =
content::SiteInstance::CreateForURL(browser_context, url);
bool is_new_instance = true;
scoped_refptr<content::SiteInstance> site_instance;
// Do we have an affinity site to manage ?
std::string affinity;
auto* web_contents = content::WebContents::FromRenderFrameHost(rfh);
auto* web_preferences = web_contents ?
WebContentsPreferences::FromWebContents(web_contents) : nullptr;
if (web_preferences &&
web_preferences->web_preferences()->GetString("affinity", &affinity) &&
!affinity.empty()) {
affinity = base::ToLowerASCII(affinity);
auto iter = site_per_affinities.find(affinity);
if (iter != site_per_affinities.end()) {
site_instance = iter->second;
is_new_instance = false;
} else {
// We must not provide the url.
// This site is "isolated" and must not be taken into account
// when Chromium looking at a candidate for an url.
site_instance = content::SiteInstance::Create(
browser_context);
site_per_affinities[affinity] = site_instance.get();
}
} else {
site_instance = content::SiteInstance::CreateForURL(
browser_context,
url);
}
*new_instance = site_instance.get();
// Make sure the |site_instance| is not freed when this function returns.
// FIXME(zcbenz): We should adjust OverrideSiteInstanceForNavigation's
// interface to solve this.
content::BrowserThread::PostTask(
content::BrowserThread::UI, FROM_HERE,
base::Bind(&Noop, base::RetainedRef(site_instance)));
if (is_new_instance) {
// Make sure the |site_instance| is not freed
// when this function returns.
// FIXME(zcbenz): We should adjust
// OverrideSiteInstanceForNavigation's interface to solve this.
content::BrowserThread::PostTask(
content::BrowserThread::UI, FROM_HERE,
base::Bind(&Noop, base::RetainedRef(site_instance)));
// Remember the original web contents for the pending renderer process.
auto pending_process = (*new_instance)->GetProcess();
pending_processes_[pending_process->GetID()] =
content::WebContents::FromRenderFrameHost(render_frame_host);;
// Clear the entry in map when process ends.
pending_process->AddObserver(this);
// Remember the original web contents for the pending renderer process.
auto pending_process = site_instance->GetProcess();
pending_processes_[pending_process->GetID()] = web_contents;
}
}
void AtomBrowserClient::AppendExtraCommandLineSwitches(
base::CommandLine* command_line,
int process_id) {
// Make sure we're about to launch a known executable
{
base::FilePath child_path;
PathService::Get(content::CHILD_PROCESS_EXE, &child_path);
base::ThreadRestrictions::ScopedAllowIO allow_io;
CHECK(base::MakeAbsoluteFilePath(command_line->GetProgram()) == child_path);
}
std::string process_type =
command_line->GetSwitchValueASCII(::switches::kProcessType);
if (process_type != ::switches::kRendererProcess)
@@ -278,9 +313,12 @@ void AtomBrowserClient::AppendExtraCommandLineSwitches(
}
content::WebContents* web_contents = GetWebContentsFromProcessID(process_id);
if (web_contents)
if (web_contents) {
WebContentsPreferences::AppendExtraCommandLineSwitches(
web_contents, command_line);
SessionPreferences::AppendExtraCommandLineSwitches(
web_contents->GetBrowserContext(), command_line);
}
}
void AtomBrowserClient::DidCreatePpapiPlugin(
@@ -316,10 +354,12 @@ void AtomBrowserClient::AllowCertificateError(
void AtomBrowserClient::SelectClientCertificate(
content::WebContents* web_contents,
net::SSLCertRequestInfo* cert_request_info,
net::ClientCertIdentityList client_certs,
std::unique_ptr<content::ClientCertificateDelegate> delegate) {
if (!cert_request_info->client_certs.empty() && delegate_) {
delegate_->SelectClientCertificate(
web_contents, cert_request_info, std::move(delegate));
if (!client_certs.empty() && delegate_) {
delegate_->SelectClientCertificate(web_contents, cert_request_info,
std::move(client_certs),
std::move(delegate));
}
}
@@ -331,8 +371,7 @@ void AtomBrowserClient::ResourceDispatcherHostCreated() {
}
bool AtomBrowserClient::CanCreateWindow(
int opener_render_process_id,
int opener_render_frame_id,
content::RenderFrameHost* opener,
const GURL& opener_url,
const GURL& opener_top_level_frame_url,
const GURL& source_origin,
@@ -343,12 +382,13 @@ bool AtomBrowserClient::CanCreateWindow(
WindowOpenDisposition disposition,
const blink::mojom::WindowFeatures& features,
const std::vector<std::string>& additional_features,
const scoped_refptr<content::ResourceRequestBodyImpl>& body,
const scoped_refptr<content::ResourceRequestBody>& body,
bool user_gesture,
bool opener_suppressed,
content::ResourceContext* context,
bool* no_javascript_access) {
DCHECK_CURRENTLY_ON(content::BrowserThread::IO);
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
int opener_render_process_id = opener->GetProcess()->GetID();
if (IsRendererSandboxed(opener_render_process_id)) {
*no_javascript_access = false;
@@ -367,16 +407,11 @@ bool AtomBrowserClient::CanCreateWindow(
}
if (delegate_) {
content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
base::Bind(&api::App::OnCreateWindow,
base::Unretained(static_cast<api::App*>(delegate_)),
target_url,
frame_name,
disposition,
additional_features,
body,
opener_render_process_id,
opener_render_frame_id));
return delegate_->CanCreateWindow(
opener, opener_url, opener_top_level_frame_url, source_origin,
container_type, target_url, referrer, frame_name, disposition, features,
additional_features, body, user_gesture, opener_suppressed,
no_javascript_access);
}
return false;
@@ -392,6 +427,19 @@ void AtomBrowserClient::GetAdditionalAllowedSchemesForFileSystem(
additional_schemes->push_back(content::kChromeDevToolsScheme);
}
void AtomBrowserClient::SiteInstanceDeleting(
content::SiteInstance* site_instance) {
// We are storing weak_ptr, is it fundamental to maintain the map up-to-date
// when an instance is destroyed.
for (auto iter = site_per_affinities.begin();
iter != site_per_affinities.end(); ++iter) {
if (iter->second == site_instance) {
site_per_affinities.erase(iter);
break;
}
}
}
brightray::BrowserMainParts* AtomBrowserClient::OverrideCreateBrowserMainParts(
const content::MainFunctionParams&) {
v8::V8::Initialize(); // Init V8 before creating main parts.

View File

@@ -12,6 +12,7 @@
#include "brightray/browser/browser_client.h"
#include "content/public/browser/render_process_host_observer.h"
#include "net/ssl/client_cert_identity.h"
namespace content {
class QuotaPermissionContext;
@@ -52,7 +53,6 @@ class AtomBrowserClient : public brightray::BrowserClient,
CreateSpeechRecognitionManagerDelegate() override;
void OverrideWebkitPrefs(content::RenderViewHost* render_view_host,
content::WebPreferences* prefs) override;
std::string GetApplicationLocale() override;
void OverrideSiteInstanceForNavigation(
content::RenderFrameHost* render_frame_host,
content::BrowserContext* browser_context,
@@ -77,11 +77,11 @@ class AtomBrowserClient : public brightray::BrowserClient,
void SelectClientCertificate(
content::WebContents* web_contents,
net::SSLCertRequestInfo* cert_request_info,
net::ClientCertIdentityList client_certs,
std::unique_ptr<content::ClientCertificateDelegate> delegate) override;
void ResourceDispatcherHostCreated() override;
bool CanCreateWindow(
int opener_render_process_id,
int opener_render_frame_id,
content::RenderFrameHost* opener,
const GURL& opener_url,
const GURL& opener_top_level_frame_url,
const GURL& source_origin,
@@ -92,13 +92,13 @@ class AtomBrowserClient : public brightray::BrowserClient,
WindowOpenDisposition disposition,
const blink::mojom::WindowFeatures& features,
const std::vector<std::string>& additional_features,
const scoped_refptr<content::ResourceRequestBodyImpl>& body,
const scoped_refptr<content::ResourceRequestBody>& body,
bool user_gesture,
bool opener_suppressed,
content::ResourceContext* context,
bool* no_javascript_access) override;
void GetAdditionalAllowedSchemesForFileSystem(
std::vector<std::string>* schemes) override;
void SiteInstanceDeleting(content::SiteInstance* site_instance) override;
// brightray::BrowserClient:
brightray::BrowserMainParts* OverrideCreateBrowserMainParts(
@@ -120,9 +120,9 @@ class AtomBrowserClient : public brightray::BrowserClient,
content::SiteInstance* current_instance,
const GURL& dest_url);
struct ProcessPreferences {
bool sandbox;
bool native_window_open;
bool disable_popups;
bool sandbox = false;
bool native_window_open = false;
bool disable_popups = false;
};
void AddProcessPreferences(int process_id, ProcessPreferences prefs);
void RemoveProcessPreferences(int process_id);
@@ -135,6 +135,10 @@ class AtomBrowserClient : public brightray::BrowserClient,
std::map<int, ProcessPreferences> process_preferences_;
std::map<int, base::ProcessId> render_process_host_pids_;
// list of site per affinity. weak_ptr to prevent instance locking
std::map<std::string, content::SiteInstance*> site_per_affinities;
base::Lock process_preferences_lock_;
std::unique_ptr<AtomResourceDispatcherHostDelegate>

View File

@@ -71,7 +71,6 @@ AtomBrowserContext::AtomBrowserContext(const std::string& partition,
bool in_memory,
const base::DictionaryValue& options)
: brightray::BrowserContext(partition, in_memory),
network_delegate_(new AtomNetworkDelegate),
cookie_delegate_(new AtomCookieDelegate) {
// Construct user agent string.
Browser* browser = Browser::Get();
@@ -104,8 +103,9 @@ void AtomBrowserContext::SetUserAgent(const std::string& user_agent) {
user_agent_ = user_agent;
}
net::NetworkDelegate* AtomBrowserContext::CreateNetworkDelegate() {
return network_delegate_;
std::unique_ptr<net::NetworkDelegate>
AtomBrowserContext::CreateNetworkDelegate() {
return base::MakeUnique<AtomNetworkDelegate>();
}
net::CookieMonsterDelegate* AtomBrowserContext::CreateCookieDelegate() {

View File

@@ -32,7 +32,7 @@ class AtomBrowserContext : public brightray::BrowserContext {
void SetUserAgent(const std::string& user_agent);
// brightray::URLRequestContextGetter::Delegate:
net::NetworkDelegate* CreateNetworkDelegate() override;
std::unique_ptr<net::NetworkDelegate> CreateNetworkDelegate() override;
net::CookieMonsterDelegate* CreateCookieDelegate() override;
std::string GetUserAgent() override;
std::unique_ptr<net::URLRequestJobFactory> CreateURLRequestJobFactory(
@@ -52,7 +52,6 @@ class AtomBrowserContext : public brightray::BrowserContext {
void RegisterPrefs(PrefRegistrySimple* pref_registry) override;
AtomBlobReader* GetBlobReader();
AtomNetworkDelegate* network_delegate() const { return network_delegate_; }
AtomCookieDelegate* cookie_delegate() const {
return cookie_delegate_.get();
}
@@ -70,8 +69,6 @@ class AtomBrowserContext : public brightray::BrowserContext {
std::string user_agent_;
bool use_cache_;
// Managed by brightray::BrowserContext.
AtomNetworkDelegate* network_delegate_;
scoped_refptr<AtomCookieDelegate> cookie_delegate_;
DISALLOW_COPY_AND_ASSIGN(AtomBrowserContext);

View File

@@ -24,6 +24,7 @@
#include "content/public/browser/child_process_security_policy.h"
#include "device/geolocation/geolocation_delegate.h"
#include "device/geolocation/geolocation_provider.h"
#include "ui/base/l10n/l10n_util.h"
#include "v8/include/v8-debug.h"
#if defined(USE_X11)
@@ -38,7 +39,10 @@ namespace {
// A provider of Geolocation services to override AccessTokenStore.
class AtomGeolocationDelegate : public device::GeolocationDelegate {
public:
AtomGeolocationDelegate() = default;
AtomGeolocationDelegate() {
device::GeolocationProvider::GetInstance()
->UserDidOptIntoLocationServices();
}
scoped_refptr<device::AccessTokenStore> CreateAccessTokenStore() final {
return new AtomAccessTokenStore();
@@ -137,7 +141,7 @@ void AtomBrowserMainParts::PostEarlyInitialization() {
// Enable support for v8 inspector
node_debugger_.reset(new NodeDebugger(env));
node_debugger_->Start();
node_debugger_->Start(js_env_->platform());
// Add Electron extended APIs.
atom_bindings_->BindTo(js_env_->isolate(), env->process_object());
@@ -149,6 +153,15 @@ void AtomBrowserMainParts::PostEarlyInitialization() {
node_bindings_->set_uv_env(env);
}
int AtomBrowserMainParts::PreCreateThreads() {
const int result = brightray::BrowserMainParts::PreCreateThreads();
if (!result) {
fake_browser_process_->SetApplicationLocale(
brightray::BrowserClient::Get()->GetApplicationLocale());
}
return result;
}
void AtomBrowserMainParts::PreMainMessageLoopRun() {
js_env_->OnMessageLoopCreated();
@@ -185,6 +198,7 @@ void AtomBrowserMainParts::PreMainMessageLoopRun() {
Browser::Get()->DidFinishLaunching(*empty_info);
#endif
// Notify observers that main thread message loop was initialized.
Browser::Get()->PreMainMessageLoopRun();
}

View File

@@ -49,6 +49,7 @@ class AtomBrowserMainParts : public brightray::BrowserMainParts {
// content::BrowserMainParts:
void PreEarlyInitialization() override;
void PostEarlyInitialization() override;
int PreCreateThreads() override;
void PreMainMessageLoopRun() override;
bool MainMessageLoopRun(int* result_code) override;
void PostMainMessageLoopStart() override;

View File

@@ -119,9 +119,8 @@ void ShutdownDetector::ThreadMain() {
int signal;
size_t bytes_read = 0;
ssize_t ret;
do {
ret = HANDLE_EINTR(
ssize_t ret = HANDLE_EINTR(
read(shutdown_fd_,
reinterpret_cast<char*>(&signal) + bytes_read,
sizeof(signal) - bytes_read));

View File

@@ -21,6 +21,32 @@
namespace atom {
namespace {
// Generate default file path to save the download.
void CreateDownloadPath(
const GURL& url,
const std::string& content_disposition,
const std::string& suggested_filename,
const std::string& mime_type,
const base::FilePath& default_download_path,
const AtomDownloadManagerDelegate::CreateDownloadPathCallback& callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::FILE);
auto generated_name =
net::GenerateFileName(url, content_disposition, std::string(),
suggested_filename, mime_type, "download");
if (!base::PathExists(default_download_path))
base::CreateDirectory(default_download_path);
base::FilePath path(default_download_path.Append(generated_name));
content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
base::Bind(callback, path));
}
} // namespace
AtomDownloadManagerDelegate::AtomDownloadManagerDelegate(
content::DownloadManager* manager)
: download_manager_(manager),
@@ -46,30 +72,6 @@ void AtomDownloadManagerDelegate::GetItemSavePath(content::DownloadItem* item,
*path = download->GetSavePath();
}
void AtomDownloadManagerDelegate::CreateDownloadPath(
const GURL& url,
const std::string& content_disposition,
const std::string& suggested_filename,
const std::string& mime_type,
const base::FilePath& default_download_path,
const CreateDownloadPathCallback& callback) {
DCHECK_CURRENTLY_ON(content::BrowserThread::FILE);
auto generated_name = net::GenerateFileName(url,
content_disposition,
std::string(),
suggested_filename,
mime_type,
"download");
if (!base::PathExists(default_download_path))
base::CreateDirectory(default_download_path);
base::FilePath path(default_download_path.Append(generated_name));
content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
base::Bind(callback, path));
}
void AtomDownloadManagerDelegate::OnDownloadPathGenerated(
uint32_t download_id,
const content::DownloadTargetCallback& callback,
@@ -164,14 +166,10 @@ bool AtomDownloadManagerDelegate::DetermineDownloadTarget(
content::BrowserThread::PostTask(
content::BrowserThread::FILE, FROM_HERE,
base::Bind(&AtomDownloadManagerDelegate::CreateDownloadPath,
weak_ptr_factory_.GetWeakPtr(),
download->GetURL(),
base::Bind(&CreateDownloadPath, download->GetURL(),
download->GetContentDisposition(),
download->GetSuggestedFilename(),
download->GetMimeType(),
default_download_path,
download_path_callback));
download->GetSuggestedFilename(), download->GetMimeType(),
default_download_path, download_path_callback));
return true;
}

View File

@@ -24,13 +24,6 @@ class AtomDownloadManagerDelegate : public content::DownloadManagerDelegate {
explicit AtomDownloadManagerDelegate(content::DownloadManager* manager);
virtual ~AtomDownloadManagerDelegate();
// Generate default file path to save the download.
void CreateDownloadPath(const GURL& url,
const std::string& suggested_filename,
const std::string& content_disposition,
const std::string& mime_type,
const base::FilePath& path,
const CreateDownloadPathCallback& callback);
void OnDownloadPathGenerated(uint32_t download_id,
const content::DownloadTargetCallback& callback,
const base::FilePath& default_path);

View File

@@ -97,11 +97,28 @@ int AtomPermissionManager::RequestPermission(
const GURL& requesting_origin,
bool user_gesture,
const StatusCallback& response_callback) {
return RequestPermissions(
return RequestPermissionWithDetails(
permission,
render_frame_host,
requesting_origin,
user_gesture,
nullptr,
response_callback);
}
int AtomPermissionManager::RequestPermissionWithDetails(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
bool user_gesture,
const base::DictionaryValue* details,
const StatusCallback& response_callback) {
return RequestPermissionsWithDetails(
std::vector<content::PermissionType>(1, permission),
render_frame_host,
requesting_origin,
user_gesture,
details,
base::Bind(&PermissionRequestResponseCallbackWrapper, response_callback));
}
@@ -111,6 +128,18 @@ int AtomPermissionManager::RequestPermissions(
const GURL& requesting_origin,
bool user_gesture,
const StatusesCallback& response_callback) {
return RequestPermissionsWithDetails(
permissions, render_frame_host, requesting_origin,
user_gesture, nullptr, response_callback);
}
int AtomPermissionManager::RequestPermissionsWithDetails(
const std::vector<content::PermissionType>& permissions,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
bool user_gesture,
const base::DictionaryValue* details,
const StatusesCallback& response_callback) {
if (permissions.empty()) {
response_callback.Run(std::vector<blink::mojom::PermissionStatus>());
return kNoPendingOperation;
@@ -143,7 +172,12 @@ int AtomPermissionManager::RequestPermissions(
const auto callback =
base::Bind(&AtomPermissionManager::OnPermissionResponse,
base::Unretained(this), request_id, i);
request_handler_.Run(web_contents, permission, callback);
if (details == nullptr) {
request_handler_.Run(web_contents, permission, callback,
base::DictionaryValue());
} else {
request_handler_.Run(web_contents, permission, callback, *details);
}
}
return request_id;

View File

@@ -10,6 +10,7 @@
#include "base/callback.h"
#include "base/id_map.h"
#include "base/values.h"
#include "content/public/browser/permission_manager.h"
namespace content {
@@ -30,7 +31,8 @@ class AtomPermissionManager : public content::PermissionManager {
using RequestHandler =
base::Callback<void(content::WebContents*,
content::PermissionType,
const StatusCallback&)>;
const StatusCallback&,
const base::DictionaryValue&)>;
// Handler to dispatch permission requests in JS.
void SetPermissionRequestHandler(const RequestHandler& handler);
@@ -43,6 +45,13 @@ class AtomPermissionManager : public content::PermissionManager {
bool user_gesture,
const base::Callback<void(blink::mojom::PermissionStatus)>& callback)
override;
int RequestPermissionWithDetails(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
bool user_gesture,
const base::DictionaryValue* details,
const base::Callback<void(blink::mojom::PermissionStatus)>& callback);
int RequestPermissions(
const std::vector<content::PermissionType>& permissions,
content::RenderFrameHost* render_frame_host,
@@ -51,6 +60,14 @@ class AtomPermissionManager : public content::PermissionManager {
const base::Callback<void(
const std::vector<blink::mojom::PermissionStatus>&)>& callback)
override;
int RequestPermissionsWithDetails(
const std::vector<content::PermissionType>& permissions,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
bool user_gesture,
const base::DictionaryValue* details,
const base::Callback<void(
const std::vector<blink::mojom::PermissionStatus>&)>& callback);
protected:
void OnPermissionResponse(int request_id,

View File

@@ -61,7 +61,8 @@ void HandleExternalProtocolInUI(
GURL escaped_url(net::EscapeExternalHandlerValue(url.spec()));
auto callback = base::Bind(&OnOpenExternal, escaped_url);
permission_helper->RequestOpenExternalPermission(callback, has_user_gesture);
permission_helper->RequestOpenExternalPermission(callback, has_user_gesture,
url);
}
void OnPdfResourceIntercepted(
@@ -74,14 +75,14 @@ void OnPdfResourceIntercepted(
if (!web_contents)
return;
if (!WebContentsPreferences::IsPluginsEnabled(web_contents)) {
if (!WebContentsPreferences::IsPreferenceEnabled("plugins", web_contents)) {
auto browser_context = web_contents->GetBrowserContext();
auto download_manager =
content::BrowserContext::GetDownloadManager(browser_context);
download_manager->DownloadUrl(
content::DownloadUrlParameters::CreateForWebContentsMainFrame(
web_contents, original_url));
web_contents, original_url, NO_TRAFFIC_ANNOTATION_YET));
return;
}

View File

@@ -52,8 +52,8 @@ void AtomSpeechRecognitionManagerDelegate::OnAudioLevelsChange(
void AtomSpeechRecognitionManagerDelegate::CheckRecognitionIsAllowed(
int session_id,
base::Callback<void(bool ask_user, bool is_allowed)> callback) {
callback.Run(true, true);
base::OnceCallback<void(bool ask_user, bool is_allowed)> callback) {
std::move(callback).Run(true, true);
}
content::SpeechRecognitionEventListener*

View File

@@ -38,7 +38,8 @@ class AtomSpeechRecognitionManagerDelegate
// content::SpeechRecognitionManagerDelegate:
void CheckRecognitionIsAllowed(
int session_id,
base::Callback<void(bool ask_user, bool is_allowed)> callback) override;
base::OnceCallback<void(bool ask_user, bool is_allowed)> callback)
override;
content::SpeechRecognitionEventListener* GetEventListener() override;
bool FilterProfanities(int render_process_id) override;

View File

@@ -52,7 +52,7 @@ AtomWebUIControllerFactory::CreateWebUIControllerForURL(content::WebUI* web_ui,
if (url.host() == kPdfViewerUIHost) {
base::StringPairs toplevel_params;
base::SplitStringIntoKeyValuePairs(url.query(), '=', '&', &toplevel_params);
std::string stream_id, src;
std::string src;
const net::UnescapeRule::Type unescape_rules =
net::UnescapeRule::SPACES | net::UnescapeRule::PATH_SEPARATORS |

View File

@@ -21,8 +21,7 @@ std::string AutoUpdater::GetFeedURL() {
return "";
}
void AutoUpdater::SetFeedURL(const std::string& url,
const HeaderMap& requestHeaders) {
void AutoUpdater::SetFeedURL(mate::Arguments* args) {
}
void AutoUpdater::CheckForUpdates() {

View File

@@ -10,6 +10,7 @@
#include "base/macros.h"
#include "build/build_config.h"
#include "native_mate/arguments.h"
namespace base {
class Time;
@@ -53,8 +54,7 @@ class AutoUpdater {
static void SetDelegate(Delegate* delegate);
static std::string GetFeedURL();
static void SetFeedURL(const std::string& url,
const HeaderMap& requestHeaders);
static void SetFeedURL(mate::Arguments* args);
static void CheckForUpdates();
static void QuitAndInstall();

View File

@@ -9,9 +9,13 @@
#import <ReactiveCocoa/NSObject+RACPropertySubscribing.h>
#import <Squirrel/Squirrel.h>
#include "atom/browser/browser.h"
#include "atom/common/native_mate_converters/value_converter.h"
#include "base/bind.h"
#include "base/time/time.h"
#include "base/strings/sys_string_conversions.h"
#include "native_mate/converter.h"
#include "native_mate/dictionary.h"
namespace auto_updater {
@@ -34,8 +38,29 @@ std::string AutoUpdater::GetFeedURL() {
}
// static
void AutoUpdater::SetFeedURL(const std::string& feed,
const HeaderMap& requestHeaders) {
void AutoUpdater::SetFeedURL(mate::Arguments* args) {
mate::Dictionary opts;
std::string feed;
HeaderMap requestHeaders;
std::string serverType = "default";
if (args->GetNext(&opts)) {
if (!opts.Get("url", &feed)) {
args->ThrowError("Expected options object to contain a 'url' string property in setFeedUrl call");
return;
}
opts.Get("headers", &requestHeaders);
opts.Get("serverType", &serverType);
if (serverType != "default" && serverType != "json") {
args->ThrowError("Expected serverType to be 'default' or 'json'");
return;
}
} else if (args->GetNext(&feed)) {
args->GetNext(&requestHeaders);
} else {
args->ThrowError("Expected an options object with a 'url' property to be provided");
return;
}
Delegate* delegate = GetDelegate();
if (!delegate)
return;
@@ -55,7 +80,13 @@ void AutoUpdater::SetFeedURL(const std::string& feed,
// Initialize the SQRLUpdater.
@try {
g_updater = [[SQRLUpdater alloc] initWithUpdateRequest:urlRequest];
if (serverType == "json") {
NSString* nsAppVersion = base::SysUTF8ToNSString(atom::Browser::Get()->GetVersion());
g_updater = [[SQRLUpdater alloc] initWithUpdateRequest:urlRequest forVersion:nsAppVersion];
} else {
// default
g_updater = [[SQRLUpdater alloc] initWithUpdateRequest:urlRequest];
}
} @catch (NSException* error) {
delegate->OnError(base::SysNSStringToUTF8(error.reason));
return;

View File

@@ -35,12 +35,12 @@ bool BridgeTaskRunner::PostDelayedTask(
from_here, std::move(task), delay);
}
bool BridgeTaskRunner::RunsTasksOnCurrentThread() const {
bool BridgeTaskRunner::RunsTasksInCurrentSequence() const {
auto message_loop = base::MessageLoop::current();
if (!message_loop)
return true;
return message_loop->task_runner()->RunsTasksOnCurrentThread();
return message_loop->task_runner()->RunsTasksInCurrentSequence();
}
bool BridgeTaskRunner::PostNonNestableDelayedTask(

View File

@@ -27,7 +27,7 @@ class BridgeTaskRunner : public base::SingleThreadTaskRunner {
bool PostDelayedTask(const tracked_objects::Location& from_here,
base::OnceClosure task,
base::TimeDelta delay) override;
bool RunsTasksOnCurrentThread() const override;
bool RunsTasksInCurrentSequence() const override;
bool PostNonNestableDelayedTask(
const tracked_objects::Location& from_here,
base::OnceClosure task,

View File

@@ -11,10 +11,13 @@
#include "atom/browser/native_window.h"
#include "atom/browser/window_list.h"
#include "base/files/file_util.h"
#include "base/message_loop/message_loop.h"
#include "base/path_service.h"
#include "base/run_loop.h"
#include "base/threading/thread_restrictions.h"
#include "base/threading/thread_task_runner_handle.h"
#include "brightray/browser/brightray_paths.h"
#include "brightray/common/application_info.h"
namespace atom {
@@ -94,31 +97,26 @@ void Browser::Shutdown() {
}
std::string Browser::GetVersion() const {
if (version_override_.empty()) {
std::string version = GetExecutableFileVersion();
if (!version.empty())
return version;
}
return version_override_;
std::string ret = brightray::GetOverriddenApplicationVersion();
if (ret.empty())
ret = GetExecutableFileVersion();
return ret;
}
void Browser::SetVersion(const std::string& version) {
version_override_ = version;
brightray::OverrideApplicationVersion(version);
}
std::string Browser::GetName() const {
if (name_override_.empty()) {
std::string name = GetExecutableFileProductName();
if (!name.empty())
return name;
}
return name_override_;
std::string ret = name_override_;
if (ret.empty())
ret = GetExecutableFileProductName();
return ret;
}
void Browser::SetName(const std::string& name) {
name_override_ = name;
brightray::OverrideApplicationName(name);
}
int Browser::GetBadgeCount() {
@@ -150,6 +148,7 @@ void Browser::WillFinishLaunching() {
void Browser::DidFinishLaunching(const base::DictionaryValue& launch_info) {
// Make sure the userData directory is created.
base::ThreadRestrictions::ScopedAllowIO allow_io;
base::FilePath user_data;
if (PathService::Get(brightray::DIR_USER_DATA, &user_data))
base::CreateDirectoryAndGetError(user_data, nullptr);

View File

@@ -105,6 +105,9 @@ class Browser : public WindowListObserver {
LoginItemSettings GetLoginItemSettings(const LoginItemSettings& options);
#if defined(OS_MACOSX)
// Set the handler which decides whether to shutdown.
void SetShutdownHandler(base::Callback<bool()> handler);
// Hide the application.
void Hide();
@@ -270,15 +273,10 @@ class Browser : public WindowListObserver {
// The browser is being shutdown.
bool is_shutdown_;
std::string version_override_;
std::string name_override_;
int badge_count_ = 0;
#if defined(OS_WIN)
base::string16 app_user_model_id_;
#endif
#if defined(OS_MACOSX)
base::DictionaryValue about_panel_options_;
#endif

View File

@@ -4,6 +4,7 @@
#include "atom/browser/browser.h"
#include "atom/common/platform_util.h"
#include "atom/browser/mac/atom_application.h"
#include "atom/browser/mac/atom_application_delegate.h"
#include "atom/browser/mac/dict_util.h"
@@ -20,6 +21,10 @@
namespace atom {
void Browser::SetShutdownHandler(base::Callback<bool()> handler) {
[[AtomApplication sharedApplication] setShutdownHandler:std::move(handler)];
}
void Browser::Focus() {
[[AtomApplication sharedApplication] activateIgnoringOtherApps:YES];
}
@@ -193,19 +198,27 @@ bool Browser::UpdateUserActivityState(const std::string& type,
Browser::LoginItemSettings Browser::GetLoginItemSettings(
const LoginItemSettings& options) {
LoginItemSettings settings;
#if defined(MAS_BUILD)
settings.open_at_login = platform_util::GetLoginItemEnabled();
#else
settings.open_at_login = base::mac::CheckLoginItemStatus(
&settings.open_as_hidden);
settings.restore_state = base::mac::WasLaunchedAsLoginItemRestoreState();
settings.opened_at_login = base::mac::WasLaunchedAsLoginOrResumeItem();
settings.opened_as_hidden = base::mac::WasLaunchedAsHiddenLoginItem();
#endif
return settings;
}
void Browser::SetLoginItemSettings(LoginItemSettings settings) {
#if defined(MAS_BUILD)
platform_util::SetLoginItemEnabled(settings.open_at_login);
#else
if (settings.open_at_login)
base::mac::AddToLoginItems(settings.open_as_hidden);
else
base::mac::RemoveFromLoginItems();
#endif
}
std::string Browser::GetExecutableFileVersion() const {

View File

@@ -20,16 +20,16 @@
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/strings/utf_string_conversions.h"
#include "base/threading/thread_restrictions.h"
#include "base/win/registry.h"
#include "base/win/win_util.h"
#include "base/win/windows_version.h"
#include "brightray/common/application_info.h"
namespace atom {
namespace {
const wchar_t kAppUserModelIDFormat[] = L"electron.app.$1";
BOOL CALLBACK WindowsEnumerationHandler(HWND hwnd, LPARAM param) {
DWORD target_process_id = *reinterpret_cast<DWORD*>(param);
DWORD process_id = 0;
@@ -118,8 +118,7 @@ void Browser::ClearRecentDocuments() {
}
void Browser::SetAppUserModelID(const base::string16& name) {
app_user_model_id_ = name;
SetCurrentProcessExplicitAppUserModelID(app_user_model_id_.c_str());
brightray::SetAppUserModelID(name);
}
bool Browser::SetUserTasks(const std::vector<UserTask>& tasks) {
@@ -153,15 +152,19 @@ bool Browser::RemoveAsDefaultProtocolClient(const std::string& protocol,
// Main Registry Key
HKEY root = HKEY_CURRENT_USER;
base::string16 keyPath = base::UTF8ToUTF16("Software\\Classes\\" + protocol);
base::string16 keyPath = L"Software\\Classes\\";
// Command Key
base::string16 cmdPath = keyPath + L"\\shell\\open\\command";
base::string16 wprotocol = base::UTF8ToUTF16(protocol);
base::string16 shellPath = wprotocol + L"\\shell";
base::string16 cmdPath = keyPath + shellPath + L"\\open\\command";
base::win::RegKey key;
base::win::RegKey classesKey;
base::win::RegKey commandKey;
if (FAILED(key.Open(root, keyPath.c_str(), KEY_ALL_ACCESS)))
// Key doesn't even exist, we can confirm that it is not set
if (FAILED(classesKey.Open(root, keyPath.c_str(), KEY_ALL_ACCESS)))
// Classes key doesn't exist, that's concerning, but I guess
// we're not the default handler
return true;
if (FAILED(commandKey.Open(root, cmdPath.c_str(), KEY_ALL_ACCESS)))
@@ -179,9 +182,25 @@ bool Browser::RemoveAsDefaultProtocolClient(const std::string& protocol,
if (keyVal == exe) {
// Let's kill the key
if (FAILED(key.DeleteKey(L"shell")))
if (FAILED(classesKey.DeleteKey(shellPath.c_str())))
return false;
// Let's clean up after ourselves
base::win::RegKey protocolKey;
base::string16 protocolPath = keyPath + wprotocol;
if (SUCCEEDED(protocolKey
.Open(root, protocolPath.c_str(), KEY_ALL_ACCESS))) {
protocolKey.DeleteValue(L"URL Protocol");
// Overwrite the default value to be empty, we can't delete it right away
protocolKey.WriteValue(L"", L"");
protocolKey.DeleteValue(L"");
}
// If now empty, delete the whole key
classesKey.DeleteEmptyKey(wprotocol.c_str());
return true;
} else {
return true;
@@ -303,17 +322,13 @@ Browser::LoginItemSettings Browser::GetLoginItemSettings(
}
PCWSTR Browser::GetAppUserModelID() {
if (app_user_model_id_.empty()) {
SetAppUserModelID(base::ReplaceStringPlaceholders(
kAppUserModelIDFormat, base::UTF8ToUTF16(GetName()), nullptr));
}
return app_user_model_id_.c_str();
return brightray::GetRawAppUserModelID();
}
std::string Browser::GetExecutableFileVersion() const {
base::FilePath path;
if (PathService::Get(base::FILE_EXE, &path)) {
base::ThreadRestrictions::ScopedAllowIO allow_io;
std::unique_ptr<FileVersionInfo> version_info(
FileVersionInfo::CreateFileVersionInfo(path));
return base::UTF16ToUTF8(version_info->product_version());
@@ -323,14 +338,7 @@ std::string Browser::GetExecutableFileVersion() const {
}
std::string Browser::GetExecutableFileProductName() const {
base::FilePath path;
if (PathService::Get(base::FILE_EXE, &path)) {
std::unique_ptr<FileVersionInfo> version_info(
FileVersionInfo::CreateFileVersionInfo(path));
return base::UTF16ToUTF8(version_info->product_name());
}
return ATOM_PRODUCT_NAME;
return brightray::GetApplicationName();
}
} // namespace atom

View File

@@ -180,12 +180,13 @@ void CommonWebContentsDelegate::SetOwnerWindow(NativeWindow* owner_window) {
void CommonWebContentsDelegate::SetOwnerWindow(
content::WebContents* web_contents, NativeWindow* owner_window) {
owner_window_ = owner_window ? owner_window->GetWeakPtr() : nullptr;
NativeWindowRelay* relay = new NativeWindowRelay(owner_window_);
auto relay = base::MakeUnique<NativeWindowRelay>(owner_window_);
auto relay_key = relay->key;
if (owner_window) {
web_contents->SetUserData(relay->key, relay);
web_contents->SetUserData(relay_key, std::move(relay));
} else {
web_contents->RemoveUserData(relay->key);
delete relay;
web_contents->RemoveUserData(relay_key);
relay.reset();
}
}

View File

@@ -8,6 +8,7 @@
#include "base/command_line.h"
#include "base/message_loop/message_loop.h"
#include "base/task_scheduler/initialization_util.h"
#include "base/threading/thread_task_runner_handle.h"
#include "content/public/common/content_switches.h"
#include "gin/array_buffer.h"
@@ -44,9 +45,17 @@ bool JavascriptEnvironment::Initialize() {
if (!js_flags.empty())
v8::V8::SetFlagsFromString(js_flags.c_str(), js_flags.size());
// The V8Platform of gin relies on Chromium's task schedule, which has not
// been started at this point, so we have to rely on Node's V8Platform.
platform_ = node::CreatePlatform(
base::RecommendedMaxNumberOfThreadsInPool(3, 8, 0.1, 0),
uv_default_loop(), nullptr);
v8::V8::InitializePlatform(platform_);
gin::IsolateHolder::Initialize(gin::IsolateHolder::kNonStrictMode,
gin::IsolateHolder::kStableV8Extras,
gin::ArrayBufferAllocator::SharedInstance());
gin::ArrayBufferAllocator::SharedInstance(),
false);
return true;
}

View File

@@ -10,6 +10,7 @@
namespace node {
class Environment;
class NodePlatform;
}
namespace atom {
@@ -22,6 +23,7 @@ class JavascriptEnvironment {
void OnMessageLoopCreated();
void OnMessageLoopDestroying();
node::NodePlatform* platform() const { return platform_; }
v8::Isolate* isolate() const { return isolate_; }
v8::Local<v8::Context> context() const {
return v8::Local<v8::Context>::New(isolate_, context_);
@@ -30,6 +32,9 @@ class JavascriptEnvironment {
private:
bool Initialize();
// Leaked on exit.
node::NodePlatform* platform_;
bool initialized_;
gin::IsolateHolder isolate_holder_;
v8::Isolate* isolate_;

View File

@@ -97,6 +97,17 @@ void BluetoothChooser::AddOrUpdateDevice(const std::string& device_id,
int signal_strength_level) {
DeviceInfo info = {device_id, device_name};
device_list_.push_back(info);
// Emit a select-bluetooth-device handler to allow for user to listen for
// bluetooth device found.
bool prevent_default = api_web_contents_->Emit("select-bluetooth-device",
device_list_, base::Bind(&OnDeviceChosen, event_handler_));
// If emit not implimented select first device that matches the filters
// provided.
if (!prevent_default) {
event_handler_.Run(Event::SELECTED, device_id);
}
}
void BluetoothChooser::RemoveDevice(const std::string& device_id) {

View File

@@ -0,0 +1,26 @@
// Copyright (c) 2017 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ATOM_BROWSER_LIB_POWER_OBSERVER_H_
#define ATOM_BROWSER_LIB_POWER_OBSERVER_H_
#include "base/macros.h"
#if defined(OS_LINUX)
#include "atom/browser/lib/power_observer_linux.h"
#else
#include "base/power_monitor/power_observer.h"
#endif // defined(OS_LINUX)
namespace atom {
#if defined(OS_LINUX)
typedef PowerObserverLinux PowerObserver;
#else
typedef base::PowerObserver PowerObserver;
#endif // defined(OS_LINUX)
} // namespace atom
#endif // ATOM_BROWSER_LIB_POWER_OBSERVER_H_

View File

@@ -0,0 +1,165 @@
// Copyright (c) 2017 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#include "atom/browser/lib/power_observer_linux.h"
#include <unistd.h>
#include <uv.h>
#include <iostream>
#include "base/bind.h"
#include "device/bluetooth/dbus/dbus_thread_manager_linux.h"
namespace {
const char kLogindServiceName[] = "org.freedesktop.login1";
const char kLogindObjectPath[] = "/org/freedesktop/login1";
const char kLogindManagerInterface[] = "org.freedesktop.login1.Manager";
std::string get_executable_basename() {
char buf[4096];
size_t buf_size = sizeof(buf);
std::string rv("electron");
if (!uv_exepath(buf, &buf_size)) {
rv = strrchr(static_cast<const char*>(buf), '/') + 1;
}
return std::move(rv);
}
} // namespace
namespace atom {
PowerObserverLinux::PowerObserverLinux()
: lock_owner_name_(get_executable_basename()), weak_ptr_factory_(this) {
auto dbus_thread_manager = bluez::DBusThreadManagerLinux::Get();
if (dbus_thread_manager) {
bus_ = dbus_thread_manager->GetSystemBus();
if (bus_) {
logind_ = bus_->GetObjectProxy(kLogindServiceName,
dbus::ObjectPath(kLogindObjectPath));
logind_->WaitForServiceToBeAvailable(
base::Bind(&PowerObserverLinux::OnLoginServiceAvailable,
weak_ptr_factory_.GetWeakPtr()));
} else {
LOG(WARNING) << "Failed to get system bus connection";
}
} else {
LOG(WARNING) << "DBusThreadManagerLinux instance isn't available";
}
}
void PowerObserverLinux::OnLoginServiceAvailable(bool service_available) {
if (!service_available) {
LOG(WARNING) << kLogindServiceName << " not available";
return;
}
// Connect to PrepareForShutdown/PrepareForSleep signals
logind_->ConnectToSignal(kLogindManagerInterface, "PrepareForShutdown",
base::Bind(&PowerObserverLinux::OnPrepareForShutdown,
weak_ptr_factory_.GetWeakPtr()),
base::Bind(&PowerObserverLinux::OnSignalConnected,
weak_ptr_factory_.GetWeakPtr()));
logind_->ConnectToSignal(kLogindManagerInterface, "PrepareForSleep",
base::Bind(&PowerObserverLinux::OnPrepareForSleep,
weak_ptr_factory_.GetWeakPtr()),
base::Bind(&PowerObserverLinux::OnSignalConnected,
weak_ptr_factory_.GetWeakPtr()));
// Take sleep inhibit lock
BlockSleep();
}
void PowerObserverLinux::BlockSleep() {
dbus::MethodCall sleep_inhibit_call(kLogindManagerInterface, "Inhibit");
dbus::MessageWriter inhibit_writer(&sleep_inhibit_call);
inhibit_writer.AppendString("sleep"); // what
// Use the executable name as the lock owner, which will list rebrands of the
// electron executable as separate entities.
inhibit_writer.AppendString(lock_owner_name_); // who
inhibit_writer.AppendString("Application cleanup before suspend"); // why
inhibit_writer.AppendString("delay"); // mode
logind_->CallMethod(&sleep_inhibit_call,
dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::Bind(&PowerObserverLinux::OnInhibitResponse,
weak_ptr_factory_.GetWeakPtr(), &sleep_lock_));
}
void PowerObserverLinux::UnblockSleep() {
sleep_lock_.reset();
}
void PowerObserverLinux::BlockShutdown() {
if (shutdown_lock_.is_valid()) {
LOG(WARNING) << "Trying to subscribe to shutdown multiple times";
return;
}
dbus::MethodCall shutdown_inhibit_call(kLogindManagerInterface, "Inhibit");
dbus::MessageWriter inhibit_writer(&shutdown_inhibit_call);
inhibit_writer.AppendString("shutdown"); // what
inhibit_writer.AppendString(lock_owner_name_); // who
inhibit_writer.AppendString("Ensure a clean shutdown"); // why
inhibit_writer.AppendString("delay"); // mode
logind_->CallMethod(
&shutdown_inhibit_call, dbus::ObjectProxy::TIMEOUT_USE_DEFAULT,
base::Bind(&PowerObserverLinux::OnInhibitResponse,
weak_ptr_factory_.GetWeakPtr(), &shutdown_lock_));
}
void PowerObserverLinux::UnblockShutdown() {
if (!shutdown_lock_.is_valid()) {
LOG(WARNING)
<< "Trying to unsubscribe to shutdown without being subscribed";
return;
}
shutdown_lock_.reset();
}
void PowerObserverLinux::SetShutdownHandler(base::Callback<bool()> handler) {
should_shutdown_ = std::move(handler);
}
void PowerObserverLinux::OnInhibitResponse(base::ScopedFD* scoped_fd,
dbus::Response* response) {
dbus::MessageReader reader(response);
reader.PopFileDescriptor(scoped_fd);
}
void PowerObserverLinux::OnPrepareForSleep(dbus::Signal* signal) {
dbus::MessageReader reader(signal);
bool suspending;
if (!reader.PopBool(&suspending)) {
LOG(ERROR) << "Invalid signal: " << signal->ToString();
return;
}
if (suspending) {
OnSuspend();
UnblockSleep();
} else {
BlockSleep();
OnResume();
}
}
void PowerObserverLinux::OnPrepareForShutdown(dbus::Signal* signal) {
dbus::MessageReader reader(signal);
bool shutting_down;
if (!reader.PopBool(&shutting_down)) {
LOG(ERROR) << "Invalid signal: " << signal->ToString();
return;
}
if (shutting_down) {
if (!should_shutdown_ || should_shutdown_.Run()) {
// The user didn't try to prevent shutdown. Release the lock and allow the
// shutdown to continue normally.
shutdown_lock_.reset();
}
}
}
void PowerObserverLinux::OnSignalConnected(const std::string& interface,
const std::string& signal,
bool success) {
LOG_IF(WARNING, !success) << "Failed to connect to " << signal;
}
} // namespace atom

View File

@@ -0,0 +1,54 @@
// Copyright (c) 2017 GitHub, Inc.
// Use of this source code is governed by the MIT license that can be
// found in the LICENSE file.
#ifndef ATOM_BROWSER_LIB_POWER_OBSERVER_LINUX_H_
#define ATOM_BROWSER_LIB_POWER_OBSERVER_LINUX_H_
#include <string>
#include "base/macros.h"
#include "base/memory/weak_ptr.h"
#include "base/power_monitor/power_observer.h"
#include "dbus/bus.h"
#include "dbus/message.h"
#include "dbus/object_proxy.h"
namespace atom {
class PowerObserverLinux : public base::PowerObserver {
public:
PowerObserverLinux();
protected:
void BlockSleep();
void UnblockSleep();
void BlockShutdown();
void UnblockShutdown();
void SetShutdownHandler(base::Callback<bool()> should_shutdown);
private:
void OnLoginServiceAvailable(bool available);
void OnInhibitResponse(base::ScopedFD* scoped_fd, dbus::Response* response);
void OnPrepareForSleep(dbus::Signal* signal);
void OnPrepareForShutdown(dbus::Signal* signal);
void OnSignalConnected(const std::string& interface,
const std::string& signal,
bool success);
base::Callback<bool()> should_shutdown_;
scoped_refptr<dbus::Bus> bus_;
scoped_refptr<dbus::ObjectProxy> logind_;
std::string lock_owner_name_;
base::ScopedFD sleep_lock_;
base::ScopedFD shutdown_lock_;
base::WeakPtrFactory<PowerObserverLinux> weak_ptr_factory_;
DISALLOW_COPY_AND_ASSIGN(PowerObserverLinux);
};
} // namespace atom
#endif // ATOM_BROWSER_LIB_POWER_OBSERVER_LINUX_H_

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